{ inputs, ... }: { flake.modules.nixos.arr = { lib, pkgs, config, ... }: { imports = with inputs.self.modules.nixos; [ podman ]; age.secrets.gluetun.file = ../../../secrets/gluetun.age; virtualisation.oci-containers.containers = { "gluetun" = { image = "qmcgaw/gluetun:latest"; environmentFiles = [ "${config.age.secrets.gluetun.path}" ]; ports = [ "4545:4545" #Requestrr "6767:6767" #Bazarr "7878:7878" #Radarr "8080:8080" #QBitTorrent "8989:8989" #Sonarr "9696:9696" #Prowlarr "6881:6881/tcp" "6881:6881/udp" ]; log-driver = "journald"; extraOptions = [ "--cap-add=NET_ADMIN" "--device=/dev/net/tun:/dev/net/tun:rwm" "--network-alias=gluetun" ]; }; "qbittorrent" = { image = "lscr.io/linuxserver/qbittorrent:latest"; environment = { "PGID" = "1000"; "PUID" = "1000"; "TZ" = "America/New_York"; "WEBUI_PORT" = "8080"; }; volumes = [ "/DockerData/configs/qbittorrent:/config:rw" "/Media/Downloads:/Media/Downloads:rw" ]; dependsOn = [ "gluetun" ]; log-driver = "journald"; extraOptions = [ "--network=container:gluetun" ]; }; "flaresolverr" = { image = "ghcr.io/flaresolverr/flaresolverr:latest"; environment = { "CAPTCHA_SOLVER" = "none"; "LOG_HTML" = "false"; "LOG_LEVEL" = "info"; "PGID" = "1000"; "PUID" = "1000"; "TZ" = "America/New_York"; }; log-driver = "journald"; extraOptions = [ "--network-alias=flaresolverr" ]; }; "prowlarr" = { image = "lscr.io/linuxserver/prowlarr:latest"; environment = { "PGID" = "1000"; "PUID" = "1000"; "TZ" = "America/New_York"; }; volumes = [ "/DockerData/configs/prowlarr:/config:rw" ]; dependsOn = [ "flaresolverr" ]; log-driver = "journald"; extraOptions = [ "--network=container:gluetun" ]; }; "radarr" = { image = "lscr.io/linuxserver/radarr:latest"; environment = { "PGID" = "1000"; "PUID" = "1000"; "TZ" = "America/New_York"; }; volumes = [ "/DockerData/configs/radarr:/config:rw" "/Media/AutoMovies:/Media/Movies:rw" "/Media/Downloads:/Media/Downloads:rw" ]; dependsOn = [ "prowlarr" "qbittorrent" ]; log-driver = "journald"; extraOptions = [ "--network=container:gluetun" ]; }; "sonarr" = { image = "lscr.io/linuxserver/sonarr:latest"; environment = { "PGID" = "1000"; "PUID" = "1000"; "TZ" = "America/New_York"; }; volumes = [ "/DockerData/configs/sonarr:/config:rw" "/Media/AutoTV:/Media/TV:rw" "/Media/Downloads:/Media/Downloads:rw" ]; dependsOn = [ "prowlarr" "qbittorrent" ]; log-driver = "journald"; extraOptions = [ "--network=container:gluetun" ]; }; "requestrr" = { image = "thomst08/requestrr"; environment = { "PGID" = "1000"; "PUID" = "1000"; "TZ" = "America/New_York"; }; volumes = [ "/DockerData/configs/requestrr:/root/config:rw" ]; dependsOn = [ "radarr" "sonarr" ]; log-driver = "journald"; extraOptions = [ "--network=container:gluetun" ]; }; "bazarr" = { image = "ghcr.io/hotio/bazarr"; environment = { "PGID" = "1000"; "PUID" = "1000"; "TZ" = "America/New_York"; }; volumes = [ "/DockerData/configs/bazarr:/config:rw" "/Media/AutoMovies:/Media/Movies:rw" "/Media/AutoTV:/Media/TV:rw" "/Media/Downloads:/Media/Downloads:rw" ]; dependsOn = [ "radarr" "sonarr" ]; log-driver = "journald"; extraOptions = [ "--network=container:gluetun" ]; }; }; systemd = { services = { "podman-gluetun" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; }; partOf = [ "podman-compose-arr-root.target" ]; wantedBy = [ "podman-compose-arr-root.target" ]; }; "podman-qbittorrent" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; }; partOf = [ "podman-compose-arr-root.target" ]; wantedBy = [ "podman-compose-arr-root.target" ]; after = [ "podman-gluetun.service" ]; wants = [ "podman-gluetun.service" ]; }; "podman-flaresolverr" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; }; partOf = [ "podman-compose-arr-root.target" ]; wantedBy = [ "podman-compose-arr-root.target" ]; after = [ "podman-gluetun.service" ]; wants = [ "podman-gluetun.service" ]; }; "podman-prowlarr" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; }; partOf = [ "podman-compose-arr-root.target" ]; wantedBy = [ "podman-compose-arr-root.target" ]; after = [ "podman-gluetun.service" ]; wants = [ "podman-gluetun.service" ]; }; "podman-radarr" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; }; partOf = [ "podman-compose-arr-root.target" ]; wantedBy = [ "podman-compose-arr-root.target" ]; after = [ "podman-gluetun.service" ]; wants = [ "podman-gluetun.service" ]; }; "podman-sonarr" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; }; partOf = [ "podman-compose-arr-root.target" ]; wantedBy = [ "podman-compose-arr-root.target" ]; after = [ "podman-gluetun.service" ]; wants = [ "podman-gluetun.service" ]; }; "podman-requestrr" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; }; partOf = [ "podman-compose-arr-root.target" ]; wantedBy = [ "podman-compose-arr-root.target" ]; after = [ "podman-gluetun.service" ]; wants = [ "podman-gluetun.service" ]; }; "podman-bazarr" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; }; partOf = [ "podman-compose-arr-root.target" ]; wantedBy = [ "podman-compose-arr-root.target" ]; after = [ "podman-gluetun.service" ]; wants = [ "podman-gluetun.service" ]; }; }; targets = { "podman-compose-arr-root" = { wantedBy = [ "multi-user.target" ]; }; }; }; systemd.services.restart-arr-daily = { enable = true; description = "Restart ARR stack"; serviceConfig = { Type = "oneshot"; ExecStart = "${pkgs.systemd}/bin/systemctl restart podman-compose-arr-root.target"; }; }; systemd.timers.restart-arr-daily = { wantedBy = [ "timers.target" ]; timerConfig = { OnCalendar= "4:03:0"; Persistent=true; Unit = "restart-arr-daily.service"; }; }; }; }