{ config, lib, ... }: let cfg = config.services.navidrome; domain = "music.sorre.internal"; in { services.navidrome = { enable = true; settings = { MusicFolder = "/var/lib/navidrome/music"; DataFolder = "/var/lib/navidrome/data"; BaseUrl = "https://${domain}"; Port = 4533; Address = "127.0.0.1"; openFirewall = false; }; }; environment.systemPackages = lib.mkIf cfg.enable [ cfg.finalPackage ]; systemd.services.backup-navidrome = lib.mkIf cfg.enable { serviceConfig = { Type = "exec"; User = cfg.user; Group = cfg.group; StateDirectory = "backups/navidrome"; StateDirectoryMode = "0700"; Umask = "077"; }; description = "Back up navidrome data"; path = [ cfg.finalPackage ]; enableStrictShellChecks = true; script = '' #!/usr/bin/env bash set -euo pipefail navidrome backup create --backup-dir "$STATE_DIRECTORY" \ --datafolder "${cfg.settings.DataFolder}" navidrome backup prune --backup-dir "$STATE_DIRECTORY" --keep-count 5 ''; }; systemd.timers.backup-navidrome = lib.mkIf cfg.enable { description = "Back up navidrome data every morning"; timerConfig.OnCalendar = "*-*-* 05:00:00"; wantedBy = [ "timers.target" ]; }; }