2016-04-03 01:19:00 +00:00
|
|
|
{ stdenv, lib, writeScript, buildFHSUserEnv, steam
|
2017-10-15 23:58:04 +00:00
|
|
|
, steam-runtime-wrapped, steam-runtime-wrapped-i686 ? null
|
2016-01-26 21:45:21 +00:00
|
|
|
, withJava ? false
|
2015-08-23 15:17:15 +00:00
|
|
|
, withPrimus ? false
|
2017-05-28 18:04:25 +00:00
|
|
|
, extraPkgs ? pkgs: [ ] # extra packages to add to targetPkgs
|
2016-01-26 21:45:21 +00:00
|
|
|
, nativeOnly ? false
|
|
|
|
, runtimeOnly ? false
|
2015-07-28 10:42:11 +00:00
|
|
|
}:
|
2013-09-13 21:58:59 +00:00
|
|
|
|
2016-04-03 01:19:00 +00:00
|
|
|
let
|
2016-07-11 15:07:55 +00:00
|
|
|
commonTargetPkgs = pkgs: with pkgs;
|
2016-11-08 17:38:42 +00:00
|
|
|
let
|
|
|
|
tzdir = "${pkgs.tzdata}/share/zoneinfo";
|
|
|
|
# I'm not sure if this is the best way to add things like this
|
|
|
|
# to an FHSUserEnv
|
|
|
|
etc-zoneinfo = pkgs.runCommand "zoneinfo" {} ''
|
|
|
|
mkdir -p $out/etc
|
|
|
|
ln -s ${tzdir} $out/etc/zoneinfo
|
|
|
|
ln -s ${tzdir}/UTC $out/etc/localtime
|
|
|
|
'';
|
2016-07-11 15:07:55 +00:00
|
|
|
in [
|
|
|
|
steamPackages.steam-fonts
|
|
|
|
# Errors in output without those
|
|
|
|
pciutils
|
|
|
|
python2
|
|
|
|
# Games' dependencies
|
|
|
|
xlibs.xrandr
|
|
|
|
which
|
|
|
|
# Needed by gdialog, including in the steam-runtime
|
|
|
|
perl
|
|
|
|
# Open URLs
|
|
|
|
xdg_utils
|
2016-11-08 17:38:42 +00:00
|
|
|
# Zoneinfo
|
|
|
|
etc-zoneinfo
|
2017-11-10 12:34:34 +00:00
|
|
|
iana-etc
|
2016-07-11 15:07:55 +00:00
|
|
|
] ++ lib.optional withJava jdk
|
2017-09-10 08:54:06 +00:00
|
|
|
++ lib.optional withPrimus primus
|
2017-05-28 18:04:25 +00:00
|
|
|
++ extraPkgs pkgs;
|
2014-04-22 23:03:14 +00:00
|
|
|
|
2017-11-11 12:51:12 +00:00
|
|
|
ldPath = map (x: "/steamrt/${steam-runtime-wrapped.arch}/" + x) steam-runtime-wrapped.libs
|
|
|
|
++ lib.optionals (steam-runtime-wrapped-i686 != null) (map (x: "/steamrt/${steam-runtime-wrapped-i686.arch}/" + x) steam-runtime-wrapped-i686.libs);
|
|
|
|
|
|
|
|
runSh = writeScript "run.sh" ''
|
|
|
|
#!${stdenv.shell}
|
|
|
|
runtime_paths="${lib.concatStringsSep ":" ldPath}"
|
|
|
|
if [ "$1" == "--print-steam-runtime-library-paths" ]; then
|
|
|
|
echo "$runtime_paths"
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
export LD_LIBRARY_PATH="$runtime_paths:$LD_LIBRARY_PATH"
|
|
|
|
exec "$@"
|
|
|
|
'';
|
|
|
|
|
2016-05-26 11:33:18 +00:00
|
|
|
in buildFHSUserEnv rec {
|
|
|
|
name = "steam";
|
2014-04-22 23:03:14 +00:00
|
|
|
|
2016-05-26 11:33:18 +00:00
|
|
|
targetPkgs = pkgs: with pkgs; [
|
|
|
|
steamPackages.steam
|
|
|
|
# License agreement
|
|
|
|
gnome3.zenity
|
2016-07-11 15:07:55 +00:00
|
|
|
] ++ commonTargetPkgs pkgs;
|
2015-08-06 18:21:43 +00:00
|
|
|
|
2016-05-26 11:33:18 +00:00
|
|
|
multiPkgs = pkgs: with pkgs; [
|
|
|
|
# These are required by steam with proper errors
|
|
|
|
xlibs.libXcomposite
|
|
|
|
xlibs.libXtst
|
|
|
|
xlibs.libXrandr
|
|
|
|
xlibs.libXext
|
|
|
|
xlibs.libX11
|
|
|
|
xlibs.libXfixes
|
2014-04-22 23:03:14 +00:00
|
|
|
|
2017-12-30 20:06:09 +00:00
|
|
|
# Needed to properly check for libGL.so.1 in steam-wrapper.sh
|
|
|
|
pkgsi686Linux.glxinfo
|
|
|
|
|
2016-05-26 11:33:18 +00:00
|
|
|
# Not formally in runtime but needed by some games
|
|
|
|
gst_all_1.gstreamer
|
|
|
|
gst_all_1.gst-plugins-ugly
|
|
|
|
libdrm
|
2016-09-11 15:17:57 +00:00
|
|
|
mono
|
2016-10-25 13:11:00 +00:00
|
|
|
xorg.xkeyboardconfig
|
2017-04-10 10:26:12 +00:00
|
|
|
xlibs.libpciaccess
|
2014-04-22 23:03:14 +00:00
|
|
|
|
2016-05-26 11:33:18 +00:00
|
|
|
(steamPackages.steam-runtime-wrapped.override {
|
2017-09-10 08:54:06 +00:00
|
|
|
inherit nativeOnly runtimeOnly;
|
2016-05-26 11:33:18 +00:00
|
|
|
})
|
|
|
|
];
|
2015-08-06 18:21:43 +00:00
|
|
|
|
2016-05-26 11:33:18 +00:00
|
|
|
extraBuildCommands = ''
|
|
|
|
mkdir -p steamrt
|
2017-10-15 23:58:04 +00:00
|
|
|
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}
|
2016-05-26 11:33:18 +00:00
|
|
|
''}
|
2017-11-11 12:51:12 +00:00
|
|
|
ln -s ${runSh} steamrt/run.sh
|
2016-05-26 11:33:18 +00:00
|
|
|
'';
|
2014-04-22 23:03:14 +00:00
|
|
|
|
2016-05-26 11:33:18 +00:00
|
|
|
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
|
|
|
|
'';
|
2015-12-03 21:57:54 +00:00
|
|
|
|
2016-05-26 11:33:18 +00:00
|
|
|
profile = ''
|
|
|
|
export STEAM_RUNTIME=/steamrt
|
2016-11-08 17:38:42 +00:00
|
|
|
export TZDIR=/etc/zoneinfo
|
2016-05-26 11:33:18 +00:00
|
|
|
'';
|
2015-02-05 15:16:02 +00:00
|
|
|
|
2017-12-30 20:06:09 +00:00
|
|
|
runScript = writeScript "steam-wrapper.sh" ''
|
|
|
|
#!${stdenv.shell}
|
|
|
|
glxinfo >/dev/null 2>&1
|
|
|
|
if [ ! "$?" = "0" ]; then
|
|
|
|
echo "*** WARNING: Test for 32-bit libGL unsuccessful."
|
|
|
|
echo " This could mean you forgot to activate hardware.opengl.driSupport32Bit"
|
|
|
|
fi
|
|
|
|
steam
|
|
|
|
'';
|
2016-04-03 01:19:00 +00:00
|
|
|
|
2016-05-26 11:33:18 +00:00
|
|
|
passthru.run = buildFHSUserEnv {
|
|
|
|
name = "steam-run";
|
2016-04-03 01:19:00 +00:00
|
|
|
|
2016-05-26 11:33:18 +00:00
|
|
|
targetPkgs = commonTargetPkgs;
|
|
|
|
inherit multiPkgs extraBuildCommands;
|
2016-04-03 01:19:00 +00:00
|
|
|
|
2017-11-11 12:51:12 +00:00
|
|
|
runScript = 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" "$@"
|
|
|
|
'';
|
2016-05-26 11:33:18 +00:00
|
|
|
};
|
|
|
|
}
|