commit 9de1d6e0363d593d2e05a92445a84de1163a92c3 parent 827e88ec62027d35d1932082a6a8db21e86156c0 Author: Chris <chris@echoz.io> Date: Fri, 28 Aug 2026 06:37:39 +0200 feat(ws): configure pipewire directly instead of using wireplumber Diffstat:
| M | hosts/ws/pipewire.nix | | | 130 | ++++++++++++++++++++++++++++++++++++++++++++----------------------------------- |
1 file changed, 73 insertions(+), 57 deletions(-)
diff --git a/hosts/ws/pipewire.nix b/hosts/ws/pipewire.nix @@ -10,6 +10,79 @@ }; }; + services.pipewire.extraConfig.pipewire."60-loopbacks"."context.modules" = [ + { + name = "libpipewire-module-loopback"; + args = { + "audio.position" = [ + "FL" + "FR" + ]; + "capture.props" = { + "media.class" = "Audio/Sink"; + "node.name" = "capture.master"; + "node.description" = "Master"; + "node.latency" = "1024/44100"; + "audio.rate" = 44100; + "audio.channels" = 2; + "audio.position" = [ + "FL" + "FR" + ]; + "priority.session" = 6000; + "priority.driver" = 6000; + }; + "playback.props" = { + "node.name" = "playback.master"; + "node.description" = "Master"; + "node.latency" = "1024/44100"; + "audio.rate" = 44100; + "audio.channels" = 2; + "audio.position" = [ + "AUX0" + "AUX1" + ]; + "target.object" = "alsa_output.usb-DENON_DJ_DENON_DJ_MC7000_201603-00.pro-output-0"; + }; + }; + } + { + name = "libpipewire-module-loopback"; + args = { + "audio.position" = [ + "FL" + "FR" + ]; + "capture.props" = { + "media.class" = "Audio/Sink"; + "node.name" = "capture.headphones"; + "node.description" = "Headphones"; + "node.latency" = "1024/44100"; + "audio.rate" = 44100; + "audio.channels" = 2; + "audio.position" = [ + "FL" + "FR" + ]; + "priority.session" = 7000; + "priority.driver" = 7000; + }; + "playback.props" = { + "node.name" = "playback.headphones"; + "node.description" = "Headphones"; + "node.latency" = "1024/44100"; + "audio.rate" = 44100; + "audio.channels" = 2; + "audio.position" = [ + "AUX2" + "AUX3" + ]; + "target.object" = "alsa_output.usb-DENON_DJ_DENON_DJ_MC7000_201603-00.pro-output-0"; + }; + }; + } + ]; + services.pipewire.wireplumber.extraConfig = { general = { "wireplumber.settings" = { @@ -94,63 +167,6 @@ actions.update-props."node.disabled" = true; } ]; - loopback = { - "wireplumber.components" = lib.singleton { - name = "loopback.lua"; - type = "script/lua"; - provides = "custom.loopback"; - }; - "wireplumber.profiles".main."custom.loopback" = "required"; - }; }; - services.pipewire.wireplumber.extraScripts."loopback.lua" = '' - masterOutput = LocalModule("libpipewire-module-loopback", [[ - audio.position = [ FL FR ] - capture.props = { - media.class = Audio/Sink - node.name = "capture.master" - node.description = "Master" - node.latency = 1024/44100 - audio.rate = 44100 - audio.channels = 2 - audio.position = [ FL FR ] - priority.session = 6000 - priority.driver = 6000 - } - playback.props = { - node.name = "playback.master" - node.description = "Master" - node.latency = 1024/44100 - audio.rate = 44100 - audio.channels = 2 - audio.position = [ AUX0 AUX1 ] - target.object = "alsa_output.usb-DENON_DJ_DENON_DJ_MC7000_201603-00.pro-output-0" - } - ]]) - - headphoneOutput = LocalModule("libpipewire-module-loopback", [[ - audio.position = [ FL FR ] - capture.props = { - media.class = Audio/Sink - node.name = "capture.headphones" - node.description = "Headphones" - node.latency = 1024/44100 - audio.rate = 44100 - audio.channels = 2 - audio.position = [ FL FR ] - priority.session = 7000 - priority.driver = 7000 - } - playback.props = { - node.name = "playback.headphones" - node.description = "Headphones" - node.latency = 1024/44100 - audio.rate = 44100 - audio.channels = 2 - audio.position = [ AUX2 AUX3 ] - target.object = "alsa_output.usb-DENON_DJ_DENON_DJ_MC7000_201603-00.pro-output-0" - } - ]]) - ''; }