# TODO test `alsactl init` after suspend to reinit mic
{
  pkgs,
  config,
  lib,
  ...
}:
with lib;
{
  options.components.gui.audio.enable = mkOption {
    type = lib.types.bool;
    default = config.components.gui.enable;
  };

  config = mkIf (config.components.gui.audio.enable) {

    security.rtkit.enable = true;

    hardware.pulseaudio.enable = false;

    hardware.bluetooth = {
      enable = true;
      powerOnBoot = true;
    };

    environment.systemPackages = with pkgs; [
      alsa-utils

      # PulseAudio control
      # ------------------
      ponymix
      pavucontrol
      lxqt.pavucontrol-qt
    ];

    services.pipewire = {
      enable = true;
      systemWide = true;
      alsa.enable = true;
      alsa.support32Bit = true;
      pulse.enable = true;
      jack.enable = true;
    };

    environment.etc = {
      "wireplumber/bluetooth.lua.d/51-bluez-config.lua".text = ''
        bluez_monitor.properties = {
          ["bluez5.enable-sbc-xq"] = true,
          ["bluez5.enable-msbc"] = true,
          ["bluez5.enable-hw-volume"] = true,
          ["bluez5.headset-roles"] = "[ hsp_hs hsp_ag hfp_hf hfp_ag ]"
        }
      '';
    };
  };
}