refactor(nixos): define navidrome systemd service
This commit is contained in:
@@ -5,16 +5,21 @@
|
|||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
writeEnvironmentFile = pkgs.writeShellScript "navidrome-environment" ''
|
configScript = pkgs.writeShellScript "navidrome-config" ''
|
||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
umask 077
|
umask 077
|
||||||
api_key="$(${pkgs.coreutils}/bin/tr -d '\n' < "$CREDENTIALS_DIRECTORY/lastfm-api-key")"
|
api_key="$(${pkgs.coreutils}/bin/tr -d '\n' < "$CREDENTIALS_DIRECTORY/lastfm-api-key")"
|
||||||
secret="$(${pkgs.coreutils}/bin/tr -d '\n' < "$CREDENTIALS_DIRECTORY/lastfm-secret")"
|
secret="$(${pkgs.coreutils}/bin/tr -d '\n' < "$CREDENTIALS_DIRECTORY/lastfm-secret")"
|
||||||
|
|
||||||
cat > /run/navidrome/navidrome.env <<EOF
|
cat > /run/navidrome/navidrome.toml <<EOF
|
||||||
ND_LASTFM_APIKEY=$api_key
|
Address = "0.0.0.0"
|
||||||
ND_LASTFM_SECRET=$secret
|
Port = 4533
|
||||||
|
DataFolder = "${config.modules.services.navidrome.dataDir}"
|
||||||
|
MusicFolder = "${config.modules.services.navidrome.libraryDir}"
|
||||||
|
EnableSharing = true
|
||||||
|
LastFM.ApiKey = "$api_key"
|
||||||
|
LastFM.Secret = "$secret"
|
||||||
EOF
|
EOF
|
||||||
'';
|
'';
|
||||||
in
|
in
|
||||||
@@ -60,28 +65,31 @@ in
|
|||||||
home = config.modules.services.navidrome.dataDir;
|
home = config.modules.services.navidrome.dataDir;
|
||||||
};
|
};
|
||||||
|
|
||||||
services.navidrome = {
|
systemd.services.navidrome = {
|
||||||
enable = true;
|
description = "Navidrome media server";
|
||||||
user = "navidrome";
|
after = [ "network.target" ];
|
||||||
group = "storage";
|
wantedBy = [ "multi-user.target" ];
|
||||||
environmentFile = "/run/navidrome/navidrome.env";
|
serviceConfig = {
|
||||||
openFirewall = true;
|
Type = "simple";
|
||||||
settings = {
|
User = "navidrome";
|
||||||
Address = "0.0.0.0";
|
Group = "storage";
|
||||||
Port = 4533;
|
WorkingDirectory = config.modules.services.navidrome.dataDir;
|
||||||
DataFolder = config.modules.services.navidrome.dataDir;
|
StateDirectory = "navidrome";
|
||||||
MusicFolder = config.modules.services.navidrome.libraryDir;
|
RuntimeDirectory = "navidrome";
|
||||||
EnableSharing = true;
|
RuntimeDirectoryMode = "0700";
|
||||||
|
LoadCredential = [
|
||||||
|
"lastfm-api-key:${config.modules.services.navidrome.lastfmApiKeyFile}"
|
||||||
|
"lastfm-secret:${config.modules.services.navidrome.lastfmSecretFile}"
|
||||||
|
];
|
||||||
|
ExecStartPre = configScript;
|
||||||
|
ExecStart = "${lib.getExe pkgs.navidrome} --configfile /run/navidrome/navidrome.toml";
|
||||||
|
Restart = "on-failure";
|
||||||
|
NoNewPrivileges = true;
|
||||||
|
PrivateTmp = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.navidrome.serviceConfig = {
|
networking.firewall.allowedTCPPorts = [ 4533 ];
|
||||||
ExecStartPre = writeEnvironmentFile;
|
|
||||||
LoadCredential = [
|
|
||||||
"lastfm-api-key:${config.modules.services.navidrome.lastfmApiKeyFile}"
|
|
||||||
"lastfm-secret:${config.modules.services.navidrome.lastfmSecretFile}"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user