diff options
Diffstat (limited to 'modules/nixos/mixins')
| -rw-r--r-- | modules/nixos/mixins/default.nix | 1 | ||||
| -rw-r--r-- | modules/nixos/mixins/nvidia.nix | 51 |
2 files changed, 52 insertions, 0 deletions
diff --git a/modules/nixos/mixins/default.nix b/modules/nixos/mixins/default.nix index 72bc296..f586904 100644 --- a/modules/nixos/mixins/default.nix +++ b/modules/nixos/mixins/default.nix @@ -5,6 +5,7 @@ ./hercules.nix ./kanidm.nix ./nginx.nix + ./nvidia.nix ./promtail.nix ]; } diff --git a/modules/nixos/mixins/nvidia.nix b/modules/nixos/mixins/nvidia.nix new file mode 100644 index 0000000..97a8f2e --- /dev/null +++ b/modules/nixos/mixins/nvidia.nix @@ -0,0 +1,51 @@ +{ config, lib, ... }: + +let + cfg = config.hardware.nvidia; + + # Unlike Nixpkgs, I know all of my GPUs should prefer the open modules after 560 + useOpenModulesByDefault = lib.versionAtLeast config.hardware.nvidia.package.version "560"; +in + +{ + options.hardware.nvidia = { + nvk.enable = lib.mkEnableOption "an NVK specialisation"; + }; + + config = lib.mkMerge [ + { + hardware.nvidia = { + open = useOpenModulesByDefault; + # We usually want this to make suspend, etc. work + powerManagement.enable = lib.mkDefault true; + }; + } + + (lib.mkIf cfg.nvk.enable { + specialisation = { + nvk.configuration = { + boot = { + # required for GSP firmware + kernelParams = [ "nouveau.config=NvGspRm=1" ]; + # we want early KMS + # https://wiki.archlinux.org/title/Kernel_mode_setting#Early_KMS_start + initrd.kernelModules = [ "nouveau" ]; + }; + + hardware = { + graphics.extraPackages = lib.mkForce [ ]; + nvidia-container-toolkit.enable = lib.mkForce false; + }; + + services.xserver.videoDrivers = lib.mkForce [ "modesetting" ]; + + system.nixos.tags = [ "with-nvk" ]; + }; + }; + }) + + (lib.mkIf config.traits.containers.enable { + hardware.nvidia-container-toolkit.enable = true; + }) + ]; +} |
