* lm_sensors: add fancontrol module + nixos test fancontrol is a small script that checks temperature sensors and adapts fan speeds accordingly. It reads a text config file that can be auto-generated by running the pwmconfig wizard on the live system.
This commit is contained in:
parent
14f812aeef
commit
5a78ce30d4
|
@ -4,42 +4,41 @@ with lib;
|
|||
|
||||
let
|
||||
cfg = config.hardware.fancontrol;
|
||||
configFile = pkgs.writeText "fan.conf" cfg.config;
|
||||
configFile = pkgs.writeText "fancontrol.conf" cfg.config;
|
||||
|
||||
in{
|
||||
|
||||
options.hardware.fancontrol = {
|
||||
enable = mkEnableOption "fancontrol (requires fancontrol.config)";
|
||||
enable = mkEnableOption "software fan control (requires fancontrol.config)";
|
||||
|
||||
config = mkOption {
|
||||
type = types.lines;
|
||||
default = null;
|
||||
type = types.lines;
|
||||
description = "Fancontrol configuration file content. See <citerefentry><refentrytitle>pwmconfig</refentrytitle><manvolnum>8</manvolnum></citerefentry> from the lm_sensors package.";
|
||||
example = ''
|
||||
# Configuration file generated by pwmconfig
|
||||
INTERVAL=1
|
||||
DEVPATH=hwmon0=devices/platform/nct6775.656 hwmon1=devices/pci0000:00/0000:00:18.3
|
||||
DEVNAME=hwmon0=nct6779 hwmon1=k10temp
|
||||
FCTEMPS=hwmon0/pwm2=hwmon1/temp1_input
|
||||
FCFANS=hwmon0/pwm2=hwmon0/fan2_input
|
||||
MINTEMP=hwmon0/pwm2=25
|
||||
MAXTEMP=hwmon0/pwm2=60
|
||||
MINSTART=hwmon0/pwm2=25
|
||||
MINSTOP=hwmon0/pwm2=10
|
||||
MINPWM=hwmon0/pwm2=0
|
||||
MAXPWM=hwmon0/pwm2=255
|
||||
INTERVAL=10
|
||||
DEVPATH=hwmon3=devices/virtual/thermal/thermal_zone2 hwmon4=devices/platform/f71882fg.656
|
||||
DEVNAME=hwmon3=soc_dts1 hwmon4=f71869a
|
||||
FCTEMPS=hwmon4/device/pwm1=hwmon3/temp1_input
|
||||
FCFANS= hwmon4/device/pwm1=hwmon4/device/fan1_input
|
||||
MINTEMP=hwmon4/device/pwm1=35
|
||||
MAXTEMP=hwmon4/device/pwm1=65
|
||||
MINSTART=hwmon4/device/pwm1=150
|
||||
MINSTOP=hwmon4/device/pwm1=0
|
||||
'';
|
||||
description = "Contents for configuration file. See <citerefentry><refentrytitle>pwmconfig</refentrytitle><manvolnum>8</manvolnum></citerefentry>.";
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
systemd.services.fancontrol = {
|
||||
description = "Fan speed control from lm_sensors";
|
||||
unitConfig.Documentation = "man:fancontrol(8)";
|
||||
description = "software fan control";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "lm_sensors.service" ];
|
||||
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
ExecStart = "${pkgs.lm_sensors}/bin/fancontrol ${configFile}";
|
||||
ExecStart = "${pkgs.lm_sensors}/sbin/fancontrol ${configFile}";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -81,6 +81,7 @@ in
|
|||
env = handleTest ./env.nix {};
|
||||
etcd = handleTestOn ["x86_64-linux"] ./etcd.nix {};
|
||||
etcd-cluster = handleTestOn ["x86_64-linux"] ./etcd-cluster.nix {};
|
||||
fancontrol = handleTest ./fancontrol.nix {};
|
||||
ferm = handleTest ./ferm.nix {};
|
||||
firefox = handleTest ./firefox.nix {};
|
||||
firewall = handleTest ./firewall.nix {};
|
||||
|
|
25
nixos/tests/fancontrol.nix
Normal file
25
nixos/tests/fancontrol.nix
Normal file
|
@ -0,0 +1,25 @@
|
|||
import ./make-test.nix ({ pkgs, ... } : {
|
||||
name = "fancontrol";
|
||||
|
||||
machine =
|
||||
{ ... }:
|
||||
{ hardware.fancontrol.enable = true;
|
||||
hardware.fancontrol.config = ''
|
||||
INTERVAL=42
|
||||
DEVPATH=hwmon1=devices/platform/dummy
|
||||
DEVNAME=hwmon1=dummy
|
||||
FCTEMPS=hwmon1/device/pwm1=hwmon1/device/temp1_input
|
||||
FCFANS=hwmon1/device/pwm1=hwmon1/device/fan1_input
|
||||
MINTEMP=hwmon1/device/pwm1=25
|
||||
MAXTEMP=hwmon1/device/pwm1=65
|
||||
MINSTART=hwmon1/device/pwm1=150
|
||||
MINSTOP=hwmon1/device/pwm1=0
|
||||
'';
|
||||
};
|
||||
|
||||
# This configuration cannot be valid for the test VM, so it's expected to get an 'outdated' error.
|
||||
testScript = ''
|
||||
$machine->waitForUnit("fancontrol.service");
|
||||
$machine->waitUntilSucceeds("journalctl -eu fancontrol | grep 'Configuration appears to be outdated'");
|
||||
'';
|
||||
})
|
Loading…
Reference in a new issue