|
|
|
@ -5,6 +5,8 @@ with lib; |
|
|
|
|
let |
|
|
|
|
cfg = config.services.mbpfan; |
|
|
|
|
verbose = if cfg.verbose then "v" else ""; |
|
|
|
|
settingsFormat = pkgs.formats.ini {}; |
|
|
|
|
settingsFile = settingsFormat.generate "config.conf" cfg.settings; |
|
|
|
|
|
|
|
|
|
in { |
|
|
|
|
options.services.mbpfan = { |
|
|
|
@ -19,54 +21,6 @@ in { |
|
|
|
|
''; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
minFanSpeed = mkOption { |
|
|
|
|
type = types.int; |
|
|
|
|
default = 2000; |
|
|
|
|
description = '' |
|
|
|
|
The minimum fan speed. |
|
|
|
|
''; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
maxFanSpeed = mkOption { |
|
|
|
|
type = types.int; |
|
|
|
|
default = 6199; |
|
|
|
|
description = '' |
|
|
|
|
The maximum fan speed. |
|
|
|
|
''; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
lowTemp = mkOption { |
|
|
|
|
type = types.int; |
|
|
|
|
default = 55; |
|
|
|
|
description = '' |
|
|
|
|
The low temperature. |
|
|
|
|
''; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
highTemp = mkOption { |
|
|
|
|
type = types.int; |
|
|
|
|
default = 58; |
|
|
|
|
description = '' |
|
|
|
|
The high temperature. |
|
|
|
|
''; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
maxTemp = mkOption { |
|
|
|
|
type = types.int; |
|
|
|
|
default = 86; |
|
|
|
|
description = '' |
|
|
|
|
The maximum temperature. |
|
|
|
|
''; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
pollingInterval = mkOption { |
|
|
|
|
type = types.int; |
|
|
|
|
default = 1; |
|
|
|
|
description = '' |
|
|
|
|
The polling interval. |
|
|
|
|
''; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
verbose = mkOption { |
|
|
|
|
type = types.bool; |
|
|
|
|
default = false; |
|
|
|
@ -74,23 +28,61 @@ in { |
|
|
|
|
If true, sets the log level to verbose. |
|
|
|
|
''; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
settings = mkOption { |
|
|
|
|
default = {}; |
|
|
|
|
description = "The INI configuration for Mbpfan."; |
|
|
|
|
type = types.submodule { |
|
|
|
|
freeformType = settingsFormat.type; |
|
|
|
|
|
|
|
|
|
options.general.min_fan1_speed = mkOption { |
|
|
|
|
type = types.int; |
|
|
|
|
default = 2000; |
|
|
|
|
description = "The minimum fan speed."; |
|
|
|
|
}; |
|
|
|
|
options.general.max_fan1_speed = mkOption { |
|
|
|
|
type = types.int; |
|
|
|
|
default = 6199; |
|
|
|
|
description = "The maximum fan speed."; |
|
|
|
|
}; |
|
|
|
|
options.general.low_temp = mkOption { |
|
|
|
|
type = types.int; |
|
|
|
|
default = 55; |
|
|
|
|
description = "The low temperature."; |
|
|
|
|
}; |
|
|
|
|
options.general.high_temp = mkOption { |
|
|
|
|
type = types.int; |
|
|
|
|
default = 58; |
|
|
|
|
description = "The high temperature."; |
|
|
|
|
}; |
|
|
|
|
options.general.max_temp = mkOption { |
|
|
|
|
type = types.int; |
|
|
|
|
default = 86; |
|
|
|
|
description = "The maximum temperature."; |
|
|
|
|
}; |
|
|
|
|
options.general.polling_interval = mkOption { |
|
|
|
|
type = types.int; |
|
|
|
|
default = 1; |
|
|
|
|
description = "The polling interval."; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
imports = [ |
|
|
|
|
(mkRenamedOptionModule [ "services" "mbpfan" "pollingInterval" ] [ "services" "mbpfan" "settings" "general" "polling_interval" ]) |
|
|
|
|
(mkRenamedOptionModule [ "services" "mbpfan" "maxTemp" ] [ "services" "mbpfan" "settings" "general" "max_temp" ]) |
|
|
|
|
(mkRenamedOptionModule [ "services" "mbpfan" "lowTemp" ] [ "services" "mbpfan" "settings" "general" "low_temp" ]) |
|
|
|
|
(mkRenamedOptionModule [ "services" "mbpfan" "highTemp" ] [ "services" "mbpfan" "settings" "general" "high_temp" ]) |
|
|
|
|
(mkRenamedOptionModule [ "services" "mbpfan" "minFanSpeed" ] [ "services" "mbpfan" "settings" "general" "min_fan1_speed" ]) |
|
|
|
|
(mkRenamedOptionModule [ "services" "mbpfan" "maxFanSpeed" ] [ "services" "mbpfan" "settings" "general" "max_fan1_speed" ]) |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
config = mkIf cfg.enable { |
|
|
|
|
boot.kernelModules = [ "coretemp" "applesmc" ]; |
|
|
|
|
|
|
|
|
|
environment = { |
|
|
|
|
etc."mbpfan.conf".text = '' |
|
|
|
|
[general] |
|
|
|
|
min_fan1_speed = ${toString cfg.minFanSpeed} |
|
|
|
|
max_fan1_speed = ${toString cfg.maxFanSpeed} |
|
|
|
|
low_temp = ${toString cfg.lowTemp} |
|
|
|
|
high_temp = ${toString cfg.highTemp} |
|
|
|
|
max_temp = ${toString cfg.maxTemp} |
|
|
|
|
polling_interval = ${toString cfg.pollingInterval} |
|
|
|
|
''; |
|
|
|
|
systemPackages = [ cfg.package ]; |
|
|
|
|
}; |
|
|
|
|
environment.etc."mbpfan.conf".source = settingsFile; |
|
|
|
|
environment.systemPackages = [ cfg.package ]; |
|
|
|
|
|
|
|
|
|
systemd.services.mbpfan = { |
|
|
|
|
description = "A fan manager daemon for MacBook Pro"; |
|
|
|
|