70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{
 | 
						|
  config,
 | 
						|
  lib,
 | 
						|
  pkgs,
 | 
						|
  ...
 | 
						|
}: let
 | 
						|
  cfg = config.pwrMgmt;
 | 
						|
in {
 | 
						|
  options.pwrMgmt = {
 | 
						|
    enable = lib.mkEnableOption "Custom power management configuration";
 | 
						|
    cpuFreqGovernor = lib.mkOption {
 | 
						|
      type = lib.types.enum [
 | 
						|
        "performance"
 | 
						|
        "powersave"
 | 
						|
        "ondemand"
 | 
						|
        "conservative"
 | 
						|
      ];
 | 
						|
      default = "performance";
 | 
						|
      description = "CPU frequency scaling governor to use";
 | 
						|
    };
 | 
						|
 | 
						|
    powertop = {
 | 
						|
      enable = lib.mkEnableOption "PowerTop power management tool";
 | 
						|
 | 
						|
      autotuneOnBoot = lib.mkOption {
 | 
						|
        type = lib.types.bool;
 | 
						|
        default = false;
 | 
						|
        description = "Automatically tune power settings on boot";
 | 
						|
      };
 | 
						|
    };
 | 
						|
 | 
						|
    battery = {
 | 
						|
      enable = lib.mkEnableOption "Battery-specific power management";
 | 
						|
 | 
						|
      startChargeThreshold = lib.mkOption {
 | 
						|
        type = lib.types.int;
 | 
						|
        default = 20;
 | 
						|
        description = "Percentage at which to start charging";
 | 
						|
      };
 | 
						|
 | 
						|
      stopChargeThreshold = lib.mkOption {
 | 
						|
        type = lib.types.int;
 | 
						|
        default = 80;
 | 
						|
        description = "Percentage at which to stop charging";
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  config = lib.mkIf cfg.enable {
 | 
						|
    powerManagement = {
 | 
						|
      enable = true;
 | 
						|
      cpuFreqGovernor = cfg.cpuFreqGovernor;
 | 
						|
    };
 | 
						|
 | 
						|
    environment.systemPackages = lib.mkIf cfg.powertop.enable [pkgs.powertop];
 | 
						|
    systemd.services.battery-charge-threshold = lib.mkIf cfg.battery.enable {
 | 
						|
      description = "Set battery charge thresholds";
 | 
						|
      wantedBy = ["multi-user.target"];
 | 
						|
      script = ''
 | 
						|
        if [ -f /sys/class/power_supply/BAT0/charge_start_threshold ]; then
 | 
						|
          echo ${toString cfg.battery.startChargeThreshold} > /sys/class/power_supply/BAT0/charge_start_threshold
 | 
						|
        fi
 | 
						|
        if [ -f /sys/class/power_supply/BAT0/charge_stop_threshold ]; then
 | 
						|
          echo ${toString cfg.battery.stopChargeThreshold} > /sys/class/power_supply/BAT0/charge_stop_threshold
 | 
						|
        fi
 | 
						|
      '';
 | 
						|
    };
 | 
						|
  };
 | 
						|
}
 |