grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / hardware / hddfancontrol.nix
blobe8cab0e22befdc3a02ff0b415ce2bf35dc41d285
1 { config, lib, pkgs, ... }:
3 let
4   cfg = config.services.hddfancontrol;
5   types = lib.types;
6 in
9   options = {
11     services.hddfancontrol.enable = lib.mkEnableOption "hddfancontrol daemon";
13     services.hddfancontrol.disks = lib.mkOption {
14       type = with types; listOf path;
15       default = [];
16       description = ''
17         Drive(s) to get temperature from
18       '';
19       example = ["/dev/sda"];
20     };
22     services.hddfancontrol.pwmPaths = lib.mkOption {
23       type = with types; listOf path;
24       default = [];
25       description = ''
26         PWM filepath(s) to control fan speed (under /sys)
27       '';
28       example = ["/sys/class/hwmon/hwmon2/pwm1"];
29     };
31     services.hddfancontrol.smartctl = lib.mkOption {
32       type = types.bool;
33       default = false;
34       description = ''
35         Probe temperature using smartctl instead of hddtemp or hdparm
36       '';
37     };
39     services.hddfancontrol.extraArgs = lib.mkOption {
40       type = with types; listOf str;
41       default = [];
42       description = ''
43         Extra commandline arguments for hddfancontrol
44       '';
45       example = ["--pwm-start-value=32"
46                  "--pwm-stop-value=0"
47                  "--spin-down-time=900"];
48     };
49   };
51   config = lib.mkIf cfg.enable (
52     let args = lib.concatLists [
53       ["-d"] cfg.disks
54       ["-p"] cfg.pwmPaths
55       (lib.optional cfg.smartctl "--smartctl")
56       cfg.extraArgs
57     ]; in {
58       systemd.packages = [pkgs.hddfancontrol];
60       systemd.services.hddfancontrol = {
61         wantedBy = [ "multi-user.target" ];
62         environment.HDDFANCONTROL_ARGS = lib.escapeShellArgs args;
63         serviceConfig = {
64           # Hardening
65           PrivateNetwork = true;
66         };
67       };
68     }
69   );