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