nichts/modules/system/hardware/power.nix
2025-05-22 18:26:25 +02:00

114 lines
3 KiB
Nix

{
config,
inputs,
lib,
pkgs,
...
}: let
inherit (lib.modules) mkDefault;
in {
imports = [
inputs.superfreq.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.superfreq = {
enable = true;
# sample config from https://github.com/NotAShelf/superfreq#sample-configuration
settings = {
charger = {
# CPU governor to use
governor = "performance";
# Turbo boost setting: "always", "auto", or "never"
turbo = "auto";
# Energy Performance Preference
epp = "performance";
# Energy Performance Bias (0-15 scale or named value)
epb = "balance_performance";
# Platform profile (if supported)
platform_profile = "performance";
# Min/max frequency in MHz (optional)
min_freq_mhz = 800;
max_freq_mhz = 3500;
# Optional: Profile-specific battery charge thresholds (overrides global setting)
# battery_charge_thresholds = [40, 80] # Start at 40%, stop at 80%
};
battery = {
governor = "powersave";
turbo = "auto";
epp = "power";
epb = "balance_power";
platform_profile = "low-power";
min_freq_mhz = 800;
max_freq_mhz = 2500;
};
daemon = {
# Base polling interval in seconds
poll_interval_sec = 5;
# Enable adaptive polling that changes with system state
adaptive_interval = true;
# Minimum polling interval for adaptive polling (seconds)
min_poll_interval_sec = 1;
# Maximum polling interval for adaptive polling (seconds)
max_poll_interval_sec = 30;
# Double the polling interval when on battery to save power
throttle_on_battery = true;
# Logging level: Error, Warning, Info, Debug
log_level = "Info";
};
};
};
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";
};
};
};
};
};
}