{ pkgs, lib, ... }: let anyOpt = default: lib.mkOption { type = lib.types.anything; inherit default; }; testConfig = m: let cfg = (lib.evalModules { specialArgs = { inherit pkgs; }; modules = [ { options = { systemd = anyOpt {}; shb.backup = anyOpt {}; shb.nginx = anyOpt {}; users = anyOpt {}; services.bazarr = anyOpt {}; services.jackett = anyOpt {}; services.lidarr = anyOpt {}; services.radarr = anyOpt {}; services.readarr = anyOpt {}; services.sonarr = anyOpt {}; }; } ../../modules/services/arr.nix m ]; }).config; systemdRedacted = lib.filterAttrsRecursive (n: v: n != "preStart") cfg.systemd; in { inherit (cfg) services users; systemd = systemdRedacted; shb = { inherit (cfg.shb) backup nginx; }; }; in { testArrNoOptions = { expected = { systemd.services.radarr = {}; systemd.services.jackett = {}; shb.backup = {}; shb.nginx.autheliaProtect = []; users.users = {}; services.bazarr = {}; services.jackett = {}; services.lidarr = {}; services.radarr = {}; services.readarr = {}; services.sonarr = {}; }; expr = testConfig {}; }; testRadarr = { expected = { systemd.services.radarr = { serviceConfig = { StateDirectoryMode = "0750"; UMask = "0027"; }; }; systemd.services.jackett = {}; systemd.tmpfiles.rules = [ "d '/var/lib/radarr' 0750 radarr radarr - -" ]; shb.backup = {}; shb.nginx.autheliaProtect = [ { autheliaRules = [ { domain = "radarr.example.com"; policy = "bypass"; resources = [ "^/api.*" ]; } { domain = "radarr.example.com"; policy = "two_factor"; subject = [ "group:arr_user" ]; } ]; domain = "example.com"; authEndpoint = "https://oidc.example.com"; subdomain = "radarr"; upstream = "http://127.0.0.1:7001"; ssl = null; } ]; users.users.radarr.extraGroups = [ "media" ]; users.groups.radarr.members = [ "backup" ]; services.bazarr = {}; services.jackett = {}; services.lidarr = {}; services.radarr = { enable = true; dataDir = "/var/lib/radarr"; user = "radarr"; group = "radarr"; }; services.readarr = {}; services.sonarr = {}; }; expr = testConfig { services.radarr.user = "radarr"; services.radarr.group = "radarr"; shb.arr.radarr = { subdomain = "radarr"; domain = "example.com"; enable = true; authEndpoint = "https://oidc.example.com"; settings = { APIKeyFile = "/run/radarr/apikey"; }; }; }; }; testRadarrWithBackup = { expected = { systemd.services.radarr = { serviceConfig = { StateDirectoryMode = "0750"; UMask = "0027"; }; }; systemd.services.jackett = {}; systemd.tmpfiles.rules = [ "d '/var/lib/radarr' 0750 radarr radarr - -" ]; shb.backup.instances = { radarr = { enable = true; sourceDirectories = [ "/var/lib/radarr" ]; excludePatterns = [ ".db-shm" ".db-wal" ".mono" ]; }; }; shb.nginx.autheliaProtect = [ { autheliaRules = [ { domain = "radarr.example.com"; policy = "bypass"; resources = [ "^/api.*" ]; } { domain = "radarr.example.com"; policy = "two_factor"; subject = [ "group:arr_user" ]; } ]; domain = "example.com"; authEndpoint = "https://oidc.example.com"; subdomain = "radarr"; upstream = "http://127.0.0.1:7001"; ssl = null; } ]; users.users.radarr.extraGroups = [ "media" ]; users.groups.radarr.members = [ "backup" ]; services.bazarr = {}; services.jackett = {}; services.lidarr = {}; services.radarr = { enable = true; dataDir = "/var/lib/radarr"; user = "radarr"; group = "radarr"; }; services.readarr = {}; services.sonarr = {}; }; expr = testConfig { services.radarr.user = "radarr"; services.radarr.group = "radarr"; shb.arr.radarr = { subdomain = "radarr"; domain = "example.com"; enable = true; authEndpoint = "https://oidc.example.com"; settings = { APIKeyFile = "/run/radarr/apikey"; }; backupCfg = { enable = true; }; }; }; }; }