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

{
  # Enable the TLP daemon
  services.tlp = {
    enable = true;
    settings = {
      PCIE_ASPM_ON_AC = "performance";
      PCIE_ASPM_ON_BAT = "powersave";
      USB_AUTOSUSPEND = 1;
    };
  };

  # Enable the auto-cpufreq daemon
  services.auto-cpufreq.enable = true;

  # Suspend when the battery is critical and autosuspend USB and PCI
  services.udev.extraRules = ''
    SUBSYSTEM=="power_supply", ATTR{status}=="Discharging", ATTR{model_name}=="01AV405", ATTR{capacity}=="[0-5]", RUN+="${config.systemd.package}/bin/systemctl suspend -i"
    ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{power/control}="auto"
    ACTION=="add", SUBSYSTEM=="pci", TEST=="power/control", ATTR{power/control}="auto"
  '';

  # Undervolt CPU and GPU
  services.undervolt = {
    enable = true;
    coreOffset = -100;
    gpuOffset = -75;
  };

  # Prevent overheating of the CPU
  services.thermald.enable = true;

  # HACK Enable internal microphone when headphones are plugged in and add workaround for frequent WiFi disconnects
  hardware.firmware = [
    (pkgs.writeTextDir "/lib/firmware/hda-jack-retask.fw" ''
      [codec]
      0x10ec0293 0x17aa2233 0

      [pincfg]
      0x12 0x90a60130
      0x13 0x40000000
      0x14 0x90170110
      0x15 0x03211040
      0x16 0x21211010
      0x18 0x411111f0
      0x19 0x21a11010
      0x1a 0x40f000f0
      0x1b 0x411111f0
      0x1d 0x40738105
      0x1e 0x411111f0
    '')
  ];

  # Power saving features for multiple devices
  boot.extraModprobeConfig = ''
    options snd-hda-intel patch=hda-jack-retask.fw power_save=1
    options mac80211 beacon_loss_count=500
    options iwlwifi power_save=1
    options iwlmvm power_scheme=3
    options i915 enable_dc=4 enable_fbc=1 enable_psr=1 enable_psr2_sel_fetch=1 disable_power_well=1
  '';

}