Merge pull request #95011 from Atemu/undervolt-pl

undervolt: expose power limits as Nixopts

Changed files
+44 -2
nixos
modules
services
hardware
+44 -2
nixos/modules/services/hardware/undervolt.nix
···
with lib;
let
cfg = config.services.undervolt;
-
cliArgs = lib.cli.toGNUCommandLineShell {} {
+
+
mkPLimit = limit: window:
+
if (isNull limit && isNull window) then null
+
else assert asserts.assertMsg (!isNull limit && !isNull window) "Both power limit and window must be set";
+
"${toString limit} ${toString window}";
+
cliArgs = lib.cli.toGNUCommandLine {} {
inherit (cfg)
verbose
temp
···
temp-bat = cfg.tempBat;
temp-ac = cfg.tempAc;
+
+
power-limit-long = mkPLimit cfg.p1.limit cfg.p1.window;
+
power-limit-short = mkPLimit cfg.p2.limit cfg.p2.window;
};
in
{
···
'';
};
+
p1.limit = mkOption {
+
type = with types; nullOr int;
+
default = null;
+
description = ''
+
The P1 Power Limit in Watts.
+
Both limit and window must be set.
+
'';
+
};
+
p1.window = mkOption {
+
type = with types; nullOr (oneOf [ float int ]);
+
default = null;
+
description = ''
+
The P1 Time Window in seconds.
+
Both limit and window must be set.
+
'';
+
};
+
+
p2.limit = mkOption {
+
type = with types; nullOr int;
+
default = null;
+
description = ''
+
The P2 Power Limit in Watts.
+
Both limit and window must be set.
+
'';
+
};
+
p2.window = mkOption {
+
type = with types; nullOr (oneOf [ float int ]);
+
default = null;
+
description = ''
+
The P2 Time Window in seconds.
+
Both limit and window must be set.
+
'';
+
};
+
useTimer = mkOption {
type = types.bool;
default = false;
···
serviceConfig = {
Type = "oneshot";
Restart = "no";
-
ExecStart = "${pkgs.undervolt}/bin/undervolt ${cliArgs}";
+
ExecStart = "${pkgs.undervolt}/bin/undervolt ${toString cliArgs}";
};
};