{
  config,
  lib,
  ...
}:
with lib; let
  cfg = config.custom.services.pipewire;
in {
  options.custom.services.pipewire.enable = mkOption {default = false;};

  config = mkIf cfg.enable {
    # https://wiki.nixos.org/wiki/PipeWire
    # https://gitlab.freedesktop.org/pipewire/pipewire
    #!! Realtime priority may cause desync
    #// security.rtkit.enable = true;
    hardware.pulseaudio.enable = false;

    services.pipewire = {
      enable = true;
      alsa.enable = true;
      alsa.support32Bit = true;
      pulse.enable = 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
        ];
      };
    };
  };
}