79 lines
2.2 KiB
Nix
79 lines
2.2 KiB
Nix
{ config, lib, pkgs, inputs ? null, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
cfg = config.power_manager;
|
|
in
|
|
{
|
|
options.power_manager = {
|
|
enable = mkEnableOption "power management with auto-cpufreq";
|
|
|
|
useFlake = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = ''
|
|
Whether to use the auto-cpufreq flake input for the latest version.
|
|
If false, uses the nixpkgs version (may be outdated).
|
|
'';
|
|
};
|
|
|
|
settings = mkOption {
|
|
type = types.attrs;
|
|
default = {
|
|
battery = {
|
|
governor = "powersave";
|
|
turbo = "never";
|
|
};
|
|
charger = {
|
|
governor = "performance";
|
|
turbo = "auto";
|
|
};
|
|
};
|
|
description = "Auto-cpufreq configuration settings";
|
|
};
|
|
|
|
enableThermald = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = "Enable thermald for Intel CPU thermal management";
|
|
};
|
|
|
|
enableUpower = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = "Enable UPower for battery monitoring";
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
# Auto-cpufreq configuration - use flake version if available, otherwise nixpkgs
|
|
programs.auto-cpufreq = mkIf (cfg.useFlake && inputs ? auto-cpufreq) {
|
|
enable = true;
|
|
settings = cfg.settings;
|
|
};
|
|
|
|
services.auto-cpufreq = mkIf (!cfg.useFlake || !(inputs ? auto-cpufreq)) {
|
|
enable = true;
|
|
settings = cfg.settings;
|
|
};
|
|
|
|
# Supporting services
|
|
services.upower.enable = mkIf cfg.enableUpower true;
|
|
services.thermald.enable = mkIf cfg.enableThermald true;
|
|
powerManagement.enable = mkIf cfg.enable true;
|
|
|
|
# Disable conflicting power management services
|
|
services.tlp.enable = mkForce false;
|
|
services.power-profiles-daemon.enable = mkForce false;
|
|
powerManagement.powertop.enable = mkForce false;
|
|
|
|
# Don't set a static CPU governor (let auto-cpufreq handle it)
|
|
powerManagement.cpuFreqGovernor = mkForce null;
|
|
};
|
|
|
|
# # Warning if flake input is missing when expected
|
|
# warnings = optional (cfg.useFlake && !(inputs ? auto-cpufreq))
|
|
# "power_manager: useFlake is enabled but auto-cpufreq flake input not found. Using nixpkgs version instead.";
|
|
}
|