From 5b65c02b1cb213f3e30a1715e5c2c114cf8eecb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20J=C3=A4ckel?= Date: Fri, 20 Feb 2026 03:55:10 +0100 Subject: [PATCH] music-assistant: bring back airplay support --- .../services/audio/music-assistant.nix | 4 +++ .../mu/music-assistant/cliraop-cliap2.patch | 29 +++++++++++++++++++ pkgs/by-name/mu/music-assistant/package.nix | 14 +++------ 3 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 pkgs/by-name/mu/music-assistant/cliraop-cliap2.patch diff --git a/nixos/modules/services/audio/music-assistant.nix b/nixos/modules/services/audio/music-assistant.nix index 1bef47c20d5a..c4717bb5817f 100644 --- a/nixos/modules/services/audio/music-assistant.nix +++ b/nixos/modules/services/audio/music-assistant.nix @@ -95,6 +95,10 @@ in [ lsof ] + ++ lib.optionals (lib.elem "airplay" cfg.providers) [ + cliairplay + libraop + ] ++ lib.optionals (lib.elem "airplay_receiver" cfg.providers) [ shairport-sync ] diff --git a/pkgs/by-name/mu/music-assistant/cliraop-cliap2.patch b/pkgs/by-name/mu/music-assistant/cliraop-cliap2.patch new file mode 100644 index 000000000000..33b856711eed --- /dev/null +++ b/pkgs/by-name/mu/music-assistant/cliraop-cliap2.patch @@ -0,0 +1,29 @@ +diff --git a/music_assistant/providers/airplay/helpers.py b/music_assistant/providers/airplay/helpers.py +index c5fef7eb..a628622d 100644 +--- a/music_assistant/providers/airplay/helpers.py ++++ b/music_assistant/providers/airplay/helpers.py +@@ -6,6 +6,7 @@ + import os + import platform + import time ++from shutil import which + from typing import TYPE_CHECKING + + from zeroconf import IPVersion +@@ -176,7 +177,6 @@ async def check_binary(cli_path: str) -> str | None: + pass + return None + +- base_path = os.path.join(os.path.dirname(__file__), "bin") + system = platform.system().lower().replace("darwin", "macos") + architecture = platform.machine().lower() + +@@ -188,7 +188,7 @@ async def check_binary(cli_path: str) -> str | None: + raise RuntimeError(f"Unsupported streaming protocol requested: {protocol}") + + if bridge_binary := await check_binary( +- os.path.join(base_path, f"{package}-{system}-{architecture}") ++ which(package) + ): + return bridge_binary + diff --git a/pkgs/by-name/mu/music-assistant/package.nix b/pkgs/by-name/mu/music-assistant/package.nix index 2edf5f216688..c1b94ebc6302 100644 --- a/pkgs/by-name/mu/music-assistant/package.nix +++ b/pkgs/by-name/mu/music-assistant/package.nix @@ -40,11 +40,6 @@ let pythonPath = python.pkgs.makePythonPath providerDependencies; in - -assert - (lib.elem "airplay" providers) - -> throw "music-assistant: airplay support is missing libraop, a library we will not package because it depends on OpenSSL 1.1."; - python.pkgs.buildPythonApplication rec { pname = "music-assistant"; version = "2.7.8"; @@ -69,6 +64,9 @@ python.pkgs.buildPythonApplication rec { # Look up shairport-sync from PATH at runtime ./shairport-sync.patch + # Look up cliraop/cliap2 from PATH at runtime + ./cliraop-cliap2.patch + # Disable interactive dependency resolution, which clashes with the immutable Python environment ./dont-install-deps.patch @@ -95,6 +93,7 @@ python.pkgs.buildPythonApplication rec { --replace-fail "get-mac" "getmac" rm -rv \ + music_assistant/providers/airplay/bin/{cliap2-*,cliraop-*} \ music_assistant/providers/airplay_receiver/bin/{build_binaries.sh,shairport-sync-*} \ music_assistant/providers/spotify/bin ''; @@ -196,11 +195,6 @@ python.pkgs.buildPythonApplication rec { pythonImportsCheck = [ "music_assistant" ]; - postFixup = '' - # binary native code, segfaults when autopatchelf'd, requires openssl 1.1 to build - rm $out/${python3.sitePackages}/music_assistant/providers/airplay/bin/cliraop-* - ''; - passthru = { inherit python