clan/machines/moritz-server/navidrome.nix
2025-08-26 20:15:17 +02:00

85 lines
2.1 KiB
Nix

{
config,
pkgs,
...
}: {
services.navidrome = {
enable = true;
settings = {
MusicFolder = "/data/music/tagged";
DataFolder = "/var/lib/navidrome";
};
};
services.nginx = {
virtualHosts = {
"music.moritz.place" = {
forceSSL = true;
useACMEHost = "any.moritz.place";
locations."/" = {
proxyPass = "http://${config.services.navidrome.settings.Address}:${builtins.toString config.services.navidrome.settings.Port}";
};
};
};
};
home-manager.users.moritz.programs.beets = {
enable = true;
settings = {
directory = config.services.navidrome.settings.MusicFolder;
library = "/data/music/beet/musiclibrary.db";
plugins = [
"autobpm"
"mbsync"
"badfiles"
"chroma"
"duplicates"
"lyrics"
"replaygain"
];
musicbrainz.genres = true;
lyrics.synced = true;
replaygain.backend = "ffmpeg";
};
};
services.borgbackup.jobs = {
music = {
paths = [
config.services.navidrome.settings.MusicFolder
config.services.navidrome.settings.DataFolder
config.home-manager.users.moritz.programs.beets.settings.library
];
repo = "u461386-sub1@u461386.your-storagebox.de:music";
doInit = true;
encryption = {
mode = "repokey";
passCommand = "cat ${config.clan.core.vars.generators.borg-music.files.password.path}";
};
environment = {BORG_RSH = "ssh -i ${config.clan.core.vars.generators.borg-music.files."ssh.id_ed25519".path} -p 23";};
compression = "auto,zstd";
startAt = "hourly";
persistentTimer = true;
prune.keep = {
within = "1d"; # Keep all archives from the last day
daily = 7;
weekly = 3;
monthly = 3;
};
};
};
clan.core.vars.generators.borg-music = {
prompts.password.persist = true;
files."ssh.id_ed25519" = {};
files."ssh.id_ed25519.pub".secret = false;
runtimeInputs = [
pkgs.coreutils
pkgs.openssh
];
script = ''
ssh-keygen -t ed25519 -N "" -f "$out"/ssh.id_ed25519
'';
};
}