diff --git a/pkgs/games/steam/chrootenv.nix b/pkgs/games/steam/chrootenv.nix index 8bb73fc5cef3..4bb81d30027e 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 64f8cfe2c287..ae3fe561272f 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 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 60d06c4b386a..f60d47abf916 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -14896,12 +14896,15 @@ in stockfish = callPackage ../games/stockfish { }; steamPackages = callPackage ../games/steam { }; + steam = steamPackages.steam-chrootenv.override { # DEPRECATED withJava = config.steam.java or false; withPrimus = config.steam.primus or false; }; + steam-run = steam.run; + stepmania = callPackage ../games/stepmania { }; stuntrally = callPackage ../games/stuntrally { };