summary refs log tree commit diff
path: root/nixos/modules/tasks
diff options
context:
space:
mode:
authorDomen Kožar <domen@dev.si>2015-11-16 13:21:36 +0100
committerDomen Kožar <domen@dev.si>2015-11-16 13:21:36 +0100
commit0567714b99cfc906bd11c8458b195badc711812c (patch)
treee7bb0b5ba3aa3f9ded817bcf319daff5f3a34e12 /nixos/modules/tasks
parentb76519069d297241c1337ea48d8783181d9c7bfb (diff)
parent7b2b366552ac16e6852f674c95099b575888e99e (diff)
downloadnixlib-0567714b99cfc906bd11c8458b195badc711812c.tar
nixlib-0567714b99cfc906bd11c8458b195badc711812c.tar.gz
nixlib-0567714b99cfc906bd11c8458b195badc711812c.tar.bz2
nixlib-0567714b99cfc906bd11c8458b195badc711812c.tar.lz
nixlib-0567714b99cfc906bd11c8458b195badc711812c.tar.xz
nixlib-0567714b99cfc906bd11c8458b195badc711812c.tar.zst
nixlib-0567714b99cfc906bd11c8458b195badc711812c.zip
Merge pull request #10610 from joachifm/scsi-link-pm
nixos: set scsi link power policy using udev
Diffstat (limited to 'nixos/modules/tasks')
-rw-r--r--nixos/modules/tasks/scsi-link-power-management.nix34
1 files changed, 10 insertions, 24 deletions
diff --git a/nixos/modules/tasks/scsi-link-power-management.nix b/nixos/modules/tasks/scsi-link-power-management.nix
index a74023dec21a..484c0a0186d7 100644
--- a/nixos/modules/tasks/scsi-link-power-management.nix
+++ b/nixos/modules/tasks/scsi-link-power-management.nix
@@ -2,18 +2,19 @@
 
 with lib;
 
+let cfg = config.powerManagement.scsiLinkPolicy; in
+
 {
   ###### interface
 
   options = {
 
     powerManagement.scsiLinkPolicy = mkOption {
-      default = "";
-      example = "min_power";
-      type = types.str;
+      default = null;
+      type = types.nullOr (types.enum [ "min_power" "max_performance" "medium_power" ]);
       description = ''
-        Configure the SCSI link power management policy. By default,
-        the kernel configures "max_performance".
+        SCSI link power management policy. The kernel default is
+        "max_performance".
       '';
     };
 
@@ -22,25 +23,10 @@ with lib;
 
   ###### implementation
 
-  config = mkIf (config.powerManagement.scsiLinkPolicy != "") {
-
-    jobs."scsi-link-pm" =
-      { description = "SCSI Link Power Management Policy";
-
-        startOn = "stopped udevtrigger";
-
-        task = true;
-
-        unitConfig.ConditionPathIsReadWrite = "/sys/class/scsi_host";
-
-        script = ''
-          shopt -s nullglob
-          for x in /sys/class/scsi_host/host*/link_power_management_policy; do
-            echo ${config.powerManagement.scsiLinkPolicy} > $x
-          done
-        '';
-      };
-
+  config = mkIf (cfg != null) {
+    services.udev.extraRules = ''
+      SUBSYSTEM=="scsi_host", ACTION=="add", KERNEL=="host*", ATTR{link_power_management_policy}="${cfg}"
+    '';
   };
 
 }