2019-06-16 21:59:06 +02:00
|
|
|
{ config, lib, writeScript, buildFHSUserEnv, steam, glxinfo-i686
|
2017-10-16 01:58:04 +02:00
|
|
|
, steam-runtime-wrapped, steam-runtime-wrapped-i686 ? null
|
2017-05-28 20:04:25 +02:00
|
|
|
, 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
|
2016-01-26 22:45:21 +01:00
|
|
|
, nativeOnly ? false
|
|
|
|
, runtimeOnly ? false
|
2019-02-26 12:45:54 +01:00
|
|
|
, runtimeShell
|
2020-12-20 21:31:27 +01:00
|
|
|
, stdenv
|
2019-02-03 16:33:30 +01:00
|
|
|
|
|
|
|
# DEPRECATED
|
|
|
|
, withJava ? config.steam.java or false
|
|
|
|
, withPrimus ? config.steam.primus or false
|
2015-07-28 12:42:11 +02:00
|
|
|
}:
|
2013-09-13 23:58:59 +02:00
|
|
|
|
2016-04-03 03:19:00 +02:00
|
|
|
let
|
2016-07-11 17:07:55 +02:00
|
|
|
commonTargetPkgs = pkgs: with pkgs;
|
2018-02-14 12:01:57 +01:00
|
|
|
[
|
2016-07-11 17:07:55 +02:00
|
|
|
steamPackages.steam-fonts
|
2019-08-02 23:49:46 +02:00
|
|
|
# Needed for operating system detection until
|
|
|
|
# https://github.com/ValveSoftware/steam-for-linux/issues/5909 is resolved
|
|
|
|
lsb-release
|
2016-07-11 17:07:55 +02:00
|
|
|
# Errors in output without those
|
|
|
|
pciutils
|
|
|
|
python2
|
|
|
|
# Games' dependencies
|
2018-03-13 11:16:03 +01:00
|
|
|
xorg.xrandr
|
2016-07-11 17:07:55 +02:00
|
|
|
which
|
|
|
|
# Needed by gdialog, including in the steam-runtime
|
|
|
|
perl
|
|
|
|
# Open URLs
|
2021-02-01 09:05:09 +01:00
|
|
|
xdg-utils
|
2017-11-10 13:34:34 +01:00
|
|
|
iana-etc
|
2018-08-31 12:43:08 +02:00
|
|
|
# Steam Play / Proton
|
|
|
|
python3
|
2019-02-03 21:01:42 +01:00
|
|
|
# Steam VR
|
|
|
|
procps
|
|
|
|
usbutils
|
2020-12-09 03:04:49 +01:00
|
|
|
|
|
|
|
# electron based launchers need newer versions of these libraries than what runtime provides
|
|
|
|
mesa
|
|
|
|
sqlite
|
2020-09-19 15:29:19 +02:00
|
|
|
] ++ lib.optional withJava jdk8 # TODO: upgrade https://github.com/NixOS/nixpkgs/pull/89731
|
2017-09-10 10:54:06 +02:00
|
|
|
++ lib.optional withPrimus primus
|
2017-05-28 20:04:25 +02:00
|
|
|
++ extraPkgs pkgs;
|
2014-04-23 01:03:14 +02:00
|
|
|
|
2020-12-20 21:31:27 +01: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);
|
2017-11-11 13:51:12 +01:00
|
|
|
|
2020-07-31 01:51:38 +02:00
|
|
|
# Zachtronics and a few other studios expect STEAM_LD_LIBRARY_PATH to be present
|
|
|
|
exportLDPath = ''
|
2020-12-20 21:31:27 +01:00
|
|
|
export LD_LIBRARY_PATH=${lib.concatStringsSep ":" ldPath}''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH
|
2020-07-31 01:51:38 +02:00
|
|
|
export STEAM_LD_LIBRARY_PATH="$STEAM_LD_LIBRARY_PATH''${STEAM_LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"
|
|
|
|
'';
|
|
|
|
|
2020-12-21 02:27:57 +01:00
|
|
|
# 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
|
|
|
|
'';
|
|
|
|
|
2019-04-16 04:13:05 +02:00
|
|
|
setupSh = writeScript "setup.sh" ''
|
|
|
|
#!${runtimeShell}
|
|
|
|
'';
|
|
|
|
|
2017-11-11 13:51:12 +01:00
|
|
|
runSh = writeScript "run.sh" ''
|
2019-02-26 12:45:54 +01:00
|
|
|
#!${runtimeShell}
|
2020-12-20 21:31:27 +01:00
|
|
|
runtime_paths="${lib.concatStringsSep ":" ldPath}"
|
2017-11-11 13:51:12 +01:00
|
|
|
if [ "$1" == "--print-steam-runtime-library-paths" ]; then
|
2020-12-13 20:01:21 +01:00
|
|
|
echo "$runtime_paths''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"
|
2017-11-11 13:51:12 +01:00
|
|
|
exit 0
|
|
|
|
fi
|
2020-01-02 01:29:34 +01:00
|
|
|
export LD_LIBRARY_PATH="$runtime_paths''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"
|
2020-07-31 01:51:38 +02:00
|
|
|
export STEAM_LD_LIBRARY_PATH="$STEAM_LD_LIBRARY_PATH''${STEAM_LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"
|
2017-11-11 13:51:12 +01:00
|
|
|
exec "$@"
|
|
|
|
'';
|
|
|
|
|
2016-05-26 13:33:18 +02:00
|
|
|
in buildFHSUserEnv rec {
|
|
|
|
name = "steam";
|
2014-04-23 01:03:14 +02:00
|
|
|
|
2016-05-26 13:33:18 +02:00
|
|
|
targetPkgs = pkgs: with pkgs; [
|
|
|
|
steamPackages.steam
|
|
|
|
# License agreement
|
2021-05-07 23:18:14 +02:00
|
|
|
gnome.zenity
|
2016-07-11 17:07:55 +02:00
|
|
|
] ++ commonTargetPkgs pkgs;
|
2015-08-06 20:21:43 +02:00
|
|
|
|
2016-05-26 13:33:18 +02:00
|
|
|
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
|
2018-03-19 10:36:10 +01:00
|
|
|
libGL
|
2020-01-22 18:58:10 +01:00
|
|
|
libva
|
2021-06-08 04:17:46 +02:00
|
|
|
pipewire.lib
|
2014-04-23 01:03:14 +02:00
|
|
|
|
2016-05-26 13:33:18 +02:00
|
|
|
# Not formally in runtime but needed by some games
|
2019-10-20 01:29:37 +02:00
|
|
|
at-spi2-atk
|
2019-12-30 07:25:54 +01:00
|
|
|
at-spi2-core # CrossCode
|
2016-05-26 13:33:18 +02:00
|
|
|
gst_all_1.gstreamer
|
|
|
|
gst_all_1.gst-plugins-ugly
|
2020-09-02 02:21:42 +02:00
|
|
|
gst_all_1.gst-plugins-base
|
2021-05-18 07:04:36 +02:00
|
|
|
json-glib # paradox launcher (Stellaris)
|
2016-05-26 13:33:18 +02:00
|
|
|
libdrm
|
2021-03-31 18:30:27 +02:00
|
|
|
libxkbcommon # paradox launcher
|
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
|
2020-02-25 03:24:21 +01:00
|
|
|
udev # shadow of the tomb raider
|
|
|
|
|
2019-07-14 21:19:09 +02:00
|
|
|
## screeps dependencies
|
2019-10-31 13:13:14 +01:00
|
|
|
gtk3
|
2019-07-14 21:19:09 +02:00
|
|
|
dbus
|
|
|
|
zlib
|
|
|
|
glib
|
|
|
|
atk
|
|
|
|
cairo
|
|
|
|
freetype
|
2019-10-31 13:13:14 +01:00
|
|
|
gdk-pixbuf
|
2019-07-14 21:19:09 +02:00
|
|
|
pango
|
|
|
|
fontconfig
|
2020-02-15 19:00:33 +01:00
|
|
|
|
|
|
|
# friends options won't display "Launch Game" without it
|
|
|
|
lsof
|
2020-02-17 00:49:51 +01:00
|
|
|
|
|
|
|
# called by steam's setup.sh
|
|
|
|
file
|
2020-03-09 21:46:04 +01:00
|
|
|
|
|
|
|
# Prison Architect
|
|
|
|
libGLU
|
|
|
|
libuuid
|
|
|
|
libbsd
|
2021-06-10 04:57:09 +02:00
|
|
|
alsa-lib
|
2021-02-03 21:17:56 +01:00
|
|
|
|
2021-03-22 22:24:06 +01:00
|
|
|
# Loop Hero
|
|
|
|
libidn2
|
|
|
|
libpsl
|
|
|
|
nghttp2.lib
|
|
|
|
openssl_1_1
|
|
|
|
rtmpdump
|
|
|
|
|
2021-02-03 21:17:56 +01:00
|
|
|
# needed by getcap for vr startup
|
|
|
|
libcap
|
|
|
|
|
|
|
|
# dependencies for mesa drivers, needed inside pressure-vessel
|
2021-02-04 01:24:23 +01:00
|
|
|
mesa.drivers
|
2021-07-10 04:19:27 +02:00
|
|
|
mesa.llvmPackages.llvm.lib
|
2021-03-01 20:22:27 +01:00
|
|
|
vulkan-loader
|
2021-02-03 21:17:56 +01:00
|
|
|
expat
|
|
|
|
wayland
|
2021-03-14 13:42:33 +01:00
|
|
|
xorg.libxcb
|
|
|
|
xorg.libXdamage
|
|
|
|
xorg.libxshmfence
|
|
|
|
xorg.libXxf86vm
|
2021-02-03 21:17:56 +01:00
|
|
|
libelf
|
2018-03-16 00:37:42 +01:00
|
|
|
] ++ (if (!nativeOnly) then [
|
2016-05-26 13:33:18 +02:00
|
|
|
(steamPackages.steam-runtime-wrapped.override {
|
2018-03-16 00:37:42 +01:00
|
|
|
inherit runtimeOnly;
|
2016-05-26 13:33:18 +02:00
|
|
|
})
|
2018-03-16 00:37:42 +01:00
|
|
|
] else [
|
|
|
|
# Required
|
|
|
|
glib
|
|
|
|
gtk2
|
|
|
|
bzip2
|
|
|
|
zlib
|
2019-05-22 13:03:39 +02:00
|
|
|
gdk-pixbuf
|
2018-03-16 00:37:42 +01:00
|
|
|
|
|
|
|
# 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
|
2021-02-01 23:05:10 +01:00
|
|
|
ffmpeg
|
2018-03-16 00:37:42 +01:00
|
|
|
atk
|
|
|
|
# Only libraries are needed from those two
|
|
|
|
libudev0-shim
|
|
|
|
networkmanager098
|
|
|
|
|
|
|
|
# Verified games requirements
|
2018-03-20 20:06:14 +01:00
|
|
|
xorg.libXt
|
2018-03-16 00:37:42 +01:00
|
|
|
xorg.libXmu
|
|
|
|
xorg.libxcb
|
|
|
|
libogg
|
|
|
|
libvorbis
|
|
|
|
SDL
|
|
|
|
SDL2_image
|
|
|
|
glew110
|
|
|
|
libidn
|
|
|
|
tbb
|
2018-03-20 20:06:14 +01:00
|
|
|
wayland
|
2018-03-16 00:37:42 +01:00
|
|
|
|
|
|
|
# Other things from runtime
|
|
|
|
flac
|
|
|
|
freeglut
|
|
|
|
libjpeg
|
|
|
|
libpng12
|
|
|
|
libsamplerate
|
|
|
|
libmikmod
|
|
|
|
libtheora
|
|
|
|
libtiff
|
|
|
|
pixman
|
|
|
|
speex
|
|
|
|
SDL_image
|
|
|
|
SDL_ttf
|
|
|
|
SDL_mixer
|
|
|
|
SDL2_ttf
|
|
|
|
SDL2_mixer
|
|
|
|
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;
|
2018-03-16 00:37:42 +01:00
|
|
|
|
2021-03-02 19:46:21 +01:00
|
|
|
extraBuildCommands = ''
|
|
|
|
if [ -f $out/usr/share/vulkan/icd.d/nvidia_icd.json ]; then
|
|
|
|
cp $out/usr/share/vulkan/icd.d/nvidia_icd{,32}.json
|
|
|
|
nvidia32Lib=$(realpath $out/lib32/libGLX_nvidia.so.0 | cut -d'/' -f-4)
|
|
|
|
escapedNvidia32Lib="''${nvidia32Lib//\//\\\/}"
|
|
|
|
sed -i "s/\/nix\/store\/.*\/lib\/libGLX_nvidia\.so\.0/$escapedNvidia32Lib\/lib\/libGLX_nvidia\.so\.0/g" $out/usr/share/vulkan/icd.d/nvidia_icd32.json
|
|
|
|
fi
|
|
|
|
'' + (if (!nativeOnly) then ''
|
2016-05-26 13:33:18 +02:00
|
|
|
mkdir -p steamrt
|
2017-10-16 01:58:04 +02: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 13:33:18 +02:00
|
|
|
''}
|
2017-11-11 13:51:12 +01:00
|
|
|
ln -s ${runSh} steamrt/run.sh
|
2019-04-16 04:13:05 +02:00
|
|
|
ln -s ${setupSh} steamrt/setup.sh
|
2018-03-16 00:37:42 +01:00
|
|
|
'' 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
|
|
|
|
''}
|
2021-03-02 19:46:21 +01:00
|
|
|
'');
|
2014-04-23 01:03:14 +02:00
|
|
|
|
2016-05-26 13:33:18 +02:00
|
|
|
extraInstallCommands = ''
|
|
|
|
mkdir -p $out/share/applications
|
|
|
|
ln -s ${steam}/share/icons $out/share
|
|
|
|
ln -s ${steam}/share/pixmaps $out/share
|
2020-12-21 00:33:07 +01:00
|
|
|
ln -s ${steam}/share/applications/steam.desktop $out/share/applications/steam.desktop
|
2016-05-26 13:33:18 +02:00
|
|
|
'';
|
2015-12-03 22:57:54 +01:00
|
|
|
|
2016-05-26 13:33:18 +02:00
|
|
|
profile = ''
|
2018-11-10 04:17:04 +01:00
|
|
|
# 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
|
|
|
|
|
2018-03-16 00:37:42 +01:00
|
|
|
export STEAM_RUNTIME=${if nativeOnly then "0" else "/steamrt"}
|
2021-02-04 01:24:59 +01:00
|
|
|
|
|
|
|
export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/intel_icd.x86_64.json:/usr/share/vulkan/icd.d/intel_icd.i686.json:/usr/share/vulkan/icd.d/lvp_icd.x86_64.json:/usr/share/vulkan/icd.d/lvp_icd.i686.json:/usr/share/vulkan/icd.d/nvidia_icd.json:/usr/share/vulkan/icd.d/nvidia_icd32.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json:/usr/share/vulkan/icd.d/radeon_icd.i686.json
|
2018-06-03 23:49:27 +02:00
|
|
|
'' + extraProfile;
|
2015-02-05 16:16:02 +01:00
|
|
|
|
2017-12-30 21:06:09 +01:00
|
|
|
runScript = writeScript "steam-wrapper.sh" ''
|
2019-02-26 12:45:54 +01:00
|
|
|
#!${runtimeShell}
|
2017-12-31 11:43:21 +01:00
|
|
|
if [ -f /host/etc/NIXOS ]; then # Check only useful on NixOS
|
2018-03-16 00:37:42 +01:00
|
|
|
${glxinfo-i686}/bin/glxinfo >/dev/null 2>&1
|
2017-12-31 11:43:21 +01:00
|
|
|
# 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\`:
|
2019-02-26 12:45:54 +01:00
|
|
|
{
|
2017-12-31 11:43:21 +01:00
|
|
|
hardware.opengl.driSupport32Bit = true;
|
|
|
|
hardware.pulseaudio.support32Bit = true;
|
|
|
|
}
|
|
|
|
**
|
|
|
|
EOF
|
|
|
|
fi
|
2017-12-30 21:06:09 +01:00
|
|
|
fi
|
2020-07-31 01:51:38 +02:00
|
|
|
${lib.optionalString (!nativeOnly) exportLDPath}
|
2020-12-21 02:27:57 +01:00
|
|
|
${fixBootstrap}
|
2018-03-16 00:37:42 +01:00
|
|
|
exec steam "$@"
|
2017-12-30 21:06:09 +01:00
|
|
|
'';
|
2016-04-03 03:19:00 +02:00
|
|
|
|
2018-03-16 00:37:42 +01:00
|
|
|
meta = steam.meta // {
|
|
|
|
broken = nativeOnly;
|
|
|
|
};
|
|
|
|
|
2020-12-09 03:42:56 +01:00
|
|
|
# allows for some gui applications to share IPC
|
|
|
|
# this fixes certain issues where they don't render correctly
|
|
|
|
unshareIpc = false;
|
|
|
|
|
2021-01-15 19:22:13 +01:00
|
|
|
# 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;
|
|
|
|
|
2016-05-26 13:33:18 +02:00
|
|
|
passthru.run = buildFHSUserEnv {
|
|
|
|
name = "steam-run";
|
2016-04-03 03:19:00 +02:00
|
|
|
|
2016-05-26 13:33:18 +02:00
|
|
|
targetPkgs = commonTargetPkgs;
|
|
|
|
inherit multiPkgs extraBuildCommands;
|
2016-04-03 03:19:00 +02:00
|
|
|
|
2021-01-15 22:12:22 +01:00
|
|
|
inherit unshareIpc unsharePid;
|
|
|
|
|
2017-11-11 13:51:12 +01:00
|
|
|
runScript = writeScript "steam-run" ''
|
2019-02-26 12:45:54 +01:00
|
|
|
#!${runtimeShell}
|
2017-11-11 13:51:12 +01:00
|
|
|
run="$1"
|
|
|
|
if [ "$run" = "" ]; then
|
|
|
|
echo "Usage: steam-run command-to-run args..." >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
shift
|
2020-07-31 01:51:38 +02:00
|
|
|
${lib.optionalString (!nativeOnly) exportLDPath}
|
2020-12-21 02:27:57 +01:00
|
|
|
${fixBootstrap}
|
2018-03-16 00:37:42 +01:00
|
|
|
exec -- "$run" "$@"
|
2017-11-11 13:51:12 +01:00
|
|
|
'';
|
2016-05-26 13:33:18 +02:00
|
|
|
};
|
|
|
|
}
|