summary refs log tree commit diff
path: root/nixos/modules/services
diff options
context:
space:
mode:
authorTimo Kaufmann <timokau@zoho.com>2020-10-30 09:32:50 +0100
committerGitHub <noreply@github.com>2020-10-30 09:32:50 +0100
commit83f48e83481841e5bd48ba029b1e4ed42592073f (patch)
treeec0a693d481434cd06af6c39ee9f3f88f11b0b61 /nixos/modules/services
parent1102a46ffee6cc82ba86e3ffcc3c71078d7cb71e (diff)
parenteb4e67505fdf9c521106b3ba9c6f300c77adee6c (diff)
downloadnixpkgs-83f48e83481841e5bd48ba029b1e4ed42592073f.tar
nixpkgs-83f48e83481841e5bd48ba029b1e4ed42592073f.tar.gz
nixpkgs-83f48e83481841e5bd48ba029b1e4ed42592073f.tar.bz2
nixpkgs-83f48e83481841e5bd48ba029b1e4ed42592073f.tar.lz
nixpkgs-83f48e83481841e5bd48ba029b1e4ed42592073f.tar.xz
nixpkgs-83f48e83481841e5bd48ba029b1e4ed42592073f.tar.zst
nixpkgs-83f48e83481841e5bd48ba029b1e4ed42592073f.zip
Merge pull request #95011 from Atemu/undervolt-pl
undervolt: expose power limits as Nixopts
Diffstat (limited to 'nixos/modules/services')
-rw-r--r--nixos/modules/services/hardware/undervolt.nix46
1 files changed, 44 insertions, 2 deletions
diff --git a/nixos/modules/services/hardware/undervolt.nix b/nixos/modules/services/hardware/undervolt.nix
index 054ffa35050..9c2f78a755d 100644
--- a/nixos/modules/services/hardware/undervolt.nix
+++ b/nixos/modules/services/hardware/undervolt.nix
@@ -3,7 +3,12 @@
 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
@@ -21,6 +26,9 @@ let
 
     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
 {
@@ -104,6 +112,40 @@ 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;
@@ -133,7 +175,7 @@ in
       serviceConfig = {
         Type = "oneshot";
         Restart = "no";
-        ExecStart = "${pkgs.undervolt}/bin/undervolt ${cliArgs}";
+        ExecStart = "${pkgs.undervolt}/bin/undervolt ${toString cliArgs}";
       };
     };