diff options
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/nixos/traits/default.nix | 1 | ||||
| -rw-r--r-- | modules/nixos/traits/nvidia.nix | 47 |
2 files changed, 48 insertions, 0 deletions
diff --git a/modules/nixos/traits/default.nix b/modules/nixos/traits/default.nix index 51682a3..6816c56 100644 --- a/modules/nixos/traits/default.nix +++ b/modules/nixos/traits/default.nix @@ -4,6 +4,7 @@ ./containers.nix ./home-manager.nix ./locale.nix + ./nvidia.nix ./secrets.nix ./tailscale.nix ./zram.nix diff --git a/modules/nixos/traits/nvidia.nix b/modules/nixos/traits/nvidia.nix new file mode 100644 index 0000000..b66fa80 --- /dev/null +++ b/modules/nixos/traits/nvidia.nix @@ -0,0 +1,47 @@ +{ + config, + lib, + pkgs, + ... +}: let + cfg = config.traits.nvidia; + usingNvidia = lib.elem "nvidia" config.services.xserver.videoDrivers; +in { + options.traits.nvidia = { + enable = lib.mkEnableOption "NVIDIA drivers"; + nvk.enable = lib.mkEnableOption "NVK specialisation"; + }; + + config = lib.mkIf cfg.enable (lib.mkMerge [ + { + boot.kernelParams = lib.optional usingNvidia "nvidia_drm.fbdev=1"; + + services.xserver.videoDrivers = ["nvidia"]; + + hardware = { + opengl.extraPackages = [pkgs.vaapiVdpau]; + nvidia = { + package = lib.mkDefault config.boot.kernelPackages.nvidiaPackages.latest; + modesetting.enable = true; + }; + }; + } + + (lib.mkIf cfg.nvk.enable { + specialisation = { + nvk.configuration = { + boot = { + kernelParams = ["nouveau.config=NvGspRm=1"]; + initrd.kernelModules = ["nouveau"]; + }; + + hardware.opengl.extraPackages = lib.mkForce []; + + services.xserver.videoDrivers = lib.mkForce ["modesetting"]; + + system.nixos.tags = ["with-nvk"]; + }; + }; + }) + ]); +} |
