fix servarr

This commit is contained in:
soraefir
2026-06-04 01:10:15 +02:00
parent 054d097e0d
commit 200dbb9ed1
2 changed files with 24 additions and 24 deletions

View File

@@ -1,7 +1,6 @@
{ config, containerCfg, pkgs, lib, builder, name, ... }: { config, containerCfg, pkgs, lib, builder, name, ... }:
let let
serverCfg = config.syscfg.server; serverCfg = config.syscfg.server;
defaultModules = ["prowlarr" "sonarr" "radarr" "flaresolverr" ];
mkServarrImage = appName: appPkg: binaryPath: pkgs.dockerTools.streamLayeredImage { mkServarrImage = appName: appPkg: binaryPath: pkgs.dockerTools.streamLayeredImage {
name = appPkg.name; name = appPkg.name;
@@ -43,7 +42,7 @@ in
]; ];
containers = { containers = {
}// lib.optionalAttrs (builtins.elem "prowlarr" (containerCfg.extra.modules or defaultModules)) { }// lib.optionalAttrs (builtins.elem "prowlarr" (containerCfg.extra.modules)) {
prowlarr = builder.mkContainer { prowlarr = builder.mkContainer {
authentik = true; authentik = true;
tmpfs = true; tmpfs = true;
@@ -66,7 +65,7 @@ in
overrides.volumes = sharedVolumes ++ [ "${serverCfg.path.config}/servarr/prowlarr:/config" ]; overrides.volumes = sharedVolumes ++ [ "${serverCfg.path.config}/servarr/prowlarr:/config" ];
}; };
}// lib.optionalAttrs (builtins.elem "radarr" (containerCfg.extra.modules or defaultModules)) { }// lib.optionalAttrs (builtins.elem "radarr" (containerCfg.extra.modules)) {
radarr = builder.mkContainer { radarr = builder.mkContainer {
authentik = true; authentik = true;
tmpfs = true; tmpfs = true;
@@ -89,7 +88,7 @@ in
overrides.volumes = sharedVolumes ++ [ "${serverCfg.path.config}/servarr/radarr:/config" ]; overrides.volumes = sharedVolumes ++ [ "${serverCfg.path.config}/servarr/radarr:/config" ];
}; };
}// lib.optionalAttrs (builtins.elem "sonarr" (containerCfg.extra.modules or defaultModules)) { }// lib.optionalAttrs (builtins.elem "sonarr" (containerCfg.extra.modules)) {
sonarr = builder.mkContainer { sonarr = builder.mkContainer {
authentik = true; authentik = true;
tmpfs = true; tmpfs = true;
@@ -112,7 +111,7 @@ in
overrides.volumes = sharedVolumes ++ [ "${serverCfg.path.config}/servarr/sonarr:/config" ]; overrides.volumes = sharedVolumes ++ [ "${serverCfg.path.config}/servarr/sonarr:/config" ];
}; };
}// lib.optionalAttrs (builtins.elem "lidarr" (containerCfg.extra.modules or defaultModules)) { }// lib.optionalAttrs (builtins.elem "lidarr" (containerCfg.extra.modules )) {
lidarr = builder.mkContainer { lidarr = builder.mkContainer {
authentik = true; authentik = true;
tmpfs = true; tmpfs = true;
@@ -135,15 +134,15 @@ in
overrides.volumes = sharedVolumes ++ [ "${serverCfg.path.config}/servarr/lidarr:/config" ]; overrides.volumes = sharedVolumes ++ [ "${serverCfg.path.config}/servarr/lidarr:/config" ];
}; };
}// lib.optionalAttrs (builtins.elem "readarr" (containerCfg.extra.modules or defaultModules)) { }// lib.optionalAttrs (builtins.elem "readarr" (containerCfg.extra.modules)) {
readarr = throw "Not Implemented"; readarr = throw "Not Implemented";
}// lib.optionalAttrs (builtins.elem "mylarr" (containerCfg.extra.modules or defaultModules)) { }// lib.optionalAttrs (builtins.elem "mylarr" (containerCfg.extra.modules)) {
mylarr = throw "Not Implemented"; mylarr = throw "Not Implemented";
}// lib.optionalAttrs (builtins.elem "bazarr" (containerCfg.extra.modules or defaultModules)) { }// lib.optionalAttrs (builtins.elem "bazarr" (containerCfg.extra.modules)) {
bazarr = throw "Not Implemented"; bazarr = throw "Not Implemented";
}// lib.optionalAttrs (builtins.elem "seerr" (containerCfg.extra.modules or defaultModules)) { }// lib.optionalAttrs (builtins.elem "seerr" (containerCfg.extra.modules)) {
seerr = throw "Not Implemented"; seerr = throw "Not Implemented";
}// lib.optionalAttrs (builtins.elem "flaresolverr" (containerCfg.extra.modules or defaultModules)) { }// lib.optionalAttrs (builtins.elem "flaresolverr" (containerCfg.extra.modules)) {
flaresolverr = builder.mkContainer { flaresolverr = builder.mkContainer {
image = "ghcr.io/flaresolverr/flaresolverr:latest"; image = "ghcr.io/flaresolverr/flaresolverr:latest";
port = 8191; port = 8191;
@@ -158,10 +157,10 @@ in
envFile = config.sops.secrets."SERVARR".path; envFile = config.sops.secrets."SERVARR".path;
script = pkgs.writeShellScript "setup-servarr" '' script = pkgs.writeShellScript "setup-servarr" ''
${lib.optionalString (builtins.elem "prowlarr" (containerCfg.extra.modules or defaultModules)) '' ${lib.optionalString (builtins.elem "prowlarr" (containerCfg.extra.modules)) ''
echo "Prowlarr Setup - START" echo "Prowlarr Setup - START"
PROWLARR_URL="https://${containerCfg.subdomain}.${serverCfg.domain}/prowlarr" PROWLARR_URL="https://${containerCfg.subdomain}.${serverCfg.domain}/prowlarr"
${lib.optionalString (builtins.elem "flaresolverr" (containerCfg.extra.modules or defaultModules)) '' ${lib.optionalString (builtins.elem "flaresolverr" (containerCfg.extra.modules)) ''
PROWL_TAG=$(${pkgs.curl}/bin/curl -s -X GET "$PROWLARR_URL/api/v1/tag" \ PROWL_TAG=$(${pkgs.curl}/bin/curl -s -X GET "$PROWLARR_URL/api/v1/tag" \
-H "X-Api-Key: $PROWLARR__AUTH__APIKEY" -H 'X-Prowlarr-Client: true' \ -H "X-Api-Key: $PROWLARR__AUTH__APIKEY" -H 'X-Prowlarr-Client: true' \
-H 'Accept: application/json' -H 'Content-Type: application/json') -H 'Accept: application/json' -H 'Content-Type: application/json')
@@ -190,7 +189,7 @@ in
-H "X-Api-Key: $PROWLARR__AUTH__APIKEY" -H 'X-Prowlarr-Client: true' \ -H "X-Api-Key: $PROWLARR__AUTH__APIKEY" -H 'X-Prowlarr-Client: true' \
-H 'Accept: application/json' -H 'Content-Type: application/json') -H 'Accept: application/json' -H 'Content-Type: application/json')
${lib.optionalString (builtins.elem "sonarr" (containerCfg.extra.modules or defaultModules)) '' ${lib.optionalString (builtins.elem "sonarr" (containerCfg.extra.modules)) ''
if ! echo "$PROWL_APPS" | ${pkgs.jq}/bin/jq -e 'any(.[]? ; .name == "Sonarr")' > /dev/null; then if ! echo "$PROWL_APPS" | ${pkgs.jq}/bin/jq -e 'any(.[]? ; .name == "Sonarr")' > /dev/null; then
echo "Prowlarr Setup - Sonarr" echo "Prowlarr Setup - Sonarr"
${pkgs.curl}/bin/curl -s -X POST "$PROWLARR_URL/api/v1/applications" \ ${pkgs.curl}/bin/curl -s -X POST "$PROWLARR_URL/api/v1/applications" \
@@ -199,7 +198,7 @@ in
-d '{"syncLevel":"fullSync","enable":true,"fields":[{"name":"prowlarrUrl","value":"http://servarr-prowlarr:8989/prowlarr"},{"name":"baseUrl","value":"http://servarr-sonarr:8989/sonarr"},{"name":"apiKey","value":"'"$SONARR__AUTH__APIKEY"'"},{"name":"syncCategories","value":[5000,5010,5020,5030,5040,5045,5050,5090]},{"name":"animeSyncCategories","value":[5070]},{"name":"syncAnimeStandardFormatSearch","value":true},{"name":"syncRejectBlocklistedTorrentHashesWhileGrabbing","value":false}],"implementationName":"Sonarr","implementation":"Sonarr","configContract":"SonarrSettings","infoLink":"https://wiki.servarr.com/prowlarr/supported#sonarr","tags":[],"name":"Sonarr"}' -d '{"syncLevel":"fullSync","enable":true,"fields":[{"name":"prowlarrUrl","value":"http://servarr-prowlarr:8989/prowlarr"},{"name":"baseUrl","value":"http://servarr-sonarr:8989/sonarr"},{"name":"apiKey","value":"'"$SONARR__AUTH__APIKEY"'"},{"name":"syncCategories","value":[5000,5010,5020,5030,5040,5045,5050,5090]},{"name":"animeSyncCategories","value":[5070]},{"name":"syncAnimeStandardFormatSearch","value":true},{"name":"syncRejectBlocklistedTorrentHashesWhileGrabbing","value":false}],"implementationName":"Sonarr","implementation":"Sonarr","configContract":"SonarrSettings","infoLink":"https://wiki.servarr.com/prowlarr/supported#sonarr","tags":[],"name":"Sonarr"}'
fi fi
''} ''}
${lib.optionalString (builtins.elem "lidarr" (containerCfg.extra.modules or defaultModules)) '' ${lib.optionalString (builtins.elem "lidarr" (containerCfg.extra.modules)) ''
if ! echo "$PROWL_APPS" | ${pkgs.jq}/bin/jq -e 'any(.[]? ; .name == "Lidarr")' > /dev/null; then if ! echo "$PROWL_APPS" | ${pkgs.jq}/bin/jq -e 'any(.[]? ; .name == "Lidarr")' > /dev/null; then
echo "Prowlarr Setup - Lidarr" echo "Prowlarr Setup - Lidarr"
${pkgs.curl}/bin/curl -s -X POST "$PROWLARR_URL/api/v1/applications" \ ${pkgs.curl}/bin/curl -s -X POST "$PROWLARR_URL/api/v1/applications" \
@@ -208,7 +207,7 @@ in
-d '{"syncLevel":"fullSync","enable":true,"fields":[{"name":"prowlarrUrl","value":"http://servarr-prowlarr:8989/prowlarr"},{"name":"baseUrl","value":"http://servarr-lidarr:8989/lidarr"},{"name":"apiKey","value":"'"$LIDARR__AUTH__APIKEY"'"},{"name":"syncCategories","value":[3000,3010,3030,3040,3050,3060]},{"name":"syncRejectBlocklistedTorrentHashesWhileGrabbing","value":false}],"implementationName":"Lidarr","implementation":"Lidarr","configContract":"LidarrSettings","infoLink":"https://wiki.servarr.com/prowlarr/supported#lidarr","tags":[],"name":"Lidarr"}' -d '{"syncLevel":"fullSync","enable":true,"fields":[{"name":"prowlarrUrl","value":"http://servarr-prowlarr:8989/prowlarr"},{"name":"baseUrl","value":"http://servarr-lidarr:8989/lidarr"},{"name":"apiKey","value":"'"$LIDARR__AUTH__APIKEY"'"},{"name":"syncCategories","value":[3000,3010,3030,3040,3050,3060]},{"name":"syncRejectBlocklistedTorrentHashesWhileGrabbing","value":false}],"implementationName":"Lidarr","implementation":"Lidarr","configContract":"LidarrSettings","infoLink":"https://wiki.servarr.com/prowlarr/supported#lidarr","tags":[],"name":"Lidarr"}'
fi fi
''} ''}
${lib.optionalString (builtins.elem "radarr" (containerCfg.extra.modules or defaultModules)) '' ${lib.optionalString (builtins.elem "radarr" (containerCfg.extra.modules)) ''
if ! echo "$PROWL_APPS" | ${pkgs.jq}/bin/jq -e 'any(.[]? ; .name == "Radarr")' > /dev/null; then if ! echo "$PROWL_APPS" | ${pkgs.jq}/bin/jq -e 'any(.[]? ; .name == "Radarr")' > /dev/null; then
echo "Prowlarr Setup - Radarr" echo "Prowlarr Setup - Radarr"
${pkgs.curl}/bin/curl -s -X POST "$PROWLARR_URL/api/v1/applications" \ ${pkgs.curl}/bin/curl -s -X POST "$PROWLARR_URL/api/v1/applications" \
@@ -217,12 +216,12 @@ in
-d '{"syncLevel":"fullSync","enable":true,"fields":[{"name":"prowlarrUrl","value":"http://servarr-prowlarr:8989/prowlarr"},{"name":"baseUrl","value":"http://servarr-radarr:8989/radarr"},{"name":"apiKey","value":"'"$RADARR__AUTH__APIKEY"'"},{"name":"syncCategories","value":[2000,2010,2020,2030,2040,2045,2050,2060,2070,2080,2090]},{"name":"syncRejectBlocklistedTorrentHashesWhileGrabbing","value":false}],"implementationName":"Radarr","implementation":"Radarr","configContract":"RadarrSettings","infoLink":"https://wiki.servarr.com/prowlarr/supported#radarr","tags":[],"name":"Radarr"}' -d '{"syncLevel":"fullSync","enable":true,"fields":[{"name":"prowlarrUrl","value":"http://servarr-prowlarr:8989/prowlarr"},{"name":"baseUrl","value":"http://servarr-radarr:8989/radarr"},{"name":"apiKey","value":"'"$RADARR__AUTH__APIKEY"'"},{"name":"syncCategories","value":[2000,2010,2020,2030,2040,2045,2050,2060,2070,2080,2090]},{"name":"syncRejectBlocklistedTorrentHashesWhileGrabbing","value":false}],"implementationName":"Radarr","implementation":"Radarr","configContract":"RadarrSettings","infoLink":"https://wiki.servarr.com/prowlarr/supported#radarr","tags":[],"name":"Radarr"}'
fi fi
''} ''}
${lib.optionalString (builtins.elem "mylarr" (containerCfg.extra.modules or defaultModules)) '' ${lib.optionalString (builtins.elem "mylarr" (containerCfg.extra.modules)) ''
if ! echo "$PROWL_APPS" | ${pkgs.jq}/bin/jq -e 'any(.[]? ; .name == "Mylar")' > /dev/null; then if ! echo "$PROWL_APPS" | ${pkgs.jq}/bin/jq -e 'any(.[]? ; .name == "Mylar")' > /dev/null; then
echo "Prowlarr Setup - Mylarr" echo "Prowlarr Setup - Mylarr"
fi fi
''} ''}
${lib.optionalString (builtins.elem "readarr" (containerCfg.extra.modules or defaultModules)) '' ${lib.optionalString (builtins.elem "readarr" (containerCfg.extra.modules)) ''
if ! echo "$PROWL_APPS" | ${pkgs.jq}/bin/jq -e 'any(.[]? ; .name == "Readarr")' > /dev/null; then if ! echo "$PROWL_APPS" | ${pkgs.jq}/bin/jq -e 'any(.[]? ; .name == "Readarr")' > /dev/null; then
echo "Prowlarr Setup - Readarr" echo "Prowlarr Setup - Readarr"
fi fi
@@ -292,7 +291,7 @@ in
''} ''}
${lib.optionalString (builtins.elem "sonarr" (containerCfg.extra.modules or defaultModules)) '' ${lib.optionalString (builtins.elem "sonarr" (containerCfg.extra.modules)) ''
echo "Sonarr Setup - START" echo "Sonarr Setup - START"
SONARR_URL="https://${containerCfg.subdomain}.${serverCfg.domain}/sonarr" SONARR_URL="https://${containerCfg.subdomain}.${serverCfg.domain}/sonarr"
@@ -399,7 +398,7 @@ in
''} ''}
${lib.optionalString (builtins.elem "radarr" (containerCfg.extra.modules or defaultModules)) '' ${lib.optionalString (builtins.elem "radarr" (containerCfg.extra.modules)) ''
echo "Radarr Setup - START" echo "Radarr Setup - START"
RADARR_URL="https://${containerCfg.subdomain}.${serverCfg.domain}/radarr" RADARR_URL="https://${containerCfg.subdomain}.${serverCfg.domain}/radarr"
@@ -506,15 +505,15 @@ in
''} ''}
${lib.optionalString (builtins.elem "lidarr" (containerCfg.extra.modules or defaultModules)) '' ${lib.optionalString (builtins.elem "lidarr" (containerCfg.extra.modules)) ''
''} ''}
${lib.optionalString (builtins.elem "readarr" (containerCfg.extra.modules or defaultModules)) '' ${lib.optionalString (builtins.elem "readarr" (containerCfg.extra.modules)) ''
''} ''}
${lib.optionalString (builtins.elem "mylarr" (containerCfg.extra.modules or defaultModules)) '' ${lib.optionalString (builtins.elem "mylarr" (containerCfg.extra.modules)) ''
''} ''}
${lib.optionalString (builtins.elem "bazarr" (containerCfg.extra.modules or defaultModules)) '' ${lib.optionalString (builtins.elem "bazarr" (containerCfg.extra.modules)) ''
''} ''}
${lib.optionalString (builtins.elem "seerr" (containerCfg.extra.modules or defaultModules)) '' ${lib.optionalString (builtins.elem "seerr" (containerCfg.extra.modules)) ''
''} ''}
''; '';

View File

@@ -47,6 +47,7 @@
invidious.subdomain = "yt"; invidious.subdomain = "yt";
jellyfin.subdomain = "flix"; jellyfin.subdomain = "flix";
servarr.subdomain = "arr"; servarr.subdomain = "arr";
servarr.extra.modules = ["prowlarr" "sonarr" "radarr" "flaresolverr" ];
transmission = { subdomain = "arr"; subpath = "transmission"; }; transmission = { subdomain = "arr"; subpath = "transmission"; };
handbrake = { subdomain = "arr"; subpath = "hb"; }; handbrake = { subdomain = "arr"; subpath = "hb"; };
# ===== DEV ===== # ===== DEV =====