diff --git a/machines/wixos/configuration.nix b/machines/wixos/configuration.nix index a7f2916..66ce114 100644 --- a/machines/wixos/configuration.nix +++ b/machines/wixos/configuration.nix @@ -17,6 +17,15 @@ enable = true; wayland = true; }; + nvidia = { + enable = true; + package = "latest"; + graphics.extraPackages = with pkgs; [ + mesa + libvdpau-va-gl + libva-vdpau-driver + ]; + }; users.enable = true; }; @@ -29,28 +38,13 @@ wsl.wslConf.network.hostname = "wixos"; wsl.wslConf.user.default = "johno"; - services.xserver.videoDrivers = [ "nvidia" ]; - hardware.graphics = { - enable = true; - - extraPackages = with pkgs; [ - mesa - libvdpau-va-gl - libva-vdpau-driver - ]; - }; + # WSL-specific environment variables for graphics environment.sessionVariables = { LD_LIBRARY_PATH = [ "/usr/lib/wsl/lib" "/run/opengl-driver/lib" ]; }; - hardware.nvidia = { - modesetting.enable = true; - nvidiaSettings = true; - open = true; - package = config.boot.kernelPackages.nvidiaPackages.latest; - }; # This value determines the NixOS release from which the default # settings for stateful data, like file locations and database versions diff --git a/machines/zix790prors/configuration.nix b/machines/zix790prors/configuration.nix index 361e989..7c0b0d0 100644 --- a/machines/zix790prors/configuration.nix +++ b/machines/zix790prors/configuration.nix @@ -26,7 +26,10 @@ with lib; x11 = true; }; nfs-mounts.enable = true; - nvidia.enable = true; + nvidia = { + enable = true; + graphics.enable32Bit = true; + }; printing.enable = true; remote-build.enableBuilder = true; users.enable = true; @@ -47,27 +50,11 @@ with lib; # Fix dual boot clock sync - tell Linux to use local time for hardware clock time.hardwareClockInLocalTime = true; - # NVIDIA Graphics configuration - services.xserver.videoDrivers = [ "nvidia" ]; - hardware.graphics.enable = true; - hardware.graphics.enable32Bit = true; - # Set DP-0 as primary display with 164.90Hz refresh rate services.xserver.displayManager.sessionCommands = '' ${pkgs.xorg.xrandr}/bin/xrandr --output DP-0 --mode 3440x1440 --rate 164.90 --primary ''; - hardware.nvidia = { - modesetting.enable = true; - nvidiaSettings = true; - package = pkgs.linuxPackages.nvidiaPackages.stable; - open = true; - - # For gaming performance - powerManagement.enable = false; - powerManagement.finegrained = false; - }; - services.ollama = { enable = true; acceleration = "cuda"; diff --git a/roles/nvidia/default.nix b/roles/nvidia/default.nix index 6de9375..d314d0c 100644 --- a/roles/nvidia/default.nix +++ b/roles/nvidia/default.nix @@ -8,9 +8,89 @@ in { options.roles.nvidia = { enable = mkEnableOption "Enable the nvidia role"; + + # Driver configuration options + open = mkOption { + type = types.bool; + default = true; + description = "Use the open source nvidia kernel driver (for Turing and newer GPUs)."; + }; + + modesetting = mkOption { + type = types.bool; + default = true; + description = "Enable kernel modesetting for nvidia."; + }; + + nvidiaSettings = mkOption { + type = types.bool; + default = true; + description = "Enable the nvidia-settings GUI."; + }; + + package = mkOption { + type = types.enum [ "stable" "latest" "beta" "vulkan_beta" "production" ]; + default = "stable"; + description = "The nvidia driver package to use."; + }; + + powerManagement = { + enable = mkOption { + type = types.bool; + default = false; + description = "Enable nvidia power management (useful for laptops, not recommended for desktops)."; + }; + + finegrained = mkOption { + type = types.bool; + default = false; + description = "Enable fine-grained power management for Turing and newer GPUs."; + }; + }; + + graphics = { + enable = mkOption { + type = types.bool; + default = true; + description = "Enable hardware graphics support."; + }; + + enable32Bit = mkOption { + type = types.bool; + default = false; + description = "Enable 32-bit graphics libraries (needed for some games)."; + }; + + extraPackages = mkOption { + type = types.listOf types.package; + default = []; + description = "Extra packages to add to hardware.graphics.extraPackages."; + }; + }; }; config = mkIf cfg.enable { + # Set xserver video driver + services.xserver.videoDrivers = [ "nvidia" ]; + + # Graphics configuration + hardware.graphics = { + enable = cfg.graphics.enable; + enable32Bit = cfg.graphics.enable32Bit; + extraPackages = cfg.graphics.extraPackages; + }; + + # NVIDIA driver configuration + hardware.nvidia = { + modesetting.enable = cfg.modesetting; + nvidiaSettings = cfg.nvidiaSettings; + open = cfg.open; + package = config.boot.kernelPackages.nvidiaPackages.${cfg.package}; + powerManagement.enable = cfg.powerManagement.enable; + powerManagement.finegrained = cfg.powerManagement.finegrained; + }; + + # Additional packages for nvidia support environment.systemPackages = with pkgs; [ libva-utils nvidia-vaapi-driver