diff --git a/nixos/modules/services/audio/music-assistant.nix b/nixos/modules/services/audio/music-assistant.nix index 6ff098a67723..505e57c163e9 100644 --- a/nixos/modules/services/audio/music-assistant.nix +++ b/nixos/modules/services/audio/music-assistant.nix @@ -107,13 +107,17 @@ in ]; }; - services.avahi = lib.mkIf (lib.elem "airplay_receiver" cfg.providers) { - enable = true; - openFirewall = lib.mkIf cfg.openFirewall true; - publish = { + services = { + avahi = lib.mkIf (lib.elem "airplay_receiver" cfg.providers) { enable = true; - userServices = true; + openFirewall = lib.mkIf cfg.openFirewall true; + publish = { + enable = true; + userServices = true; + }; }; + + music-assistant.providers = cfg.package.providersBuiltins; }; systemd.services.music-assistant = { diff --git a/pkgs/by-name/mu/music-assistant/package.nix b/pkgs/by-name/mu/music-assistant/package.nix index 1adda47f84a0..3494bc89cdce 100644 --- a/pkgs/by-name/mu/music-assistant/package.nix +++ b/pkgs/by-name/mu/music-assistant/package.nix @@ -24,7 +24,8 @@ let } ); - providerPackages = (import ./providers.nix).providers; + providersMeta = import ./providers.nix; + providerPackages = providersMeta.providers; providerNames = lib.attrNames providerPackages; providerDependencies = lib.concatMap ( provider: (providerPackages.${provider} pythonPackages) @@ -210,6 +211,7 @@ pythonPackages.buildPythonApplication rec { providerPackages providerNames ; + providersBuiltins = providersMeta.builtins; tests = nixosTests.music-assistant; }; diff --git a/pkgs/by-name/mu/music-assistant/update-providers.py b/pkgs/by-name/mu/music-assistant/update-providers.py index 1e29491f471c..c90eae86df44 100755 --- a/pkgs/by-name/mu/music-assistant/update-providers.py +++ b/pkgs/by-name/mu/music-assistant/update-providers.py @@ -24,6 +24,11 @@ TEMPLATE = """# Do not edit manually, run ./update-providers.py { version = "{{ version }}"; + builtins = [ +{%- for builtin in builtins | sort %} + "{{ builtin }}" +{%- endfor %} + ]; providers = { {%- for provider in providers | sort(attribute='domain') %} {{ provider.domain }} = {% if provider.available %}ps: with ps;{% else %}ps:{% endif %} [ @@ -197,7 +202,7 @@ class Provider: return hash(self.domain) -async def resolve_providers(manifests) -> Set: +async def resolve_providers(manifests) -> tuple[Set, Set]: errors = [] providers = set() for manifest in manifests: @@ -227,22 +232,27 @@ async def resolve_providers(manifests) -> Set: if errors: print("\n - ", end="") print("\n - ".join(errors)) - return providers + + builtins = {manifest.domain for manifest in manifests if manifest.builtin} + + return providers, builtins -def render(outpath: str, version: str, providers: Set): +def render(outpath: str, version: str, providers: Set, builtins: Set): env = Environment() template = env.from_string(TEMPLATE) - template.stream(version=version, providers=providers).dump(outpath) + template.stream(version=version, providers=providers, builtins=builtins).dump( + outpath + ) async def main(): version: str = cast(str, await Nix.eval("music-assistant.version")) manifests = await get_provider_manifests(version) - providers = await resolve_providers(manifests) + providers, builtins = await resolve_providers(manifests) outpath = os.path.join(ROOT, "pkgs/by-name/mu/music-assistant/providers.nix") - render(outpath, version, providers) + render(outpath, version, providers, builtins) run_sync(["nixfmt", outpath])