blob: ed0c7d07cb1d148d86a1a5fa3411db2107007d01 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
|
{ inputs }:
let
pkgs2505 = import inputs.nixpkgs2505 { };
pkgs2003 = import inputs.nixpkgs2003 { };
ldPath = [ "/lib64" ] ++ [ "/lib32" ];
exportLDPath =
lib: with lib; ''
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"
# '';
envScript = ''
# prevents various error messages
unset GIO_EXTRA_MODULES
# This is needed for IME (e.g. iBus, fcitx5) to function correctly on non-CJK locales
# https://github.com/ValveSoftware/steam-for-linux/issues/781#issuecomment-2004757379
GTK_IM_MODULE='xim'
'';
in
mod: orig: {
# steam-run_my = with orig; with steam; with steamPackages; buildFHSEnv {
shit-run =
with orig;
buildFHSEnv {
name = "shit-run";
# Steam still needs 32bit and various native games do too
multiArch = true;
targetPkgs = pkgs: ([
# steam
# License agreement
# gnome.zenity
# 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
# run.sh wants ldconfig
glibc.bin
# Games' dependencies
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
# It tries to execute xdg-user-dir and spams the log with command not founds
xdg-user-dirs
# electron based launchers need newer versions of these libraries than what runtime provides
]);
multiPkgs = pkgs: ([
# These are required by steam with proper errors
xorg.libXcomposite
xorg.libXtst
xorg.libXrandr
xorg.libXext
xorg.libX11
xorg.libXfixes
sqlite
mod.mesa
libGL
libva
mod.pipewire
wireplumber
pulseaudio
openal
# steamwebhelper
harfbuzz
libthai
pango
lsof # friends options won't display "Launch Game" without it
file # called by steam's setup.sh
# dependencies for mesa drivers, needed inside pressure-vessel
mesa.llvmPackages.llvm.lib
vulkan-loader
expat
wayland
xorg.libxcb
xorg.libXdamage
xorg.libxshmfence
xorg.libXxf86vm
elfutils
# Without these it silently fails
xorg.libXinerama
xorg.libXcursor
xorg.libXrender
xorg.libXScrnSaver
xorg.libXi
xorg.libSM
xorg.libICE
pkgs2505.gnome2.GConf
# (gnome2.GConf.overrideAttrs (
# old: rec {
# nativeBuildInputs = old.nativeBuildInputs ++ [ python3Packages.2to3 ];
# }
# )
# )
curlWithGnuTls
nspr
nss
cups
libcap
SDL2
libusb1
dbus-glib
gsettings-desktop-schemas
ffmpeg
libudev0-shim
# Verified games requirements
fontconfig
freetype
xorg.libXt
xorg.libXmu
libogg
libvorbis
SDL
SDL2_image
glew110
libdrm
libidn
tbb
zlib
zstd
# SteamVR
udev
dbus
# Other things from runtime
glib
gtk2
bzip2
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
libunwind
libvpx
librsvg
xorg.libXft
libvdpau
# required by coreutils stuff to run correctly
# Steam ends up with LD_LIBRARY_PATH=<bunch of runtime stuff>:/usr/lib:<etc>
# which overrides DT_RUNPATH in our binaries, so it tries to dynload the
# very old versions of stuff from the runtime.
# FIXME: how do we even fix this correctly
attr
# 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
libvorbis # Dead Cells
libxcrypt # Alien Isolation, XCOM 2, Company of Heroes 2
mono
ncurses # Crusader Kings III
openssl
pkgs2003.openssl_1_0_2
xorg.xkeyboardconfig
xorg.libpciaccess
xorg.libXScrnSaver # Dead Cells
icu # dotnet runtime, e.g. Stardew Valley
# screeps dependencies
gtk3
zlib
atk
cairo
freetype
gdk-pixbuf
fontconfig
# Prison Architect
libGLU
libuuid
libbsd
alsa-lib
# Loop Hero
# FIXME: Also requires openssl_1_1, which is EOL. Either find an alternative solution, or remove these dependencies (if not needed by other games)
libidn2
libpsl
nghttp2.lib
rtmpdump
]);
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
'';
# runScript = (writeShellScript "shit-run" ''
# run="$1"
# if [ "$run" = "" ]; then
# echo "Usage: shit-run command-to-run args..." >&2
# exit 1
# fi
# shift
#
# ${exportLDPath}
#
# set -o allexport # Export the following env vars
# ${envScript}
# exec -- "$run" "$@"
# '');
runScript = (
writeShellScript "shit-run" ''
run="$1"
if [ "$run" = "" ]; then
echo "Usage: shit-run command-to-run args..." >&2
exit 1
fi
shift
set -o allexport # Export the following env vars
${envScript}
exec -- "$run" "$@"
''
);
# runScript = "bash";
privateTmp = true;
extraPreBwrapCmds = ''
install -m 1777 -d /tmp/dumps
'';
extraBwrapArgs = [
"--bind-try /tmp/dumps /tmp/dumps"
];
meta = {
description = "shit-run (steam-run clone)";
};
};
}
|