From eb4c33eecabf30b9e5dd298e396d3046daa60001 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Sun, 30 May 2010 22:00:52 +0000 Subject: [PATCH] * 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 --- lib/eval-config.nix | 1 + modules/programs/bash/bashrc.sh | 2 +- modules/services/x11/xserver.nix | 27 +++++++++++++++++++-------- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/lib/eval-config.nix b/lib/eval-config.nix index 49057f2d6dab..8a7b225e8500 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 c40468707465..e43b716a0ce2 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 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 nvidia 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}