diff options
Diffstat (limited to 'pkgs/games/steam/fhsenv.nix')
-rw-r--r-- | pkgs/games/steam/fhsenv.nix | 94 |
1 files changed, 76 insertions, 18 deletions
diff --git a/pkgs/games/steam/fhsenv.nix b/pkgs/games/steam/fhsenv.nix index 2c7cde78c43..b2c303caa54 100644 --- a/pkgs/games/steam/fhsenv.nix +++ b/pkgs/games/steam/fhsenv.nix @@ -6,6 +6,7 @@ , nativeOnly ? false , runtimeOnly ? false , runtimeShell +, stdenv # DEPRECATED , withJava ? config.steam.java or false @@ -28,35 +29,49 @@ let # Needed by gdialog, including in the steam-runtime perl # Open URLs - xdg_utils + xdg-utils iana-etc # Steam Play / Proton python3 # Steam VR procps usbutils - ] ++ lib.optional withJava jdk + + # electron based launchers need newer versions of these libraries than what runtime provides + mesa + sqlite + ] ++ lib.optional withJava jdk8 # TODO: upgrade https://github.com/NixOS/nixpkgs/pull/89731 ++ lib.optional withPrimus primus ++ extraPkgs pkgs; - 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); + 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 = '' - export LD_LIBRARY_PATH=/lib32:/lib64:${lib.concatStringsSep ":" ldPath}\''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH + 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 + ''; + setupSh = writeScript "setup.sh" '' #!${runtimeShell} ''; runSh = writeScript "run.sh" '' #!${runtimeShell} - runtime_paths="/lib32:/lib64:${lib.concatStringsSep ":" ldPath}" + runtime_paths="${lib.concatStringsSep ":" ldPath}" if [ "$1" == "--print-steam-runtime-library-paths" ]; then - echo "$runtime_paths" + echo "$runtime_paths''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH" exit 0 fi export LD_LIBRARY_PATH="$runtime_paths''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH" @@ -70,7 +85,7 @@ in buildFHSUserEnv rec { targetPkgs = pkgs: with pkgs; [ steamPackages.steam # License agreement - gnome3.zenity + gnome.zenity ] ++ commonTargetPkgs pkgs; multiPkgs = pkgs: with pkgs; [ @@ -83,13 +98,17 @@ in buildFHSUserEnv rec { xorg.libXfixes libGL libva + pipewire.lib # Not formally in runtime but needed by some games 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 + libxkbcommon # paradox launcher mono xorg.xkeyboardconfig xorg.libpciaccess @@ -117,7 +136,29 @@ in buildFHSUserEnv rec { libGLU libuuid libbsd - alsaLib + alsa-lib + + # Loop Hero + libidn2 + libpsl + nghttp2.lib + openssl_1_1 + rtmpdump + + # needed by getcap for vr startup + libcap + + # dependencies for mesa drivers, needed inside pressure-vessel + mesa.drivers + mesa.llvmPackages.llvm.lib + vulkan-loader + expat + wayland + xorg.libxcb + xorg.libXdamage + xorg.libxshmfence + xorg.libXxf86vm + libelf ] ++ (if (!nativeOnly) then [ (steamPackages.steam-runtime-wrapped.override { inherit runtimeOnly; @@ -155,7 +196,7 @@ in buildFHSUserEnv rec { SDL2 libusb1 dbus-glib - libav + ffmpeg atk # Only libraries are needed from those two libudev0-shim @@ -170,12 +211,9 @@ in buildFHSUserEnv rec { SDL SDL2_image glew110 - openssl libidn tbb wayland - mesa - libxkbcommon # Other things from runtime flac @@ -193,8 +231,6 @@ in buildFHSUserEnv rec { SDL_mixer SDL2_ttf SDL2_mixer - gstreamer - gst-plugins-base libappindicator-gtk2 libcaca libcanberra @@ -205,7 +241,14 @@ in buildFHSUserEnv rec { libvdpau ] ++ steamPackages.steam-runtime-wrapped.overridePkgs) ++ extraLibraries pkgs; - extraBuildCommands = if (!nativeOnly) then '' + 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 '' mkdir -p steamrt ln -s ../lib/steam-runtime steamrt/${steam-runtime-wrapped.arch} ${lib.optionalString (steam-runtime-wrapped-i686 != null) '' @@ -218,13 +261,13 @@ in buildFHSUserEnv rec { ${lib.optionalString (steam-runtime-wrapped-i686 != null) '' ln -s /usr/lib32/libbz2.so usr/lib32/libbz2.so.1.0 ''} - ''; + ''); 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 + ln -s ${steam}/share/applications/steam.desktop $out/share/applications/steam.desktop ''; profile = '' @@ -238,6 +281,8 @@ in buildFHSUserEnv rec { fi export STEAM_RUNTIME=${if nativeOnly then "0" else "/steamrt"} + + 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 '' + extraProfile; runScript = writeScript "steam-wrapper.sh" '' @@ -259,6 +304,7 @@ in buildFHSUserEnv rec { fi fi ${lib.optionalString (!nativeOnly) exportLDPath} + ${fixBootstrap} exec steam "$@" ''; @@ -266,12 +312,23 @@ in buildFHSUserEnv rec { broken = nativeOnly; }; + # 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"; targetPkgs = commonTargetPkgs; inherit multiPkgs extraBuildCommands; + inherit unshareIpc unsharePid; + runScript = writeScript "steam-run" '' #!${runtimeShell} run="$1" @@ -281,6 +338,7 @@ in buildFHSUserEnv rec { fi shift ${lib.optionalString (!nativeOnly) exportLDPath} + ${fixBootstrap} exec -- "$run" "$@" ''; }; |