nixos/preload: init
[NixPkgs.git] / nixos / modules / services / hardware / nvidia-optimus.nix
blob5b5273ed78235b1d1ead40ce0b5fa90bf72a51dc
1 { config, lib, ... }:
3 let kernel = config.boot.kernelPackages; in
7   ###### interface
9   options = {
11     hardware.nvidiaOptimus.disable = lib.mkOption {
12       default = false;
13       type = lib.types.bool;
14       description = lib.mdDoc ''
15         Completely disable the NVIDIA graphics card and use the
16         integrated graphics processor instead.
17       '';
18     };
20   };
23   ###### implementation
25   config = lib.mkIf config.hardware.nvidiaOptimus.disable {
26     boot.blacklistedKernelModules = ["nouveau" "nvidia" "nvidiafb" "nvidia-drm"];
27     boot.kernelModules = [ "bbswitch" ];
28     boot.extraModulePackages = [ kernel.bbswitch ];
30     systemd.services.bbswitch = {
31       description = "Disable NVIDIA Card";
32       wantedBy = [ "multi-user.target" ];
33       serviceConfig = {
34         Type = "oneshot";
35         RemainAfterExit = true;
36         ExecStart = "${kernel.bbswitch}/bin/discrete_vga_poweroff";
37         ExecStop = "${kernel.bbswitch}/bin/discrete_vga_poweron";
38       };
39       path = [ kernel.bbswitch ];
40     };
41   };