summary refs log tree commit diff
path: root/modules/services/x11/xserver.nix
diff options
context:
space:
mode:
Diffstat (limited to 'modules/services/x11/xserver.nix')
-rw-r--r--modules/services/x11/xserver.nix27
1 files changed, 19 insertions, 8 deletions
diff --git a/modules/services/x11/xserver.nix b/modules/services/x11/xserver.nix
index 34eefd3023d8..a5a4c908befa 100644
--- a/modules/services/x11/xserver.nix
+++ b/modules/services/x11/xserver.nix
@@ -1,4 +1,4 @@
-{ config, pkgs, ... }:
+{ config, pkgs, pkgs_i686, ... }:
 
 with pkgs.lib;
 
@@ -199,6 +199,15 @@ in
         '';
       };
 
+      driSupport32Bit = mkOption {
+        default = false;
+        description = ''
+          On 64-bit systems, whether to support Direct Rendering for
+          32-bit applications (such as Wine).  This is currently only
+          supported for the <literal>nvidia</literal> driver.
+        '';
+      };
+
       startOpenSSHAgent = mkOption {
         default = true;
         description = ''
@@ -420,16 +429,18 @@ in
           ''
             rm -f /var/run/opengl-driver
             ${# !!! The OpenGL driver depends on what's detected at runtime.
-              if elem "nvidia" driverNames then ''
-                ln -sf ${kernelPackages.nvidia_x11} /var/run/opengl-driver
-              ''
-        else if elem "nvidiaLegacy" driverNames then ''
-                ln -sf ${kernelPackages.nvidia_x11_legacy} /var/run/opengl-driver
-              ''
+              if elem "nvidia" driverNames then
+                ''
+                  ln -sf ${kernelPackages.nvidia_x11} /var/run/opengl-driver
+                  ${optionalString (pkgs.stdenv.system == "x86_64-linux" && cfg.driSupport32Bit)
+                    "ln -sf ${pkgs_i686.linuxPackages.nvidia_x11.override { libsOnly = true; kernel = null; } } /var/run/opengl-driver-32"}
+                ''
+              else if elem "nvidiaLegacy" driverNames then
+                "ln -sf ${kernelPackages.nvidia_x11_legacy} /var/run/opengl-driver"
               else if cfg.driSupport then
                 "ln -sf ${pkgs.mesa} /var/run/opengl-driver"
               else ""
-             }
+            }
 
             ${cfg.displayManager.job.preStart}