nixpkgs/pkgs/games/steam/chrootenv.nix

251 lines
5.9 KiB
Nix
Raw Normal View History

2019-02-03 16:33:30 +01:00
{ config, stdenv, lib, writeScript, buildFHSUserEnv, steam, glxinfo-i686
, steam-runtime-wrapped, steam-runtime-wrapped-i686 ? null
, extraPkgs ? pkgs: [ ] # extra packages to add to targetPkgs
2018-10-15 01:38:19 +02:00
, extraLibraries ? pkgs: [ ] # extra packages to add to multiPkgs
2018-06-03 23:49:27 +02:00
, extraProfile ? "" # string to append to profile
, nativeOnly ? false
, runtimeOnly ? false
, runtimeShell
2019-02-03 16:33:30 +01:00
# DEPRECATED
, withJava ? config.steam.java or false
, withPrimus ? config.steam.primus or false
}:
2016-04-03 03:19:00 +02:00
let
commonTargetPkgs = pkgs: with pkgs;
[
steamPackages.steam-fonts
# Errors in output without those
pciutils
python2
# Games' dependencies
2018-03-13 11:16:03 +01:00
xorg.xrandr
which
# Needed by gdialog, including in the steam-runtime
perl
# Open URLs
xdg_utils
iana-etc
# Steam Play / Proton
python3
# Steam VR
procps
usbutils
] ++ lib.optional withJava jdk
++ lib.optional withPrimus primus
++ extraPkgs pkgs;
2014-04-23 01:03:14 +02: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);
setupSh = writeScript "setup.sh" ''
#!${runtimeShell}
'';
runSh = writeScript "run.sh" ''
#!${runtimeShell}
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 "$@"
'';
in buildFHSUserEnv rec {
name = "steam";
2014-04-23 01:03:14 +02:00
targetPkgs = pkgs: with pkgs; [
steamPackages.steam
# License agreement
gnome3.zenity
] ++ commonTargetPkgs pkgs;
multiPkgs = pkgs: with pkgs; [
# These are required by steam with proper errors
2018-03-13 11:16:03 +01:00
xorg.libXcomposite
xorg.libXtst
xorg.libXrandr
xorg.libXext
xorg.libX11
xorg.libXfixes
libGL
2014-04-23 01:03:14 +02:00
# Not formally in runtime but needed by some games
gst_all_1.gstreamer
gst_all_1.gst-plugins-ugly
libdrm
2016-09-11 17:17:57 +02:00
mono
2016-10-25 15:11:00 +02:00
xorg.xkeyboardconfig
2018-03-13 11:16:03 +01:00
xorg.libpciaccess
] ++ (if (!nativeOnly) then [
(steamPackages.steam-runtime-wrapped.override {
inherit runtimeOnly;
})
] 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
libappindicator-gtk2
libcaca
libcanberra
libgcrypt
libvpx
librsvg
xorg.libXft
libvdpau
2018-10-15 01:38:19 +02:00
] ++ steamPackages.steam-runtime-wrapped.overridePkgs) ++ extraLibraries pkgs;
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
ln -s ${setupSh} steamrt/setup.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
''}
'';
2014-04-23 01:03:14 +02: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
'';
profile = ''
# Workaround for issue #44254 (Steam cannot connect to friends network)
# https://github.com/NixOS/nixpkgs/issues/44254
if [ -z ''${TZ+x} ]; then
new_TZ="$(readlink -f /etc/localtime | grep -P -o '(?<=/zoneinfo/).*$')"
if [ $? -eq 0 ]; then
export TZ="$new_TZ"
fi
fi
export STEAM_RUNTIME=${if nativeOnly then "0" else "/steamrt"}
2018-06-03 23:49:27 +02:00
'' + extraProfile;
2015-02-05 16:16:02 +01:00
runScript = writeScript "steam-wrapper.sh" ''
#!${runtimeShell}
if [ -f /host/etc/NIXOS ]; then # Check only useful on NixOS
${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
**
WARNING: Steam is not set up. Add the following options to /etc/nixos/configuration.nix
and then run \`sudo nixos-rebuild switch\`:
{
hardware.opengl.driSupport32Bit = true;
hardware.pulseaudio.support32Bit = true;
}
**
EOF
fi
fi
exec steam "$@"
'';
2016-04-03 03:19:00 +02:00
meta = steam.meta // {
broken = nativeOnly;
};
passthru.run = buildFHSUserEnv {
name = "steam-run";
2016-04-03 03:19:00 +02:00
targetPkgs = commonTargetPkgs;
inherit multiPkgs extraBuildCommands;
2016-04-03 03:19:00 +02:00
runScript = writeScript "steam-run" ''
#!${runtimeShell}
run="$1"
if [ "$run" = "" ]; then
echo "Usage: steam-run command-to-run args..." >&2
exit 1
fi
shift
${lib.optionalString (!nativeOnly) "export LD_LIBRARY_PATH=${lib.concatStringsSep ":" ldPath}:$LD_LIBRARY_PATH"}
exec -- "$run" "$@"
'';
};
}