From 8e4ddf4ef0a009fdef5340cbfc958e97cf6fc4c9 Mon Sep 17 00:00:00 2001 From: Julien Malka Date: Wed, 29 Dec 2021 10:40:31 +0100 Subject: [PATCH] Added a (tiny) bit of modularity in the mediaserver module --- modules/jackett/default.nix | 62 ++++++++++++++--------- modules/jellyfin/default.nix | 63 +++++++++++++---------- modules/mediaserver/default.nix | 10 ++++ modules/radarr/default.nix | 63 ++++++++++++++--------- modules/sonarr/default.nix | 63 ++++++++++++++--------- modules/transmission/default.nix | 85 ++++++++++++++++++-------------- 6 files changed, 213 insertions(+), 133 deletions(-) diff --git a/modules/jackett/default.nix b/modules/jackett/default.nix index 9e665c0..097f5e3 100644 --- a/modules/jackett/default.nix +++ b/modules/jackett/default.nix @@ -1,41 +1,55 @@ { lib, pkgs, config, ... }: with lib; -let +let cfg = config.luj.jackett; port = 9117; -in { +in +{ + + options.luj.jackett = { + enable = mkEnableOption "activate jackett service"; + + user = mkOption { + type = types.str; + default = "jackett"; + description = "User account under which Jackett runs."; + }; + + group = mkOption { + type = types.str; + default = "jackett"; + description = "Group under which Jackett runs."; + }; - options.luj.jackett = { - enable = mkEnableOption "activate jackett service"; nginx.enable = mkEnableOption "activate nginx"; nginx.subdomain = mkOption { type = types.str; }; + }; config = mkIf cfg.enable ( - mkMerge [{ - services.jackett = { - enable = true; - user = "mediaserver"; - group = "mediaserver"; - }; - } - - (mkIf cfg.nginx.enable { - luj.nginx.enable = true; - services.nginx.virtualHosts."${cfg.nginx.subdomain}.julienmalka.me" = { - enableACME = true; - forceSSL = true; - locations."/" = { - proxyPass = "http://localhost:${toString port}"; - }; + mkMerge [{ + services.jackett = { + enable = true; + user = cfg.user; + group = cfg.group; }; + } + + (mkIf cfg.nginx.enable { + luj.nginx.enable = true; + services.nginx.virtualHosts."${cfg.nginx.subdomain}.julienmalka.me" = { + enableACME = true; + forceSSL = true; + locations."/" = { + proxyPass = "http://localhost:${toString port}"; + }; + }; + + })]); + - }) - ]); - - } diff --git a/modules/jellyfin/default.nix b/modules/jellyfin/default.nix index d8684a9..936e488 100644 --- a/modules/jellyfin/default.nix +++ b/modules/jellyfin/default.nix @@ -1,12 +1,27 @@ { lib, pkgs, config, ... }: with lib; -let +let cfg = config.luj.jellyfin; port = 8096; -in { +in +{ + + options.luj.jellyfin = { + + enable = mkEnableOption "activate jellyfin service"; + + user = mkOption { + type = types.str; + default = "jellyfin"; + description = "User account under which Jellyfin runs."; + }; + + group = mkOption { + type = types.str; + default = "jellyfin"; + description = "Group under which Jellyfin runs."; + }; - options.luj.jellyfin = { - enable = mkEnableOption "activate jellyfin service"; nginx.enable = mkEnableOption "activate nginx"; nginx.subdomain = mkOption { type = types.str; @@ -14,29 +29,27 @@ in { }; config = mkIf cfg.enable ( - mkMerge [{ - services.jellyfin = { - enable = true; - user = "mediaserver"; - group = "mediaserver"; - package = pkgs.jellyfin; - }; - } - - (mkIf cfg.nginx.enable { - luj.nginx.enable = true; - services.nginx.virtualHosts."${cfg.nginx.subdomain}.julienmalka.me" = { - enableACME = true; - forceSSL = true; - locations."/" = { - proxyPass = "http://localhost:${toString port}"; - }; + mkMerge [{ + services.jellyfin = { + enable = true; + user = cfg.user; + group = cfg.group; }; + } + + (mkIf cfg.nginx.enable { + luj.nginx.enable = true; + services.nginx.virtualHosts."${cfg.nginx.subdomain}.julienmalka.me" = { + enableACME = true; + forceSSL = true; + locations."/" = { + proxyPass = "http://localhost:${toString port}"; + }; + }; + + })]); + - }) - ]); - - } diff --git a/modules/mediaserver/default.nix b/modules/mediaserver/default.nix index 1d432ff..1a35c2a 100644 --- a/modules/mediaserver/default.nix +++ b/modules/mediaserver/default.nix @@ -23,30 +23,40 @@ in { luj.sonarr = { enable = true; + user = "mediaserver"; + group = "mediaserver"; nginx.enable = true; nginx.subdomain = "series"; }; luj.radarr = { enable = true; + user = "mediaserver"; + group = "mediaserver"; nginx.enable = true; nginx.subdomain = "films"; }; luj.jellyfin = { enable = true; + user = "mediaserver"; + group = "mediaserver"; nginx.enable = true; nginx.subdomain = "tv"; }; luj.jackett = { enable = true; + user = "mediaserver"; + group = "mediaserver"; nginx.enable = true; nginx.subdomain = "jackett"; }; luj.transmission = { enable = true; + user = "mediaserver"; + group = "mediaserver"; nginx.enable = true; nginx.subdomain = "downloads"; }; diff --git a/modules/radarr/default.nix b/modules/radarr/default.nix index adcf204..529c72c 100644 --- a/modules/radarr/default.nix +++ b/modules/radarr/default.nix @@ -1,41 +1,56 @@ { lib, pkgs, config, ... }: with lib; -let +let cfg = config.luj.radarr; port = 7878; -in { +in +{ + + options.luj.radarr = { + + enable = mkEnableOption "activate radarr service"; + + user = mkOption { + type = types.str; + default = "radarr"; + description = "User account under which Radarr runs."; + }; + + group = mkOption { + type = types.str; + default = "radarr"; + description = "Group under which Radarr runs."; + }; - options.luj.radarr = { - enable = mkEnableOption "activate radarr service"; nginx.enable = mkEnableOption "activate nginx"; nginx.subdomain = mkOption { type = types.str; }; + }; config = mkIf cfg.enable ( - mkMerge [{ - services.radarr = { - enable = true; - user = "mediaserver"; - group = "mediaserver"; - }; - } - - (mkIf cfg.nginx.enable { - luj.nginx.enable = true; - services.nginx.virtualHosts."${cfg.nginx.subdomain}.julienmalka.me" = { - enableACME = true; - forceSSL = true; - locations."/" = { - proxyPass = "http://localhost:${toString port}"; - }; + mkMerge [{ + services.radarr = { + enable = true; + user = cfg.user; + group = cfg.group; }; + } + + (mkIf cfg.nginx.enable { + luj.nginx.enable = true; + services.nginx.virtualHosts."${cfg.nginx.subdomain}.julienmalka.me" = { + enableACME = true; + forceSSL = true; + locations."/" = { + proxyPass = "http://localhost:${toString port}"; + }; + }; + + })]); + - }) - ]); - - } diff --git a/modules/sonarr/default.nix b/modules/sonarr/default.nix index e01e83a..0f29313 100644 --- a/modules/sonarr/default.nix +++ b/modules/sonarr/default.nix @@ -1,41 +1,56 @@ { lib, pkgs, config, ... }: with lib; -let +let cfg = config.luj.sonarr; port = 8989; -in { +in +{ + + options.luj.sonarr = { + + enable = mkEnableOption "activate sonarr service"; + + user = mkOption { + type = types.str; + default = "sonarr"; + description = "User account under which Sonarr runs."; + }; + + group = mkOption { + type = types.str; + default = "sonarr"; + description = "Group under which Sonarr runs."; + }; - options.luj.sonarr = { - enable = mkEnableOption "activate sonarr service"; nginx.enable = mkEnableOption "activate nginx"; nginx.subdomain = mkOption { type = types.str; }; + }; config = mkIf cfg.enable ( - mkMerge [{ - services.sonarr = { - enable = true; - user = "mediaserver"; - group = "mediaserver"; - }; - } - - (mkIf cfg.nginx.enable { - luj.nginx.enable = true; - services.nginx.virtualHosts."${cfg.nginx.subdomain}.julienmalka.me" = { - enableACME = true; - forceSSL = true; - locations."/" = { - proxyPass = "http://localhost:${toString port}"; - }; + mkMerge [{ + services.sonarr = { + enable = true; + user = cfg.user; + group = cfg.group; }; + } + + (mkIf cfg.nginx.enable { + luj.nginx.enable = true; + services.nginx.virtualHosts."${cfg.nginx.subdomain}.julienmalka.me" = { + enableACME = true; + forceSSL = true; + locations."/" = { + proxyPass = "http://localhost:${toString port}"; + }; + }; + + })]); + - }) - ]); - - } diff --git a/modules/transmission/default.nix b/modules/transmission/default.nix index 59620c0..a41b96d 100644 --- a/modules/transmission/default.nix +++ b/modules/transmission/default.nix @@ -1,57 +1,70 @@ { lib, pkgs, config, ... }: with lib; -let +let cfg = config.luj.transmission; port = 9091; -in { +in +{ + + options.luj.transmission = { + enable = mkEnableOption "activate transmission service"; + + user = mkOption { + type = types.str; + default = "transmission"; + description = "User account under which transmission runs."; + }; + + group = mkOption { + type = types.str; + default = "transmission"; + description = "Group under which Transmission runs."; + }; - options.luj.transmission = { - enable = mkEnableOption "activate transmission service"; nginx.enable = mkEnableOption "activate nginx"; nginx.subdomain = mkOption { type = types.str; }; + }; config = mkIf cfg.enable ( - mkMerge [{ + mkMerge [{ - - sops.secrets.transmission = { - owner = "mediaserver"; - format = "binary"; - sopsFile = ../../secrets/transmission-login; - }; - - services.transmission = { - enable = true; - user = "mediaserver"; - group = "mediaserver"; - credentialsFile = "/run/secrets/transmission"; - downloadDirPermissions = "770"; - settings = { - rpc-port = 9091; - download-dir = "/home/mediaserver/downloads/complete/"; - incomplete-dir = "/home/mediaserver/downloads/incomplete/"; - incomplete-dir-enable = true; + sops.secrets.transmission = { + owner = cfg.user; + format = "binary"; + sopsFile = ../../secrets/transmission-login; }; - }; - } - (mkIf cfg.nginx.enable { - luj.nginx.enable = true; - services.nginx.virtualHosts."${cfg.nginx.subdomain}.julienmalka.me" = { - enableACME = true; - forceSSL = true; - locations."/" = { - proxyPass = "http://localhost:${toString port}"; + services.transmission = { + enable = true; + user = cfg.user; + group = cfg.group; + credentialsFile = "/run/secrets/transmission"; + downloadDirPermissions = "770"; + settings = { + rpc-port = 9091; + download-dir = "/home/mediaserver/downloads/complete/"; + incomplete-dir = "/home/mediaserver/downloads/incomplete/"; + incomplete-dir-enable = true; }; }; + } + + (mkIf cfg.nginx.enable { + luj.nginx.enable = true; + services.nginx.virtualHosts."${cfg.nginx.subdomain}.julienmalka.me" = { + enableACME = true; + forceSSL = true; + locations."/" = { + proxyPass = "http://localhost:${toString port}"; + }; + }; + + })]); + - }) - ]); - - }