{ config, lib, pkgs, ... }: let inherit (lib) types; cfg = config.zpha.services.pipewire; in { options.zpha.services.pipewire.enable = lib.mkEnableOption "pipewire"; config = lib.mkIf cfg.enable { users.users.zaphyra.maid = { packages = with pkgs; [ pwvucontrol unstable.crosspipe #pipemixer unstable.wiremix ]; file.xdg_config."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" = "raop_multi_room"; # "node.description" = "Multi-Room"; # "combine.mode" = "sink"; # "combine.latency-compensate" = false; # "combine.on-demand-streams" = true; # "stream.rules" = [ # { # actions."create-stream" = { }; # matches = [ # { # "media.class" = "Audio/Sink"; # "node.name" = "~raop_sink.*"; # } # ]; # } # ]; # }; # } ]; }; }; }; }