124 lines
3.4 KiB
Nix
Raw Normal View History

2025-07-08 20:14:39 +03:00
{
config,
lib,
...
}:
let
inherit (lib)
mkDefault
mkEnableOption
mkIf
mkOption
recursiveUpdate
2025-07-08 20:14:39 +03:00
;
inherit (lib.types) bool;
2025-07-08 20:14:39 +03:00
cfg = config.ataraxia.containers.media-stack;
networks = config.virtualisation.quadlet.networks;
nginx = config.ataraxia.services.nginx;
2025-07-08 20:14:39 +03:00
caddy-port = "8180";
# TODO: fix caddy for medusa. Maybe change to something else
medusa-port = "8180";
2025-07-08 20:14:39 +03:00
open-ports = [
# caddy
"127.0.0.1:${caddy-port}:${caddy-port}"
"127.0.0.1:${medusa-port}:${medusa-port}"
2025-07-08 20:14:39 +03:00
# qbittorrent
"0.0.0.0:7000:7000"
"0.0.0.0:7000:7000/udp"
];
pod-dns = "10.10.10.1";
in
{
imports = [
./caddy.nix
./jackett.nix
./jellyfin.nix
./kavita.nix
./lidarr.nix
./medusa.nix
./qbittorrent.nix
./radarr.nix
./recyclarr.nix
./sonarr.nix
];
options.ataraxia.containers.media-stack = {
enable = mkEnableOption "Enable media-stack containers";
nginxHost = mkOption {
type = bool;
default = config.ataraxia.services.nginx.enable;
description = "Enable nginx vHost integration";
};
2025-07-08 20:14:39 +03:00
};
config = mkIf cfg.enable {
ataraxia.containers.media-stack.caddy = mkDefault true;
ataraxia.containers.media-stack.jackett = mkDefault true;
ataraxia.containers.media-stack.jellyfin = mkDefault true;
ataraxia.containers.media-stack.kavita = mkDefault true;
ataraxia.containers.media-stack.lidarr = mkDefault true;
ataraxia.containers.media-stack.medusa = mkDefault true;
ataraxia.containers.media-stack.qbittorrent = mkDefault true;
ataraxia.containers.media-stack.radarr = mkDefault true;
ataraxia.containers.media-stack.recyclarr = mkDefault true;
ataraxia.containers.media-stack.sonarr = mkDefault true;
virtualisation.quadlet.pods.media-stack = {
podConfig = {
dns = [ pod-dns ];
networks = [ networks.br-services.ref ];
publishPorts = open-ports;
};
};
services.nginx.virtualHosts = mkIf cfg.nginxHost {
"media-stack" = recursiveUpdate nginx.defaultSettings {
serverAliases = [
"jackett.ataraxiadev.com"
"kavita.ataraxiadev.com"
"lidarr.ataraxiadev.com"
"qbit.ataraxiadev.com"
"radarr.ataraxiadev.com"
"sonarr.ataraxiadev.com"
2025-07-08 20:14:39 +03:00
];
locations."/" = {
proxyPass = "http://127.0.0.1:${caddy-port}";
proxyWebsockets = true;
extraConfig = ''
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
send_timeout 15m;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 15m;
'';
};
};
"jellyfin.ataraxiadev.com" = recursiveUpdate nginx.defaultSettings {
locations."/" = {
proxyPass = "http://127.0.0.1:${caddy-port}";
extraConfig = ''
proxy_buffering off;
'';
};
locations."/socket" = {
proxyPass = "http://127.0.0.1:${caddy-port}";
proxyWebsockets = true;
};
extraConfig = ''
client_max_body_size 50M;
'';
};
"medusa.ataraxiadev.com" = recursiveUpdate nginx.defaultSettings {
locations."/" = {
proxyPass = "http://127.0.0.1:${medusa-port}";
proxyWebsockets = true;
2025-07-08 20:14:39 +03:00
};
};
};
2025-07-08 20:14:39 +03:00
};
}