Set up combined-sink / fan-out output routing — e.g. "when the Jabra is connected, also play audio through it without changing the default speakers". Use for the case the GUI can't handle: simultaneous output to multiple sinks, or conditional routing tied to device connect state.
npx claudepluginhub danielrosehill/claude-code-plugins --plugin claude-pipewire-skillsThis skill uses the workspace's default tool permissions.
Pipewire's GUI mixers (pavucontrol, plasma-pa) only let you pick one default output. For "play to A *and* B" or "when device X connects, also send audio there", you need a combined sink or a Wireplumber rule.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Checks Next.js compilation errors using a running Turbopack dev server after code edits. Fixes actionable issues before reporting complete. Replaces `next build`.
Guides code writing, review, and refactoring with Karpathy-inspired rules to avoid overcomplication, ensure simplicity, surgical changes, and verifiable success criteria.
Share bugs, ideas, or general feedback.
Pipewire's GUI mixers (pavucontrol, plasma-pa) only let you pick one default output. For "play to A and B" or "when device X connects, also send audio there", you need a combined sink or a Wireplumber rule.
Create a Pipewire combined sink that fans out to multiple physical sinks. Define it in ~/.config/pipewire/pipewire.conf.d/51-combine-sink.conf:
context.modules = [
{ name = libpipewire-module-combine-stream
args = {
combine.mode = sink
node.name = combined_speakers_and_jabra
node.description = "Speakers + Jabra"
combine.props = {
audio.position = [ FL FR ]
}
stream.props = {}
stream.rules = [
{
matches = [
{ node.name = "alsa_output.pci-0000_00_1f.3.analog-stereo" }
{ node.name = "~alsa_output.usb-Jabra.*" }
]
actions = { create-stream = {} }
}
]
}
}
]
Then systemctl --user restart pipewire wireplumber and select the combined sink as default with wpctl set-default.
Use Wireplumber Lua scripting (~/.config/wireplumber/scripts/) to react to a device appearing and call wpctl set-default or move existing streams. Heavier — only reach for this if the combined-sink approach can't model the desired behaviour.
node.name for each device with list-audio-devices.systemctl --user restart pipewire wireplumber.wpctl status. Set it default. Disconnect the device and confirm Pipewire degrades gracefully (the combined sink will lose one stream but keep playing through the remaining one).node.name — the regex match in the example handles this; verify after connecting.