2025-07-08 20:14:39 +03:00
|
|
|
{
|
|
|
|
config,
|
|
|
|
lib,
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
let
|
|
|
|
inherit (lib)
|
|
|
|
mkDefault
|
|
|
|
mkEnableOption
|
|
|
|
mkIf
|
2025-07-10 18:39:31 +03:00
|
|
|
mkOption
|
|
|
|
recursiveUpdate
|
2025-07-08 20:14:39 +03:00
|
|
|
;
|
2025-07-10 18:39:31 +03:00
|
|
|
inherit (lib.types) bool;
|
2025-07-08 20:14:39 +03:00
|
|
|
|
|
|
|
cfg = config.ataraxia.containers.media-stack;
|
2025-07-10 18:39:31 +03:00
|
|
|
networks = config.virtualisation.quadlet.networks;
|
|
|
|
nginx = config.ataraxia.services.nginx;
|
2025-07-08 20:14:39 +03:00
|
|
|
|
2025-07-10 18:39:31 +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
|
2025-07-10 18:39:31 +03:00
|
|
|
"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";
|
2025-07-10 18:39:31 +03:00
|
|
|
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;
|
|
|
|
|
2025-07-10 18:39:31 +03:00
|
|
|
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
|
|
|
];
|
2025-07-10 18:39:31 +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-10 18:39:31 +03:00
|
|
|
};
|
2025-07-08 20:14:39 +03:00
|
|
|
};
|
|
|
|
}
|