summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--lib/eval-config.nix1
-rw-r--r--modules/programs/bash/bashrc.sh2
-rw-r--r--modules/services/x11/xserver.nix27
3 files changed, 21 insertions, 9 deletions
diff --git a/lib/eval-config.nix b/lib/eval-config.nix
index 49057f2d6da..8a7b225e850 100644
--- a/lib/eval-config.nix
+++ b/lib/eval-config.nix
@@ -33,6 +33,7 @@ rec {
     inherit pkgs modules baseModules;
     modulesPath = ../modules;
     servicesPath = services;
+    pkgs_i686 = import nixpkgs { system = "i686-linux"; };
   };
 
   # Import Nixpkgs, allowing the NixOS option nixpkgs.config to
diff --git a/modules/programs/bash/bashrc.sh b/modules/programs/bash/bashrc.sh
index c4046870746..e43b716a0ce 100644
--- a/modules/programs/bash/bashrc.sh
+++ b/modules/programs/bash/bashrc.sh
@@ -3,7 +3,7 @@ if [ -n "$NOSYSBASHRC" ]; then
 fi
 
 # Initialise a bunch of environment variables.
-export LD_LIBRARY_PATH=/var/run/opengl-driver/lib
+export LD_LIBRARY_PATH=/var/run/opengl-driver/lib:/var/run/opengl-driver-32/lib # !!! only set if needed
 export MODULE_DIR=@modulesTree@/lib/modules
 export NIXPKGS_CONFIG=/nix/etc/config.nix
 export NIXPKGS_ALL=/etc/nixos/nixpkgs
diff --git a/modules/services/x11/xserver.nix b/modules/services/x11/xserver.nix
index 34eefd3023d..a5a4c908bef 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}