# 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 = mkMerge [
    (mkIf (config.components.gui.audio.enable) {

      security.rtkit.enable = true;
      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 ]"
          }
        '';
      };
    })

    {

      # this is always true
      # seems other options enable this one
      services.pipewire.enable = config.components.gui.audio.enable;
      services.pulseaudio.enable = false;

    }

  ];
}