From 8c72ff433c23afd62da12b091f572fa2fc7b549e Mon Sep 17 00:00:00 2001 From: "Giulio De Pasquale (aider)" Date: Sat, 26 Apr 2025 16:53:16 +0100 Subject: [PATCH] feat: add jellyseer, lidarr, navidrome, and nzbget service modules --- modules/services/default.nix | 4 ++ modules/services/jellyseer/default.nix | 35 +++++++++++ modules/services/lidarr/default.nix | 38 ++++++++++++ modules/services/navidrome/default.nix | 83 ++++++++++++++++++++++++++ modules/services/nzbget/default.nix | 38 ++++++++++++ 5 files changed, 198 insertions(+) create mode 100644 modules/services/jellyseer/default.nix create mode 100644 modules/services/lidarr/default.nix create mode 100644 modules/services/navidrome/default.nix create mode 100644 modules/services/nzbget/default.nix diff --git a/modules/services/default.nix b/modules/services/default.nix index 46575e9..0e526b1 100644 --- a/modules/services/default.nix +++ b/modules/services/default.nix @@ -4,6 +4,10 @@ ./gitea ./immich ./jellyfin + ./jellyseer + ./lidarr + ./navidrome + ./nzbget ./prowlarr ./radarr ./sonarr diff --git a/modules/services/jellyseer/default.nix b/modules/services/jellyseer/default.nix new file mode 100644 index 0000000..85ff8c6 --- /dev/null +++ b/modules/services/jellyseer/default.nix @@ -0,0 +1,35 @@ +{ config, lib, pkgs, ... }: + +let + inherit (lib) mkIf; + + cfg = config.pepe.services.jellyseer; +in +{ + options.pepe.services.jellyseer = with lib; { + enable = mkEnableOption "Enable jellyseer"; + package = mkPackageOption pkgs "jellyseerr" { }; + domain = mkOption { + type = types.str; + default = null; + }; + }; + + config = mkIf cfg.enable { + services.jellyseerr = { + enable = true; + package = cfg.package; + }; + + architect.vhost.${cfg.domain} = with config.architect.networks; { + dnsInterfaces = [ "tailscale" "lan" ]; + locations."/" = { + port = config.services.jellyseerr.port; + allowLan = true; + allow = [ + tailscale.net + ]; + }; + }; + }; +} diff --git a/modules/services/lidarr/default.nix b/modules/services/lidarr/default.nix new file mode 100644 index 0000000..c608bff --- /dev/null +++ b/modules/services/lidarr/default.nix @@ -0,0 +1,38 @@ +{ config, lib, pkgs, ... }: + +let + inherit (lib) mkIf; + + cfg = config.pepe.services.lidarr; +in +{ + options.pepe.services.lidarr = with lib; { + enable = mkEnableOption "Enable lidarr"; + package = mkPackageOption pkgs "lidarr" { }; + domain = mkOption { + type = types.str; + default = null; + }; + }; + + config = mkIf cfg.enable { + services.lidarr = { + enable = true; + package = cfg.package; + group = "media"; + }; + + architect.vhost.${cfg.domain} = with config.architect.networks; { + dnsInterfaces = [ "lan" "tailscale" ]; + locations."/" = { + port = 8686; + allowLan = true; + allow = [ + tailscale.net + ]; + }; + }; + + pepe.core.media.groupMembers = mkIf config.pepe.core.media.enable [ "lidarr" ]; + }; +} diff --git a/modules/services/navidrome/default.nix b/modules/services/navidrome/default.nix new file mode 100644 index 0000000..7ab7309 --- /dev/null +++ b/modules/services/navidrome/default.nix @@ -0,0 +1,83 @@ +{ config, lib, pkgs, ... }: + +let + inherit (lib) mkIf; + + cfg = config.pepe.services.navidrome; +in +{ + options.pepe.services.navidrome = with lib; { + enable = mkEnableOption "Enable navidrome"; + package = mkPackageOption pkgs "navidrome" { }; + domain = mkOption { + type = types.str; + default = null; + }; + musicFolder = mkOption { + type = types.str; + default = "/media/Music"; + description = "Path to the music library"; + }; + beetsConfig = mkOption { + type = types.str; + default = "/media/beets.conf"; + description = "Path to the beets configuration file"; + }; + settings = mkOption { + type = types.attrs; + default = {}; + description = "Additional settings for Navidrome"; + }; + }; + + config = mkIf cfg.enable { + services.navidrome = { + enable = true; + package = cfg.package; + settings = { + MusicFolder = cfg.musicFolder; + LastFM.enable = true; + LastFM.ApiKey = "5cef5cb5f9d31326b97d0f929ca9cf20"; + LastFM.Secret = "d1296896126f4caae47407aecf080b25"; + Spotify.ID = "3900c029b4f34f3fb61d554dda64794d"; + Spotify.Secret = "d931ce5575a9401aa5ff8d37558cca0a"; + EnableGravatar = true; + LogLevel = "WARN"; + } // cfg.settings; + }; + + architect.vhost.${cfg.domain} = { + dnsInterfaces = [ "lan" "tailscale" ]; + locations."/" = { + port = 4533; + allowLan = true; + allowWAN = true; + }; + }; + + systemd.services = { + "beets-update" = { + enable = true; + before = [ "beets-import.service" ]; + serviceConfig = { + Type = "oneshot"; + ExecStart = "${pkgs.beets}/bin/beet -c ${cfg.beetsConfig} update"; + }; + }; + + "beets-import" = { + enable = true; + path = [ pkgs.imagemagick ]; + requires = [ "beets-update.service" ]; + after = [ "beets-update.service" ]; + serviceConfig = { + Type = "oneshot"; + ExecStart = "${pkgs.beets}/bin/beet -c ${cfg.beetsConfig} import --flat -q ${cfg.musicFolder}"; + }; + startAt = "weekly"; + }; + }; + + pepe.core.media.groupMembers = mkIf config.pepe.core.media.enable [ "navidrome" ]; + }; +} diff --git a/modules/services/nzbget/default.nix b/modules/services/nzbget/default.nix new file mode 100644 index 0000000..72d8d96 --- /dev/null +++ b/modules/services/nzbget/default.nix @@ -0,0 +1,38 @@ +{ config, lib, pkgs, ... }: + +let + inherit (lib) mkIf; + + cfg = config.pepe.services.nzbget; +in +{ + options.pepe.services.nzbget = with lib; { + enable = mkEnableOption "Enable nzbget"; + package = mkPackageOption pkgs "nzbget" { }; + domain = mkOption { + type = types.str; + default = null; + }; + }; + + config = mkIf cfg.enable { + services.nzbget = { + enable = true; + package = cfg.package; + group = "media"; + }; + + architect.vhost.${cfg.domain} = with config.architect.networks; { + dnsInterfaces = [ "tailscale" "lan" ]; + locations."/" = { + port = 6789; + allowLan = true; + allow = [ + tailscale.net + ]; + }; + }; + + pepe.core.media.groupMembers = mkIf config.pepe.core.media.enable [ "nzbget" ]; + }; +}