From f8bf2326a4da0aceb6d892e29fccb385dc97d199 Mon Sep 17 00:00:00 2001
From: Nikolay Amiantov <ab@fmap.me>
Date: Fri, 12 Jun 2015 01:58:00 +0300
Subject: [PATCH 01/14] glew-1.10: add package

---
 pkgs/development/libraries/glew/1.10.nix | 52 ++++++++++++++++++++++++
 pkgs/top-level/all-packages.nix          |  1 +
 2 files changed, 53 insertions(+)
 create mode 100644 pkgs/development/libraries/glew/1.10.nix

diff --git a/pkgs/development/libraries/glew/1.10.nix b/pkgs/development/libraries/glew/1.10.nix
new file mode 100644
index 000000000000..8f153baf6cd5
--- /dev/null
+++ b/pkgs/development/libraries/glew/1.10.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchurl, mesa_glu, x11, libXmu, libXi }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  name = "glew-1.10.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/glew/${name}.tgz";
+    sha256 = "01zki46dr5khzlyywr3cg615bcal32dazfazkf360s1znqh17i4r";
+  };
+
+  nativeBuildInputs = [ x11 libXmu libXi ];
+  propagatedNativeBuildInputs = [ mesa_glu ]; # GL/glew.h includes GL/glu.h
+
+  patchPhase = ''
+    sed -i 's|lib64|lib|' config/Makefile.linux
+    ${optionalString (stdenv ? cross) ''
+    sed -i -e 's/\(INSTALL.*\)-s/\1/' Makefile
+    ''}
+  '';
+
+  buildFlags = [ "all" ];
+  installFlags = [ "install.all" ];
+
+  preInstall = ''
+    export GLEW_DEST="$out"
+  '';
+
+  postInstall = ''
+    mkdir -pv $out/share/doc/glew
+    mkdir -p $out/lib/pkgconfig
+    cp glew*.pc $out/lib/pkgconfig
+    cp -r README.txt LICENSE.txt doc $out/share/doc/glew
+  '';
+
+  crossAttrs.makeFlags = [
+    "CC=${stdenv.cross.config}-gcc"
+    "LD=${stdenv.cross.config}-gcc"
+    "AR=${stdenv.cross.config}-ar"
+    "STRIP="
+  ] ++ optional (stdenv.cross.libc == "msvcrt") "SYSTEM=mingw"
+    ++ optional (stdenv.cross.libc == "libSystem") "SYSTEM=darwin";
+
+  meta = with stdenv.lib; {
+    description = "An OpenGL extension loading library for C(++)";
+    homepage = http://glew.sourceforge.net/;
+    license = licenses.free; # different files under different licenses
+      #["BSD" "GLX" "SGI-B" "GPL2"]
+    platforms = platforms.mesaPlatforms;
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index ea926a80dac4..a70ce3e0d3b0 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -6292,6 +6292,7 @@ let
   libgit2_0_21 = callPackage ../development/libraries/git2/0.21.nix { };
 
   glew = callPackage ../development/libraries/glew { };
+  glew110 = callPackage ../development/libraries/glew/1.10.nix { };
 
   glfw = glfw3;
   glfw2 = callPackage ../development/libraries/glfw/2.x.nix { };

From c865eb56ab1a4b47724bfb604bcc7430473ec350 Mon Sep 17 00:00:00 2001
From: Nikolay Amiantov <ab@fmap.me>
Date: Fri, 12 Jun 2015 01:59:57 +0300
Subject: [PATCH 02/14] udev-182: add package (stripped, last version providing
 libudev.so.0)

---
 pkgs/os-specific/linux/udev/182.nix | 34 +++++++++++++++++++++++++++++
 pkgs/top-level/all-packages.nix     |  3 +++
 2 files changed, 37 insertions(+)
 create mode 100644 pkgs/os-specific/linux/udev/182.nix

diff --git a/pkgs/os-specific/linux/udev/182.nix b/pkgs/os-specific/linux/udev/182.nix
new file mode 100644
index 000000000000..fcf06e3e8990
--- /dev/null
+++ b/pkgs/os-specific/linux/udev/182.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, pkgconfig
+, pciutils, utillinux, kmod, usbutils, gperf
+}:
+
+assert stdenv ? glibc;
+
+stdenv.mkDerivation rec {
+  name = "udev-182";
+
+  src = fetchurl {
+    url = "mirror://kernel/linux/utils/kernel/hotplug/${name}.tar.bz2";
+    sha256 = "143qvm0kij26j2l5icnch4x38fajys6li7j0c5mpwi6kqmc8hqx0";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ utillinux kmod usbutils #glib gobjectIntrospection
+                  gperf
+                ];
+
+  configureFlags = [ "--with-pci-ids-path=${pciutils}/share/pci.ids"
+                     "--disable-gudev"
+                     "--disable-introspection"
+                   ];
+
+  NIX_LDFLAGS = [ "-lrt" ];
+
+  meta = with stdenv.lib; {
+    homepage = http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html;
+    description = "Udev manages the /dev filesystem";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index a70ce3e0d3b0..c40301eeb4c6 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -10286,6 +10286,9 @@ let
   udev = pkgs.systemd;
   eudev = callPackage ../os-specific/linux/eudev {};
 
+  # libudev.so.0
+  udev182 = callPackage ../os-specific/linux/udev/182.nix { };
+
   udisks1 = callPackage ../os-specific/linux/udisks/1-default.nix { };
   udisks2 = callPackage ../os-specific/linux/udisks/2-default.nix { };
   udisks = udisks1;

From 6cb8e04a5c03f26ae6c1c524577ab971b769b708 Mon Sep 17 00:00:00 2001
From: Nikolay Amiantov <ab@fmap.me>
Date: Fri, 12 Jun 2015 02:00:35 +0300
Subject: [PATCH 03/14] networkmanager-0.9.8: add package

---
 .../networking/network-manager/0.9.8.nix      | 58 ++++++++++++++++++
 .../network-manager/libnl-3.2.25.patch        | 61 +++++++++++++++++++
 pkgs/top-level/all-packages.nix               |  3 +
 3 files changed, 122 insertions(+)
 create mode 100644 pkgs/tools/networking/network-manager/0.9.8.nix
 create mode 100644 pkgs/tools/networking/network-manager/libnl-3.2.25.patch

diff --git a/pkgs/tools/networking/network-manager/0.9.8.nix b/pkgs/tools/networking/network-manager/0.9.8.nix
new file mode 100644
index 000000000000..fe19550bc67f
--- /dev/null
+++ b/pkgs/tools/networking/network-manager/0.9.8.nix
@@ -0,0 +1,58 @@
+{ stdenv, fetchurl, intltool, pkgconfig, dbus_glib
+, udev, libnl, libuuid, gnutls, dhcp
+, libgcrypt, perl }:
+
+stdenv.mkDerivation rec {
+  name = "network-manager-${version}";
+  version = "0.9.8.10";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/NetworkManager/0.9/NetworkManager-${version}.tar.xz";
+    sha256 = "0wn9qh8r56r8l19dqr68pdl1rv3zg1dv47rfy6fqa91q7li2fk86";
+  };
+
+  preConfigure = ''
+    substituteInPlace tools/glib-mkenums --replace /usr/bin/perl ${perl}/bin/perl
+  '';
+
+  # Right now we hardcode quite a few paths at build time. Probably we should
+  # patch networkmanager to allow passing these path in config file. This will
+  # remove unneeded build-time dependencies.
+  configureFlags = [
+    "--with-distro=exherbo"
+    "--with-dhclient=${dhcp}/sbin/dhclient"
+    "--with-dhcpcd=no"
+    "--with-iptables=no"
+    "--with-udev-dir=\${out}/lib/udev"
+    "--with-resolvconf=no"
+    "--sysconfdir=/etc" "--localstatedir=/var"
+    "--with-dbus-sys-dir=\${out}/etc/dbus-1/system.d"
+    "--with-crypto=gnutls" "--disable-more-warnings"
+    "--with-systemdsystemunitdir=$(out)/etc/systemd/system"
+    "--with-kernel-firmware-dir=/run/current-system/firmware"
+    "--disable-ppp"
+  ];
+
+  buildInputs = [ udev libnl libuuid gnutls libgcrypt ];
+
+  propagatedBuildInputs = [ dbus_glib ];
+
+  nativeBuildInputs = [ intltool pkgconfig ];
+
+  patches =
+    [ ./libnl-3.2.25.patch
+      ./nixos-purity.patch
+    ];
+
+  preInstall =
+    ''
+      installFlagsArray=( "sysconfdir=$out/etc" "localstatedir=$out/var" )
+    '';
+
+  meta = with stdenv.lib; {
+    homepage = http://projects.gnome.org/NetworkManager/;
+    description = "Network configuration and management tool";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/networking/network-manager/libnl-3.2.25.patch b/pkgs/tools/networking/network-manager/libnl-3.2.25.patch
new file mode 100644
index 000000000000..17c2966b7064
--- /dev/null
+++ b/pkgs/tools/networking/network-manager/libnl-3.2.25.patch
@@ -0,0 +1,61 @@
+diff --git a/src/nm-netlink-monitor.c b/src/nm-netlink-monitor.c
+index ba8053e..5ac39d3 100644
+--- a/src/nm-netlink-monitor.c
++++ b/src/nm-netlink-monitor.c
+@@ -177,40 +177,15 @@ link_msg_handler (struct nl_object *obj, void *arg)
+ static int
+ event_msg_recv (struct nl_msg *msg, void *arg)
+ {
+-	struct nl_sock *nlh = arg;
+-	struct nlmsghdr *hdr = nlmsg_hdr (msg);
+ 	struct ucred *creds = nlmsg_get_creds (msg);
+-	const struct sockaddr_nl *snl;
+-	guint32 local_port;
+-	gboolean accept_msg = FALSE;
+-
+-	/* Only messages sent from the kernel */
+-	if (!creds || creds->uid != 0) {
+-		nm_log_dbg (LOGD_HW, "ignoring netlink message from UID %d",
+-		            creds ? creds->uid : -1);
+-		return NL_SKIP;
+-	}
+-
+-	snl = nlmsg_get_src (msg);
+-	g_assert (snl);
+-
+-	/* Accept any messages from the kernel */
+-	if (hdr->nlmsg_pid == 0 || snl->nl_pid == 0)
+-		accept_msg = TRUE;
+ 
+-	/* And any multicast message directed to our netlink PID, since multicast
+-	 * currently requires CAP_ADMIN to use.
+-	 */
+-	local_port = nl_socket_get_local_port (nlh);
+-	if ((hdr->nlmsg_pid == local_port) && snl->nl_groups)
+-		accept_msg = TRUE;
+-
+-	if (accept_msg == FALSE) {
+-		nm_log_dbg (LOGD_HW, "ignoring netlink message from PID %d (local PID %d, multicast %d)",
+-		            hdr->nlmsg_pid,
+-		            local_port,
+-		            (hdr->nlmsg_flags & NLM_F_MULTI));
+-		return NL_SKIP;
++	if (!creds || creds->pid || creds->uid || creds->gid) {
++		if (creds)
++			nm_log_dbg (LOGD_HW, "netlink: received non-kernel message (pid %d uid %d gid %d)",
++			            creds->pid, creds->uid, creds->gid);
++		else
++			nm_log_dbg (LOGD_HW, "netlink: received message without credentials");
++		return NL_STOP;
+ 	}
+ 
+ 	return NL_OK;
+@@ -285,7 +260,7 @@ nlh_setup (struct nl_sock *nlh,
+ {
+ 	int err;
+ 
+-	nl_socket_modify_cb (nlh, NL_CB_MSG_IN, NL_CB_CUSTOM, event_msg_recv, cb_data);
++	nl_socket_modify_cb (nlh, NL_CB_MSG_IN, NL_CB_CUSTOM, event_msg_recv, NULL);
+ 
+ 	if (valid_func)
+ 		nl_socket_modify_cb (nlh, NL_CB_VALID, NL_CB_CUSTOM, valid_func, cb_data);
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index c40301eeb4c6..ca2beb0c5dc4 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -2333,6 +2333,9 @@ let
 
   netselect = callPackage ../tools/networking/netselect { };
 
+  # stripped down, needed by steam
+  networkmanager098 = callPackage ../tools/networking/network-manager/0.9.8.nix { };
+
   networkmanager = callPackage ../tools/networking/network-manager { };
 
   networkmanager_openvpn = callPackage ../tools/networking/network-manager/openvpn.nix { };

From a3ef4b930e3220bf82cd2881a4b95d108f814143 Mon Sep 17 00:00:00 2001
From: Nikolay Amiantov <ab@fmap.me>
Date: Fri, 12 Jun 2015 02:01:23 +0300
Subject: [PATCH 04/14] steam: use native libraries, disable steam-runtime

---
 pkgs/games/steam/chrootenv.nix | 139 +++++++++++++++++++++------------
 1 file changed, 89 insertions(+), 50 deletions(-)

diff --git a/pkgs/games/steam/chrootenv.nix b/pkgs/games/steam/chrootenv.nix
index ffd68562dee8..583e731113da 100644
--- a/pkgs/games/steam/chrootenv.nix
+++ b/pkgs/games/steam/chrootenv.nix
@@ -5,15 +5,11 @@ buildFHSUserEnv {
 
   targetPkgs = pkgs:
     [ pkgs.steam-original
-      pkgs.corefonts
-      pkgs.curl
-      pkgs.dbus
-      pkgs.dpkg
-      pkgs.mono
-      pkgs.python
-      pkgs.gnome2.zenity
-      pkgs.xdg_utils
-      pkgs.xorg.xrandr
+      # Errors in output without those
+      pkgs.pciutils
+      pkgs.python2
+      # Games' dependencies
+      pkgs.xlibs.xrandr
       pkgs.which
     ]
     ++ lib.optional (config.steam.java or false) pkgs.jdk
@@ -21,59 +17,102 @@ buildFHSUserEnv {
     ;
 
   multiPkgs = pkgs:
-    [ pkgs.cairo
+    [ # These are required by steam with proper errors
+      pkgs.xlibs.libXcomposite
+      pkgs.xlibs.libXtst
+      pkgs.xlibs.libXrandr
+      pkgs.xlibs.libXext
+      pkgs.xlibs.libX11
+      pkgs.xlibs.libXfixes
+
       pkgs.glib
-      pkgs.gtk
-      pkgs.gdk_pixbuf
-      pkgs.pango
-
-      pkgs.freetype
-      pkgs.xorg.libICE
-      pkgs.xorg.libSM
-      pkgs.xorg.libX11
-      pkgs.xorg.libXau
-      pkgs.xorg.libxcb
-      pkgs.xorg.libXcursor
-      pkgs.xorg.libXdamage
-      pkgs.xorg.libXdmcp
-      pkgs.xorg.libXext
-      pkgs.xorg.libXfixes
-      pkgs.xorg.libXi
-      pkgs.xorg.libXinerama
-      pkgs.xorg.libXrandr
-      pkgs.xorg.libXrender
-      pkgs.xorg.libXScrnSaver
-      pkgs.xorg.libXtst
-      pkgs.xorg.libXxf86vm
-
-      pkgs.ffmpeg
-      pkgs.libpng12
-      pkgs.mesa
-      pkgs.SDL
-      pkgs.SDL2
-      pkgs.libdrm
-
-      pkgs.libgcrypt
+      pkgs.gtk2
+      pkgs.bzip2
       pkgs.zlib
-
-      pkgs.alsaLib
-      pkgs.libvorbis
-      pkgs.openal
       pkgs.libpulseaudio
+      pkgs.gdk_pixbuf
 
-      pkgs.gst_all_1.gst-plugins-ugly # "Audiosurf 2" needs this
+      # Without these it silently fails
+      pkgs.xlibs.libXinerama
+      pkgs.xlibs.libXdamage
+      pkgs.xlibs.libXcursor
+      pkgs.xlibs.libXrender
+      pkgs.xlibs.libXScrnSaver
+      pkgs.xlibs.libXi
+      pkgs.xlibs.libSM
+      pkgs.xlibs.libICE
+      pkgs.gnome2.GConf
+      pkgs.freetype
+      pkgs.openalSoft
+      pkgs.curl
+      pkgs.nspr
+      pkgs.nss
+      pkgs.fontconfig
+      pkgs.cairo
+      pkgs.pango
+      pkgs.alsaLib
+      pkgs.expat
+      pkgs.dbus
+      pkgs.cups
+      pkgs.libcap
+      pkgs.SDL2
+      pkgs.libusb1
+      pkgs.dbus_glib
+      pkgs.libav
+      pkgs.atk
+      # Only libraries are needed from those two
+      pkgs.udev182
+      pkgs.networkmanager098
+
+      # Verified games requirements
+      pkgs.xlibs.libXmu
+      pkgs.xlibs.libxcb
+      pkgs.xlibs.libpciaccess
+      pkgs.mesa_glu
+      pkgs.libuuid
+      pkgs.libogg
+      pkgs.libvorbis
+      pkgs.SDL
+      pkgs.SDL2_image
+      pkgs.glew110
+      pkgs.openssl
+      pkgs.libidn
+
+      # Other things from runtime
+      pkgs.xlibs.libXinerama
+      pkgs.flac
+      pkgs.freeglut
+      pkgs.libjpeg
+      pkgs.libpng12
+      pkgs.libsamplerate
+      pkgs.libmikmod
+      pkgs.libtheora
+      pkgs.pixman
+      pkgs.speex
+      pkgs.SDL_image
+      pkgs.SDL_ttf
+      pkgs.SDL_mixer
+      pkgs.SDL2_net
+      pkgs.SDL2_ttf
+      pkgs.SDL2_mixer
+      pkgs.gstreamer
+      pkgs.gst_plugins_base
+
+      # Not formally in runtime but needed by some games
+      pkgs.gst_all_1.gstreamer
+      pkgs.gst_all_1.gst-plugins-ugly
     ];
 
   extraBuildCommandsMulti = ''
     cd usr/lib
     ln -sf ../lib64/steam steam
+
+    # FIXME: maybe we should replace this with proper libcurl-gnutls
+    ln -s libcurl.so.4 libcurl-gnutls.so.4
   '';
 
   profile = ''
-    # Ugly workaround for https://github.com/ValveSoftware/steam-for-linux/issues/3504
-    export LD_PRELOAD=/lib32/libpulse.so:/lib64/libpulse.so:/lib32/libasound.so:/lib64/libasound.so:$LD_PRELOAD
-    # Another one for https://github.com/ValveSoftware/steam-for-linux/issues/3801
-    export LD_PRELOAD=/lib32/libstdc++.so:/lib64/libstdc++.so:$LD_PRELOAD
+    ${if config.steam.enableRuntime or false then "" else "export STEAM_RUNTIME=0"}
   '';
 
   runScript = "steam";

From 8b218b7143f139e01f6b3b60b84649c60ca69650 Mon Sep 17 00:00:00 2001
From: Nikolay Amiantov <ab@fmap.me>
Date: Tue, 28 Jul 2015 13:42:11 +0300
Subject: [PATCH 05/14] steam: cut dependencies when using Runtime, migrate
 from config to boolean arguments

---
 pkgs/games/steam/chrootenv.nix  | 31 ++++++++++++++++++++-----------
 pkgs/top-level/all-packages.nix |  7 ++++++-
 2 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/pkgs/games/steam/chrootenv.nix b/pkgs/games/steam/chrootenv.nix
index 583e731113da..a7cdfa9e7c1d 100644
--- a/pkgs/games/steam/chrootenv.nix
+++ b/pkgs/games/steam/chrootenv.nix
@@ -1,4 +1,8 @@
-{ lib, buildFHSUserEnv, config }:
+{ lib, buildFHSUserEnv
+, withRuntime ? false
+, withJava ? false
+, withPrimus ? false
+}:
 
 buildFHSUserEnv {
   name = "steam";
@@ -12,12 +16,12 @@ buildFHSUserEnv {
       pkgs.xlibs.xrandr
       pkgs.which
     ]
-    ++ lib.optional (config.steam.java or false) pkgs.jdk
-    ++ lib.optional (config.steam.primus or false) pkgs.primus
+    ++ lib.optional withJava pkgs.jdk
+    ++ lib.optional withPrimus pkgs.primus
     ;
 
-  multiPkgs = pkgs:
-    [ # These are required by steam with proper errors
+  multiPkgs = pkgs: [
+      # These are required by steam with proper errors
       pkgs.xlibs.libXcomposite
       pkgs.xlibs.libXtst
       pkgs.xlibs.libXrandr
@@ -32,6 +36,10 @@ buildFHSUserEnv {
       pkgs.libpulseaudio
       pkgs.gdk_pixbuf
 
+      # Not formally in runtime but needed by some games
+      pkgs.gst_all_1.gstreamer
+      pkgs.gst_all_1.gst-plugins-ugly
+    ] ++ lib.optionals withRuntime [
       # Without these it silently fails
       pkgs.xlibs.libXinerama
       pkgs.xlibs.libXdamage
@@ -97,10 +105,6 @@ buildFHSUserEnv {
       pkgs.SDL2_mixer
       pkgs.gstreamer
       pkgs.gst_plugins_base
-
-      # Not formally in runtime but needed by some games
-      pkgs.gst_all_1.gstreamer
-      pkgs.gst_all_1.gst-plugins-ugly
     ];
 
   extraBuildCommandsMulti = ''
@@ -111,8 +115,13 @@ buildFHSUserEnv {
     ln -s libcurl.so.4 libcurl-gnutls.so.4
   '';
 
-  profile = ''
-    ${if config.steam.enableRuntime or false then "" else "export STEAM_RUNTIME=0"}
+  profile = if withRuntime then ''
+    export STEAM_RUNTIME=0
+  '' else ''
+    # Ugly workaround for https://github.com/ValveSoftware/steam-for-linux/issues/3504
+    export LD_PRELOAD=/lib32/libpulse.so:/lib64/libpulse.so:/lib32/libasound.so:/lib64/libasound.so:$LD_PRELOAD
+    # Another one for https://github.com/ValveSoftware/steam-for-linux/issues/3801
+    export LD_PRELOAD=/lib32/libstdc++.so:/lib64/libstdc++.so:$LD_PRELOAD
   '';
 
   runScript = "steam";
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index ca2beb0c5dc4..1048b1b9c612 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -13781,7 +13781,12 @@ let
 
   steam-original = lowPrio (callPackage ../games/steam { });
 
-  steam = callPackage ../games/steam/chrootenv.nix { };
+  steam = callPackage ../games/steam/chrootenv.nix {
+    # DEPRECATED
+    withJava = config.steam.java or false;
+    withPrimus = config.steam.primus or false;
+    withRuntime = config.steam.withRuntime or true;
+  };
 
   stuntrally = callPackage ../games/stuntrally { };
 

From 724a82b737ad0981666b287d7ba1dce233d27554 Mon Sep 17 00:00:00 2001
From: Nikolay Amiantov <ab@fmap.me>
Date: Tue, 28 Jul 2015 13:55:47 +0300
Subject: [PATCH 06/14] steam: fix invalid symlinking for i686

---
 pkgs/games/steam/chrootenv.nix | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pkgs/games/steam/chrootenv.nix b/pkgs/games/steam/chrootenv.nix
index a7cdfa9e7c1d..f1ec603d3561 100644
--- a/pkgs/games/steam/chrootenv.nix
+++ b/pkgs/games/steam/chrootenv.nix
@@ -107,12 +107,12 @@ buildFHSUserEnv {
       pkgs.gst_plugins_base
     ];
 
-  extraBuildCommandsMulti = ''
-    cd usr/lib
-    ln -sf ../lib64/steam steam
+  extraBuildCommands = ''
+    [ -d lib64 ] && mv lib64/steam lib
 
     # FIXME: maybe we should replace this with proper libcurl-gnutls
-    ln -s libcurl.so.4 libcurl-gnutls.so.4
+    ( cd lib; ln -s libcurl.so.4 libcurl-gnutls.so.4 )
+    [ -d lib64 ] && ( cd lib64; ln -s libcurl.so.4 libcurl-gnutls.so.4 )
   '';
 
   profile = if withRuntime then ''

From 3bd78123f3d6e74db310eeafbd438bb41f104669 Mon Sep 17 00:00:00 2001
From: Christoph Hrdinka <c.github@hrdinka.at>
Date: Thu, 6 Aug 2015 19:06:38 +0200
Subject: [PATCH 07/14] steam-runtime: init at 2014-04-15

---
 pkgs/games/steam/runtime.nix    | 25 +++++++++++++++++++++++++
 pkgs/top-level/all-packages.nix |  2 ++
 2 files changed, 27 insertions(+)
 create mode 100644 pkgs/games/steam/runtime.nix

diff --git a/pkgs/games/steam/runtime.nix b/pkgs/games/steam/runtime.nix
new file mode 100644
index 000000000000..9c6b07fa1245
--- /dev/null
+++ b/pkgs/games/steam/runtime.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "steam-runtime-${version}";
+  version = "2014-04-15";
+
+  phases = [ "unpackPhase" "installPhase" ];
+
+  src = fetchurl {
+    url = "http://media.steampowered.com/client/runtime/steam-runtime-release_${version}.tar.xz";
+    sha256 = "0i6xp81rjbfn4664h4mmvw0xjwlwvdp6k7cc53jfjadcblw5cf99";
+  };
+
+  installPhase = ''
+    mkdir -p $out
+    mv * $out/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "The official runtime used by Steam";
+    homepage = http://store.steampowered.com/;
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ hrdinka ];
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 1048b1b9c612..bdd7411791bf 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -13788,6 +13788,8 @@ let
     withRuntime = config.steam.withRuntime or true;
   };
 
+  steam-runtime = callPackage ../games/steam/runtime.nix { };
+
   stuntrally = callPackage ../games/stuntrally { };
 
   superTux = callPackage ../games/super-tux { };

From 2f52c62684644a83c185ee662f8e7c2876089c2c Mon Sep 17 00:00:00 2001
From: Christoph Hrdinka <c.github@hrdinka.at>
Date: Thu, 6 Aug 2015 20:21:43 +0200
Subject: [PATCH 08/14] steam: include steam-runtime within chroot

---
 pkgs/games/steam/chrootenv.nix | 204 +++++++++++++++++++--------------
 1 file changed, 116 insertions(+), 88 deletions(-)

diff --git a/pkgs/games/steam/chrootenv.nix b/pkgs/games/steam/chrootenv.nix
index f1ec603d3561..bb459d16819d 100644
--- a/pkgs/games/steam/chrootenv.nix
+++ b/pkgs/games/steam/chrootenv.nix
@@ -1,122 +1,150 @@
-{ lib, buildFHSUserEnv
+{ lib, buildFHSUserEnv, steam-runtime
 , withRuntime ? false
-, withJava ? false
-, withPrimus ? false
+, withJava    ? false
+, withPrimus  ? false
 }:
 
 buildFHSUserEnv {
   name = "steam";
 
-  targetPkgs = pkgs:
-    [ pkgs.steam-original
+  targetPkgs = pkgs: with pkgs; [
+      steam-original
       # Errors in output without those
-      pkgs.pciutils
-      pkgs.python2
+      pciutils
+      python2
       # Games' dependencies
-      pkgs.xlibs.xrandr
-      pkgs.which
+      xlibs.xrandr
+      which
+      # needed by gdialog, including in the steam-runtime
+      perl
     ]
-    ++ lib.optional withJava pkgs.jdk
-    ++ lib.optional withPrimus pkgs.primus
+    ++ lib.optional withJava   jdk
+    ++ lib.optional withPrimus primus
     ;
 
-  multiPkgs = pkgs: [
+  multiPkgs = pkgs: with pkgs; [
       # These are required by steam with proper errors
-      pkgs.xlibs.libXcomposite
-      pkgs.xlibs.libXtst
-      pkgs.xlibs.libXrandr
-      pkgs.xlibs.libXext
-      pkgs.xlibs.libX11
-      pkgs.xlibs.libXfixes
+      xlibs.libXcomposite
+      xlibs.libXtst
+      xlibs.libXrandr
+      xlibs.libXext
+      xlibs.libX11
+      xlibs.libXfixes
 
-      pkgs.glib
-      pkgs.gtk2
-      pkgs.bzip2
-      pkgs.zlib
-      pkgs.libpulseaudio
-      pkgs.gdk_pixbuf
+      glib
+      gtk2
+      bzip2
+      zlib
+      libpulseaudio
+      gdk_pixbuf
 
       # Not formally in runtime but needed by some games
-      pkgs.gst_all_1.gstreamer
-      pkgs.gst_all_1.gst-plugins-ugly
+      gst_all_1.gstreamer
+      gst_all_1.gst-plugins-ugly
     ] ++ lib.optionals withRuntime [
       # Without these it silently fails
-      pkgs.xlibs.libXinerama
-      pkgs.xlibs.libXdamage
-      pkgs.xlibs.libXcursor
-      pkgs.xlibs.libXrender
-      pkgs.xlibs.libXScrnSaver
-      pkgs.xlibs.libXi
-      pkgs.xlibs.libSM
-      pkgs.xlibs.libICE
-      pkgs.gnome2.GConf
-      pkgs.freetype
-      pkgs.openalSoft
-      pkgs.curl
-      pkgs.nspr
-      pkgs.nss
-      pkgs.fontconfig
-      pkgs.cairo
-      pkgs.pango
-      pkgs.alsaLib
-      pkgs.expat
-      pkgs.dbus
-      pkgs.cups
-      pkgs.libcap
-      pkgs.SDL2
-      pkgs.libusb1
-      pkgs.dbus_glib
-      pkgs.libav
-      pkgs.atk
+      xlibs.libXinerama
+      xlibs.libXdamage
+      xlibs.libXcursor
+      xlibs.libXrender
+      xlibs.libXScrnSaver
+      xlibs.libXi
+      xlibs.libSM
+      xlibs.libICE
+      gnome2.GConf
+      freetype
+      openalSoft
+      curl
+      nspr
+      nss
+      fontconfig
+      cairo
+      pango
+      alsaLib
+      expat
+      dbus
+      cups
+      libcap
+      SDL2
+      libusb1
+      dbus_glib
+      libav
+      atk
       # Only libraries are needed from those two
-      pkgs.udev182
-      pkgs.networkmanager098
+      udev182
+      networkmanager098
 
       # Verified games requirements
-      pkgs.xlibs.libXmu
-      pkgs.xlibs.libxcb
-      pkgs.xlibs.libpciaccess
-      pkgs.mesa_glu
-      pkgs.libuuid
-      pkgs.libogg
-      pkgs.libvorbis
-      pkgs.SDL
-      pkgs.SDL2_image
-      pkgs.glew110
-      pkgs.openssl
-      pkgs.libidn
+      xlibs.libXmu
+      xlibs.libxcb
+      xlibs.libpciaccess
+      mesa_glu
+      libuuid
+      libogg
+      libvorbis
+      SDL
+      SDL2_image
+      glew110
+      openssl
+      libidn
 
       # Other things from runtime
-      pkgs.xlibs.libXinerama
-      pkgs.flac
-      pkgs.freeglut
-      pkgs.libjpeg
-      pkgs.libpng12
-      pkgs.libsamplerate
-      pkgs.libmikmod
-      pkgs.libtheora
-      pkgs.pixman
-      pkgs.speex
-      pkgs.SDL_image
-      pkgs.SDL_ttf
-      pkgs.SDL_mixer
-      pkgs.SDL2_net
-      pkgs.SDL2_ttf
-      pkgs.SDL2_mixer
-      pkgs.gstreamer
-      pkgs.gst_plugins_base
+      xlibs.libXinerama
+      flac
+      freeglut
+      libjpeg
+      libpng12
+      libsamplerate
+      libmikmod
+      libtheora
+      pixman
+      speex
+      SDL_image
+      SDL_ttf
+      SDL_mixer
+      SDL2_net
+      SDL2_ttf
+      SDL2_mixer
+      gstreamer
+      gst_plugins_base
     ];
 
   extraBuildCommands = ''
     [ -d lib64 ] && mv lib64/steam lib
 
     # FIXME: maybe we should replace this with proper libcurl-gnutls
-    ( cd lib; ln -s libcurl.so.4 libcurl-gnutls.so.4 )
-    [ -d lib64 ] && ( cd lib64; ln -s libcurl.so.4 libcurl-gnutls.so.4 )
+    ln -s libcurl.so.4 lib/libcurl-gnutls.so.4
+    [ -d lib64 ] && ln -s libcurl.so.4 lib64/libcurl-gnutls.so.4
+  '' + lib.optionals withRuntime ''
+    mkdir -p    steamrt/usr
+    ln -s lib32 steamrt/lib
+
+    if [ -d lib64 ]; then
+      ln -s                    ${steam-runtime}/i386/usr/bin     steamrt/bin
+    else
+      ln -s                    ${steam-runtime}/amd64/usr/bin    steamrt/bin
+    fi
+
+    ln -s                      ${steam-runtime}/i386/etc         steamrt/etc
+    ln -s                      ${steam-runtime}/i386/usr/include steamrt/usr/include
+
+    cp -rsf --no-preserve mode ${steam-runtime}/i386/usr/lib     steamrt/lib32
+    cp -rsf                    ${steam-runtime}/i386/lib/*       steamrt/lib32
+
+    cp -rsf --no-preserve mode ${steam-runtime}/amd64/usr/lib    steamrt/lib64
+    cp -rsf                    ${steam-runtime}/amd64/lib/*      steamrt/lib64
+
+    libs=$(ls -dm --quoting-style=escape steamrt/lib{32,64}/{,*/})
+
+    echo    'export STEAM_RUNTIME=0'                    >  steamrt/profile
+    echo    'export PATH=$PATH:/steamrt/bin'            >> steamrt/profile
+    echo -n 'export LD_LIBRARY_PATH=/'                  >> steamrt/profile
+    echo -n $libs | sed 's/\/, /:\//g' | sed 's/\/$//g' >> steamrt/profile
+    echo    ':$LD_LIBRARY_PATH'                         >> steamrt/profile
   '';
 
   profile = if withRuntime then ''
-    export STEAM_RUNTIME=0
+    source /steamrt/profile
   '' else ''
     # Ugly workaround for https://github.com/ValveSoftware/steam-for-linux/issues/3504
     export LD_PRELOAD=/lib32/libpulse.so:/lib64/libpulse.so:/lib32/libasound.so:/lib64/libasound.so:$LD_PRELOAD

From 8b034964d1e8aca285f601680634130fc954070c Mon Sep 17 00:00:00 2001
From: Nikolay Amiantov <ab@fmap.me>
Date: Sun, 23 Aug 2015 18:12:16 +0300
Subject: [PATCH 09/14] steam-runtime: split by architectures

---
 pkgs/games/steam/runtime.nix | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/pkgs/games/steam/runtime.nix b/pkgs/games/steam/runtime.nix
index 9c6b07fa1245..7e3e03b04e18 100644
--- a/pkgs/games/steam/runtime.nix
+++ b/pkgs/games/steam/runtime.nix
@@ -1,6 +1,10 @@
 { stdenv, fetchurl }:
 
-stdenv.mkDerivation rec {
+let arch = if stdenv.system == "x86_64-linux" then "amd64"
+           else if stdenv.system == "i686-linux" then "i386"
+           else abort "Unsupported platform";
+
+in stdenv.mkDerivation rec {
   name = "steam-runtime-${version}";
   version = "2014-04-15";
 
@@ -13,13 +17,25 @@ stdenv.mkDerivation rec {
 
   installPhase = ''
     mkdir -p $out
-    mv * $out/
+    mv ${arch}/* $out/
   '';
 
+  passthru = rec {
+    inherit arch;
+
+    gnuArch = if arch == "amd64" then "x86_64-linux-gnu"
+              else if arch == "i386" then "i386-linux-gnu"
+              else abort "Unsupported architecture";
+
+    libs = [ "lib/${gnuArch}" "lib" "usr/lib/${gnuArch}" "usr/lib" ];
+    bins = [ "bin" "usr/bin" ];
+  };
+
   meta = with stdenv.lib; {
     description = "The official runtime used by Steam";
-    homepage = http://store.steampowered.com/;
-    license = licenses.unfreeRedistributable;
+    homepage = https://github.com/ValveSoftware/steam-runtime;
+    license = licenses.mit;
     maintainers = with maintainers; [ hrdinka ];
+    hydraPlatforms = [];
   };
 }

From 6c9ee645ec0fb4a140ddf70525ea15df6d1827c7 Mon Sep 17 00:00:00 2001
From: Nikolay Amiantov <ab@fmap.me>
Date: Sun, 23 Aug 2015 18:17:15 +0300
Subject: [PATCH 10/14] steam: add steamPackages namespace, build our own
 runtime

---
 pkgs/games/steam/build-runtime.sh    |  47 +++++++++++
 pkgs/games/steam/chrootenv.nix       | 122 +++------------------------
 pkgs/games/steam/default.nix         |  43 ++--------
 pkgs/games/steam/runtime-wrapped.nix | 109 ++++++++++++++++++++++++
 pkgs/games/steam/steam.nix           |  38 +++++++++
 pkgs/top-level/all-packages.nix      |   8 +-
 6 files changed, 215 insertions(+), 152 deletions(-)
 create mode 100644 pkgs/games/steam/build-runtime.sh
 create mode 100644 pkgs/games/steam/runtime-wrapped.nix
 create mode 100644 pkgs/games/steam/steam.nix

diff --git a/pkgs/games/steam/build-runtime.sh b/pkgs/games/steam/build-runtime.sh
new file mode 100644
index 000000000000..ddf974671a03
--- /dev/null
+++ b/pkgs/games/steam/build-runtime.sh
@@ -0,0 +1,47 @@
+source $stdenv/setup
+
+outp=$out/lib/steam-runtime
+
+buildDir() {
+  paths="$1"
+  pkgs="$2"
+
+  for pkg in $pkgs; do
+    echo "adding package $pkg"
+    for path in $paths; do
+      if [ -d $pkg/$path ]; then
+        cd $pkg/$path
+        for file in *; do
+          found=""
+          for i in $paths; do
+            if [ -e "$outp/$i/$file" ]; then
+              found=1
+              break
+            fi
+          done
+          if [ -z "$found" ]; then
+            mkdir -p $outp/$path
+            ln -s "$pkg/$path/$file" $outp/$path
+            sovers=$(echo $file | perl -ne 'print if s/.*?\.so\.(.*)/\1/')
+            if [ ! -z "$sovers" ]; then
+              fname=''${file%.''${sovers}}
+              for ver in ''${sovers//./ }; do
+                found=""
+                for i in $paths; do
+                  if [ -e "$outp/$i/$fname" ]; then
+                    found=1
+                    break
+                  fi
+                done
+                [ -n "$found" ] || ln -s "$pkg/$path/$file" "$outp/$path/$fname"
+                fname="$fname.$ver"
+              done
+            fi
+          fi
+        done
+      fi
+    done
+  done
+}
+
+eval "$installPhase"
diff --git a/pkgs/games/steam/chrootenv.nix b/pkgs/games/steam/chrootenv.nix
index bb459d16819d..cbf5b92760b3 100644
--- a/pkgs/games/steam/chrootenv.nix
+++ b/pkgs/games/steam/chrootenv.nix
@@ -1,14 +1,13 @@
-{ lib, buildFHSUserEnv, steam-runtime
-, withRuntime ? false
-, withJava    ? false
-, withPrimus  ? false
+{ lib, buildFHSUserEnv
+, withJava   ? false
+, withPrimus ? false
 }:
 
 buildFHSUserEnv {
   name = "steam";
 
   targetPkgs = pkgs: with pkgs; [
-      steam-original
+      steamPackages.steam
       # Errors in output without those
       pciutils
       python2
@@ -31,125 +30,24 @@ buildFHSUserEnv {
       xlibs.libX11
       xlibs.libXfixes
 
-      glib
-      gtk2
-      bzip2
-      zlib
-      libpulseaudio
-      gdk_pixbuf
-
       # Not formally in runtime but needed by some games
       gst_all_1.gstreamer
       gst_all_1.gst-plugins-ugly
-    ] ++ lib.optionals withRuntime [
-      # Without these it silently fails
-      xlibs.libXinerama
-      xlibs.libXdamage
-      xlibs.libXcursor
-      xlibs.libXrender
-      xlibs.libXScrnSaver
-      xlibs.libXi
-      xlibs.libSM
-      xlibs.libICE
-      gnome2.GConf
-      freetype
-      openalSoft
-      curl
-      nspr
-      nss
-      fontconfig
-      cairo
-      pango
-      alsaLib
-      expat
-      dbus
-      cups
-      libcap
-      SDL2
-      libusb1
-      dbus_glib
-      libav
-      atk
-      # Only libraries are needed from those two
-      udev182
-      networkmanager098
 
-      # Verified games requirements
-      xlibs.libXmu
-      xlibs.libxcb
-      xlibs.libpciaccess
-      mesa_glu
-      libuuid
-      libogg
-      libvorbis
-      SDL
-      SDL2_image
-      glew110
-      openssl
-      libidn
-
-      # Other things from runtime
-      xlibs.libXinerama
-      flac
-      freeglut
-      libjpeg
-      libpng12
-      libsamplerate
-      libmikmod
-      libtheora
-      pixman
-      speex
-      SDL_image
-      SDL_ttf
-      SDL_mixer
-      SDL2_net
-      SDL2_ttf
-      SDL2_mixer
-      gstreamer
-      gst_plugins_base
+      steamPackages.steam-runtime-wrapped
     ];
 
   extraBuildCommands = ''
     [ -d lib64 ] && mv lib64/steam lib
 
-    # FIXME: maybe we should replace this with proper libcurl-gnutls
-    ln -s libcurl.so.4 lib/libcurl-gnutls.so.4
-    [ -d lib64 ] && ln -s libcurl.so.4 lib64/libcurl-gnutls.so.4
-  '' + lib.optionals withRuntime ''
-    mkdir -p    steamrt/usr
-    ln -s lib32 steamrt/lib
+    mkdir -p steamrt
 
-    if [ -d lib64 ]; then
-      ln -s                    ${steam-runtime}/i386/usr/bin     steamrt/bin
-    else
-      ln -s                    ${steam-runtime}/amd64/usr/bin    steamrt/bin
-    fi
-
-    ln -s                      ${steam-runtime}/i386/etc         steamrt/etc
-    ln -s                      ${steam-runtime}/i386/usr/include steamrt/usr/include
-
-    cp -rsf --no-preserve mode ${steam-runtime}/i386/usr/lib     steamrt/lib32
-    cp -rsf                    ${steam-runtime}/i386/lib/*       steamrt/lib32
-
-    cp -rsf --no-preserve mode ${steam-runtime}/amd64/usr/lib    steamrt/lib64
-    cp -rsf                    ${steam-runtime}/amd64/lib/*      steamrt/lib64
-
-    libs=$(ls -dm --quoting-style=escape steamrt/lib{32,64}/{,*/})
-
-    echo    'export STEAM_RUNTIME=0'                    >  steamrt/profile
-    echo    'export PATH=$PATH:/steamrt/bin'            >> steamrt/profile
-    echo -n 'export LD_LIBRARY_PATH=/'                  >> steamrt/profile
-    echo -n $libs | sed 's/\/, /:\//g' | sed 's/\/$//g' >> steamrt/profile
-    echo    ':$LD_LIBRARY_PATH'                         >> steamrt/profile
+    ln -s ../lib64/steam-runtime steamrt/amd64
+    ln -s ../lib/steam-runtime steamrt/i386
   '';
 
-  profile = if withRuntime then ''
-    source /steamrt/profile
-  '' else ''
-    # Ugly workaround for https://github.com/ValveSoftware/steam-for-linux/issues/3504
-    export LD_PRELOAD=/lib32/libpulse.so:/lib64/libpulse.so:/lib32/libasound.so:/lib64/libasound.so:$LD_PRELOAD
-    # Another one for https://github.com/ValveSoftware/steam-for-linux/issues/3801
-    export LD_PRELOAD=/lib32/libstdc++.so:/lib64/libstdc++.so:$LD_PRELOAD
+  profile = ''
+    export STEAM_RUNTIME=/steamrt
   '';
 
   runScript = "steam";
diff --git a/pkgs/games/steam/default.nix b/pkgs/games/steam/default.nix
index 2f2ce921176d..c2a28a53ae6e 100644
--- a/pkgs/games/steam/default.nix
+++ b/pkgs/games/steam/default.nix
@@ -1,38 +1,13 @@
-{stdenv, fetchurl, traceDeps ? false}:
+{ pkgs, newScope }:
 
-stdenv.mkDerivation rec {
-  name = "${program}-original-${version}";
-  program = "steam";
-  version = "1.0.0.49";
+let
+  callPackage = newScope self;
 
-  src = fetchurl {
-    url = "http://repo.steampowered.com/steam/pool/steam/s/steam/${program}_${version}.tar.gz";
-    sha256 = "1c1gl5pwvb5gnnnqf5d9hpcjnfjjgmn4lgx8v0fbx1am5xf3p2gx";
+  self = rec {
+    steam-runtime = callPackage ./runtime.nix { };
+    steam-runtime-wrapped = callPackage ./runtime-wrapped.nix { };
+    steam = callPackage ./steam.nix { };
+    steam-chrootenv = callPackage ./chrootenv.nix { };
   };
 
-  traceLog = "/tmp/steam-trace-dependencies.log";
-
-  installPhase = ''
-    make DESTDIR=$out install
-    mv $out/usr/* $out #*/
-    rmdir $out/usr
-
-    rm $out/bin/steamdeps
-    ${stdenv.lib.optionalString traceDeps ''
-      cat > $out/bin/steamdeps <<EOF
-      #! /bin/bash
-      echo \$1 >> ${traceLog}
-      cat \$1 >> ${traceLog}
-      echo >> ${traceLog}
-      EOF
-      chmod +x $out/bin/steamdeps
-    ''}
-  '';
-
-  meta = with stdenv.lib; {
-    description = "A digital distribution platform";
-    homepage = http://store.steampowered.com/;
-    license = licenses.unfree;
-    maintainers = with maintainers; [ jagajaga ];
-  };
-}
+in self
diff --git a/pkgs/games/steam/runtime-wrapped.nix b/pkgs/games/steam/runtime-wrapped.nix
new file mode 100644
index 000000000000..238626c4ab4c
--- /dev/null
+++ b/pkgs/games/steam/runtime-wrapped.nix
@@ -0,0 +1,109 @@
+{ stdenv, perl, pkgs, steam-runtime
+, nativeOnly ? false
+, runtimeOnly ? false
+}:
+
+assert !(nativeOnly && runtimeOnly);
+
+let 
+  runtimePkgs = with pkgs; [
+    # Required
+    glib
+    gtk2
+    bzip2
+    zlib
+    gdk_pixbuf
+
+    # Without these it silently fails
+    xlibs.libXinerama
+    xlibs.libXdamage
+    xlibs.libXcursor
+    xlibs.libXrender
+    xlibs.libXScrnSaver
+    xlibs.libXi
+    xlibs.libSM
+    xlibs.libICE
+    gnome2.GConf
+    freetype
+    curl
+    nspr
+    nss
+    fontconfig
+    cairo
+    pango
+    expat
+    dbus
+    cups
+    libcap
+    SDL2
+    libusb1
+    dbus_glib
+    libav
+    atk
+    # Only libraries are needed from those two
+    udev182
+    networkmanager098
+
+    # Verified games requirements
+    xlibs.libXmu
+    xlibs.libxcb
+    xlibs.libpciaccess
+    mesa_glu
+    libuuid
+    libogg
+    libvorbis
+    SDL
+    SDL2_image
+    glew110
+    openssl
+    libidn
+
+    # Other things from runtime
+    xlibs.libXinerama
+    flac
+    freeglut
+    libjpeg
+    libpng12
+    libsamplerate
+    libmikmod
+    libtheora
+    pixman
+    speex
+    SDL_image
+    SDL_ttf
+    SDL_mixer
+    SDL2_net
+    SDL2_ttf
+    SDL2_mixer
+    gstreamer
+    gst_plugins_base
+  ];
+
+  overridePkgs = with pkgs; [
+    gcc48.cc # libstdc++
+    libpulseaudio
+    alsaLib
+    openalSoft
+  ];
+
+  ourRuntime = if runtimeOnly then []
+               else if nativeOnly then runtimePkgs ++ overridePkgs
+               else overridePkgs;
+  steamRuntime = stdenv.lib.optional (!nativeOnly) steam-runtime;
+
+in stdenv.mkDerivation rec {
+  name = "steam-runtime-wrapped";
+
+  allPkgs = ourRuntime ++ steamRuntime;
+
+  nativeBuildInputs = [ perl ];
+
+  builder = ./build-runtime.sh;
+
+  installPhase = ''
+    buildDir "${toString steam-runtime.libs}" "$allPkgs"
+    buildDir "${toString steam-runtime.bins}" "$allPkgs"
+  '';
+
+  meta.hydraPlatforms = [];
+}
diff --git a/pkgs/games/steam/steam.nix b/pkgs/games/steam/steam.nix
new file mode 100644
index 000000000000..2f2ce921176d
--- /dev/null
+++ b/pkgs/games/steam/steam.nix
@@ -0,0 +1,38 @@
+{stdenv, fetchurl, traceDeps ? false}:
+
+stdenv.mkDerivation rec {
+  name = "${program}-original-${version}";
+  program = "steam";
+  version = "1.0.0.49";
+
+  src = fetchurl {
+    url = "http://repo.steampowered.com/steam/pool/steam/s/steam/${program}_${version}.tar.gz";
+    sha256 = "1c1gl5pwvb5gnnnqf5d9hpcjnfjjgmn4lgx8v0fbx1am5xf3p2gx";
+  };
+
+  traceLog = "/tmp/steam-trace-dependencies.log";
+
+  installPhase = ''
+    make DESTDIR=$out install
+    mv $out/usr/* $out #*/
+    rmdir $out/usr
+
+    rm $out/bin/steamdeps
+    ${stdenv.lib.optionalString traceDeps ''
+      cat > $out/bin/steamdeps <<EOF
+      #! /bin/bash
+      echo \$1 >> ${traceLog}
+      cat \$1 >> ${traceLog}
+      echo >> ${traceLog}
+      EOF
+      chmod +x $out/bin/steamdeps
+    ''}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A digital distribution platform";
+    homepage = http://store.steampowered.com/;
+    license = licenses.unfree;
+    maintainers = with maintainers; [ jagajaga ];
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index bdd7411791bf..762e3e6641f2 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -13779,17 +13779,13 @@ let
 
   stardust = callPackage ../games/stardust {};
 
-  steam-original = lowPrio (callPackage ../games/steam { });
-
-  steam = callPackage ../games/steam/chrootenv.nix {
+  steamPackages = callPackage ../games/steam { };
+  steam = steamPackages.steam-chrootenv.override {
     # DEPRECATED
     withJava = config.steam.java or false;
     withPrimus = config.steam.primus or false;
-    withRuntime = config.steam.withRuntime or true;
   };
 
-  steam-runtime = callPackage ../games/steam/runtime.nix { };
-
   stuntrally = callPackage ../games/stuntrally { };
 
   superTux = callPackage ../games/super-tux { };

From 0edcf7802e98d8f2c1d6acebfc41e9a1d62f9ae9 Mon Sep 17 00:00:00 2001
From: Yochai <yochai@titat.info>
Date: Tue, 8 Sep 2015 20:40:58 +0300
Subject: [PATCH 11/14] steam-chrootenv: added libdrm

---
 pkgs/games/steam/chrootenv.nix | 1 +
 1 file changed, 1 insertion(+)

diff --git a/pkgs/games/steam/chrootenv.nix b/pkgs/games/steam/chrootenv.nix
index cbf5b92760b3..b4542d4ed741 100644
--- a/pkgs/games/steam/chrootenv.nix
+++ b/pkgs/games/steam/chrootenv.nix
@@ -33,6 +33,7 @@ buildFHSUserEnv {
       # Not formally in runtime but needed by some games
       gst_all_1.gstreamer
       gst_all_1.gst-plugins-ugly
+      libdrm
 
       steamPackages.steam-runtime-wrapped
     ];

From a7177216c62a5ea626df8fc86d8ed1ff5c2b7591 Mon Sep 17 00:00:00 2001
From: Nikolay Amiantov <ab@fmap.me>
Date: Thu, 15 Oct 2015 14:52:43 +0300
Subject: [PATCH 12/14] steam-chrootenv: added corefonts

---
 pkgs/games/steam/chrootenv.nix | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/pkgs/games/steam/chrootenv.nix b/pkgs/games/steam/chrootenv.nix
index b4542d4ed741..5cc050f9401e 100644
--- a/pkgs/games/steam/chrootenv.nix
+++ b/pkgs/games/steam/chrootenv.nix
@@ -14,8 +14,10 @@ buildFHSUserEnv {
       # Games' dependencies
       xlibs.xrandr
       which
-      # needed by gdialog, including in the steam-runtime
+      # Needed by gdialog, including in the steam-runtime
       perl
+      # Problems with text visibility in some games
+      corefonts
     ]
     ++ lib.optional withJava   jdk
     ++ lib.optional withPrimus primus

From 2286c1894d6307949f5248c917afba19dad940b9 Mon Sep 17 00:00:00 2001
From: Nikolay Amiantov <ab@fmap.me>
Date: Thu, 15 Oct 2015 15:17:13 +0300
Subject: [PATCH 13/14] steam-fonts: init at 1

---
 pkgs/games/steam/default.nix |  1 +
 pkgs/games/steam/fonts.nix   | 19 +++++++++++++++++++
 2 files changed, 20 insertions(+)
 create mode 100644 pkgs/games/steam/fonts.nix

diff --git a/pkgs/games/steam/default.nix b/pkgs/games/steam/default.nix
index c2a28a53ae6e..64f8cfe2c287 100644
--- a/pkgs/games/steam/default.nix
+++ b/pkgs/games/steam/default.nix
@@ -8,6 +8,7 @@ let
     steam-runtime-wrapped = callPackage ./runtime-wrapped.nix { };
     steam = callPackage ./steam.nix { };
     steam-chrootenv = callPackage ./chrootenv.nix { };
+    steam-fonts = callPackage ./fonts.nix { };
   };
 
 in self
diff --git a/pkgs/games/steam/fonts.nix b/pkgs/games/steam/fonts.nix
new file mode 100644
index 000000000000..dab393a86fb3
--- /dev/null
+++ b/pkgs/games/steam/fonts.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation {
+  name = "steam-fonts-1";
+
+  src = fetchurl {
+    url = https://support.steampowered.com/downloads/1974-YFKL-4947/SteamFonts.zip;
+    sha256 = "1cgygmwich5f1jhhbmbkkpnzasjl8gy36xln76n6r2gjh6awqfx0";
+  };
+
+  buildInputs = [ unzip ];
+
+  sourceRoot = ".";
+
+  installPhase = ''
+    mkdir -p $out/share/fonts/truetype
+    cp -r *.TTF *.ttf $out/share/fonts/truetype
+  '';
+}

From 18ddcd28473953bfe4f416f5c0882f2040280fb0 Mon Sep 17 00:00:00 2001
From: Nikolay Amiantov <ab@fmap.me>
Date: Thu, 15 Oct 2015 15:17:28 +0300
Subject: [PATCH 14/14] steam-fonts: use for chrootenv

---
 pkgs/games/steam/chrootenv.nix | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/pkgs/games/steam/chrootenv.nix b/pkgs/games/steam/chrootenv.nix
index 5cc050f9401e..6028883c3633 100644
--- a/pkgs/games/steam/chrootenv.nix
+++ b/pkgs/games/steam/chrootenv.nix
@@ -8,6 +8,7 @@ buildFHSUserEnv {
 
   targetPkgs = pkgs: with pkgs; [
       steamPackages.steam
+      steamPackages.steam-fonts
       # Errors in output without those
       pciutils
       python2
@@ -16,8 +17,6 @@ buildFHSUserEnv {
       which
       # Needed by gdialog, including in the steam-runtime
       perl
-      # Problems with text visibility in some games
-      corefonts
     ]
     ++ lib.optional withJava   jdk
     ++ lib.optional withPrimus primus