{ config, pkgs, lib, ... }: let cfg = config.my.services.navidrome; in { options.my.services.navidrome = with lib; { enable = mkEnableOption "Navidrome Music Server"; musicFolder = mkOption { type = types.str; example = "/data/fast/music"; description = "Music folder"; }; }; config = lib.mkIf cfg.enable { services.navidrome = { enable = true; settings = { MusicFolder = cfg.musicFolder; Address = "0.0.0.0"; httpPort = "4533"; }; }; services.restic.backups = { navidrome = { paths = [ "/var/lib/navidrome/" ]; repository = "/data/slow/backups/systems"; passwordFile = config.age.secrets.restic-repo-systems.path; timerConfig = { OnCalendar = "00:35"; }; initialize = true; extraBackupArgs = [ "--tag navidrome" ]; pruneOpts = [ "--keep-daily 7" "--keep-weekly 4" ]; }; }; networking.firewall.allowedTCPPorts = [ 4533 ]; }; }