Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: NixOS/nixpkgs
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 14f812aeef75
Choose a base ref
...
head repository: NixOS/nixpkgs
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 5a78ce30d416
Choose a head ref
  • 1 commit
  • 3 files changed
  • 1 contributor

Commits on Oct 29, 2019

  1. Fancontrol: add test etc from #70933 (#72065)

    * 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.
    evils authored and markuskowa committed Oct 29, 2019
    Copy the full SHA
    5a78ce3 View commit details
Showing with 45 additions and 20 deletions.
  1. +19 −20 nixos/modules/services/hardware/fancontrol.nix
  2. +1 −0 nixos/tests/all-tests.nix
  3. +25 −0 nixos/tests/fancontrol.nix
39 changes: 19 additions & 20 deletions nixos/modules/services/hardware/fancontrol.nix
Original file line number Diff line number Diff line change
@@ -4,42 +4,41 @@ with lib;

let
cfg = config.hardware.fancontrol;
configFile = pkgs.writeText "fan.conf" cfg.config;

in {
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}";
};
};
};
1 change: 1 addition & 0 deletions nixos/tests/all-tests.nix
Original file line number Diff line number Diff line change
@@ -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 changes: 25 additions & 0 deletions nixos/tests/fancontrol.nix
Original file line number Diff line number Diff line change
@@ -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'");
'';
})