nixpkgs/pkgs/games/steam/fhsenv.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

304 lines
7.3 KiB
Nix
Raw Normal View History

{ config, lib, writeScript, buildFHSUserEnv, steam, glxinfo-i686
, steam-runtime-wrapped, steam-runtime-wrapped-i686 ? null
, extraPkgs ? pkgs: [ ] # extra packages to add to targetPkgs
2018-10-14 23:38:19 +00:00
, extraLibraries ? pkgs: [ ] # extra packages to add to multiPkgs
2018-06-03 21:49:27 +00:00
, extraProfile ? "" # string to append to profile
, extraArgs ? "" # arguments to always pass to steam
, runtimeOnly ? false
, runtimeShell
2020-12-20 20:31:27 +00:00
, stdenv
2019-02-03 15:33:30 +00:00
# DEPRECATED
, withJava ? config.steam.java or false
, withPrimus ? config.steam.primus or false
}:
2016-04-03 01:19:00 +00:00
let
commonTargetPkgs = pkgs: with pkgs;
[
# Needed for operating system detection until
# https://github.com/ValveSoftware/steam-for-linux/issues/5909 is resolved
lsb-release
# Errors in output without those
pciutils
# Games' dependencies
2018-03-13 10:16:03 +00:00
xorg.xrandr
which
# Needed by gdialog, including in the steam-runtime
perl
# Open URLs
2021-02-01 08:05:09 +00:00
xdg-utils
iana-etc
# Steam Play / Proton
python3
# Steam VR
procps
usbutils
2020-12-09 02:04:49 +00:00
# electron based launchers need newer versions of these libraries than what runtime provides
mesa
sqlite
2020-09-19 13:29:19 +00:00
] ++ lib.optional withJava jdk8 # TODO: upgrade https://github.com/NixOS/nixpkgs/pull/89731
++ lib.optional withPrimus primus
++ extraPkgs pkgs;
2014-04-22 23:03:14 +00:00
2020-12-20 20:31:27 +00:00
ldPath = lib.optionals stdenv.is64bit [ "/lib64" ]
++ [ "/lib32" ]
++ 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);
# Zachtronics and a few other studios expect STEAM_LD_LIBRARY_PATH to be present
exportLDPath = ''
2020-12-20 20:31:27 +00:00
export LD_LIBRARY_PATH=${lib.concatStringsSep ":" ldPath}''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH
export STEAM_LD_LIBRARY_PATH="$STEAM_LD_LIBRARY_PATH''${STEAM_LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"
'';
# bootstrap.tar.xz has 444 permissions, which means that simple deletes fail
# and steam will not be able to start
fixBootstrap = ''
if [ -r $HOME/.local/share/Steam/bootstrap.tar.xz ]; then
chmod +w $HOME/.local/share/Steam/bootstrap.tar.xz
fi
'';
in buildFHSUserEnv rec {
name = "steam";
2014-04-22 23:03:14 +00:00
targetPkgs = pkgs: with pkgs; [
steamPackages.steam
# License agreement
gnome.zenity
] ++ commonTargetPkgs pkgs;
multiPkgs = pkgs: with pkgs; [
# These are required by steam with proper errors
2018-03-13 10:16:03 +00:00
xorg.libXcomposite
xorg.libXtst
xorg.libXrandr
xorg.libXext
xorg.libX11
xorg.libXfixes
libGL
2020-01-22 17:58:10 +00:00
libva
pipewire.lib
2014-04-22 23:03:14 +00:00
# steamwebhelper
harfbuzz
libthai
pango
# Not formally in runtime but needed by some games
2019-10-19 23:29:37 +00:00
at-spi2-atk
at-spi2-core # CrossCode
gst_all_1.gstreamer
gst_all_1.gst-plugins-ugly
gst_all_1.gst-plugins-base
json-glib # paradox launcher (Stellaris)
libdrm
2021-03-31 16:30:27 +00:00
libxkbcommon # paradox launcher
libvorbis # Dead Cells
2016-09-11 15:17:57 +00:00
mono
2016-10-25 13:11:00 +00:00
xorg.xkeyboardconfig
2018-03-13 10:16:03 +00:00
xorg.libpciaccess
xorg.libXScrnSaver # Dead Cells
udev # shadow of the tomb raider
2022-02-22 02:59:00 +00:00
icu # dotnet runtime, e.g. stardew valley
# screeps dependencies
gtk3
2019-07-14 19:19:09 +00:00
dbus
zlib
atk
cairo
freetype
gdk-pixbuf
2019-07-14 19:19:09 +00:00
fontconfig
# friends options won't display "Launch Game" without it
lsof
# called by steam's setup.sh
file
# Prison Architect
libGLU
libuuid
libbsd
alsa-lib
2021-03-22 21:24:06 +00:00
# Loop Hero
libidn2
libpsl
nghttp2.lib
openssl_1_1
rtmpdump
# dependencies for mesa drivers, needed inside pressure-vessel
mesa.llvmPackages.llvm.lib
vulkan-loader
expat
wayland
xorg.libxcb
xorg.libXdamage
xorg.libxshmfence
xorg.libXxf86vm
libelf
2022-02-02 22:38:55 +00:00
# Required
glib
gtk2
bzip2
# Without these it silently fails
xorg.libXinerama
xorg.libXcursor
xorg.libXrender
xorg.libXScrnSaver
xorg.libXi
xorg.libSM
xorg.libICE
gnome2.GConf
curlWithGnuTls
nspr
nss
cups
libcap
SDL2
libusb1
dbus-glib
ffmpeg
# Only libraries are needed from those two
libudev0-shim
# Verified games requirements
xorg.libXt
xorg.libXmu
libogg
libvorbis
SDL
SDL2_image
glew110
libidn
tbb
# Other things from runtime
flac
freeglut
libjpeg
libpng
libpng12
libsamplerate
libmikmod
libtheora
libtiff
pixman
speex
SDL_image
SDL_ttf
SDL_mixer
SDL2_ttf
SDL2_mixer
libappindicator-gtk2
libdbusmenu-gtk2
libindicator-gtk2
libcaca
libcanberra
libgcrypt
libvpx
librsvg
xorg.libXft
libvdpau
2022-02-02 22:38:55 +00:00
]
++ steamPackages.steam-runtime-wrapped.overridePkgs
++ extraLibraries pkgs;
extraInstallCommands = ''
mkdir -p $out/share/applications
ln -s ${steam}/share/icons $out/share
ln -s ${steam}/share/pixmaps $out/share
2020-12-20 23:33:07 +00:00
ln -s ${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
# udev event notifications don't work reliably inside containers.
# SDL2 already tries to automatically detect flatpak and pressure-vessel
# and falls back to inotify-based discovery [1]. We make SDL2 do the
# same by telling it explicitly.
#
# [1] <https://github.com/libsdl-org/SDL/commit/8e2746cfb6e1f1a1da5088241a1440fd2535e321>
export SDL_JOYSTICK_DISABLE_UDEV=1
2018-06-03 21:49:27 +00:00
'' + extraProfile;
2015-02-05 15:16:02 +00: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
2022-02-02 22:38:55 +00:00
${exportLDPath}
${fixBootstrap}
exec steam ${extraArgs} "$@"
'';
2016-04-03 01:19:00 +00:00
2022-02-02 22:38:55 +00:00
inherit (steam) meta;
# allows for some gui applications to share IPC
# this fixes certain issues where they don't render correctly
unshareIpc = false;
# Some applications such as Natron need access to MIT-SHM or other
# shared memory mechanisms. Unsharing the pid namespace
# breaks the ability for application to reference shared memory.
unsharePid = false;
passthru.run = buildFHSUserEnv {
name = "steam-run";
2016-04-03 01:19:00 +00:00
targetPkgs = commonTargetPkgs;
2022-03-27 16:06:53 +00:00
inherit multiPkgs profile extraInstallCommands;
2016-04-03 01:19:00 +00:00
inherit unshareIpc unsharePid;
runScript = writeScript "steam-run" ''
#!${runtimeShell}
run="$1"
if [ "$run" = "" ]; then
echo "Usage: steam-run command-to-run args..." >&2
exit 1
fi
shift
${exportLDPath}
${fixBootstrap}
exec -- "$run" "$@"
'';
meta = steam.meta // {
description = "Run commands in the same FHS environment that is used for Steam";
name = "steam-run";
};
};
}