1{
2 config,
3 lib,
4 pkgs,
5 ...
6}:
7
8let
9 cfg = config.programs.coolercontrol;
10in
11{
12 ##### interface
13 options = {
14 programs.coolercontrol = {
15 enable = lib.mkEnableOption "CoolerControl GUI & its background services";
16
17 nvidiaSupport = lib.mkOption {
18 type = lib.types.bool;
19 default = lib.elem "nvidia" config.services.xserver.videoDrivers;
20 defaultText = lib.literalExpression "lib.elem \"nvidia\" config.services.xserver.videoDrivers";
21 description = ''
22 Enable support for Nvidia GPUs.
23 '';
24 };
25 };
26 };
27
28 ##### implementation
29 config = lib.mkIf cfg.enable (
30 lib.mkMerge [
31 # Common
32 ({
33 environment.systemPackages = with pkgs.coolercontrol; [
34 coolercontrol-gui
35 ];
36
37 systemd = {
38 packages = with pkgs.coolercontrol; [
39 coolercontrol-liqctld
40 coolercontrold
41 ];
42
43 # https://github.com/NixOS/nixpkgs/issues/81138
44 services = {
45 coolercontrol-liqctld.wantedBy = [ "multi-user.target" ];
46 coolercontrold.wantedBy = [ "multi-user.target" ];
47 };
48 };
49 })
50
51 # Nvidia support
52 (lib.mkIf cfg.nvidiaSupport {
53 systemd.services.coolercontrold.path =
54 let
55 nvidiaPkg = config.hardware.nvidia.package;
56 in
57 [
58 nvidiaPkg # nvidia-smi
59 nvidiaPkg.settings # nvidia-settings
60 ];
61 })
62 ]
63 );
64
65 meta.maintainers = with lib.maintainers; [
66 OPNA2608
67 codifryed
68 ];
69}