nixos: set scsi link power policy using udev

Also improve option type checking by enumerating valid policy names.
This commit is contained in:
Joachim Fasting 2015-10-25 18:58:48 +01:00
parent f7bfb4b466
commit 7b2b366552

View File

@ -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}"
'';
};
}