73 lines
2.5 KiB
Nix
73 lines
2.5 KiB
Nix
{ config, containerCfg, pkgs, lib, builder, name, ... }:
|
|
let
|
|
serverCfg = config.syscfg.server;
|
|
|
|
mkServarrImage = appName: appPkg: binaryPath: pkgs.dockerTools.streamLayeredImage {
|
|
name = appPkg.name;
|
|
tag = appPkg.version;
|
|
contents = with pkgs; [ cacert openssl ];
|
|
config = {
|
|
Cmd = [ "${appPkg}/${binaryPath}" "-nobrowser" "-data=/config" ];
|
|
Env = [ "DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1" ];
|
|
};
|
|
};
|
|
|
|
images = {
|
|
prowlarr = mkServarrImage "prowlarr" pkgs.prowlarr "bin/Prowlarr";
|
|
radarr = mkServarrImage "radarr" pkgs.radarr "bin/Radarr";
|
|
sonarr = mkServarrImage "sonarr" pkgs.sonarr "bin/Sonarr";
|
|
bazarr = mkPythonImage "bazarr" pkgs.bazarr "bin/bazarr";
|
|
lidarr = mkServarrImage "lidarr" pkgs.lidarr "bin/Lidarr";
|
|
readarr = mkServarrImage "readarr" pkgs.readarr "bin/Readarr";
|
|
};
|
|
|
|
sharedVolumes = [
|
|
"${serverCfg.mediaPath or "/mnt/media"}:/media" # Fast hardlinking requires a single shared root
|
|
"${serverCfg.configPath}/servarr:/config-root"
|
|
];
|
|
in {
|
|
# Initialize atomic configuration structures
|
|
paths = [
|
|
{ path = "${serverCfg.configPath}/servarr/prowlarr"; mode = "0755"; }
|
|
{ path = "${serverCfg.configPath}/servarr/radarr"; mode = "0755"; }
|
|
{ path = "${serverCfg.configPath}/servarr/sonarr"; mode = "0755"; }
|
|
];
|
|
|
|
containers = {
|
|
prowlarr = builder.mkContainer {
|
|
subdomain = containerCfg.subdomain;
|
|
subpath = "prowlarr";
|
|
imageStream = images.prowlarr;
|
|
port = 9696;
|
|
secret = name;
|
|
overrides.volumes = sharedVolumes ++ [ "${serverCfg.configPath}/servarr/prowlarr:/config" ];
|
|
};
|
|
|
|
radarr = builder.mkContainer {
|
|
subdomain = containerCfg.subdomain;
|
|
subpath = "radarr";
|
|
imageStream = images.radarr;
|
|
port = 7878;
|
|
secret = name;
|
|
overrides.volumes = sharedVolumes ++ [ "${serverCfg.configPath}/servarr/radarr:/config" ];
|
|
};
|
|
|
|
sonarr = builder.mkContainer {
|
|
subdomain = containerCfg.subdomain;
|
|
subpath = "sonarr";
|
|
imageStream = images.sonarr;
|
|
port = 8989;
|
|
secret = name;
|
|
overrides.volumes = sharedVolumes ++ [ "${serverCfg.configPath}/servarr/sonarr:/config" ];
|
|
};
|
|
};
|
|
|
|
# setup = {
|
|
# trigger = "prowlarr"; # Triggers atomic environment verification on main controller
|
|
# envFile = config.sops.secrets."SERVARR".path;
|
|
# script = pkgs.writeShellScript "setup-servarr" ''
|
|
# echo "Validating multi-container path permission nodes..."
|
|
# # mkdir -p ${serverCfg.configPath}/servarr/{prowlarr,radarr,sonarr}
|
|
# '';
|
|
# };
|
|
} |