at master 1.6 kB view raw
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}