nixos/powertop: add hooks to fix incorrect configurations

This commit is contained in:
MakiseKurisu 2024-12-25 22:25:43 +08:00
parent 04e40bca2a
commit dab01f875c
No known key found for this signature in database

View file

@ -13,7 +13,38 @@ in
{
###### interface
options.powerManagement.powertop.enable = mkEnableOption "powertop auto tuning on startup";
options.powerManagement.powertop = {
enable = mkEnableOption "powertop auto tuning on startup";
preStart = mkOption {
type = types.lines;
default = "";
description = ''
Shell commands executed before `powertop` is started.
'';
};
postStart = mkOption {
type = types.lines;
default = "";
example = ''
''${lib.getExe' config.systemd.package "udevadm"} trigger -c bind -s usb -a idVendor=046d -a idProduct=c08c
'';
description = ''
Shell commands executed after `powertop` is started.
This can be used to workaround problematic configurations. For example,
you can retrigger an `udev` rule to disable power saving on unsupported
USB devices:
```
services.udev.extraRules = ''''
# disable USB auto suspend for Logitech, Inc. G PRO Gaming Mouse
ACTION=="bind", SUBSYSTEM=="usb", ATTR{idVendor}=="046d", ATTR{idProduct}=="c08c", TEST=="power/control", ATTR{power/control}="on"
'''';
```
'';
};
};
###### implementation
@ -24,6 +55,8 @@ in
after = [ "multi-user.target" ];
description = "Powertop tunings";
path = [ pkgs.kmod ];
preStart = cfg.preStart;
postStart = cfg.postStart;
serviceConfig = {
Type = "oneshot";
RemainAfterExit = "yes";