{ config, lib, ... }: let cfg = config.modules.services.navidrome; in { options.modules.services.navidrome = { enable = lib.mkEnableOption "Navidrome"; dataFolder = lib.mkOption { type = lib.types.str; default = "/var/lib/navidrome"; readOnly = true; description = "Path for Navidrome's `DataFolder` setting."; }; musicFolder = lib.mkOption { type = lib.types.str; default = "/music"; readOnly = true; description = "Path for Navidrome's `MusicFolder` setting."; }; environmentFile = lib.mkOption { type = lib.types.path; default = "/run/secrets/navidrome.env"; readOnly = true; description = "Path to Navidrome's environment file."; }; }; 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.dataFolder; }; services.navidrome = { enable = true; user = "navidrome"; group = "storage"; openFirewall = true; inherit (cfg) environmentFile; settings = { Address = "0.0.0.0"; Port = 4533; DataFolder = cfg.dataFolder; MusicFolder = cfg.musicFolder; EnableSharing = true; }; }; }) ]; }