From d22c2abb30f56f5a8bfaaafd66f5e1e983a00c91 Mon Sep 17 00:00:00 2001 From: Dmitriy Kholkin Date: Thu, 10 Jul 2025 18:39:31 +0300 Subject: [PATCH] feat: migrate media-stack containers to quadlet --- .../nixos/containers/media-stack/caddy.nix | 30 ++--- .../nixos/containers/media-stack/default.nix | 103 +++++++++++------- .../nixos/containers/media-stack/jackett.nix | 28 +++-- .../nixos/containers/media-stack/jellyfin.nix | 48 ++++---- .../nixos/containers/media-stack/kavita.nix | 38 ++++--- .../nixos/containers/media-stack/lidarr.nix | 32 +++--- .../nixos/containers/media-stack/medusa.nix | 28 +++-- .../containers/media-stack/qbittorrent.nix | 66 +++++------ .../nixos/containers/media-stack/radarr.nix | 30 ++--- .../containers/media-stack/recyclarr.nix | 26 +++-- .../nixos/containers/media-stack/sonarr.nix | 30 ++--- 11 files changed, 258 insertions(+), 201 deletions(-) diff --git a/modules/nixos/containers/media-stack/caddy.nix b/modules/nixos/containers/media-stack/caddy.nix index 42145cf..d745cf6 100644 --- a/modules/nixos/containers/media-stack/caddy.nix +++ b/modules/nixos/containers/media-stack/caddy.nix @@ -8,6 +8,8 @@ let inherit (lib) mkEnableOption mkIf; cfg = config.ataraxia.containers.media-stack; + pods = config.virtualisation.quadlet.pods; + nas-path = "/media/nas/media-stack"; caddyconf = pkgs.writeText "Caddyfile" '' @@ -47,21 +49,23 @@ in }; config = mkIf cfg.caddy { - virtualisation.oci-containers.containers.media-caddy = { + virtualisation.quadlet.containers.caddy = { autoStart = true; - # Tags: release-20b7f25, release-2.10.0, release - image = "ghcr.io/hotio/caddy@sha256:937fe02672e7ce7f189e28d45c4ccfe86b2a7d5791b4e04badb55e143e32d5b7"; - environment = { - PUID = "1000"; - PGID = "100"; - UMASK = "002"; - TZ = "Europe/Moscow"; + containerConfig = { + # Tags: release-20b7f25, release-2.10.0, release + image = "ghcr.io/hotio/caddy@sha256:937fe02672e7ce7f189e28d45c4ccfe86b2a7d5791b4e04badb55e143e32d5b7"; + pod = pods.media-stack.ref; + environments = { + PUID = "1000"; + PGID = "100"; + UMASK = "002"; + TZ = "Europe/Moscow"; + }; + volumes = [ + "${nas-path}/configs/caddy:/config" + "${caddyconf}:/config/Caddyfile" + ]; }; - extraOptions = [ "--pod=media-stack" ]; - volumes = [ - "${nas-path}/configs/caddy:/config" - "${caddyconf}:/config/Caddyfile" - ]; }; }; } diff --git a/modules/nixos/containers/media-stack/default.nix b/modules/nixos/containers/media-stack/default.nix index d6afec0..1215d45 100644 --- a/modules/nixos/containers/media-stack/default.nix +++ b/modules/nixos/containers/media-stack/default.nix @@ -1,7 +1,6 @@ { config, lib, - pkgs, ... }: let @@ -9,16 +8,22 @@ let mkDefault mkEnableOption mkIf - optionals + mkOption + recursiveUpdate ; + inherit (lib.types) bool; cfg = config.ataraxia.containers.media-stack; + networks = config.virtualisation.quadlet.networks; + nginx = config.ataraxia.services.nginx; - backend = config.virtualisation.oci-containers.backend; - pod-name = "media-stack"; + caddy-port = "8180"; + # TODO: fix caddy for medusa. Maybe change to something else + medusa-port = "8180"; open-ports = [ # caddy - "127.0.0.1:8180:8180" + "127.0.0.1:${caddy-port}:${caddy-port}" + "127.0.0.1:${medusa-port}:${medusa-port}" # qbittorrent "0.0.0.0:7000:7000" "0.0.0.0:7000:7000/udp" @@ -41,6 +46,11 @@ in options.ataraxia.containers.media-stack = { enable = mkEnableOption "Enable media-stack containers"; + nginxHost = mkOption { + type = bool; + default = config.ataraxia.services.nginx.enable; + description = "Enable nginx vHost integration"; + }; }; config = mkIf cfg.enable { @@ -55,40 +65,59 @@ in ataraxia.containers.media-stack.recyclarr = mkDefault true; ataraxia.containers.media-stack.sonarr = mkDefault true; - systemd.services."podman-create-${pod-name}" = - let - portsMapping = lib.concatMapStrings (port: " -p " + port) open-ports; - start = pkgs.writeShellScript "create-pod-${pod-name}" '' - podman pod exists ${pod-name} || podman pod create -n ${pod-name} ${portsMapping} --dns ${pod-dns} - ''; - stop = pkgs.writeShellScript "remove-pod-${pod-name}" '' - podman pod rm -i -f ${pod-name} - ''; - in - rec { - path = [ - pkgs.coreutils - config.virtualisation.podman.package + 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" ]; - before = - [ ] - ++ optionals cfg.caddy [ "${backend}-media-caddy.service" ] - ++ optionals cfg.jackett [ "${backend}-jackett.service" ] - ++ optionals cfg.jellyfin [ "${backend}-jellyfin.service" ] - ++ optionals cfg.kavita [ "${backend}-kavita.service" ] - ++ optionals cfg.lidarr [ "${backend}-lidarr.service" ] - ++ optionals cfg.medusa [ "${backend}-medusa.service" ] - ++ optionals cfg.qbittorrent [ "${backend}-qbittorrent.service" ] - ++ optionals cfg.radarr [ "${backend}-radarr.service" ] - ++ optionals cfg.recyclarr [ "${backend}-recyclarr.service" ] - ++ optionals cfg.sonarr [ "${backend}-sonarr.service" ]; - requiredBy = before; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = "yes"; - ExecStart = start; - ExecStop = stop; + 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; + }; + }; + }; }; } diff --git a/modules/nixos/containers/media-stack/jackett.nix b/modules/nixos/containers/media-stack/jackett.nix index 3850469..b9ae9ea 100644 --- a/modules/nixos/containers/media-stack/jackett.nix +++ b/modules/nixos/containers/media-stack/jackett.nix @@ -3,6 +3,8 @@ let inherit (lib) mkEnableOption mkIf; cfg = config.ataraxia.containers.media-stack; + pods = config.virtualisation.quadlet.pods; + nas-path = "/media/nas/media-stack"; in { @@ -11,20 +13,22 @@ in }; config = mkIf cfg.jackett { - virtualisation.oci-containers.containers.jackett = { + virtualisation.quadlet.containers.jackett = { autoStart = true; - environment = { - PUID = "1000"; - PGID = "100"; - UMASK = "002"; - TZ = "Europe/Moscow"; + containerConfig = { + # Tags: 0.22.2117, version-v0.22.2117, v0.22.2117-ls80 + image = "docker.io/linuxserver/jackett@sha256:221606b0ed7df0d66e601d0ba83f5f9cc9b9c761bafad3507d6854406b3a447b"; + pod = pods.media-stack.ref; + environments = { + PUID = "1000"; + PGID = "100"; + UMASK = "002"; + TZ = "Europe/Moscow"; + }; + volumes = [ + "${nas-path}/configs/jackett:/config" + ]; }; - extraOptions = [ "--pod=media-stack" ]; - # Tags: 0.22.2117, version-v0.22.2117, v0.22.2117-ls80 - image = "docker.io/linuxserver/jackett@sha256:221606b0ed7df0d66e601d0ba83f5f9cc9b9c761bafad3507d6854406b3a447b"; - volumes = [ - "${nas-path}/configs/jackett:/config" - ]; }; }; } diff --git a/modules/nixos/containers/media-stack/jellyfin.nix b/modules/nixos/containers/media-stack/jellyfin.nix index 9871a42..0a23020 100644 --- a/modules/nixos/containers/media-stack/jellyfin.nix +++ b/modules/nixos/containers/media-stack/jellyfin.nix @@ -8,6 +8,8 @@ let inherit (lib) mkEnableOption mkIf; cfg = config.ataraxia.containers.media-stack; + pods = config.virtualisation.quadlet.pods; + nas-path = "/media/nas/media-stack"; renderGid = toString config.users.groups.render.gid; videoGid = toString config.users.groups.video.gid; @@ -23,29 +25,33 @@ in }; config = mkIf cfg.jellyfin { - virtualisation.oci-containers.containers.jellyfin = { + virtualisation.quadlet.containers.jellyfin = { autoStart = true; - # Tags: 10.10.7, version-10.10.7ubu2404, 10.10.7ubu2404-ls68 - image = "docker.io/linuxserver/jellyfin@sha256:d325675bce77eda246f13d0aa2bf94002d4e426e6e1783594cf9b6df164fcb23"; - environment = { - PUID = "1000"; - PGID = "100"; - UMASK = "002"; - TZ = "Europe/Moscow"; - http_proxy = "http://10.10.10.6:8888"; - https_proxy = "http://10.10.10.6:8888"; + containerConfig = { + # Tags: 10.10.7, version-10.10.7ubu2404, 10.10.7ubu2404-ls68 + image = "docker.io/linuxserver/jellyfin@sha256:d325675bce77eda246f13d0aa2bf94002d4e426e6e1783594cf9b6df164fcb23"; + pod = pods.media-stack.ref; + environments = { + PUID = "1000"; + PGID = "100"; + UMASK = "002"; + TZ = "Europe/Moscow"; + http_proxy = "http://10.10.10.6:8888"; + https_proxy = "http://10.10.10.6:8888"; + }; + addGroups = [ + renderGid + videoGid + inputGid + ]; + devices = [ "/dev/dri/renderD128" ]; + # podmanArgs = [ "--privileged" ]; + volumes = [ + "${nas-path}/configs/jellyfin:/config" + "${nas-path}/media:/data/media" + "${intro-skipper-fix}:/custom-cont-init.d/intro-skipper-fix:ro" + ]; }; - extraOptions = [ - "--pod=media-stack" - "--device=/dev/dri/renderD128:/dev/dri/renderD128" - "--group-add=${renderGid},${videoGid},${inputGid}" - # "--privileged" - ]; - volumes = [ - "${nas-path}/configs/jellyfin:/config" - "${nas-path}/media:/data/media" - "${intro-skipper-fix}:/custom-cont-init.d/intro-skipper-fix:ro" - ]; }; }; } diff --git a/modules/nixos/containers/media-stack/kavita.nix b/modules/nixos/containers/media-stack/kavita.nix index 7324675..10fcc0b 100644 --- a/modules/nixos/containers/media-stack/kavita.nix +++ b/modules/nixos/containers/media-stack/kavita.nix @@ -3,6 +3,8 @@ let inherit (lib) mkEnableOption mkIf; cfg = config.ataraxia.containers.media-stack; + pods = config.virtualisation.quadlet.pods; + nas-path = "/media/nas/media-stack"; in { @@ -11,25 +13,27 @@ in }; config = mkIf cfg.kavita { - virtualisation.oci-containers.containers.kavita = { + virtualisation.quadlet.containers.kavita = { autoStart = true; - # Tags: 0.8.6, version-v0.8.6.2, v0.8.6.2-ls79 - image = "docker.io/linuxserver/kavita@sha256:b222e4b2137db2301756d018076d0bfee858077d8af24d709f1f4003d628e580"; - environment = { - PUID = "1000"; - PGID = "100"; - TZ = "Europe/Moscow"; - DOTNET_SYSTEM_GLOBALIZATION_INVARIANT = "true"; + containerConfig = { + # Tags: 0.8.6, version-v0.8.6.2, v0.8.6.2-ls79 + image = "docker.io/linuxserver/kavita@sha256:b222e4b2137db2301756d018076d0bfee858077d8af24d709f1f4003d628e580"; + pod = pods.media-stack.ref; + environments = { + PUID = "1000"; + PGID = "100"; + TZ = "Europe/Moscow"; + DOTNET_SYSTEM_GLOBALIZATION_INVARIANT = "true"; + }; + volumes = [ + "${nas-path}/configs/kavita:/config" + "${nas-path}/media/books:/data/books" + "${nas-path}/media/comics:/data/comics" + "${nas-path}/media/fanfics:/data/fanfics" + "${nas-path}/media/manga:/data/manga" + "${nas-path}/media/novels:/data/novels" + ]; }; - extraOptions = [ "--pod=media-stack" ]; - volumes = [ - "${nas-path}/configs/kavita:/config" - "${nas-path}/media/books:/data/books" - "${nas-path}/media/comics:/data/comics" - "${nas-path}/media/fanfics:/data/fanfics" - "${nas-path}/media/manga:/data/manga" - "${nas-path}/media/novels:/data/novels" - ]; }; }; } diff --git a/modules/nixos/containers/media-stack/lidarr.nix b/modules/nixos/containers/media-stack/lidarr.nix index d7a3a65..6ab3298 100644 --- a/modules/nixos/containers/media-stack/lidarr.nix +++ b/modules/nixos/containers/media-stack/lidarr.nix @@ -3,6 +3,8 @@ let inherit (lib) mkEnableOption mkIf; cfg = config.ataraxia.containers.media-stack; + pods = config.virtualisation.quadlet.pods; + nas-path = "/media/nas/media-stack"; in { @@ -11,22 +13,24 @@ in }; config = mkIf cfg.lidarr { - virtualisation.oci-containers.containers.lidarr = { + virtualisation.quadlet.containers.lidarr = { autoStart = true; - environment = { - PUID = "1000"; - PGID = "100"; - TZ = "Europe/Moscow"; + containerConfig = { + # Tags: 2.12.4, version-2.12.4.4658, 2.12.4.4658-ls45 + image = "docker.io/linuxserver/lidarr@sha256:71fe6d5702691c6ac8961b9b1042fdea1ff833a49c82c5e165346fa88999a48a"; + pod = pods.media-stack.ref; + environments = { + PUID = "1000"; + PGID = "100"; + TZ = "Europe/Moscow"; + }; + volumes = [ + "${nas-path}/configs/lidarr/config:/config" + "${nas-path}/configs/lidarr/custom-services.d:/custom-services.d" + "${nas-path}/configs/lidarr/custom-cont-init.d:/custom-cont-init.d" + "${nas-path}:/data" + ]; }; - extraOptions = [ "--pod=media-stack" ]; - # Tags: 2.12.4, version-2.12.4.4658, 2.12.4.4658-ls45 - image = "docker.io/linuxserver/lidarr@sha256:71fe6d5702691c6ac8961b9b1042fdea1ff833a49c82c5e165346fa88999a48a"; - volumes = [ - "${nas-path}/configs/lidarr/config:/config" - "${nas-path}/configs/lidarr/custom-services.d:/custom-services.d" - "${nas-path}/configs/lidarr/custom-cont-init.d:/custom-cont-init.d" - "${nas-path}:/data" - ]; }; }; } diff --git a/modules/nixos/containers/media-stack/medusa.nix b/modules/nixos/containers/media-stack/medusa.nix index 2a5e10e..423e895 100644 --- a/modules/nixos/containers/media-stack/medusa.nix +++ b/modules/nixos/containers/media-stack/medusa.nix @@ -3,6 +3,8 @@ let inherit (lib) mkEnableOption mkIf; cfg = config.ataraxia.containers.media-stack; + pods = config.virtualisation.quadlet.pods; + nas-path = "/media/nas/media-stack"; in { @@ -11,20 +13,22 @@ in }; config = mkIf cfg.medusa { - virtualisation.oci-containers.containers.medusa = { + virtualisation.quadlet.containers.medusa = { autoStart = true; - # Tags: 1.0.22, version-v1.0.22, v1.0.22-ls230 - image = "docker.io/linuxserver/medusa@sha256:89d7397b64b079050d8d20284fc692aee36a196885f57e5d9a396455d58a130d"; - environment = { - PUID = "1000"; - PGID = "100"; - TZ = "Europe/Moscow"; + containerConfig = { + # Tags: 1.0.22, version-v1.0.22, v1.0.22-ls230 + image = "docker.io/linuxserver/medusa@sha256:89d7397b64b079050d8d20284fc692aee36a196885f57e5d9a396455d58a130d"; + pod = pods.media-stack.ref; + environments = { + PUID = "1000"; + PGID = "100"; + TZ = "Europe/Moscow"; + }; + volumes = [ + "${nas-path}/configs/medusa:/config" + "${nas-path}:/data" + ]; }; - extraOptions = [ "--pod=media-stack" ]; - volumes = [ - "${nas-path}/configs/medusa:/config" - "${nas-path}:/data" - ]; }; }; } diff --git a/modules/nixos/containers/media-stack/qbittorrent.nix b/modules/nixos/containers/media-stack/qbittorrent.nix index e520962..577e938 100644 --- a/modules/nixos/containers/media-stack/qbittorrent.nix +++ b/modules/nixos/containers/media-stack/qbittorrent.nix @@ -1,17 +1,12 @@ -{ - config, - lib, - pkgs, - ... -}: +{ config, lib, ... }: let inherit (lib) mkEnableOption mkIf; cfg = config.ataraxia.containers.media-stack; + volumes = config.virtualisation.quadlet.volumes; + pods = config.virtualisation.quadlet.pods; - backend = "podman"; nas-path = "/media/nas/media-stack"; - volume = "local-nfs"; nfs-share = "10.10.10.11:/"; in { @@ -20,40 +15,35 @@ in }; config = mkIf cfg.qbittorrent { - virtualisation.oci-containers.containers.qbittorrent = { + virtualisation.quadlet.containers.qbittorrent = { autoStart = true; - # Tags: 5.1.2, version-5.1.2-r0, 5.1.2-r0-ls402 - image = "docker.io/linuxserver/qbittorrent@sha256:94c8c82291c4fcf86084a6efb9f806786296fad48739e4723dc9a5393073a2ae"; - environment = { - PUID = "1000"; - PGID = "100"; - UMASK = "002"; - TZ = "Europe/Moscow"; - TORRENTING_PORT = "7000"; - DOCKER_MODS = "ghcr.io/gabe565/linuxserver-mod-vuetorrent"; + containerConfig = { + # Tags: 5.1.2, version-5.1.2-r0, 5.1.2-r0-ls402 + image = "docker.io/linuxserver/qbittorrent@sha256:94c8c82291c4fcf86084a6efb9f806786296fad48739e4723dc9a5393073a2ae"; + pod = pods.media-stack.ref; + environments = { + PUID = "1000"; + PGID = "100"; + UMASK = "002"; + TZ = "Europe/Moscow"; + TORRENTING_PORT = "7000"; + DOCKER_MODS = "ghcr.io/gabe565/linuxserver-mod-vuetorrent"; + }; + + volumes = [ + "${nas-path}/configs/qbittorrent:/config" + "${nas-path}:/data" + "${volumes.nfs-share.ref}:/nfs" + ]; }; - extraOptions = [ "--pod=media-stack" ]; - volumes = [ - "${nas-path}/configs/qbittorrent:/config" - "${nas-path}:/data" - "${volume}:/nfs" - ]; }; - systemd.services."podman-create-volume-${volume}" = - let - start = pkgs.writeShellScript "create-volume-${volume}" '' - podman volume exists ${volume} || podman volume create --opt type=nfs4 --opt o=rw --opt device=${nfs-share} ${volume} - ''; - in - rec { - path = [ config.virtualisation.podman.package ]; - before = [ "${backend}-qbittorrent.service" ]; - requiredBy = before; - serviceConfig = { - Type = "oneshot"; - ExecStart = start; - }; + virtualisation.quadlet.volumes.nfs-share = { + volumeConfig = { + device = nfs-share; + type = "nfs4"; + options = "rw"; }; + }; }; } diff --git a/modules/nixos/containers/media-stack/radarr.nix b/modules/nixos/containers/media-stack/radarr.nix index 91bda02..6c027de 100644 --- a/modules/nixos/containers/media-stack/radarr.nix +++ b/modules/nixos/containers/media-stack/radarr.nix @@ -3,6 +3,8 @@ let inherit (lib) mkEnableOption mkIf; cfg = config.ataraxia.containers.media-stack; + pods = config.virtualisation.quadlet.pods; + nas-path = "/media/nas/media-stack"; in { @@ -11,21 +13,23 @@ in }; config = mkIf cfg.radarr { - virtualisation.oci-containers.containers.radarr = { + virtualisation.quadlet.containers.radarr = { autoStart = true; - environment = { - PUID = "1000"; - PGID = "100"; - UMASK = "002"; - TZ = "Europe/Moscow"; + containerConfig = { + # Tags: 5.26.2, version-5.26.2.10099, 5.26.2.10099-ls276 + image = "docker.io/linuxserver/radarr@sha256:07a474b61394553e047ad43a1a78c1047fc99be0144c509dd91e3877f402ebcb"; + pod = pods.media-stack.ref; + environments = { + PUID = "1000"; + PGID = "100"; + UMASK = "002"; + TZ = "Europe/Moscow"; + }; + volumes = [ + "${nas-path}/configs/radarr:/config" + "${nas-path}:/data" + ]; }; - extraOptions = [ "--pod=media-stack" ]; - # Tags: 5.26.2, version-5.26.2.10099, 5.26.2.10099-ls276 - image = "docker.io/linuxserver/radarr@sha256:07a474b61394553e047ad43a1a78c1047fc99be0144c509dd91e3877f402ebcb"; - volumes = [ - "${nas-path}/configs/radarr:/config" - "${nas-path}:/data" - ]; }; }; } diff --git a/modules/nixos/containers/media-stack/recyclarr.nix b/modules/nixos/containers/media-stack/recyclarr.nix index 7ac0ea2..e34f694 100644 --- a/modules/nixos/containers/media-stack/recyclarr.nix +++ b/modules/nixos/containers/media-stack/recyclarr.nix @@ -3,6 +3,8 @@ let inherit (lib) mkEnableOption mkIf; cfg = config.ataraxia.containers.media-stack; + pods = config.virtualisation.quadlet.pods; + nas-path = "/media/nas/media-stack"; in { @@ -11,19 +13,21 @@ in }; config = mkIf cfg.recyclarr { - virtualisation.oci-containers.containers.recyclarr = { + virtualisation.quadlet.containers.recyclarr = { autoStart = true; - environment = { - CRON_SCHEDULE = "@daily"; - TZ = "Europe/Moscow"; + containerConfig = { + # Tags: 7.4.1, 7.4, 7 + image = "ghcr.io/recyclarr/recyclarr@sha256:759540877f95453eca8a26c1a93593e783a7a824c324fbd57523deffb67f48e1"; + pod = pods.media-stack.ref; + user = "1000:100"; + environments = { + CRON_SCHEDULE = "@daily"; + TZ = "Europe/Moscow"; + }; + volumes = [ + "${nas-path}/configs/recyclarr:/config" + ]; }; - extraOptions = [ "--pod=media-stack" ]; - # Tags: 7.4.1, 7.4, 7 - image = "ghcr.io/recyclarr/recyclarr@sha256:759540877f95453eca8a26c1a93593e783a7a824c324fbd57523deffb67f48e1"; - volumes = [ - "${nas-path}/configs/recyclarr:/config" - ]; - user = "1000:100"; }; }; } diff --git a/modules/nixos/containers/media-stack/sonarr.nix b/modules/nixos/containers/media-stack/sonarr.nix index e8bc8fc..6bd8149 100644 --- a/modules/nixos/containers/media-stack/sonarr.nix +++ b/modules/nixos/containers/media-stack/sonarr.nix @@ -3,6 +3,8 @@ let inherit (lib) mkEnableOption mkIf; cfg = config.ataraxia.containers.media-stack; + pods = config.virtualisation.quadlet.pods; + nas-path = "/media/nas/media-stack"; in { @@ -11,21 +13,23 @@ in }; config = mkIf cfg.sonarr { - virtualisation.oci-containers.containers.sonarr = { + virtualisation.quadlet.containers.sonarr = { autoStart = true; - environment = { - PUID = "1000"; - PGID = "100"; - UMASK = "002"; - TZ = "Europe/Moscow"; + containerConfig = { + # Tags: 4.0.15, version-4.0.15.2941, 4.0.15.2941-ls285 + image = "docker.io/linuxserver/sonarr@sha256:1156329d544b38bd1483add75c9b72c559f20e1ca043fd2d6376c2589d38951f"; + pod = pods.media-stack.ref; + environments = { + PUID = "1000"; + PGID = "100"; + UMASK = "002"; + TZ = "Europe/Moscow"; + }; + volumes = [ + "${nas-path}/configs/sonarr:/config" + "${nas-path}:/data" + ]; }; - extraOptions = [ "--pod=media-stack" ]; - # Tags: 4.0.15, version-4.0.15.2941, 4.0.15.2941-ls285 - image = "docker.io/linuxserver/sonarr@sha256:1156329d544b38bd1483add75c9b72c559f20e1ca043fd2d6376c2589d38951f"; - volumes = [ - "${nas-path}/configs/sonarr:/config" - "${nas-path}:/data" - ]; }; }; }