portfolio: 0.71.2 -> 0.72.2 (#360387)
[NixPkgs.git] / nixos / modules / services / misc / tuxclocker.nix
blobccbd4c6980e0f70e505df8d262293e5d6645792b
1 { config, pkgs, lib, ... }:
2 let
3   cfg = config.programs.tuxclocker;
4 in
6   options.programs.tuxclocker = {
7     enable = lib.mkEnableOption ''
8       TuxClocker, a hardware control and monitoring program
9     '';
11     enableAMD = lib.mkEnableOption ''
12       AMD GPU controls.
13       Sets the `amdgpu.ppfeaturemask` kernel parameter to 0xfffd7fff to enable all TuxClocker controls
14     '';
16     enabledNVIDIADevices = lib.mkOption {
17       type = lib.types.listOf lib.types.int;
18       default = [ ];
19       example = [ 0 1 ];
20       description = ''
21         Enable NVIDIA GPU controls for a device by index.
22         Sets the `Coolbits` Xorg option to enable all TuxClocker controls.
23       '';
24     };
26     useUnfree = lib.mkOption {
27       type = lib.types.bool;
28       default = false;
29       example = true;
30       description = ''
31         Whether to use components requiring unfree dependencies.
32         Disabling this allows you to get everything from the binary cache.
33       '';
34     };
35   };
37   config = let
38       package = if cfg.useUnfree then pkgs.tuxclocker else pkgs.tuxclocker-without-unfree;
39     in
40       lib.mkIf cfg.enable {
41         environment.systemPackages = [
42           package
43         ];
45         services.dbus.packages = [
46           package
47         ];
49         # MSR is used for some features
50         boot.kernelModules = [ "msr" ];
52         # https://download.nvidia.com/XFree86/Linux-x86_64/430.14/README/xconfigoptions.html#Coolbits
53         services.xserver.config = let
54           configSection = (i: ''
55             Section "Device"
56               Driver "nvidia"
57               Option "Coolbits" "31"
58               Identifier "Device-nvidia[${toString i}]"
59             EndSection
60           '');
61         in
62           lib.concatStrings (map configSection cfg.enabledNVIDIADevices);
64         # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/amd/include/amd_shared.h#n207
65         # Enable everything modifiable in TuxClocker
66         boot.kernelParams = lib.mkIf cfg.enableAMD [ "amdgpu.ppfeaturemask=0xfffd7fff" ];
67       };