From 4f0f634ca1673d430488a39e3253f723981727b0 Mon Sep 17 00:00:00 2001 From: alexion Date: Sat, 12 Sep 2026 20:43:28 -0400 Subject: [PATCH] refactor(nixos): let navidrome service handle secrets --- configs/nixos/guests/navidrome.nix | 39 ++++++++++++-------- configs/nixos/modules/services/navidrome.nix | 35 +++++++++++++++++- 2 files changed, 58 insertions(+), 16 deletions(-) diff --git a/configs/nixos/guests/navidrome.nix b/configs/nixos/guests/navidrome.nix index 7f9ed30..a04c801 100644 --- a/configs/nixos/guests/navidrome.nix +++ b/configs/nixos/guests/navidrome.nix @@ -7,6 +7,8 @@ let serviceConfig = config.containers.navidrome.config.modules.services.navidrome; lastfmApiKeySecret = "services/navidrome/lastfm/api-key"; lastfmSecretSecret = "services/navidrome/lastfm/secret"; + lastfmApiKeyFile = "/run/secrets/${lastfmApiKeySecret}"; + lastfmSecretFile = "/run/secrets/${lastfmSecretSecret}"; hostSecrets = ../secrets + "/${config.networking.hostName}.yaml"; in { @@ -39,7 +41,10 @@ in ]; guests.navidrome = { - interior.modules.services.navidrome.enable = true; + interior.modules.services.navidrome = { + enable = true; + inherit lastfmApiKeyFile lastfmSecretFile; + }; mounts = { ${serviceConfig.dataDir} = { @@ -54,8 +59,12 @@ in group = "storage"; mode = "2770"; }; - ${"/run/secrets/navidrome.env"} = { - file = config.sops.templates."navidrome.env".path; + ${lastfmApiKeyFile} = { + file = config.sops.secrets.${lastfmApiKeySecret}.path; + readOnly = true; + }; + ${lastfmSecretFile} = { + file = config.sops.secrets.${lastfmSecretSecret}.path; readOnly = true; }; }; @@ -68,18 +77,18 @@ in }; sops.secrets = { - ${lastfmApiKeySecret}.sopsFile = hostSecrets; - ${lastfmSecretSecret}.sopsFile = hostSecrets; - }; - - sops.templates."navidrome.env" = { - owner = "root"; - group = "storage"; - mode = "0440"; - content = '' - ND_LASTFM_APIKEY=${config.sops.placeholder.${lastfmApiKeySecret}} - ND_LASTFM_SECRET=${config.sops.placeholder.${lastfmSecretSecret}} - ''; + ${lastfmApiKeySecret} = { + sopsFile = hostSecrets; + owner = "root"; + group = "storage"; + mode = "0440"; + }; + ${lastfmSecretSecret} = { + sopsFile = hostSecrets; + owner = "root"; + group = "storage"; + mode = "0440"; + }; }; }; } diff --git a/configs/nixos/modules/services/navidrome.nix b/configs/nixos/modules/services/navidrome.nix index a65ecfe..3db64cd 100644 --- a/configs/nixos/modules/services/navidrome.nix +++ b/configs/nixos/modules/services/navidrome.nix @@ -1,8 +1,23 @@ { config, lib, + pkgs, ... }: +let + writeEnvironmentFile = pkgs.writeShellScript "navidrome-environment" '' + set -eu + + umask 077 + api_key="$(${pkgs.coreutils}/bin/tr -d '\n' < "$CREDENTIALS_DIRECTORY/lastfm-api-key")" + secret="$(${pkgs.coreutils}/bin/tr -d '\n' < "$CREDENTIALS_DIRECTORY/lastfm-secret")" + + cat > /run/navidrome/navidrome.env <