{ config, lib, pkgs, ... }:

let
  cfg = config.hardware.raspberry-pi."4".audio;
in
{
  options.hardware = {
    raspberry-pi."4".audio = {
      enable = lib.mkEnableOption ''
        configuration for audio
      '';
    };
  };

  config = lib.mkIf cfg.enable {
    hardware.deviceTree = {
      overlays = [
        # Equivalent to dtparam=audio=on
        {
          name = "audio-on-overlay";
          dtsText = ''
            /dts-v1/;
            /plugin/;
            / {
              compatible = "brcm,bcm2711";
              fragment@0 {
                target = <&audio>;

                __overlay__ {
                  status = "okay";
                };
              };
            };
          '';
        }
      ];
    };

    # set tsched=0 in pulseaudio config to avoid audio glitches
    # see https://wiki.archlinux.org/title/PulseAudio/Troubleshooting#Glitches,_skips_or_crackling
    hardware.pulseaudio.configFile = lib.mkOverride 990 (pkgs.runCommand "default.pa" {} ''
      sed 's/module-udev-detect$/module-udev-detect tsched=0/' ${config.hardware.pulseaudio.package}/etc/pulse/default.pa > $out
    '');
  };
}