Added a (tiny) bit of modularity in the mediaserver module

This commit is contained in:
Julien Malka 2021-12-29 10:40:31 +01:00
parent 08df42e079
commit 8e4ddf4ef0
No known key found for this signature in database
GPG key ID: 3C68E13964FEA07F
6 changed files with 213 additions and 133 deletions

View file

@ -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}";
};
};
})]);
})
]);
}

View file

@ -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}";
};
};
})]);
})
]);
}

View file

@ -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";
};

View file

@ -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}";
};
};
})]);
})
]);
}

View file

@ -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}";
};
};
})]);
})
]);
}

View file

@ -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}";
};
};
})]);
})
]);
}