* 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
|
let
|
||||||
cfg = config.hardware.fancontrol;
|
cfg = config.hardware.fancontrol;
|
||||||
configFile = pkgs.writeText "fan.conf" cfg.config;
|
configFile = pkgs.writeText "fancontrol.conf" cfg.config;
|
||||||
|
|
||||||
in {
|
|
||||||
|
|
||||||
|
in{
|
||||||
options.hardware.fancontrol = {
|
options.hardware.fancontrol = {
|
||||||
enable = mkEnableOption "fancontrol (requires fancontrol.config)";
|
enable = mkEnableOption "software fan control (requires fancontrol.config)";
|
||||||
|
|
||||||
config = mkOption {
|
config = mkOption {
|
||||||
type = types.lines;
|
|
||||||
default = null;
|
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 = ''
|
example = ''
|
||||||
# Configuration file generated by pwmconfig
|
# Configuration file generated by pwmconfig
|
||||||
INTERVAL=1
|
INTERVAL=10
|
||||||
DEVPATH=hwmon0=devices/platform/nct6775.656 hwmon1=devices/pci0000:00/0000:00:18.3
|
DEVPATH=hwmon3=devices/virtual/thermal/thermal_zone2 hwmon4=devices/platform/f71882fg.656
|
||||||
DEVNAME=hwmon0=nct6779 hwmon1=k10temp
|
DEVNAME=hwmon3=soc_dts1 hwmon4=f71869a
|
||||||
FCTEMPS=hwmon0/pwm2=hwmon1/temp1_input
|
FCTEMPS=hwmon4/device/pwm1=hwmon3/temp1_input
|
||||||
FCFANS=hwmon0/pwm2=hwmon0/fan2_input
|
FCFANS= hwmon4/device/pwm1=hwmon4/device/fan1_input
|
||||||
MINTEMP=hwmon0/pwm2=25
|
MINTEMP=hwmon4/device/pwm1=35
|
||||||
MAXTEMP=hwmon0/pwm2=60
|
MAXTEMP=hwmon4/device/pwm1=65
|
||||||
MINSTART=hwmon0/pwm2=25
|
MINSTART=hwmon4/device/pwm1=150
|
||||||
MINSTOP=hwmon0/pwm2=10
|
MINSTOP=hwmon4/device/pwm1=0
|
||||||
MINPWM=hwmon0/pwm2=0
|
|
||||||
MAXPWM=hwmon0/pwm2=255
|
|
||||||
'';
|
'';
|
||||||
description = "Contents for configuration file. See <citerefentry><refentrytitle>pwmconfig</refentrytitle><manvolnum>8</manvolnum></citerefentry>.";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
systemd.services.fancontrol = {
|
systemd.services.fancontrol = {
|
||||||
description = "Fan speed control from lm_sensors";
|
unitConfig.Documentation = "man:fancontrol(8)";
|
||||||
|
description = "software fan control";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [ "lm_sensors.service" ];
|
||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "simple";
|
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 {};
|
env = handleTest ./env.nix {};
|
||||||
etcd = handleTestOn ["x86_64-linux"] ./etcd.nix {};
|
etcd = handleTestOn ["x86_64-linux"] ./etcd.nix {};
|
||||||
etcd-cluster = handleTestOn ["x86_64-linux"] ./etcd-cluster.nix {};
|
etcd-cluster = handleTestOn ["x86_64-linux"] ./etcd-cluster.nix {};
|
||||||
|
fancontrol = handleTest ./fancontrol.nix {};
|
||||||
ferm = handleTest ./ferm.nix {};
|
ferm = handleTest ./ferm.nix {};
|
||||||
firefox = handleTest ./firefox.nix {};
|
firefox = handleTest ./firefox.nix {};
|
||||||
firewall = handleTest ./firewall.nix {};
|
firewall = handleTest ./firewall.nix {};
|
||||||
|
|
|
@ -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 New Issue