diff --git a/flake.nix b/flake.nix index c1d709c..da923e7 100644 --- a/flake.nix +++ b/flake.nix @@ -132,6 +132,7 @@ metrics = "metrics.${baseName}"; minecraft = "minecraft.${baseName}"; n8n = "n8n.${baseName}"; + navidrome = "music.${baseName}"; notifications = "ntfy.${baseName}"; paperless = "paper.${baseName}"; photos = "photos.${baseName}"; diff --git a/platforms/nixos/modules/nmasur/presets/services/arr/arr.nix b/platforms/nixos/modules/nmasur/presets/services/arr/arr.nix index 15bd0f0..2c9d5aa 100644 --- a/platforms/nixos/modules/nmasur/presets/services/arr/arr.nix +++ b/platforms/nixos/modules/nmasur/presets/services/arr/arr.nix @@ -27,6 +27,11 @@ let url = "localhost:8989"; apiKey = config.secrets.sonarrApiKey.dest; }; + lidarr = { + exportarrPort = "9712"; + url = "localhost:8686"; + apiKey = config.secrets.lidarrApiKey.dest; + }; prowlarr = { exportarrPort = "9709"; url = "localhost:9696"; @@ -78,6 +83,9 @@ in readarr = { enable = true; }; + lidarr = { + enable = true; + }; }; # Allows shared group to read/write the sabnzbd directory @@ -133,6 +141,20 @@ in } ]; } + { + match = [ + { + host = [ hostnames.download ]; + path = [ "/lidarr*" ]; + } + ]; + handle = [ + { + handler = "reverse_proxy"; + upstreams = [ { dial = arrConfig.lidarr.url; } ]; + } + ]; + } { match = [ { @@ -252,6 +274,11 @@ in dest = "/var/private/sonarr-api"; prefix = "API_KEY="; }; + secrets.lidarrApiKey = { + source = ./lidarr-api-key.age; + dest = "/var/private/lidarr-api"; + prefix = "API_KEY="; + }; secrets.prowlarrApiKey = { source = ./prowlarr-api-key.age; dest = "/var/private/prowlarr-api"; diff --git a/platforms/nixos/modules/nmasur/presets/services/arr/lidarr-api-key.age b/platforms/nixos/modules/nmasur/presets/services/arr/lidarr-api-key.age new file mode 100644 index 0000000..dcc7605 --- /dev/null +++ b/platforms/nixos/modules/nmasur/presets/services/arr/lidarr-api-key.age @@ -0,0 +1,17 @@ +-----BEGIN AGE ENCRYPTED FILE----- +YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBjUGJG +dDZiN3RkMzV2WlFUd3Vsam5IV3ZqajN2VFVvdUFiNFVIdVZRZzE0CkplWlBrRndG +SEIxa0pGaFAzWmFEOGlIUTM2K2I0VWUyQ1pKbVcvd1I5UDAKLT4gc3NoLWVkMjU1 +MTkgWXlTVU1RIFRuVXp3dTNHaDhWNTVmN2tLd1FXaUttT1VqL2I1dktWaW45VnN2 +TlVZd2MKYlpEdWFJNmRtNWcxMDVndExIY21icjY2c252QmJnekorNnFnZHRCcHQr +dwotPiBzc2gtZWQyNTUxOSBuanZYNUEgd3hZNDZwWDg0UnFlNndqazFNNDB0bkxx +RTVTamR1Nk51VkREVVlRTjEybwpGVXJEUFFuYXpEQzRHeWJqRTMrUUpIYmhtT2NY +SUQyeGwrYjBKdW9ucThjCi0+IHNzaC1lZDI1NTE5IENxSU9VQSBVdFB6ZndMb3Zx +dTV5L2Z1Nk9rQVRHWkozcG01cW9zZUFTUW5HaDV1TWtvCnE4MUtTV0laalIwbVNJ +NlU0K0JJcGMyN3ZSVXpVU1BteDVIVU9BYU9ZeG8KLT4gc3NoLWVkMjU1MTkgejFP +Y1p3IGhCbWhHbG9WWU9CR3RkTVEyNUE1akM3Q0hGZEx1cURSRitIbi9vZXRMZ3cK +clR6bjljTU9FS0UzdC9seDlad1E1aHZ5QXNiQmRWWDc5L0NQSkRsVUYyNAotLS0g +ZEMwTE83MWxYMUYzWVdiSXNxM1BoOEJNMzJHS3o4M1NzWXMyQWZwR3dDVQpp8Lb0 +E1vJN/UjSubXuFGT9NqLCYhc2n20m4v6sM7h4HYRh10pngyxapyN9DvUvY0maPpm +S9afVD6V/XjxOUZ2lA== +-----END AGE ENCRYPTED FILE----- diff --git a/platforms/nixos/modules/nmasur/presets/services/navidrome.nix b/platforms/nixos/modules/nmasur/presets/services/navidrome.nix new file mode 100644 index 0000000..da5a523 --- /dev/null +++ b/platforms/nixos/modules/nmasur/presets/services/navidrome.nix @@ -0,0 +1,43 @@ +# Navidrome is a self-hosted music streaming service. This means I can play +# files from my server to devices. + +{ config, lib, ... }: + +let + inherit (config.nmasur.settings) hostnames; + cfg = config.nmasur.presets.services.navidrome; +in + +{ + + options.nmasur.presets.services.navidrome.enable = lib.mkEnableOption "Navidrome music streaming"; + + config = lib.mkIf cfg.enable { + + services.navidrome = { + enable = true; + settings = { + MusicFolder = "/data/audio/music"; + EnableInsightsCollector = false; + }; + }; + + # Configure Cloudflare DNS to point to this machine + services.cloudflare-dyndns.domains = [ hostnames.navidrome ]; + + # Allow web traffic to Caddy + nmasur.presets.services.caddy.routes = [ + { + match = [ { host = [ hostnames.navidrome ]; } ]; + handle = [ + { + handler = "reverse_proxy"; + upstreams = [ + { dial = "localhost:${builtins.toString config.services.navidrome.settings.Port}"; } + ]; + } + ]; + } + ]; + }; +} diff --git a/platforms/nixos/modules/nmasur/profiles/nas.nix b/platforms/nixos/modules/nmasur/profiles/nas.nix index e86c9a7..d07411b 100644 --- a/platforms/nixos/modules/nmasur/profiles/nas.nix +++ b/platforms/nixos/modules/nmasur/profiles/nas.nix @@ -31,6 +31,7 @@ in immich.enable = lib.mkDefault true; jellyfin.enable = lib.mkDefault true; litestream.enable = lib.mkDefault true; + navidrome.enable = lib.mkDefault true; nextcloud.enable = lib.mkDefault true; nix-autoupgrade.enable = lib.mkDefault false; # Off by default for NAS paperless.enable = lib.mkDefault true; diff --git a/platforms/nixos/modules/nmasur/profiles/shared-media.nix b/platforms/nixos/modules/nmasur/profiles/shared-media.nix index cec70f2..2aa4154 100644 --- a/platforms/nixos/modules/nmasur/profiles/shared-media.nix +++ b/platforms/nixos/modules/nmasur/profiles/shared-media.nix @@ -25,6 +25,7 @@ in audiobookshelf.group = "shared"; bazarr.group = "shared"; jellyfin.group = "shared"; + lidarr.group = "shared"; radarr.group = "shared"; readarr.group = "shared"; sabnzbd.group = "shared";