{
  config,
  inputs,
  lib,
  pkgs,
  ...
}:
{
  options.nix-config = {
    power = {
      batteryThresholds = lib.mkOption {
        type = lib.types.listOf lib.types.int;
        default = [ 60 80 ];
        description = "Battery charge thresholds for power management.";
      };
    };
  };

  imports = [
    inputs.watt.nixosModules.default
  ];


  config = {

    services.tlp = {
      enable = true;
      settings = {
        # processor chooses frequencies itself but respects the limits set by the user
        CPU_DRIVER_OPMODE_ON_AC = "guided";
        CPU_DRIVER_OPMODE_ON_BAT = "guided";

        # governor dictates global behavior of the CPU
        CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
        CPU_SCALING_GOVERNOR_ON_AC = "performance";

        # energy performance policy (EPP) sets the energy/performance balance
        CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power";
        CPU_ENERGY_PERF_POLICY_ON_AC = "performance";


        # clock speeds reported by `sudo tlp-stat`
        # 623377 [kHz] and 5090910 [kHz]
        CPU_SCALING_MIN_FREQ_ON_AC = 623377;
        CPU_SCALING_MAX_FREQ_ON_AC = 5090910;
        CPU_SCALING_MIN_FREQ_ON_BAT = 0;
        # reduce max frequency on battery to save power
        CPU_SCALING_MAX_FREQ_ON_BAT = 3000000;

        # Allow the CPU to boost
        CPU_BOOST_ON_AC = 1;
        CPU_BOOST_ON_BAT = 1;


        RADEON_DPM_PERF_LEVEL_ON_AC = "high";
        # WIFI_PWR_ON_BAT = "off";

        # enable battery charge thresholds on the default battery
        STOP_CHARGE_THRESH_BAT0 = 1;
      };
    };



    systemd.sleep.extraConfig = ''
      AllowSuspend=yes
      AllowHibernation=yes
      AllowHybridSleep=yes
      AllowSuspendThenHibernate=yes
    '';

    # services.watt = {
    #   enable = true;
    #   settings = {
    #     battery_charge_thresholds = [
    #       40
    #       80
    #     ];
    #   };
    # };

    services.upower.enable = true;


    services.irqbalance = {
      enable = true;
    };

    services.thermald = {
      enable = true;
    };
  };


}
