{ config, lib, pkgs, ... }: { home.packages = with pkgs; [ pwvucontrol sonusmix ]; home.file."${config.xdg.configHome}/pipewire/pipewire.conf.d/10-chloe-raop.conf".text = let raopSink = ipAddr: name: { name = "libpipewire-module-raop-sink"; args = { "raop.ip" = ipAddr; "raop.port" = 7000; "raop.name" = name; "raop.encryption.type" = "auth_setup"; }; }; in builtins.toJSON { "context.modules" = [ { name = "libpipewire-module-zeroconf-discover"; } { name = "libpipewire-module-raop-discover"; args."roap.discover-local" = true; } (raopSink "192.168.2.63" "Living Room") (raopSink "192.168.2.57" "Bed Room") (raopSink "192.168.2.54" "Datacenter") (raopSink "192.168.2.80" "Kitchen") { name = "libpipewire-module-combine-stream"; args = { "node.name" = "combine_sink"; "node.description" = "Multi-Room"; "combine.mode" = "sink"; "combine.latency-compensate" = false; "stream.rules" = [ { actions."create-stream" = { }; matches = [ { "media.class" = "Audio/Sink"; "node.name" = "~raop_sink.*"; } ]; } ]; }; } ]; }; }