summary refs log tree commit diff
path: root/pkgs/games/steam/chrootenv.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/games/steam/chrootenv.nix')
-rw-r--r--pkgs/games/steam/chrootenv.nix134
1 files changed, 112 insertions, 22 deletions
diff --git a/pkgs/games/steam/chrootenv.nix b/pkgs/games/steam/chrootenv.nix
index 8fd8c3d7d20..e896c74ca35 100644
--- a/pkgs/games/steam/chrootenv.nix
+++ b/pkgs/games/steam/chrootenv.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, writeScript, buildFHSUserEnv, steam
+{ stdenv, lib, writeScript, buildFHSUserEnv, steam, glxinfo-i686
 , steam-runtime-wrapped, steam-runtime-wrapped-i686 ? null
 , withJava ? false
 , withPrimus ? false
@@ -15,7 +15,7 @@ let
       pciutils
       python2
       # Games' dependencies
-      xlibs.xrandr
+      xorg.xrandr
       which
       # Needed by gdialog, including in the steam-runtime
       perl
@@ -51,15 +51,12 @@ in buildFHSUserEnv rec {
 
   multiPkgs = pkgs: with pkgs; [
     # These are required by steam with proper errors
-    xlibs.libXcomposite
-    xlibs.libXtst
-    xlibs.libXrandr
-    xlibs.libXext
-    xlibs.libX11
-    xlibs.libXfixes
-
-    # Needed to properly check for libGL.so.1 in steam-wrapper.sh
-    pkgsi686Linux.glxinfo
+    xorg.libXcomposite
+    xorg.libXtst
+    xorg.libXrandr
+    xorg.libXext
+    xorg.libX11
+    xorg.libXfixes
 
     # Not formally in runtime but needed by some games
     gst_all_1.gstreamer
@@ -67,20 +64,109 @@ in buildFHSUserEnv rec {
     libdrm
     mono
     xorg.xkeyboardconfig
-    xlibs.libpciaccess
-
+    xorg.libpciaccess
+  ] ++ (if (!nativeOnly) then [
     (steamPackages.steam-runtime-wrapped.override {
-      inherit nativeOnly runtimeOnly;
+      inherit runtimeOnly;
     })
-  ];
-
-  extraBuildCommands = ''
+  ] else [
+    # Required
+    glib
+    gtk2
+    bzip2
+    zlib
+    gdk_pixbuf
+
+    # Without these it silently fails
+    xorg.libXinerama
+    xorg.libXdamage
+    xorg.libXcursor
+    xorg.libXrender
+    xorg.libXScrnSaver
+    xorg.libXxf86vm
+    xorg.libXi
+    xorg.libSM
+    xorg.libICE
+    gnome2.GConf
+    freetype
+    (curl.override { gnutlsSupport = true; sslSupport = false; })
+    nspr
+    nss
+    fontconfig
+    cairo
+    pango
+    expat
+    dbus
+    cups
+    libcap
+    SDL2
+    libusb1
+    dbus-glib
+    libav
+    atk
+    # Only libraries are needed from those two
+    libudev0-shim
+    networkmanager098
+
+    # Verified games requirements
+    xorg.libXt
+    xorg.libXmu
+    xorg.libxcb
+    libGLU
+    libuuid
+    libogg
+    libvorbis
+    SDL
+    SDL2_image
+    glew110
+    openssl
+    libidn
+    tbb
+    wayland
+    mesa_noglu
+    libxkbcommon
+
+    # Other things from runtime
+    flac
+    freeglut
+    libjpeg
+    libpng12
+    libsamplerate
+    libmikmod
+    libtheora
+    libtiff
+    pixman
+    speex
+    SDL_image
+    SDL_ttf
+    SDL_mixer
+    SDL2_ttf
+    SDL2_mixer
+    gstreamer
+    gst-plugins-base
+    libGLU
+    libappindicator-gtk2
+    libcaca
+    libcanberra
+    libgcrypt
+    libvpx
+    librsvg
+    xorg.libXft
+    libvdpau
+  ] ++ steamPackages.steam-runtime-wrapped.overridePkgs);
+
+  extraBuildCommands = if (!nativeOnly) then ''
     mkdir -p steamrt
     ln -s ../lib/steam-runtime steamrt/${steam-runtime-wrapped.arch}
     ${lib.optionalString (steam-runtime-wrapped-i686 != null) ''
       ln -s ../lib32/steam-runtime steamrt/${steam-runtime-wrapped-i686.arch}
     ''}
     ln -s ${runSh} steamrt/run.sh
+  '' else ''
+    ln -s /usr/lib/libbz2.so usr/lib/libbz2.so.1.0
+    ${lib.optionalString (steam-runtime-wrapped-i686 != null) ''
+      ln -s /usr/lib32/libbz2.so usr/lib32/libbz2.so.1.0
+    ''}
   '';
 
   extraInstallCommands = ''
@@ -91,13 +177,13 @@ in buildFHSUserEnv rec {
   '';
 
   profile = ''
-    export STEAM_RUNTIME=/steamrt
+    export STEAM_RUNTIME=${if nativeOnly then "0" else "/steamrt"}
   '';
 
   runScript = writeScript "steam-wrapper.sh" ''
     #!${stdenv.shell}
     if [ -f /host/etc/NIXOS ]; then   # Check only useful on NixOS
-      glxinfo >/dev/null 2>&1
+      ${glxinfo-i686}/bin/glxinfo >/dev/null 2>&1
       # If there was an error running glxinfo, we know something is wrong with the configuration
       if [ $? -ne 0 ]; then
         cat <<EOF > /dev/stderr
@@ -112,9 +198,13 @@ in buildFHSUserEnv rec {
     EOF
       fi
     fi
-    steam
+    exec steam "$@"
   '';
 
+  meta = steam.meta // {
+    broken = nativeOnly;
+  };
+
   passthru.run = buildFHSUserEnv {
     name = "steam-run";
 
@@ -129,8 +219,8 @@ in buildFHSUserEnv rec {
         exit 1
       fi
       shift
-      export LD_LIBRARY_PATH=${lib.concatStringsSep ":" ldPath}:$LD_LIBRARY_PATH
-      exec "$run" "$@"
+      ${lib.optionalString (!nativeOnly) "export LD_LIBRARY_PATH=${lib.concatStringsSep ":" ldPath}:$LD_LIBRARY_PATH"}
+      exec -- "$run" "$@"
     '';
   };
 }