{ config, lib, ... }: with lib; let cfg = config.custom.services.pipewire; in { options.custom.services.pipewire.enable = mkOption {default = false;}; config = mkIf cfg.enable ({ #!! Realtime priority may cause desync #// security.rtkit.enable = true; services = { # https://wiki.nixos.org/wiki/PipeWire # https://gitlab.freedesktop.org/pipewire/pipewire pipewire = { enable = true; pulse.enable = true; alsa = { enable = true; support32Bit = true; }; # Avoid resampling if possible # https://wiki.archlinux.org/title/PipeWire#Changing_the_allowed_sample_rate(s) extraConfig.pipewire = { "10-sample-rate"."context.properties"."default.clock.allowed-rates" = [ 32000 44100 48000 88200 96000 176400 192000 ]; }; }; }; } // ( if versionAtLeast version "25.05" then { services.pulseaudio.enable = false; } else { hardware.pulseaudio.enable = false; } )); }