I use pipewire as my audio driver, since I'm a computer musician and kind of need low-latency audio handling/complex routing
Creating a virtual device
I had this idea to create a couple of sinks and then set up auto-connection with them
# ~/.config/pipewire/pipewire.conf.d/virtual-sink.conf: context.modules = [ { name = libpipewire-module-loopback args = { audio.position = [ FL FR ] node.description = "System Sound Loopback" capture.props = { media.class = Audio/Sink node.name = SystemSound node.description = "System Sound" } playback.props = { node.name = "SystemSound.output" node.passive = true target.object = "my-default-sink" } } } { name = libpipewire-module-loopback args = { audio.position = [ FL FR ] node.description = "Outboard Gear Loopback" capture.props = { media.class = Audio/Sink node.name = OutboardGear node.description = "Outboard Gear" } playback.props = { node.name = "OutboardGear.output" node.passive = true target.object = "my-default-sink" } } } ]
useful links
Commands
wpexec # run a lua script wpctl # get wireplumber runtime info pipewire # start pipewire daemon, using default config
Config
# pipewire ~/.config/pipewire/pipewire.conf ~/.config/pipewire/pipewire.conf.d/* # wireplumber ~/.config/
Discovered Oddities
Pulseaudio config is in "$HOME/.config/pulse", and on my system it looks like that's where my default sink is configured. That will have to change.