nichts/modules/system/hardware/power.nix

243 lines
6 KiB
Nix
Raw Normal View History

2025-04-09 15:31:18 +02:00
{
config,
2025-05-14 11:22:39 +02:00
inputs,
2025-04-09 15:31:18 +02:00
lib,
pkgs,
...
}: let
inherit (lib.modules) mkDefault;
in {
2025-05-14 11:22:39 +02:00
imports = [
2025-06-10 20:23:50 +02:00
inputs.watt.nixosModules.default
2025-05-14 11:22:39 +02:00
];
2025-04-09 15:31:18 +02:00
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;
2025-06-10 20:23:50 +02:00
services.watt = {
2025-05-17 23:47:19 +02:00
enable = true;
2025-06-10 20:23:50 +02:00
# sample config from https://github.com/NotAShelf/watt#sample-configuration
2025-05-17 23:47:19 +02:00
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;
}
];
2025-05-17 23:47:19 +02:00
};
};
2025-04-09 15:31:18 +02:00
services = {
upower = {
enable = true;
percentageLow = 15;
percentageCritical = 5;
};
acpid = {
enable = true;
logEvents = true;
};
auto-cpufreq = {
2025-05-15 11:23:22 +02:00
enable = false;
2025-04-09 15:31:18 +02:00
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";
};
};
};
};
};
}