mirror of
https://github.com/nestriness/nestri.git
synced 2026-03-17 03:43:07 +02:00
feat: WIP s6-overlay and friends
This commit is contained in:
54
packages/scripts/pressure-vent.sh
Normal file
54
packages/scripts/pressure-vent.sh
Normal file
@@ -0,0 +1,54 @@
|
||||
#!/bin/bash
|
||||
# Steam "Pressure Vessel" runtime eliminator.
|
||||
#
|
||||
# Valve ships various pre-packaged runtime environments for games to use.
|
||||
# They are cool, in a way: Most games "just work" with them.
|
||||
# However, such convenience comes at the cost of performance and sometimes reliability.
|
||||
#
|
||||
# Normally, I disable any and all such runtimes and install all the required dependencies myself.
|
||||
# However, running Windows games using Proton enforces use of a runtime.
|
||||
# That runtime is shipped in a "Pressure Vessel" container, which is more isolated.
|
||||
# The worst part is, user-supplied LD_PRELOAD and LD_LIBRARY_PATH are ignored due to that.
|
||||
# That means no primusrun/pvkrun/whatever for Windows games, which sucks.
|
||||
#
|
||||
# This little script's purpose is to cut "Pressure Vessel" out of game's command line.
|
||||
# Be warned that that gives you the ability *and responsibility* to manage the dependencies.
|
||||
# Place pressure-vent.sh after all " -- " in game's launch options, if any.
|
||||
# Placing e.g. "xterm -e" at the start of launch options is an easy way to see logs.
|
||||
# Examples:
|
||||
# primusrun ~/pressure-vent.sh %command%
|
||||
# xterm -e /full/path/to/pressure-vent.sh pvkrun %command%
|
||||
|
||||
|
||||
# Functions
|
||||
cmdprn() {
|
||||
printf '%s:\n%q' "$1" "$2"
|
||||
printf ' %q' "${@:3}"
|
||||
printf '\n\n'
|
||||
}
|
||||
err() {
|
||||
printf '%s\nPress Enter to quit.\n' "$1"
|
||||
read
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Debug
|
||||
cmdprn "Original command line" "$@"
|
||||
printf "LD_PRELOAD:\n%q\n\n" "$LD_PRELOAD"
|
||||
printf "LD_LIBRARY_PATH:\n%q\n\n" "$LD_LIBRARY_PATH"
|
||||
|
||||
# Find Pressure Vessel arguments (between two first "--")
|
||||
((left=1))
|
||||
while [[ left -le $# && "${!left}" != "--" ]]; do
|
||||
((left++))
|
||||
done
|
||||
((right=left+1))
|
||||
while [[ right -le $# && "${!right}" != "--" ]]; do
|
||||
((right++))
|
||||
done
|
||||
[[ right -gt $# ]] && err 'Error processing command line.'
|
||||
# Cut them out
|
||||
set -- "${@:1:left}" "${@:right+1}"
|
||||
cmdprn "Processed command line" "$@" # Debug
|
||||
|
||||
exec "$@" || err "Game terminated with code $?."
|
||||
Reference in New Issue
Block a user