summary refs log tree commit diff
path: root/pkgs/games/steam
diff options
context:
space:
mode:
authorNikolay Amiantov <ab@fmap.me>2016-04-03 04:19:00 +0300
committerNikolay Amiantov <ab@fmap.me>2016-04-03 16:10:14 +0300
commit192e0c714164a2e537ba3566306c24d9ff888ace (patch)
tree13cfe72e17e5b1fa07b5a584bf8a706ae4ae89c2 /pkgs/games/steam
parent375c410d071bd5773519ef8d6283191b07bb98b1 (diff)
downloadnixpkgs-192e0c714164a2e537ba3566306c24d9ff888ace.tar
nixpkgs-192e0c714164a2e537ba3566306c24d9ff888ace.tar.gz
nixpkgs-192e0c714164a2e537ba3566306c24d9ff888ace.tar.bz2
nixpkgs-192e0c714164a2e537ba3566306c24d9ff888ace.tar.lz
nixpkgs-192e0c714164a2e537ba3566306c24d9ff888ace.tar.xz
nixpkgs-192e0c714164a2e537ba3566306c24d9ff888ace.tar.zst
nixpkgs-192e0c714164a2e537ba3566306c24d9ff888ace.zip
steam-run: add derivation
Diffstat (limited to 'pkgs/games/steam')
-rw-r--r--pkgs/games/steam/chrootenv.nix80
-rw-r--r--pkgs/games/steam/default.nix7
2 files changed, 58 insertions, 29 deletions
diff --git a/pkgs/games/steam/chrootenv.nix b/pkgs/games/steam/chrootenv.nix
index 8bb73fc5cef..4bb81d30027 100644
--- a/pkgs/games/steam/chrootenv.nix
+++ b/pkgs/games/steam/chrootenv.nix
@@ -1,4 +1,5 @@
-{ lib, buildFHSUserEnv, steam
+{ stdenv, lib, writeScript, buildFHSUserEnv, steam
+, steam-runtime, steam-runtime-i686 ? null
 , withJava ? false
 , withPrimus ? false
 , nativeOnly ? false
@@ -6,10 +7,11 @@
 , newStdcpp ? false
 }:
 
-buildFHSUserEnv {
-  name = "steam";
+let
+  self = {
+    name = "steam";
 
-  targetPkgs = pkgs: with pkgs; [
+    targetPkgs = pkgs: with pkgs; [
       steamPackages.steam
       steamPackages.steam-fonts
       # License agreement
@@ -22,15 +24,13 @@ buildFHSUserEnv {
       which
       # Needed by gdialog, including in the steam-runtime
       perl
-    ]
-    ++ lib.optional withJava jdk
-    ++ lib.optional withPrimus (primus.override {
-      stdenv = overrideInStdenv stdenv [ useOldCXXAbi ];
-      stdenv_i686 = overrideInStdenv pkgsi686Linux.stdenv [ useOldCXXAbi ];
-    })
-    ;
+    ] ++ lib.optional withJava jdk
+      ++ lib.optional withPrimus (primus.override {
+           stdenv = overrideInStdenv stdenv [ useOldCXXAbi ];
+           stdenv_i686 = overrideInStdenv pkgsi686Linux.stdenv [ useOldCXXAbi ];
+         });
 
-  multiPkgs = pkgs: with pkgs; [
+    multiPkgs = pkgs: with pkgs; [
       # These are required by steam with proper errors
       xlibs.libXcomposite
       xlibs.libXtst
@@ -49,23 +49,47 @@ buildFHSUserEnv {
       })
     ];
 
-  extraBuildCommands = ''
-    mkdir -p steamrt
+    extraBuildCommands = ''
+      mkdir -p steamrt
+      ln -s ../lib/steam-runtime steamrt/${steam-runtime.arch}
+      ${lib.optionalString (steam-runtime-i686 != null) ''
+        ln -s ../lib32/steam-runtime steamrt/${steam-runtime-i686.arch}
+      ''}
+    '';
 
-    ln -s ../lib64/steam-runtime steamrt/amd64
-    ln -s ../lib32/steam-runtime steamrt/i386
-  '';
+    extraInstallCommands = ''
+      mkdir -p $out/share/applications
+      ln -s ${steam}/share/icons $out/share
+      ln -s ${steam}/share/pixmaps $out/share
+      sed "s,/usr/bin/steam,$out/bin/steam,g" ${steam}/share/applications/steam.desktop > $out/share/applications/steam.desktop
+    '';
 
-  extraInstallCommands = ''
-    mkdir -p $out/share/applications
-    ln -s ${steam}/share/icons $out/share
-    ln -s ${steam}/share/pixmaps $out/share
-    sed "s,/usr/bin/steam,$out/bin/steam,g" ${steam}/share/applications/steam.desktop > $out/share/applications/steam.desktop
-  '';
+    profile = ''
+      export STEAM_RUNTIME=/steamrt
+    '';
 
-  profile = ''
-    export STEAM_RUNTIME=/steamrt
-  '';
+    runScript = "steam";
 
-  runScript = "steam";
-}
+    passthru.run = buildFHSUserEnv (self // {
+      name = "steam-run";
+
+      runScript =
+        let ldPath = map (x: "/steamrt/${steam-runtime.arch}/" + x) steam-runtime.libs
+                   ++ lib.optionals (steam-runtime-i686 != null) (map (x: "/steamrt/${steam-runtime-i686.arch}/" + x) steam-runtime-i686.libs);
+        in writeScript "steam-run" ''
+          #!${stdenv.shell}
+          run="$1"
+          if [ "$run" = "" ]; then
+            echo "Usage: steam-run command-to-run args..." >&2
+            exit 1
+          fi
+          shift
+          export LD_LIBRARY_PATH=${lib.concatStringsSep ":" ldPath}:$LD_LIBRARY_PATH
+          exec "$run" "$@"
+        '';
+
+      passthru = {};
+    });
+  };
+
+in buildFHSUserEnv self
diff --git a/pkgs/games/steam/default.nix b/pkgs/games/steam/default.nix
index 64f8cfe2c28..ae3fe561272 100644
--- a/pkgs/games/steam/default.nix
+++ b/pkgs/games/steam/default.nix
@@ -7,8 +7,13 @@ let
     steam-runtime = callPackage ./runtime.nix { };
     steam-runtime-wrapped = callPackage ./runtime-wrapped.nix { };
     steam = callPackage ./steam.nix { };
-    steam-chrootenv = callPackage ./chrootenv.nix { };
     steam-fonts = callPackage ./fonts.nix { };
+    steam-chrootenv = callPackage ./chrootenv.nix {
+      steam-runtime-i686 =
+        if pkgs.system == "x86_64-linux"
+        then pkgs.pkgsi686Linux.steamPackages.steam-runtime
+        else null;
+    };
   };
 
 in self