diff --git a/modules/linux/home-manager/pipewire.nix b/modules/linux/home-manager/pipewire.nix index b8a7176..a846efd 100644 --- a/modules/linux/home-manager/pipewire.nix +++ b/modules/linux/home-manager/pipewire.nix @@ -1,15 +1,56 @@ { config, + pkgs, lib, ... -}: { +}: let + inherit (pkgs) rnnoise-plugin; +in { options = { crony.pipewire.enable = lib.mkEnableOption "Setup some config files for my pipewire/wireplumber setup."; }; config = lib.mkIf config.crony.pipewire.enable { - home.file = { - ".config/pipewire" = {source = ./configs/pipewire;}; + xdg.configFile."pipewire/pipewire.conf.d/99-rnnoise.conf" = { + text = builtins.toJSON { + "context.modules" = [ + { + name = "libpipewire-module-filter-chain"; + args = { + "node.description" = "Noise Canceling source"; + "media.name" = "Noise Canceling source"; + + "filter.graph" = { + nodes = [ + { + type = "ladspa"; + name = "rnnoise"; + plugin = "${rnnoise-plugin}/lib/ladspa/librnnoise_ladspa.so"; + label = "noise_suppressor_mono"; + control = { + "VAD Threshold (%)" = 80.0; + "VAD Grace Period (ms)" = 200; + "Retroactive VAD Grace (ms)" = 0; + }; + } + ]; + }; + + "capture.props" = { + "node.name" = "capture.rnnoise_source"; + "node.passive" = true; + "audio.rate" = 48000; + }; + + "playback.props" = { + "node.name" = "rnnoise_source"; + "media.class" = "Audio/Source"; + "audio.rate" = 48000; + }; + }; + } + ]; + }; }; }; }