{ config, pkgs, ... }: { services.navidrome = { enable = true; settings = { MusicFolder = "/mnt/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 = "/mnt/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 ''; }; }