music-assistant: track builtin providers to provide a smoother out of the box experience

Also see https://github.com/music-assistant/models/blob/1.1.119/music_assistant_models/provider.py#L35
This commit is contained in:
Sandro Jäckel
2026-06-29 17:39:32 +02:00
parent fd01878563
commit 6d15905968
3 changed files with 28 additions and 12 deletions
@@ -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 = {
+3 -1
View File
@@ -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;
};
@@ -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])