summary refs log tree commit diff
path: root/modules/services/x11/xserver.nix
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2010-05-30 22:00:52 +0000
committerEelco Dolstra <eelco.dolstra@logicblox.com>2010-05-30 22:00:52 +0000
commiteb4c33eecabf30b9e5dd298e396d3046daa60001 (patch)
treee1f188391081f3ab367ead1f7f3106ddfcf3a5fd /modules/services/x11/xserver.nix
parent540c673364ecef13bd0b810d8d7b0dde901bbf78 (diff)
downloadnixlib-eb4c33eecabf30b9e5dd298e396d3046daa60001.tar
nixlib-eb4c33eecabf30b9e5dd298e396d3046daa60001.tar.gz
nixlib-eb4c33eecabf30b9e5dd298e396d3046daa60001.tar.bz2
nixlib-eb4c33eecabf30b9e5dd298e396d3046daa60001.tar.lz
nixlib-eb4c33eecabf30b9e5dd298e396d3046daa60001.tar.xz
nixlib-eb4c33eecabf30b9e5dd298e396d3046daa60001.tar.zst
nixlib-eb4c33eecabf30b9e5dd298e396d3046daa60001.zip
* Added an option to enable support for 32-bit binaries (such as Wine
  or Google Earth) on 64-bit NixOS on NVIDIA hardware.  The 32-bit
  OpenGL library is symlinked from /var/run/opengl-driver-32, which is
  added to the LD_LIBRARY_PATH so that 32-bit binaries can find it.

svn path=/nixos/trunk/; revision=22062
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}