mirror of
https://github.com/SebastianWendel/nixpkgs.git
synced 2024-10-20 20:53:19 +02:00
3b3be7a74b
The kernel default for `link_power_management_policy` is `"max_performance"`.
This commit:
f169f60575
set the NixOS default to `"min_performance"`.
This issue (https://github.com/NixOS/nixpkgs/issues/11276) details my long
journey to discover this after several file system failures incorrectly
attributed to `TRIM` and `NCQ` settings.
I think we should use the kernel default of `"max_performance"` to assure
the best experience for new users with SSDs and to conform to the defaults of
the kernel and other distros.
111 lines
2.7 KiB
Nix
111 lines
2.7 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
cfg = config.powerManagement;
|
|
|
|
in
|
|
|
|
{
|
|
|
|
###### interface
|
|
|
|
options = {
|
|
|
|
powerManagement = {
|
|
|
|
enable = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description =
|
|
''
|
|
Whether to enable power management. This includes support
|
|
for suspend-to-RAM and powersave features on laptops.
|
|
'';
|
|
};
|
|
|
|
resumeCommands = mkOption {
|
|
type = types.lines;
|
|
default = "";
|
|
description = "Commands executed after the system resumes from suspend-to-RAM.";
|
|
};
|
|
|
|
powerUpCommands = mkOption {
|
|
type = types.lines;
|
|
default = "";
|
|
example = literalExample ''
|
|
"''${pkgs.hdparm}/sbin/hdparm -B 255 /dev/sda"
|
|
'';
|
|
description =
|
|
''
|
|
Commands executed when the machine powers up. That is,
|
|
they're executed both when the system first boots and when
|
|
it resumes from suspend or hibernation.
|
|
'';
|
|
};
|
|
|
|
powerDownCommands = mkOption {
|
|
type = types.lines;
|
|
default = "";
|
|
example = literalExample ''
|
|
"''${pkgs.hdparm}/sbin/hdparm -B 255 /dev/sda"
|
|
'';
|
|
description =
|
|
''
|
|
Commands executed when the machine powers down. That is,
|
|
they're executed both when the system shuts down and when
|
|
it goes to suspend or hibernation.
|
|
'';
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
###### implementation
|
|
|
|
config = mkIf cfg.enable {
|
|
|
|
# FIXME: Implement powersave governor for sandy bridge or later Intel CPUs
|
|
powerManagement.cpuFreqGovernor = mkDefault "ondemand";
|
|
powerManagement.scsiLinkPolicy = mkDefault "max_performance";
|
|
|
|
systemd.targets.post-resume = {
|
|
description = "Post-Resume Actions";
|
|
requires = [ "post-resume.service" ];
|
|
after = [ "post-resume.service" ];
|
|
wantedBy = [ "sleep.target" ];
|
|
unitConfig.StopWhenUnneeded = true;
|
|
};
|
|
|
|
# Service executed before suspending/hibernating.
|
|
systemd.services."pre-sleep" =
|
|
{ description = "Pre-Sleep Actions";
|
|
wantedBy = [ "sleep.target" ];
|
|
before = [ "sleep.target" ];
|
|
script =
|
|
''
|
|
${cfg.powerDownCommands}
|
|
'';
|
|
serviceConfig.Type = "oneshot";
|
|
};
|
|
|
|
systemd.services."post-resume" =
|
|
{ description = "Post-Resume Actions";
|
|
after = [ "suspend.target" "hibernate.target" "hybrid-sleep.target" ];
|
|
script =
|
|
''
|
|
${config.systemd.package}/bin/systemctl try-restart post-resume.target
|
|
${cfg.resumeCommands}
|
|
${cfg.powerUpCommands}
|
|
'';
|
|
serviceConfig.Type = "oneshot";
|
|
};
|
|
|
|
};
|
|
|
|
}
|