{ config, inputs, lib, pkgs, ... }: let inherit (lib.modules) mkDefault; in { imports = [ inputs.watt.nixosModules.default ]; config = { environment.systemPackages = builtins.attrValues { inherit (pkgs) acpi powertop ; }; boot = { kernelModules = ["acpi_call"]; extraModulePackages = with config.boot.kernelPackages; [ acpi_call cpupower ]; }; hardware.acpilight.enable = false; services.watt = { enable = true; # sample config from https://github.com/NotAShelf/watt#sample-configuration settings = { rule = [ { cpu = { energy-performance-preference = "power"; frequency-mhz-maximum = 2000; governor = "powersave"; turbo = false; }; "if" = { is-more-than = 85; value = "$cpu-temperature"; }; priority = 100; } { cpu = { energy-performance-preference = "power"; frequency-mhz-maximum = 800; governor = "powersave"; turbo = false; }; "if" = { all = [ "?discharging" { is-less-than = 0.3; value = "%power-supply-charge"; } ]; }; power = {platform-profile = "low-power";}; priority = 90; } { cpu = { energy-performance-preference = "performance"; governor = "performance"; turbo = true; }; "if" = { all = [ { is-more-than = 0.8; value = "%cpu-usage"; } { is-less-than = 30; value = "$cpu-idle-seconds"; } { is-less-than = 75; value = "$cpu-temperature"; } ]; }; priority = 80; } { cpu = { energy-performance-bias = "balance_performance"; energy-performance-preference = "performance"; governor = "performance"; turbo = true; }; "if" = { all = [ {not = "?discharging";} { is-more-than = 0.1; value = "%cpu-usage"; } { is-less-than = 80; value = "$cpu-temperature"; } ]; }; priority = 70; } { cpu = { energy-performance-preference = "balance_performance"; governor = "schedutil"; }; "if" = { all = [ { is-more-than = 0.4; value = "%cpu-usage"; } { is-less-than = 0.8; value = "%cpu-usage"; } ]; }; priority = 60; } { cpu = { energy-performance-preference = "power"; governor = "powersave"; turbo = false; }; "if" = { all = [ { is-less-than = 0.2; value = "%cpu-usage"; } { is-more-than = 60; value = "$cpu-idle-seconds"; } ]; }; priority = 50; } { cpu = { energy-performance-preference = "power"; frequency-mhz-maximum = 1600; governor = "powersave"; turbo = false; }; "if" = { is-more-than = 300; value = "$cpu-idle-seconds"; }; priority = 40; } { cpu = { energy-performance-preference = "power"; frequency-mhz-maximum = 2000; governor = "powersave"; turbo = false; }; "if" = { all = [ "?discharging" { is-less-than = 0.5; value = "%power-supply-charge"; } ]; }; power = {platform-profile = "low-power";}; priority = 30; } { cpu = { energy-performance-bias = "balance_power"; energy-performance-preference = "power"; frequency-mhz-maximum = 1800; frequency-mhz-minimum = 200; governor = "powersave"; turbo = false; }; "if" = "?discharging"; priority = 20; } { cpu = { energy-performance-preference = "balance_performance"; governor = "schedutil"; }; priority = 0; } ]; }; }; services = { upower = { enable = true; percentageLow = 15; percentageCritical = 5; }; acpid = { enable = true; logEvents = true; }; auto-cpufreq = { enable = false; settings = { charger = { governor = "performance"; energy_performance_preference = "performance"; scaling_min_freq = mkDefault 1800000; scaling_max_freq = mkDefault 3800000; turbo = "auto"; }; battery = { governor = "powersave"; energy_performance_preference = "power"; scaling_min_freq = mkDefault 1200000; scaling_max_freq = mkDefault 1800000; turbo = "never"; }; }; }; }; }; }