I use an Elgato Wave:3 microphone. On nixos, the microphone itself worked immediately through PipeWire, but only as a raw input.
That means:
Wave:3 → application
No noise reduction, no EQ, no compression, and obviously no Elgato Wave Link application on Linux.
What I wanted was a small replacement for the useful MicrophoneFX part of Wave Link:
Wave:3
↓
processing
↓
virtual microphone
↓
OBS / browser / other apps
EasyEffects does this surprisingly well.
NixOS PipeWire setup
My configuration.nix already had PipeWire enabled:
# Enable sound with PipeWire.
services.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# If you want to use JACK applications, uncomment this
# jack.enable = true;
# Use the WirePlumber session manager
# wireplumber.enable = true;
};One thing confused me here initially.
wireplumber.enable is commented out, but that does not mean WirePlumber is not running.
Checking the actual service:
systemctl --user status wireplumbershowed that WirePlumber was already active.
So there was no reason to explicitly enable or disable anything. The existing PipeWire stack was already working correctly.
Add EasyEffects and QPWGraph
In my packages.nix:
{
environment.systemPackages = with pkgs; [
# media
# Wave:3 microphone processing and PipeWire routing inspection
easyeffects
qpwgraph
obs-studio-nvenc
vlc
];
}Then rebuild:
sudo nixos-rebuild switchBuild the microphone FX chain
Open EasyEffects → Input and add the effects there.
I started with:
Noise Reduction
↓
Compressor
↓
Limiter
Then expanded it to:
Wave:3
↓
High-pass Filter
↓
Noise Reduction
↓
Equalizer
↓
Compressor
↓
De-esser
↓
Limiter
I found it better to start small and add effects one by one instead of creating a huge chain immediately.
The Wave:3 already sounds decent, so the point is cleanup rather than turning it into some overprocessed radio voice.
Use the virtual microphone
EasyEffects exposes the processed input as:
Easy Effects Source
So applications now have two choices:
Elgato Wave:3
raw microphone
Easy Effects Source
processed microphone
For OBS, browsers, calls, recording, etc., I simply select Easy Effects Source.
That gives me basically what I wanted:
flowchart TB A["🎙️ Elgato Wave:3"] B["🔊 PipeWire"] C["🧭 WirePlumber"] D["🎛️ EasyEffects"] A --> B --> C --> D D --> E["✨ Processing Chain<br/>High-pass filter<br/>Noise reduction<br/>Equalizer<br/>Compressor<br/>De-esser<br/>Limiter"] E --> F["🎤 EasyEffects Source"] F --> G["🎥 OBS"] F --> H["🌐 Browser"] F --> I["🖥️ +Others"]
QPWGraph is also useful if I want to actually see how PipeWire has connected everything instead of guessing.
Useful checks
wpctl status -nand:
systemctl --user is-active pipewire pipewire-pulse wireplumberOn my setup all three services are active.
The important discovery for me was that the lack of Wave Link on Linux does not make the Wave:3 a raw-only microphone. PipeWire already provides the routing, and EasyEffects fills in the processing part with very little effort.
I have documented another longer version covering Fedora, Ubuntu/Linux Mint/Zorin, CachyOS, and NixOS.