{ config, lib, ... }: let cfg = config.modules.services.navidrome; in { options.modules.services.navidrome = { enable = lib.mkEnableOption "Navidrome"; dataDir = lib.mkOption { type = lib.types.str; default = "/var/lib/navidrome"; readOnly = true; description = "Guest path where Navidrome stores its data folder."; }; libraryDir = lib.mkOption { type = lib.types.str; default = "/music"; readOnly = true; description = "Guest path where Navidrome reads its library folder."; }; }; config = lib.mkMerge [ { registry."stable-uid".${config.networking.hostName}.navidrome = 20004; } (lib.mkIf cfg.enable { users.users.navidrome = { isSystemUser = true; uid = config.registry."stable-uid".${config.networking.hostName}.navidrome; group = "storage"; home = cfg.dataDir; }; services.navidrome = { enable = true; user = "navidrome"; group = "storage"; openFirewall = true; settings = { Address = "0.0.0.0"; Port = 4533; DataFolder = cfg.dataDir; MusicFolder = cfg.libraryDir; EnableSharing = true; }; }; }) ]; }