0
0
Fork 0
mirror of https://github.com/NixOS/nixpkgs.git synced 2025-07-14 06:00:33 +03:00

nixos/navidrome: ensure data & cache dirs exist with valid permissions

This commit is contained in:
nu-nu-ko 2024-03-01 12:56:38 +13:00 committed by nuko
parent ffc0d8bf58
commit 7519d230b5
No known key found for this signature in database

View file

@ -6,11 +6,7 @@
}: }:
let let
inherit (lib) inherit (lib) mkEnableOption mkPackageOption mkOption;
mkEnableOption
mkPackageOption
mkOption
;
inherit (lib.types) bool str; inherit (lib.types) bool str;
cfg = config.services.navidrome; cfg = config.services.navidrome;
settingsFormat = pkgs.formats.json { }; settingsFormat = pkgs.formats.json { };
@ -58,9 +54,21 @@ in
config = config =
let let
inherit (lib) mkIf optional getExe; inherit (lib) mkIf optional getExe;
WorkingDirectory = "/var/lib/navidrome";
in in
mkIf cfg.enable { mkIf cfg.enable {
systemd.services.navidrome = { systemd = {
tmpfiles.settings.navidromeDirs = {
"${cfg.settings.DataFolder or WorkingDirectory}"."d" = {
mode = "700";
inherit (cfg) user group;
};
"${cfg.settings.CacheFolder or (WorkingDirectory + "/cache")}"."d" = {
mode = "700";
inherit (cfg) user group;
};
};
services.navidrome = {
description = "Navidrome Media Server"; description = "Navidrome Media Server";
after = [ "network.target" ]; after = [ "network.target" ];
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
@ -71,11 +79,13 @@ in
User = cfg.user; User = cfg.user;
Group = cfg.group; Group = cfg.group;
StateDirectory = "navidrome"; StateDirectory = "navidrome";
WorkingDirectory = "/var/lib/navidrome"; inherit WorkingDirectory;
RuntimeDirectory = "navidrome"; RuntimeDirectory = "navidrome";
RootDirectory = "/run/navidrome"; RootDirectory = "/run/navidrome";
ReadWritePaths = ""; ReadWritePaths = "";
BindPaths = optional (cfg.settings ? DataFolder) cfg.settings.DataFolder; BindPaths =
optional (cfg.settings ? DataFolder) cfg.settings.DataFolder
++ optional (cfg.settings ? CacheFolder) cfg.settings.CacheFolder;
BindReadOnlyPaths = [ BindReadOnlyPaths = [
# navidrome uses online services to download additional album metadata / covers # navidrome uses online services to download additional album metadata / covers
"${ "${
@ -111,6 +121,7 @@ in
ProtectHostname = true; ProtectHostname = true;
}; };
}; };
};
users.users = mkIf (cfg.user == "navidrome") { users.users = mkIf (cfg.user == "navidrome") {
navidrome = { navidrome = {