{ lib, config, ... }: let inherit (lib) mkEnableOption mkIf; cfg = config.module.pipewire; in { options = { module.pipewire.enable = mkEnableOption "enable pipewire"; }; config = mkIf cfg.enable { security.rtkit = { enable = true; args = ["--no-canary"]; }; services.pulseaudio.enable = false; services.pipewire = { enable = true; alsa.enable = true; pulse.enable = true; # extraConfig.pipewire."92-low-latency" = { # "context.properties" = { # "default.clock.rate" = 48000; # "default.clock.quantum" = 32; # "default.clock.min-quantum" = 32; # "default.clock.max-quantum" = 32; # }; # }; wireplumber.extraConfig."10-alsa-vm" = { "api.alsa.period-size" = 1024 / 2; # seems to fix random crackling }; extraConfig.pipewire-pulse."93-auto-connect" = { "pulse.cmd" = [ { cmd = "load-module"; args = "module-switch-on-connect"; } ]; }; # extraConfig.pipewire-pulse."92-low-latency" = { # "context.properties" = [ # { # name = "libpipewire-module-protocol-pulse"; # args = {}; # } # ]; # "pulse.properties" = { # "pulse.min.req" = "32/48000"; # "pulse.default.req" = "32/48000"; # "pulse.max.req" = "32/48000"; # "pulse.min.quantum" = "32/48000"; # "pulse.max.quantum" = "32/48000"; # }; # "stream.properties" = { # "node.latency" = "32/48000"; # "resample.quality" = 1; # }; # }; }; }; }