{ config, lib, ... }: { 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 config.modules.services.navidrome.enable { users.users.navidrome = { isSystemUser = true; uid = config.registry."stable-uid".${config.networking.hostName}.navidrome; group = "storage"; home = config.modules.services.navidrome.dataDir; }; services.navidrome = { enable = true; user = "navidrome"; group = "storage"; environmentFile = "/run/secrets/navidrome.env"; openFirewall = true; settings = { Address = "0.0.0.0"; Port = 4533; DataFolder = config.modules.services.navidrome.dataDir; MusicFolder = config.modules.services.navidrome.libraryDir; EnableSharing = true; }; }; }) ]; }