{ config, pkgs, lib, ... }: let cfg = config.my.services.download-pod; in { options.my.services.download-pod = { enable = lib.mkEnableOption "Enable the download searcher stack"; proxy = { enable = lib.mkEnableOption "Enable proxy for the services"; hostName = lib.mkOption { default = "example.com"; type = lib.types.str; description = '' Top level hostname ''; }; serverName = lib.mkOption { default = "localhost"; type = lib.types.str; description = '' Server name where Caddy is ''; }; }; }; config = lib.mkIf cfg.enable { my.virtualisation.podman.enable = true; systemd.services.pod-download = { description = "Start podman 'download' pod"; wants = [ "network-online.target" ]; after = [ "network-online.target" ]; requiredBy = [ "podman-jackett.service" "podman-radarr.service" "podman-sabnzbd.service" "podman-sonarr.service" ]; unitConfig = { RequiresMountsFor = "/run/containers"; }; serviceConfig = { Type = "oneshot"; # - 7878: Radarr # - 8080: Sabnzbd # - 8989: Sonarr # - 9117: Jackett # - 9696: Prowlarr ExecStart = "-${pkgs.podman}/bin/podman pod create -p 9117:9117 -p 7878:7878 -p 8080:8080 -p 8989:8989 -p 9696:9696 download"; }; path = [ pkgs.podman ]; }; virtualisation.oci-containers.containers = { my-pod = { image = "k8s.gcr.io/pause:3.9"; extraOptions = [ "--pod=new:my-pod" "--publish=8081:80" # Expose port 80 in the pod as 8080 on the host "--publish=8082:82" # Expose port 82 in the pod as 8082 on the host "--publish=83:9117" # Expose port 9117 in the pod as 83 on the host ]; }; jackett = { image = "linuxserver/jackett"; autoStart = true; extraOptions = [ "--pod=my-pod" ]; volumes = [ "jackett_config:/config" "jackett_data:/data" ]; }; radarr = { image = "linuxserver/radarr"; autoStart = true; extraOptions = [ "--pod=download" ]; volumes = [ "radarr_config:/config" "radarr_data:/data" ]; }; sabnzbd = { image = "linuxserver/sabnzbd"; autoStart = true; extraOptions = [ "--pod=download" ]; volumes = [ "sabnzbd_config:/config" "sabnzbd_data:/data" ]; }; sonarr = { image = "linuxserver/sonarr"; autoStart = true; extraOptions = [ "--pod=download" ]; volumes = [ "sonarr_config:/config" "sonarr_data:/data" ]; }; prowlarr = { image = "linuxserver/prowlarr"; autoStart = true; extraOptions = [ "--pod=download" ]; volumes = [ "prowlarr_config:/config" ]; }; }; services.caddy = lib.mkIf cfg.proxy.enable { enable = true; enableReload = false; virtualHosts = { "jackett.${cfg.proxy.hostName}".extraConfig = '' reverse_proxy http://${cfg.proxy.serverName}:9117 ''; "radarr.${cfg.proxy.hostName}".extraConfig = '' reverse_proxy http://${cfg.proxy.serverName}:7878 ''; "sabnzbd.${cfg.proxy.hostName}".extraConfig = '' reverse_proxy http://${cfg.proxy.serverName}:8080 ''; "sonarr.${cfg.proxy.hostName}".extraConfig = '' reverse_proxy http://${cfg.proxy.serverName}:8989 ''; }; }; }; }