VHSgunzo commited on
Commit
120ae0f
·
1 Parent(s): 6635d66
Files changed (10) hide show
  1. CHANGELOG.md +18 -0
  2. LICENSE +1 -1
  3. README.md +2 -1
  4. index.html +233 -564
  5. lux-wine +8 -49
  6. lwrap/PKGBUILD +5 -5
  7. lwrap/lwexec +0 -109
  8. lwrap/lwrap +233 -564
  9. lwrap/lwrap.install +16 -3
  10. main.zip +2 -2
CHANGELOG.md CHANGED
@@ -1,3 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  # v0.78.5.5
2
 
3
  * Update [lwrun](https://huggingface.co/lux-wine/lwrun/tree/main/releases/v0.39.1) packages
 
1
+ # v0.80.1
2
+
3
+ * Update [lwrun](https://github.com/VHSgunzo/runimage/releases/download/v0.40.1) container `v0.40.1`
4
+ * Update [GE-Proton](https://github.com/VHSgunzo/ge-proton-lw/releases/tag/v9.22) `v9.22`
5
+ * Change container filesystem to [DwarFS](https://github.com/mhx/dwarfs) (reduce size)
6
+ * Enable `OverlayFS` (read-write) mode by default
7
+ * Now you can install any apps and updates from the container repos without rebuilding the container
8
+ * Fix `firefox`, `steam`, `lux-wine` decorations (now as in the system)
9
+ * Remove `AMDVLK` vulkan driver
10
+ * Update `lwrap`
11
+ * Add `ru_RU.KOI8-R` locale
12
+ * Remove `lwexec` and all the other pieces that are now part of the container.
13
+ * Add [continuous](https://github.com/VHSgunzo/lwrun/releases/download/continuous) update CI for lwrun
14
+ * Add ability to enable sandbox for `HOME` or create tmpfs `HOME`
15
+ * Add ability to `lwrun` to system `/usr/bin` `/bin` `/opt` path
16
+ * Replace `glibc` and `lib32-glibc` with `glibc-eac` and `lib32-glibc-eac`
17
+ * Add an attempt to use a local proprietary Nvidia driver (if there are no 32-bit libs, the driver will be downloaded as before)
18
+
19
  # v0.78.5.5
20
 
21
  * Update [lwrun](https://huggingface.co/lux-wine/lwrun/tree/main/releases/v0.39.1) packages
LICENSE CHANGED
@@ -1,6 +1,6 @@
1
  MIT License
2
 
3
- Copyright (c) 2024 VHSgunzo
4
 
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
  of this software and associated documentation files (the "Software"), to deal
 
1
  MIT License
2
 
3
+ Copyright (c) 2025 VHSgunzo
4
 
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
  of this software and associated documentation files (the "Software"), to deal
README.md CHANGED
@@ -49,7 +49,7 @@ wget -qO - lux-wine-git.static.hf.space|sed 1d|bash
49
  ## **Terminal usage**:
50
  ```
51
  ┌──[user@linux]─[~]
52
- └──╼ $ lwrap {lwrap arg} blabla.exe {exe args}
53
 
54
  -explorer Wine explorer
55
  -cmd Open CMD or open file in CMD
@@ -117,6 +117,7 @@ lwrun --uninstall
117
  - [x] Easy installation without root rights and dependencies
118
  - [x] The ability to install completely offline
119
  - [x] Own portable [lwrun container](https://github.com/VHSgunzo/lwrun) with isolation from the host system
 
120
  - [x] Automatic rolling update system
121
  - [x] Quick initialization and launch
122
  - [x] Ability to specify EXE arguments and save them in settings
 
49
  ## **Terminal usage**:
50
  ```
51
  ┌──[user@linux]─[~]
52
+ └──╼ $ lwrun {lwrun arg} blabla.exe {exe args}
53
 
54
  -explorer Wine explorer
55
  -cmd Open CMD or open file in CMD
 
117
  - [x] Easy installation without root rights and dependencies
118
  - [x] The ability to install completely offline
119
  - [x] Own portable [lwrun container](https://github.com/VHSgunzo/lwrun) with isolation from the host system
120
+ - [x] Ability to install apps from container repositories without root permissions
121
  - [x] Automatic rolling update system
122
  - [x] Quick initialization and launch
123
  - [x] Ability to specify EXE arguments and save them in settings
index.html CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env bash
2
  # Lux Wine wrapper for RunImage container
3
 
4
  shopt -s extglob
@@ -9,50 +9,20 @@ GREEN='\033[1;92m'
9
  YELLOW='\033[1;33m'
10
  RESETCOLOR='\033[1;00m'
11
 
12
- # YC_S3="https://storage.yandexcloud.net"
13
- GIT_REPO='https://github.com/VHSgunzo'
14
- GIT_HF_REPO='https://huggingface.co/spaces/lux-wine'
15
- # GIT_YC_REPO="$YC_S3/lux-wine"
16
  LW_DIR="$HOME/.local/share/LuxWine"
17
  MENU_APPS_DIR="$HOME/.local/share/applications"
18
- LW_APPS_DIR="$MENU_APPS_DIR/LuxWineApps"
19
  LW_CFG="$LW_DIR/luwine.wcfg"
20
- TMP_LW_CFG="$LW_DIR/tmp/luwine.wcfg"
21
  LWBIN_DIR="$LW_DIR/bin"
22
- LWSRC="$LWBIN_DIR/lux-wine"
23
- GIT_RAW='https://raw.githubusercontent.com/VHSgunzo/lux-wine/main'
24
- GIT_LWSRC="$GIT_RAW/lux-wine"
25
- GIT_HF_LWSRC="$GIT_HF_REPO/git/resolve/main/lux-wine"
26
- # GIT_YC_LWSRC="$GIT_YC_REPO/git/lux-wine"
27
- GIT_LWZIP="$GIT_REPO/lux-wine/archive/refs/heads/main.zip"
28
- GIT_HF_LWZIP="$GIT_HF_REPO/git/resolve/main/main.zip"
29
- # GIT_YC_LWZIP="$GIT_YC_REPO/main.zip"
30
- GIT_LWRAP="$GIT_RAW/lwrap/lwrap"
31
- GIT_HF_LWRAP="$GIT_HF_REPO/git/resolve/main/lwrap/lwrap"
32
- # GIT_YC_LWRAP="$GIT_YC_REPO/git/lwrap/lwrap"
33
- GIT_LWRUN="$GIT_REPO/lwrun/releases"
34
- GIT_HF_LWRUN="${GIT_HF_REPO//\/spaces/}/lwrun/resolve/main/releases"
35
- # YC_LWRUN="$YC_S3/lwrun"
36
  HOME_ICONS="$HOME/.local/share/icons"
37
  HOME_DESK_DIRS="$HOME/.local/share/desktop-directories"
38
  HSTEAM_DESKF="$MENU_APPS_DIR/steam-lw.desktop"
39
- RSTEAM_DESKF="$RUNROOTFS/usr/share/applications/steam.desktop"
40
- F_RC="$HOME/.config/fish/config.fish"
41
- B_RC="$HOME/.bashrc"
42
- Z_RC="$HOME/.zshrc"
43
  HBIN_DIR="$HOME/.local/bin"
44
  LWRUN_LN="$HBIN_DIR/lwrun"
45
- LWRAP_LN="$HBIN_DIR/lwrap"
46
- LWRAP="$LWBIN_DIR/lwrap"
47
- LWBASH="$LWBIN_DIR/bash"
48
  LWRUN="$LWBIN_DIR/lwrun"
49
  RUNIMAGE_LW="$LWBIN_DIR/runimage-lw"
50
- LWRAP_DIR='/opt/lwrap'
51
- LWRUNTIME="$LWRAP_DIR/runtime.tar.zst"
52
- HLWDIRLN="$HOME/LuxWine"
53
- LW_DEF_TMP="$LW_DIR/tmp"
54
- LWRPIDFL="$LW_DEF_TMP/lwrpid"
55
- LWEXEC="$LWBIN_DIR/lwexec"
56
  HICOLOR_SIZES=(
57
  "512x512" "256x256" "192x192" "128x128"
58
  "96x96" "80x80" "72x72" "64x64" "48x48"
@@ -64,20 +34,12 @@ LW_MIMETYPES=(
64
  'application/x-ms-shortcut' 'text/x-ms-regedit'
65
  )
66
 
67
- if [[ -n "$RUNSRC" && -d "$RUNROOTFS" ]] && \
68
- [[ -x "$LWRAP" && "$NO_EXT_LWRAP" != 1 ]]
69
- then
70
- NO_EXT_LWRAP=1 "$LWRAP" "$@"
71
- exit $?
72
- fi
73
- unset NO_EXT_LWRAP
74
-
75
  CFG_CHK_UPDATE="$(grep '^CHK_UPDATE=.*$' "$LW_CFG" 2>/dev/null)"
76
  [ -n "$CFG_CHK_UPDATE" ] && \
77
  eval "$CFG_CHK_UPDATE"||\
78
  CHK_UPDATE='3'
79
 
80
- [ ! -n "$(tty|grep -v 'not a'|grep -Eo 'tty|pts')" ] && \
81
  NOT_TERM=1||NOT_TERM=0
82
 
83
  error_msg() {
@@ -107,124 +69,96 @@ warn_msg() {
107
  fi
108
  }
109
 
110
- check_path() {
111
- if [ "$1" == "$F_RC" ]
112
- then grep -om1 '^set -U fish_user_paths "$HOME/.local/bin"' "$1" &>/dev/null
113
- else grep -om1 '^export PATH=.*/.local/bin' "$1" &>/dev/null
114
- fi
115
- }
116
-
117
- add_path() {
118
- if [ "$1" == "$F_RC" ]
119
- then check_path "$1"||(mkdir -p "$(dirname "$1")" && echo -e '\nset -U fish_user_paths "$HOME/.local/bin"' >> "$1")
120
- else check_path "$1"||echo -e '\nexport PATH="$HOME/.local/bin:$PATH"' >> "$1"
121
- fi
122
- }
123
-
124
- ln_lwrap() { [[ -x "$LWRAP" && -x "$LWRAP_LN" ]]||(mkdir -p "$HBIN_DIR" && ln -sfr "$LWRAP" "$LWRAP_LN") ; }
125
-
126
  make_install() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  if [ "$1" == "force" ]
128
  then QUIET_MODE=1 uninstall_lw force
129
  else QUIET_MODE=1 uninstall_lw update
130
  fi
131
- [ -f 'lux-wine' ] && \
132
- local lwf='lux-wine'||\
133
- local lwf='bin/lux-wine'
134
- install -Dm755 "$lwf" "$LWSRC"
135
- if is_not_pts_home
 
 
 
 
 
 
 
 
 
 
136
  then
137
- grep -m1 '^Exec=".*"' -lr ./*|\
138
- xargs -d'\n' sed -i "s|^Exec=\".*\"|Exec=\"$LWRAP\"|g" 2>/dev/null
139
- if [ -f 'lwrap' ]
140
- then local lwrapf='lwrap'
141
- elif [ -f 'bin/lwrap' ]
142
- then local lwrapf='bin/lwrap'
143
- else local lwrapf='lwrap/lwrap'
144
- fi
145
- if [ -f 'lwexec' ]
146
- then local lwexecf='lwexec'
147
- elif [ -f 'bin/lwexec' ]
148
- then local lwexecf='bin/lwexec'
149
- else local lwexecf='lwrap/lwexec'
150
- fi
151
- if [ -x "$RUNSTATIC/bash" ]
152
- then
153
- sed -i "1 s|^.*$|#!$LWBASH|" "$lwrapf"
154
- sed -i "1 s|^.*$|#!$LWBASH|" "$lwexecf"
155
- install -Dm755 "$RUNSTATIC/bash" "$LWBASH"
156
- fi
157
- install -Dm755 "$lwrapf" "$LWRAP"
158
- ln_lwrap
159
- install -Dm755 "$lwexecf" "$LWEXEC"
160
- install -Dm644 LuxWine.menu "$HOME/.config/menus/applications-merged/LuxWine.menu"
161
- if [ "$KDE_SESSION_VERSION" == 6 ]
162
- then install -Dm755 LuxWineService.desktop "$HOME/.local/share/kio/servicemenus/LuxWineService.desktop"
163
- elif [ "$KDE_SESSION_VERSION" == 5 ]
164
- then install -Dm755 LuxWineService.desktop "$HOME/.local/share/kservices5/ServiceMenus/LuxWineService.desktop"
165
- fi
166
- mkdir -p "$MENU_APPS_DIR"
167
- mkdir -p "$HOME_DESK_DIRS"
168
- cp -rf mime "$HOME/.local/share/mime"
169
- cp -rf applications "$MENU_APPS_DIR/LuxWine"
170
- cp -rf directories/* "$HOME_DESK_DIRS/"
171
- if [[ -d "$RUNROOTFS" && -f "$RSTEAM_DESKF" ]]
172
- then
173
- cp -rf "$RSTEAM_DESKF" "$HSTEAM_DESKF"
174
- sed -i "s|^Exec.*steam-runtime|Exec='$HBIN_DIR/steam-runtime'|g" "$HSTEAM_DESKF"
175
- sed -i "s|^Name=Steam (Runtime)|Name=Steam (RunImage LW)|g" "$HSTEAM_DESKF"
176
- HICNSTM="$HOME_ICONS/steam.png"
177
- for hi_icon_size in ${HICOLOR_SIZES[@]}
178
- do
179
- HICONS_DIR="$HOME_ICONS/hicolor/$hi_icon_size/apps"
180
- RSTEAM_ICON="$RUNROOTFS/usr/share/icons/hicolor/$hi_icon_size/apps/steam.png"
181
- HSTEAM_ICON="$HICONS_DIR/steam.png"
182
- if [[ -f "$RSTEAM_ICON" && ! -f "$HSTEAM_ICON" ]]
183
- then
184
- mkdir -p "$HICONS_DIR"
185
- [ -L "$HSTEAM_ICON" ] && \
186
- rm -f "$HSTEAM_ICON"
187
- cp -rf "$RSTEAM_ICON" "$HSTEAM_ICON"
188
- fi
189
- if [[ -f "$RSTEAM_ICON" && ! -f "$HICNSTM" ]]
190
- then
191
- mkdir -p "$HOME_ICONS"
192
- [ -L "$HICNSTM" ] && \
193
- rm -f "$HICNSTM"
194
- cp -rf "$RSTEAM_ICON" "$HICNSTM"
195
- fi
196
- done
197
- fi
198
- [ "$ENABLE_HOSTEXEC" == 1 ] && \
199
- local INSTALL_SHELL="$(hostexec echo '$SHELL')"||\
200
- local INSTALL_SHELL="$SHELL"
201
- case "$(basename "$INSTALL_SHELL")" in
202
- zsh) add_path "$Z_RC" ;;
203
- bash) add_path "$B_RC" ;;
204
- fish) add_path "$F_RC" ;;
205
- esac
206
- update-desktop-database -q "$MENU_APPS_DIR" &>/dev/null
207
- update-mime-database "$HOME/.local/share/mime" &>/dev/null
208
- for mimetype in "${LW_MIMETYPES[@]}"
209
- do xdg-mime default LuxWine.desktop "$mimetype" &>/dev/null
210
  done
211
  fi
 
 
 
 
 
 
 
 
 
 
 
 
 
212
  cp -rf registry_patch "$LW_DIR/"
213
  cp -rf LICENSE "$LW_DIR/"
214
  cp -rf themes "$LW_DIR/"
215
  cp -rf icons "$LW_DIR/"
216
  cp -rf gif "$LW_DIR/"
217
  cp -rf db "$LW_DIR/"
 
218
  if [ -f "$LWRUNTIME" ]
219
  then
 
220
  tar -xf "$LWRUNTIME" -C "$LW_DIR" && \
221
  [[ ! -f "$LW_CFG" && -f "$TMP_LW_CFG" ]] && \
222
  cp -f "$TMP_LW_CFG" "$LW_CFG"
223
  fi
224
- grep "$LWRUN_LN" -lr "$MENU_APPS_DIR"|\
225
- xargs -d'\n' sed -i "s|$LWRUN_LN|$LWRAP|g" 2>/dev/null
226
- grep "$LWRUN" -lr "$MENU_APPS_DIR"|\
227
- xargs -d'\n' sed -i "s|$LWRUN|$LWRAP|g" 2>/dev/null
228
  }
229
 
230
  mv_lwrun() {
@@ -235,80 +169,65 @@ mv_lwrun() {
235
  fi
236
  }
237
 
238
- is_not_pts_home() {
239
- [[ "$SANDBOX_HOME" != 1 && "$SANDBOX_HOME_DL" != 1 && ! -d "$SANDBOXHOMEDIR/lwrap" && \
240
- "$PORTABLE_HOME" != 1 && "$TMP_HOME" != 1 && "$TMP_HOME_DL" != 1 && ! -d "$PORTABLEHOMEDIR/lwrap" ]]
241
- }
242
-
243
  try_install_lwrun() {
244
- finalize_install() {
245
- chmod u+x "$LWRUN"
246
- ln_lwrun
247
- export LWRUN_INSTALLED=1
248
- info_msg "lwrun installed!"
249
- if [ ! -n "$TMP_LWRUN" ] && \
250
- is_net_conn
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251
  then
252
- update_lwrap
253
- "$LWRAP" --install
 
 
254
  fi
255
- try_shutdown_lw && \
256
- return 0||return 1
257
  }
258
- if is_not_pts_home
 
 
259
  then
260
- REALP_LWRUN="$(readrealpath "$LWRUN")"
261
- if [[ "$RUNSRC" =~ "lwrun" && -f "$RUNSRCRPTH" && \
262
- "$RUNSRCRPTH" != "$LWRUN" && ! "$RUNSRCRPTH" =~ "Run" && \
263
- "$LWRUN_INSTALLED" != 1 ]]
264
  then
265
- info_msg "Installing lwrun..."
266
- mkdir -p "$LWBIN_DIR"
267
- if mv_lwrun "$RUNSRCRPTH" "$LWRUN"
268
- then finalize_install
269
- else
270
- error_msg "Failed to install lwrun!"
271
- is_lwrun && \
272
- return 1||exit 1
273
- fi
274
- elif [[ "$RUNSRCRPTH" =~ "Run" && "$RUNSRCRPTH" != "$REALP_LWRUN" ]]
275
- then
276
- mkdir -p "$LWBIN_DIR"
277
- ln -sf "$RUNSRCRPTH" "$LWRUN"
278
  ln_lwrun
279
- return 0
280
- elif [[ ! -n "$TMP_LWRUN" && "$LWRUN_PKG" == 1 && \
281
- "$LWRUN_INSTALLED" != 1 ]]
282
- then finalize_install
 
 
 
283
  fi
284
- fi
285
- }
286
-
287
- ln_lwrun() {
288
- if is_lwrun
289
  then
290
- mkdir -p "$HBIN_DIR"
291
- REALP_LWRUN="$(readrealpath "$LWRUN")"
292
- if [ "$(readrealpath "$LWRUN_LN")" != "$REALP_LWRUN" ]
293
- then
294
- info_msg "Update lwrun link..."
295
- ln -sfr "$LWRUN" "$LWRUN_LN"
296
- fi
297
- for steam in {steam,steam-runtime,steam-native}
298
- do
299
- if [ ! -f "$HBIN_DIR/$steam" ]
300
- then
301
- info_msg "Update $steam link..."
302
- ln -sfr "$LWRUN" "$HBIN_DIR/$steam"
303
- fi
304
- done
305
- if [ "$(readrealpath "$RUNIMAGE_LW")" != "$REALP_LWRUN" ]
306
- then
307
- info_msg "Update runimage link..."
308
- mkdir -p "$LWBIN_DIR"
309
- ln -sfr "$LWRUN" "$RUNIMAGE_LW"
310
- ln -sfr "$LWRUN" "$HBIN_DIR/runimage-lw"
311
- fi
312
  fi
313
  }
314
 
@@ -316,29 +235,31 @@ uninstall_lw() {
316
  if [ "$1" == "force" ] || is_lw || is_lwrun
317
  then
318
  info_msg "Removing Lux Wine..."
319
- rm -rf "$HSTEAM_DESKF"
320
  rm -rf "$MENU_APPS_DIR/LuxWine"
321
  rm -rf "$HOME_DESK_DIRS/LuxWine"*
322
- rm -rf "$HOME/.config/menus/applications-merged/LuxWine.menu"
323
  rm -rf "$HOME/.local/share/kservices5/ServiceMenus/LuxWine"*
324
  rm -rf "$HOME/.local/share/kio/servicemenus/LuxWine"*
 
 
 
 
 
325
  if [ "$1" == "update" ]
326
  then
327
- rm -rf "$LWSRC"
328
- rm -rf "$LWRAP"
329
- rm -rf "$LWBASH"
330
  rm -rf "$LW_DIR/db"
331
  rm -rf "$LW_DIR/gif"
332
  rm -rf "$LW_DIR/icons"
333
  rm -rf "$LW_DIR/themes"
334
- rm -rf "$LW_DIR/LICENSE"
335
- rm -rf "$LW_DIR/.lwcfgchksum"
336
  rm -rf "$LW_DIR/registry_patch"
337
  else
 
338
  rm -rf "$LW_DIR"
339
- rm -rf "$HLWDIRLN"
340
  rm -rf "$LWRUN_LN"
341
- rm -rf "$LWRAP_LN"
342
  rm -rf "$HBIN_DIR/runimage-lw"
343
  rm -rf "$MENU_APPS_DIR/LuxWine"*
344
  rm -rf "$HOME/Desktop/LuxWine.desktop"
@@ -362,68 +283,22 @@ is_net_conn() {
362
  fi
363
  }
364
 
365
- exzip() {
366
- if is_exe_exist unzip
367
- then
368
- unzip "$1" -d "$2" &>/dev/null
369
- elif is_exe_exist 7z
370
- then
371
- 7z x "$1" -o"$2" &>/dev/null
372
- elif is_exe_exist bsdtar
373
- then
374
- mkdir -p "$2"
375
- bsdtar -x -f "$1" -C "$2" &>/dev/null
376
- else
377
- error_msg "zip archivator not found!"
378
- exit 1
379
- fi
380
- }
381
 
382
- is_lw() { (is_not_pts_home && [[ -x "$LWSRC" && -x "$LWRAP" ]])||[ -x "$LWSRC" ] ; }
383
 
384
  is_lwrun() { [ -x "$LWRUN" ] ; }
385
 
386
- try_dl_lwzip() {
387
- local lwzipurl=(
388
- # "$GIT_YC_LWZIP"
389
- "$GIT_HF_LWZIP"
390
- "$GIT_LWZIP"
391
- )
392
- for url in "${lwzipurl[@]}"
393
- do
394
- try_dl "$url" "$TMP_LW.zip" && \
395
- return 0
396
- done
397
- return 1
398
- }
399
-
400
  install_lw() {
401
- install_local_lw() {
402
- if [ -d "/opt/lwrap" ]
403
- then
404
- info_msg "Installing Lux Wine from container..."
405
- (mkdir -p "$TMP_LW" && \
406
- cp -rf "/opt/lwrap"/!(runtime.tar.zst|prefix_backups) "$TMP_LW" && \
407
- cd "$TMP_LW" && \
408
- make_install "$1"
409
- rm_tmplw)
410
- fi
411
- }
412
- rm_tmplw() { [[ -d "$TMP_LW" || -f "$TMP_LW.zip" ]] && rm -rf "$TMP_LW"* ; }
413
  TMP_LW="/tmp/lux-wine.$RANDOM"
414
- if [ "$1" != "local" ] && \
415
- is_net_conn
416
  then
417
  info_msg "Installing Lux Wine..."
418
- if try_dl_lwzip
419
- then
420
- (exzip "$TMP_LW.zip" "$TMP_LW" && \
421
- cd "$TMP_LW/lux-wine-main" && \
422
- make_install "$1"
423
- rm_tmplw)
424
- else install_local_lw "$1"
425
- fi
426
- else install_local_lw "$1"
427
  fi
428
  if is_lw
429
  then info_msg "Lux Wine installed!"
@@ -433,167 +308,40 @@ install_lw() {
433
  fi
434
  }
435
 
436
- vers_parser() { grep -Po '\d+'|sed ':a;/$/N;s/\n//;ta' ; }
437
-
438
- set_git_lw_version() {
439
- unset GIT_LW_VERSION
440
- local lwsrcusrls=(
441
- # "$GIT_YC_LWSRC"
442
- "$GIT_HF_LWSRC"
443
- "$GIT_LWSRC"
444
- )
445
- for url in "${lwsrcusrls[@]}"
446
- do
447
- GIT_LW_VERSION="$(NO_ARIA2C=1 NO_DL_GUI=1 NO_DL_REPEAT=1 \
448
- try_dl "$url" /dev/stdout 2>/dev/null|get_lw_version)"
449
- [ -n "$GIT_LW_VERSION" ] && return 0
450
- done
451
- return 1
452
- }
453
-
454
- get_lw_version() {
455
- if [ -n "$1" ]
456
- then grep -m1 'LW_VERSION' "$1" 2>/dev/null|vers_parser
457
- else grep -m1 'LW_VERSION'|vers_parser
458
- fi
459
- }
460
-
461
- try_dllwrap_mirror() {
462
- local lwrapurl=(
463
- # "$GIT_YC_LWRAP"
464
- "$GIT_HF_LWRAP"
465
- "$GIT_LWRAP"
466
- )
467
- for url in "${lwrapurl[@]}"
468
- do
469
- try_dl "$url" "$TMP_LWRAP" && \
470
- return 0
471
- done
472
- return 1
473
- }
474
-
475
- update_lwrap() {
476
- info_msg "Update lwrap..."
477
- TMP_LWRAP="${LWRAP}.new$BASHPID"
478
- if try_dllwrap_mirror
479
- then
480
- mv -f "$TMP_LWRAP" "$LWRAP"
481
- chmod +x "$LWRAP"
482
- ln_lwrap
483
- else
484
- error_msg "Failed to get lwrap!"
485
- return 1
486
- fi
487
- }
488
-
489
- update_lw() {
490
- if is_lw
491
- then
492
- info_msg "Checking the Lux Wine update..."
493
- set_git_lw_version
494
- LW_VERSION="$(get_lw_version "$LWSRC")"
495
- if [[ -n "$GIT_LW_VERSION" && -n "$LW_VERSION" ]]
496
- then
497
- if [ "$LW_VERSION" != "$GIT_LW_VERSION" ]
498
- then
499
- if is_update "Lux Wine"
500
- then
501
- info_msg "Lux Wine update..."
502
- if update_lwrap
503
- then "$LWRAP" --install||\
504
- exit 1
505
- else exit 1
506
- fi
507
- fi
508
- else
509
- info_msg "The latest version is already installed!"
510
- touch "$LWSRC"
511
- fi
512
- else
513
- error_msg "Failed to check for updates!"
514
- return 1
515
- fi
516
- else
517
- error_msg "Lux Wine is not installed!"
518
- exit 1
519
- fi
520
- }
521
-
522
- get_lwrun_git_ver() {
523
- NO_ARIA2C=1 NO_DL_GUI=1 NO_DL_REPEAT=1 try_dl "$GIT_LWRUN/latest" \
524
- /dev/stdout 2>/dev/null|grep -m1 "Release v.*"|awk '{print$2}'
525
- }
526
-
527
- get_lwrun_hf_ver() {
528
- NO_ARIA2C=1 NO_DL_GUI=1 NO_DL_REPEAT=1 try_dl \
529
- "${GIT_HF_LWRUN/resolve/tree}" /dev/stdout \
530
- 2>/dev/null|grep -Po "v\d+\.\d+\.\d+"|tail -1
531
- }
532
-
533
- # get_lwrun_yc_ver() {
534
- # NO_ARIA2C=1 NO_DL_GUI=1 NO_DL_REPEAT=1 try_dl \
535
- # "$YC_LWRUN" /dev/stdout 2>/dev/null|tr '<' '\n'|\
536
- # grep '^Key>'|sed 's|^Key>||g'|grep '^releases'|\
537
- # awk -F/ 'END {print$2}'
538
- # }
539
-
540
- set_git_lwrun_ver() {
541
- # for src in yc git hf
542
- for src in git hf
543
- do
544
- GIT_LWRUN_VERSION="$(get_lwrun_${src}_ver)"
545
- [ -n "$GIT_LWRUN_VERSION" ] && return 0
546
- done
547
- return 1
548
- }
549
-
550
- try_dllwrun_mirror() {
551
- local lwrunurl=(
552
- # "$YC_LWRUN/releases/$GIT_LWRUN_VERSION/lwrun"
553
- "$GIT_HF_LWRUN/$GIT_LWRUN_VERSION/lwrun"
554
- "$GIT_LWRUN/download/$GIT_LWRUN_VERSION/lwrun"
555
- )
556
- for url in "${lwrunurl[@]}"
557
- do
558
- try_dl "$url" "$TMP_LWRUN" && \
559
- return 0
560
- done
561
- return 1
562
- }
563
-
564
  try_dl_lwrun() {
565
- TMP_LWRUN="$LWRUN.new$BASHPID"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
566
  info_msg "Downloading lwrun..."
567
- set_git_lwrun_ver
568
- if [ -n "$GIT_LWRUN_VERSION" ] && \
569
- try_dllwrun_mirror
570
  then
571
  info_msg "lwrun downloaded!"
572
- RUNSRCRPTH="$TMP_LWRUN" \
573
- RUNSRC="lwrun" try_install_lwrun &&
574
- return 0||return 1
575
  else
576
  error_msg "Failed to download lwrun!"
577
  [ -f "$TMP_LWRUN" ] && \
578
  rm -rf "$TMP_LWRUN"*
579
  exit 1
580
  fi
581
- }
582
-
583
- runimage_lw() {
584
- [ "$NOT_TERM" != 1 ] && \
585
- unset HOSTEXEC_IN_TERM||\
586
- HOSTEXEC_IN_TERM=(
587
- "xterm" "-fa" "Monospace"
588
- "-fs" "11" "-geometry" "130x45"
589
- "-bg" "black" "-fg" "white" \
590
- "-T" "Updating RunImage packages..." "-e"
591
- )
592
- if [ "$ENABLE_HOSTEXEC" == 1 ]
593
- then "${HOSTEXEC_IN_TERM[@]}" hostexec ptyspawn importenv '$RUNPID' \
594
- env DONT_NOTIFY=1 NO_RPIDSMON=1 "$RUNIMAGE_LW" "$@"
595
- else "$RUNIMAGE_LW" "$@"
596
- fi
597
  }
598
 
599
  yn_case() {
@@ -633,7 +381,7 @@ is_update() {
633
  }
634
 
635
  try_shutdown_lw() {
636
- if [ -n "$(pgrep -fa lux-wine|grep -om1 'LuxWine/bin')" ]
637
  then
638
  if [ "$FORCE_UPDATE" != 1 ]
639
  then
@@ -658,51 +406,33 @@ try_shutdown_lw() {
658
 
659
  no_color() { sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2};?)?)?[mGK]//g" ; }
660
 
661
- update_runimage() {
 
662
  if is_update "RunImage" "Do you want to check updates for RunImage packages?"
663
  then
664
- if (runimage_lw --rU && try_shutdown_lw)
665
- then return 0
666
- else return 1
667
- fi
668
- else
669
- touch "$LWRUN"
670
- return 1
671
- fi
672
- }
673
-
674
- lwrap_init() {
675
- if [ "$ENABLE_HOSTEXEC" == 1 ]
676
- then hostexec ptyspawn importenv '$RUNPID' "$LWRAP" -init
677
- else "$LWRAP" -init
678
  fi
679
- }
680
-
681
- update_lwrun() {
682
- if is_lwrun
683
- then
684
- local ret=1
685
- info_msg "Checking the lwrun update..."
686
- if [ "$NO_RUNPKG_UPDATE" != 1 ]
687
- then
688
- update_runimage
689
- ret=$?
690
- [ "$ret" == 0 ] && \
691
- lwrap_init
692
- fi
693
- return $ret
694
- else
695
- error_msg "lwrun is not installed!"
696
- exit 1
697
- fi
698
- }
699
 
700
  is_exe_exist() { command -v "$@" &>/dev/null ; }
701
 
702
  which_exe() { command -v "$@" ; }
703
 
704
  check_url_stat_code() {
705
- set -o pipefail
706
  if is_exe_exist curl
707
  then curl -sL -o /dev/null -I -w "%{http_code}" "$@" 2>/dev/null
708
  elif is_exe_exist wget
@@ -780,7 +510,7 @@ try_dl() {
780
  fi
781
  if is_url "$URL"
782
  then
783
- WGET_ARGS=(--no-check-certificate -t 3 -T 5 -w 0.5 "$URL" -O "$FILEDIR/$FILENAME")
784
  [ ! -d "$FILEDIR" ] && \
785
  mkdir -p "$FILEDIR"
786
  if [[ "$NOT_TERM" == 1 && "$NO_DL_GUI" != 1 ]] && \
@@ -849,7 +579,7 @@ try_dl() {
849
  elif is_exe_exist curl
850
  then
851
  curl -R --progress-bar --insecure --fail -L "$URL" -o \
852
- "$FILEDIR/$FILENAME" |& tr '\r' '\n'|sed '0,/100/{/100/d;}'|\
853
  sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g'|\
854
  dl_progress
855
  elif is_exe_exist wget2
@@ -892,28 +622,38 @@ try_dl() {
892
  fi
893
  }
894
 
895
- try_set_lwrpid() { lwrpid="$(cat "$LWRPIDFL" 2>/dev/null)" ; }
896
-
897
  rm_broken_link() { find -L "$1" -type l -exec rm -rf {} \; 2>/dev/null ; }
898
 
899
- readrealpath() {
900
- if is_exe_exist readlink
901
- then readlink -f "$@" 2>/dev/null
902
- elif is_exe_exist realpath
903
- then realpath "$@" 2>/dev/null
904
- else return 1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
905
  fi
906
  }
907
 
908
  print_help() {
909
- HLPHOSTNAME="$(uname -a|awk '{print$2}')"
910
- [[ "$RUNSRC" =~ "lwrun" ]] && \
911
- HLPEXENAME="lwrun"||\
912
- HLPEXENAME="lwrap"
913
  echo -e "
914
  ${RED}Usage:
915
  $RED┌──[$GREEN$RUNUSER$YELLOW@$BLUE${RUNHOSTNAME}$RED]─[$GREEN$PWD$RED]
916
- $RED└──╼ \$$GREEN $HLPEXENAME ${BLUE}{args}
917
 
918
  ${BLUE}--lwrap-help $GREEN Show this usage info
919
  ${BLUE}--install $YELLOW{force|local}$GREEN Re/Install Lux Wine and lwrun
@@ -922,112 +662,41 @@ print_help() {
922
  "
923
  }
924
 
925
- RUNSRCRPTH="$(readrealpath "$RUNSRC")"
926
-
927
  case "$1" in
928
- --lwrap-help) print_help
929
- exit ;;
930
- --uninstall) uninstall_lw "$2"
931
- exit $? ;;
932
- --install) try_install_lwrun
933
- is_lwrun||try_dl_lwrun
934
- install_lw "$2"
935
- exit $? ;;
936
- --update) FORCE_UPDATE=1
937
- update_lw
938
- update_lwrun
939
- exit $? ;;
940
  esac
941
 
942
- if [[ -n "$RUNSRC" && -d "$RUNROOTFS" ]]
943
  then
 
 
 
 
 
 
 
 
 
944
  try_install_lwrun
945
- is_lw||install_lw
946
  if [[ "$CHK_UPDATE" != 0 || "$FORCE_UPDATE" == 1 ]] && \
947
  is_net_conn
948
  then
949
- if [[ ! -x "$(find "$LWSRC" -mtime -$CHK_UPDATE \
950
- -print 2>/dev/null)" || "$FORCE_UPDATE" == 1 ]]
951
- then update_lw
952
- fi
953
- if is_not_pts_home && \
954
- [[ ! -x "$(find "$LWRUN" -mtime -$CHK_UPDATE \
955
  -print 2>/dev/null)" || "$FORCE_UPDATE" == 1 ]]
956
  then update_lwrun && exit $?
957
  fi
958
  fi
959
- if [ "$LWRUN_INSTALLED" == 1 ]
960
- then "$LWSRC" -init
961
- else
962
- try_set_lwrpid
963
- if ! [[ -n "$lwrpid" && -f "/tmp/.bwinf.$lwrpid" && -d "/proc/$lwrpid" ]]
964
- then
965
- LWEXECFLDIR="/tmp/.lwexec.$RUNPID"
966
- mkdir -p "$LW_DEF_TMP"
967
- echo "$RUNPID" > "$LWRPIDFL" 2>/dev/null
968
- (JOBNUMFL="$LWEXECFLDIR/job"
969
- mkdir -p "$LWEXECFLDIR" 2>/dev/null
970
- mkfifo "$JOBNUMFL" 2>/dev/null
971
- unset jobnum
972
- while [[ -d "/proc/$RUNPID" && -d "$LWEXECFLDIR" ]]
973
- do
974
- jobnum=$(( $jobnum + 1 ))
975
- execjobdir="$LWEXECFLDIR/$jobnum"
976
- execenvfl="$execjobdir/env"
977
- execjobfl="$execjobdir/exec"
978
- execjoboutfl="$execjobdir/out"
979
- execjobstatfl="$execjobdir/stat"
980
- mkdir "$execjobdir" 2>/dev/null
981
- mkfifo "$execenvfl" 2>/dev/null
982
- mkfifo "$execjobfl" 2>/dev/null
983
- mkfifo "$execjoboutfl" 2>/dev/null
984
- mkfifo "$execjobstatfl" 2>/dev/null
985
- tee <<<"$jobnum" "$JOBNUMFL" &>/dev/null
986
- if [ -e "$execjobfl" ]
987
- then
988
- (OLD_PATH="$PATH"
989
- OLD_LD_LIBRARY_PATH="$LD_LIBRARY_PATH"
990
- source "$execenvfl" && cd "$PWD"
991
- export PATH="$PATH:$OLD_PATH"
992
- export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$OLD_LD_LIBRARY_PATH"
993
- cat "$execjobfl" 2>/dev/null|"$RUNSTATIC/bash" &>"$execjoboutfl" &
994
- execjobpid=$!
995
- tee <<<"$execjobpid" "$execjobstatfl" &>/dev/null
996
- wait $execjobpid 2>/dev/null
997
- execstat=$?
998
- tee <<<"$execstat" "$execjobstatfl" &>/dev/null) &
999
- fi
1000
- done) &
1001
- fi
1002
- "$LWSRC" "$@"
1003
- [ -d "$LWEXECFLDIR" ] && \
1004
- rm -rf "$LWEXECFLDIR"
1005
- [ -f "$LWRPIDFL" ] && \
1006
- rm -f "$LWRPIDFL"
1007
- fi
1008
  else
1009
- try_set_lwrpid
1010
- if [[ "$FORCE_UPDATE" != 1 && -x "$LWEXEC" && -x "$LWSRC" ]] && \
1011
- [[ -n "$lwrpid" && -f "/tmp/.bwinf.$lwrpid" && -d "/proc/$lwrpid" ]]
1012
- then
1013
- LWEXECFLDIR="/tmp/.lwexec.$lwrpid" \
1014
- NOT_TERM="$NOT_TERM" "$LWEXEC" "$LWSRC" "$@"
1015
- elif [ -x "$LWRUN_LN" ]
1016
- then "$LWRUN_LN" "$@"
1017
- elif is_lwrun
1018
- then "$LWRUN" "$@"
1019
- elif [ -x "$(which_exe lwrun)" ]
1020
- then "$(which_exe lwrun)" "$@"
1021
  else
1022
- if is_net_conn
1023
- then
1024
- update_lwrap
1025
- try_dl_lwrun && \
1026
- "$LWRUN"
1027
- else
1028
- error_msg "lwrun not found, download and install it first!"
1029
- exit 1
1030
- fi
1031
  fi
1032
  fi
1033
  exit $?
 
1
+ #!/usr/bin/bash
2
  # Lux Wine wrapper for RunImage container
3
 
4
  shopt -s extglob
 
9
  YELLOW='\033[1;33m'
10
  RESETCOLOR='\033[1;00m'
11
 
 
 
 
 
12
  LW_DIR="$HOME/.local/share/LuxWine"
13
  MENU_APPS_DIR="$HOME/.local/share/applications"
 
14
  LW_CFG="$LW_DIR/luwine.wcfg"
 
15
  LWBIN_DIR="$LW_DIR/bin"
16
+ LWSRC='/opt/lwrap/bin/lux-wine'
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  HOME_ICONS="$HOME/.local/share/icons"
18
  HOME_DESK_DIRS="$HOME/.local/share/desktop-directories"
19
  HSTEAM_DESKF="$MENU_APPS_DIR/steam-lw.desktop"
 
 
 
 
20
  HBIN_DIR="$HOME/.local/bin"
21
  LWRUN_LN="$HBIN_DIR/lwrun"
22
+ OLDLWRAP="$LWBIN_DIR/lwrap"
 
 
23
  LWRUN="$LWBIN_DIR/lwrun"
24
  RUNIMAGE_LW="$LWBIN_DIR/runimage-lw"
25
+ PKGUPDFL="$LWBIN_DIR/.update"
 
 
 
 
 
26
  HICOLOR_SIZES=(
27
  "512x512" "256x256" "192x192" "128x128"
28
  "96x96" "80x80" "72x72" "64x64" "48x48"
 
34
  'application/x-ms-shortcut' 'text/x-ms-regedit'
35
  )
36
 
 
 
 
 
 
 
 
 
37
  CFG_CHK_UPDATE="$(grep '^CHK_UPDATE=.*$' "$LW_CFG" 2>/dev/null)"
38
  [ -n "$CFG_CHK_UPDATE" ] && \
39
  eval "$CFG_CHK_UPDATE"||\
40
  CHK_UPDATE='3'
41
 
42
+ [[ ! "$(LANG= tty|grep -v 'not a')" =~ tty|pts ]] && \
43
  NOT_TERM=1||NOT_TERM=0
44
 
45
  error_msg() {
 
69
  fi
70
  }
71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  make_install() {
73
+ add_path() {
74
+ check_path() {
75
+ if [ "$1" == "$F_RC" ]
76
+ then grep -om1 '^set -U fish_user_paths "$HOME/.local/bin"' "$1" &>/dev/null
77
+ else grep -om1 '^export PATH=.*/.local/bin' "$1" &>/dev/null
78
+ fi
79
+ }
80
+ if [ "$1" == "$F_RC" ]
81
+ then check_path "$1"||(mkdir -p "$(dirname "$1")" && echo -e '\nset -U fish_user_paths "$HOME/.local/bin"' >> "$1")
82
+ else check_path "$1"||echo -e '\nexport PATH="$HOME/.local/bin:$PATH"' >> "$1"
83
+ fi
84
+ }
85
+ F_RC="$HOME/.config/fish/config.fish"
86
+ B_RC="$HOME/.bashrc"
87
+ Z_RC="$HOME/.zshrc"
88
  if [ "$1" == "force" ]
89
  then QUIET_MODE=1 uninstall_lw force
90
  else QUIET_MODE=1 uninstall_lw update
91
  fi
92
+ grep -m1 '^Exec=".*"' -lr ./*|\
93
+ xargs -d'\n' sed -i "s|^Exec=\".*\"|Exec=\"$LWRUN\"|g" 2>/dev/null
94
+ install -Dm644 LuxWine.menu "$HOME/.config/menus/applications-merged/LuxWine.menu"
95
+ if [ "$KDE_SESSION_VERSION" == 6 ]
96
+ then install -Dm755 LuxWineService.desktop "$HOME/.local/share/kio/servicemenus/LuxWineService.desktop"
97
+ elif [ "$KDE_SESSION_VERSION" == 5 ]
98
+ then install -Dm755 LuxWineService.desktop "$HOME/.local/share/kservices5/ServiceMenus/LuxWineService.desktop"
99
+ fi
100
+ mkdir -p "$MENU_APPS_DIR"
101
+ mkdir -p "$HOME_DESK_DIRS"
102
+ cp -rf mime "$HOME/.local/share/mime"
103
+ cp -rf applications "$MENU_APPS_DIR/LuxWine"
104
+ cp -rf directories/* "$HOME_DESK_DIRS/"
105
+ RSTEAM_DESKF="$RUNROOTFS/usr/share/applications/steam.desktop"
106
+ if [[ -d "$RUNROOTFS" && -f "$RSTEAM_DESKF" ]]
107
  then
108
+ cp -rf "$RSTEAM_DESKF" "$HSTEAM_DESKF"
109
+ sed -i "s|^Exec.*steam-runtime|Exec='$HBIN_DIR/steam-runtime'|g" "$HSTEAM_DESKF"
110
+ sed -i "s|^Name=Steam (Runtime)|Name=Steam (RunImage LW)|g" "$HSTEAM_DESKF"
111
+ HICNSTM="$HOME_ICONS/steam.png"
112
+ for hi_icon_size in ${HICOLOR_SIZES[@]}
113
+ do
114
+ HICONS_DIR="$HOME_ICONS/hicolor/$hi_icon_size/apps"
115
+ RSTEAM_ICON="$RUNROOTFS/usr/share/icons/hicolor/$hi_icon_size/apps/steam.png"
116
+ HSTEAM_ICON="$HICONS_DIR/steam.png"
117
+ if [[ -f "$RSTEAM_ICON" && ! -f "$HSTEAM_ICON" ]]
118
+ then
119
+ mkdir -p "$HICONS_DIR"
120
+ [ -L "$HSTEAM_ICON" ] && \
121
+ rm -f "$HSTEAM_ICON"
122
+ cp -rf "$RSTEAM_ICON" "$HSTEAM_ICON"
123
+ fi
124
+ if [[ -f "$RSTEAM_ICON" && ! -f "$HICNSTM" ]]
125
+ then
126
+ mkdir -p "$HOME_ICONS"
127
+ [ -L "$HICNSTM" ] && \
128
+ rm -f "$HICNSTM"
129
+ cp -rf "$RSTEAM_ICON" "$HICNSTM"
130
+ fi
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
  done
132
  fi
133
+ [ "$INSIDE_RUNIMAGE" == 1 ] && \
134
+ local INSTALL_SHELL="$(hostexec printenv SHELL)"||\
135
+ local INSTALL_SHELL="$SHELL"
136
+ case "$(basename "$INSTALL_SHELL")" in
137
+ zsh) add_path "$Z_RC" ;;
138
+ bash) add_path "$B_RC" ;;
139
+ fish) add_path "$F_RC" ;;
140
+ esac
141
+ update-desktop-database -q "$MENU_APPS_DIR" &>/dev/null
142
+ update-mime-database "$HOME/.local/share/mime" &>/dev/null
143
+ for mimetype in "${LW_MIMETYPES[@]}"
144
+ do xdg-mime default LuxWine.desktop "$mimetype" &>/dev/null
145
+ done
146
  cp -rf registry_patch "$LW_DIR/"
147
  cp -rf LICENSE "$LW_DIR/"
148
  cp -rf themes "$LW_DIR/"
149
  cp -rf icons "$LW_DIR/"
150
  cp -rf gif "$LW_DIR/"
151
  cp -rf db "$LW_DIR/"
152
+ LWRUNTIME="/opt/lwrap/runtime.tar.zst"
153
  if [ -f "$LWRUNTIME" ]
154
  then
155
+ TMP_LW_CFG="$LW_DIR/tmp/luwine.wcfg"
156
  tar -xf "$LWRUNTIME" -C "$LW_DIR" && \
157
  [[ ! -f "$LW_CFG" && -f "$TMP_LW_CFG" ]] && \
158
  cp -f "$TMP_LW_CFG" "$LW_CFG"
159
  fi
160
+ grep "$OLDLWRAP" -lr "$MENU_APPS_DIR"|\
161
+ xargs -d'\n' sed -i "s|$OLDLWRAP|$LWRUN|g" 2>/dev/null
 
 
162
  }
163
 
164
  mv_lwrun() {
 
169
  fi
170
  }
171
 
 
 
 
 
 
172
  try_install_lwrun() {
173
+ readrealpath() {
174
+ if is_exe_exist readlink
175
+ then readlink -f "$@" 2>/dev/null
176
+ elif is_exe_exist realpath
177
+ then realpath "$@" 2>/dev/null
178
+ else return 1
179
+ fi
180
+ }
181
+ ln_lwrun() {
182
+ mkdir -p "$HBIN_DIR"
183
+ if [ "$(readrealpath "$LWRUN_LN")" != "$LWRUN" ]
184
+ then
185
+ info_msg "Update lwrun link..."
186
+ ln -sf "$LWRUN" "$LWRUN_LN"
187
+ fi
188
+ for steam in {steam,steam-runtime,steam-native}
189
+ do
190
+ STEAM_LN="$HBIN_DIR/$steam"
191
+ if [ "$(readrealpath "$STEAM_LN")" != "$LWRUN" ]
192
+ then
193
+ info_msg "Update $steam link..."
194
+ ln -sf "$LWRUN" "$STEAM_LN"
195
+ fi
196
+ done
197
+ if [ "$(readrealpath "$RUNIMAGE_LW")" != "$LWRUN" ]
198
  then
199
+ info_msg "Update runimage link..."
200
+ mkdir -p "$LWBIN_DIR"
201
+ ln -sf "$LWRUN" "$RUNIMAGE_LW"
202
+ ln -sf "$LWRUN" "$HBIN_DIR/runimage-lw"
203
  fi
 
 
204
  }
205
+ if [[ "$RUNSRC" =~ "lwrun" && -f "$REALRUNSRC" && "$LWLN_ONLY" != 1 && \
206
+ "$REALRUNSRC" != "$LWRUN" && ! "${REALRUNSRC,,}" =~ .*/(run$|cdrom/lwrun|sr[0-9]/lwrun)$ && \
207
+ ! "$REALRUNSRC" =~ ^/(usr/bin|bin|opt)/lwrun$ ]]
208
  then
209
+ info_msg "Installing lwrun..."
210
+ mkdir -p "$LWBIN_DIR"
211
+ if mv_lwrun "$REALRUNSRC" "$LWRUN"
 
212
  then
 
 
 
 
 
 
 
 
 
 
 
 
 
213
  ln_lwrun
214
+ info_msg "lwrun installed!"
215
+ try_shutdown_lw && \
216
+ return 0||return 1
217
+ else
218
+ error_msg "Failed to install lwrun!"
219
+ is_lwrun && \
220
+ return 1||exit 1
221
  fi
222
+ elif [[ "$REALRUNSRC" != "$(readrealpath "$LWRUN")" ]] && \
223
+ [[ "${REALRUNSRC,,}" =~ .*/(run|cdrom.*/lwrun|sr[0-9]/lwrun)$ ||\
224
+ "$REALRUNSRC" =~ ^/(usr/bin|bin|opt)/lwrun$ || "$LWLN_ONLY" == 1 ]]
 
 
225
  then
226
+ mkdir -p "$LWBIN_DIR"
227
+ ln -sf "$REALRUNSRC" "$LWRUN"
228
+ ln_lwrun
229
+ [ "$LWLN_ONLY" != 1 ] && \
230
+ return 0||exit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
231
  fi
232
  }
233
 
 
235
  if [ "$1" == "force" ] || is_lw || is_lwrun
236
  then
237
  info_msg "Removing Lux Wine..."
238
+ rm -f "$HSTEAM_DESKF"
239
  rm -rf "$MENU_APPS_DIR/LuxWine"
240
  rm -rf "$HOME_DESK_DIRS/LuxWine"*
241
+ rm -f "$HOME/.config/menus/applications-merged/LuxWine.menu"
242
  rm -rf "$HOME/.local/share/kservices5/ServiceMenus/LuxWine"*
243
  rm -rf "$HOME/.local/share/kio/servicemenus/LuxWine"*
244
+ rm -f "$OLDLWRAP"
245
+ rm -f "$LWBIN_DIR/lux-wine"
246
+ rm -f "$LWBIN_DIR/bash"
247
+ rm -f "$LWBIN_DIR/lwexec"
248
+ rm -f "$HBIN_DIR/lwrap"
249
  if [ "$1" == "update" ]
250
  then
 
 
 
251
  rm -rf "$LW_DIR/db"
252
  rm -rf "$LW_DIR/gif"
253
  rm -rf "$LW_DIR/icons"
254
  rm -rf "$LW_DIR/themes"
255
+ rm -f "$LW_DIR/LICENSE"
256
+ rm -f "$LW_DIR/.lwcfgchksum"
257
  rm -rf "$LW_DIR/registry_patch"
258
  else
259
+ chmod u+rw -R "$LWBIN_DIR/overlayfs/lux-wine/workdir" 2>/dev/null
260
  rm -rf "$LW_DIR"
261
+ rm -rf "$HOME/LuxWine"
262
  rm -rf "$LWRUN_LN"
 
263
  rm -rf "$HBIN_DIR/runimage-lw"
264
  rm -rf "$MENU_APPS_DIR/LuxWine"*
265
  rm -rf "$HOME/Desktop/LuxWine.desktop"
 
283
  fi
284
  }
285
 
286
+ is_lw() { [ -f "$MENU_APPS_DIR/LuxWine/LuxWine.desktop" ] ; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
287
 
288
+ is_old_lw() { [ -x "$LWBIN_DIR/lux-wine" ] ; }
289
 
290
  is_lwrun() { [ -x "$LWRUN" ] ; }
291
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
292
  install_lw() {
 
 
 
 
 
 
 
 
 
 
 
 
293
  TMP_LW="/tmp/lux-wine.$RANDOM"
294
+ if [ -d "/opt/lwrap" ]
 
295
  then
296
  info_msg "Installing Lux Wine..."
297
+ (mkdir -p "$TMP_LW" && \
298
+ cp -rf "/opt/lwrap"/!(runtime.tar.zst|prefix_backups) "$TMP_LW" && \
299
+ cd "$TMP_LW" && \
300
+ make_install "$1"
301
+ [ -d "$TMP_LW" ] && rm -rf "$TMP_LW")
 
 
 
 
302
  fi
303
  if is_lw
304
  then info_msg "Lux Wine installed!"
 
308
  fi
309
  }
310
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
311
  try_dl_lwrun() {
312
+ try_dllwrun_mirror() {
313
+ local GIT_LWRUN_VERSION='continuous'
314
+ local GIT_LWRUN="https://github.com/VHSgunzo/lwrun/releases"
315
+ local GIT_HF_LWRUN="https://huggingface.co/lux-wine/lwrun/resolve/main/releases"
316
+ # YC_LWRUN="https://storage.yandexcloud.net/lwrun"
317
+ local lwrunurl=(
318
+ # "$YC_LWRUN/releases/$GIT_LWRUN_VERSION/lwrun"
319
+ "$GIT_HF_LWRUN/$GIT_LWRUN_VERSION/lwrun"
320
+ "$GIT_LWRUN/download/$GIT_LWRUN_VERSION/lwrun"
321
+ )
322
+ for url in "${lwrunurl[@]}"
323
+ do
324
+ try_dl "$url" "$TMP_LWRUN" && \
325
+ return 0
326
+ done
327
+ return 1
328
+ }
329
+ local ret=1
330
+ TMP_LWRUN="$LW_DIR/tmp/lwrun"
331
  info_msg "Downloading lwrun..."
332
+ if try_dllwrun_mirror
 
 
333
  then
334
  info_msg "lwrun downloaded!"
335
+ chmod +x "$TMP_LWRUN"
336
+ exec "$TMP_LWRUN"
337
+ ret=0
338
  else
339
  error_msg "Failed to download lwrun!"
340
  [ -f "$TMP_LWRUN" ] && \
341
  rm -rf "$TMP_LWRUN"*
342
  exit 1
343
  fi
344
+ return $ret
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
345
  }
346
 
347
  yn_case() {
 
381
  }
382
 
383
  try_shutdown_lw() {
384
+ if [ -n "$(pgrep -fa lux-wine|grep -E "$LWSRC|$LW_DIR/bin/lux-wine"|grep -v grep)" ]
385
  then
386
  if [ "$FORCE_UPDATE" != 1 ]
387
  then
 
406
 
407
  no_color() { sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2};?)?)?[mGK]//g" ; }
408
 
409
+ update_lwrun() (
410
+ local ret=1
411
  if is_update "RunImage" "Do you want to check updates for RunImage packages?"
412
  then
413
+ mkdir -p "$LWBIN_DIR"
414
+ date '+%y.%m.%d.%H%M%S' > "$PKGUPDFL"
415
+ [ "$NOT_TERM" == 1 ] && \
416
+ IN_TERM=(
417
+ "xterm" "-fa" "Monospace"
418
+ "-fs" "11" "-geometry" "130x45"
419
+ "-bg" "black" "-fg" "white" \
420
+ "-T" "Updating RunImage packages..." "-e"
421
+ )||unset IN_TERM
422
+ HOSTEXEC_ARGS=(hostexec env RIM_RUN_IN_ONE=0)
423
+ "${HOSTEXEC_ARGS[@]}" ls "$RUNIMAGE_LW" &>/dev/null||\
424
+ "${HOSTEXEC_ARGS[@]}" LWLN_ONLY=1 "$RUNSRC"
425
+ "${HOSTEXEC_ARGS[@]}" "$RUNIMAGE_LW" "${IN_TERM[@]}" rim-update
426
+ ret="$?"
427
  fi
428
+ return $ret
429
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
430
 
431
  is_exe_exist() { command -v "$@" &>/dev/null ; }
432
 
433
  which_exe() { command -v "$@" ; }
434
 
435
  check_url_stat_code() {
 
436
  if is_exe_exist curl
437
  then curl -sL -o /dev/null -I -w "%{http_code}" "$@" 2>/dev/null
438
  elif is_exe_exist wget
 
510
  fi
511
  if is_url "$URL"
512
  then
513
+ WGET_ARGS=(--no-check-certificate --content-disposition -t 3 -T 5 -w 0.5 "$URL" -O "$FILEDIR/$FILENAME")
514
  [ ! -d "$FILEDIR" ] && \
515
  mkdir -p "$FILEDIR"
516
  if [[ "$NOT_TERM" == 1 && "$NO_DL_GUI" != 1 ]] && \
 
579
  elif is_exe_exist curl
580
  then
581
  curl -R --progress-bar --insecure --fail -L "$URL" -o \
582
+ "$FILEDIR/$FILENAME" |& tr '\r' '\n'|\
583
  sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g'|\
584
  dl_progress
585
  elif is_exe_exist wget2
 
622
  fi
623
  }
624
 
 
 
625
  rm_broken_link() { find -L "$1" -type l -exec rm -rf {} \; 2>/dev/null ; }
626
 
627
+ try_update_old_lwrun() {
628
+ if [ "$RUNIMAGE_VERSION" == '0.39.1' ]
629
+ then
630
+ runimage_lw() {
631
+ [ "$NOT_TERM" != 1 ] && \
632
+ unset HOSTEXEC_IN_TERM||\
633
+ HOSTEXEC_IN_TERM=(
634
+ "xterm" "-fa" "Monospace"
635
+ "-fs" "11" "-geometry" "130x45"
636
+ "-bg" "black" "-fg" "white" \
637
+ "-T" "Updating RunImage packages..." "-e"
638
+ )
639
+ "${HOSTEXEC_IN_TERM[@]}" hostexec ptyspawn importenv '$RUNPID' \
640
+ env DONT_NOTIFY=1 NO_RPIDSMON=1 RIM_CMPRS_LVL=22 RIM_UPDATE_CLEANUP=1 \
641
+ "$RUNIMAGE_LW" "$@"
642
+ }
643
+ info_msg "Checking the lwrun update..."
644
+ if runimage_lw --rU
645
+ then FORCE_UPDATE=1 try_shutdown_lw
646
+ fi
647
+ date '+%y.%m.%d.%H%M%S' > "$PKGUPDFL"
648
+ return 1
649
  fi
650
  }
651
 
652
  print_help() {
 
 
 
 
653
  echo -e "
654
  ${RED}Usage:
655
  $RED┌──[$GREEN$RUNUSER$YELLOW@$BLUE${RUNHOSTNAME}$RED]─[$GREEN$PWD$RED]
656
+ $RED└──╼ \$$GREEN lwrap ${BLUE}{args}
657
 
658
  ${BLUE}--lwrap-help $GREEN Show this usage info
659
  ${BLUE}--install $YELLOW{force|local}$GREEN Re/Install Lux Wine and lwrun
 
662
  "
663
  }
664
 
 
 
665
  case "$1" in
666
+ --lwrap-help) print_help ; exit ;;
667
+ --uninstall ) uninstall_lw "$2" ; exit $? ;;
 
 
 
 
 
 
 
 
 
 
668
  esac
669
 
670
+ if [ "$INSIDE_RUNIMAGE" == 1 ]
671
  then
672
+ case "$1" in
673
+ --install ) try_install_lwrun
674
+ install_lw "$2"
675
+ try_update_old_lwrun
676
+ exit $? ;;
677
+ --update ) FORCE_UPDATE=1
678
+ update_lwrun
679
+ exit $? ;;
680
+ esac
681
  try_install_lwrun
682
+ (! is_lw || is_old_lw) && install_lw
683
  if [[ "$CHK_UPDATE" != 0 || "$FORCE_UPDATE" == 1 ]] && \
684
  is_net_conn
685
  then
686
+ if [[ ! -f "$(find "$PKGUPDFL" -mtime -$CHK_UPDATE \
 
 
 
 
 
687
  -print 2>/dev/null)" || "$FORCE_UPDATE" == 1 ]]
688
  then update_lwrun && exit $?
689
  fi
690
  fi
691
+ exec "$LWSRC" "$@"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
692
  else
693
+ if [ -x "$LWRUN" ]
694
+ then exec "$LWRUN" "$@"
695
+ elif is_net_conn
696
+ then try_dl_lwrun
 
 
 
 
 
 
 
 
697
  else
698
+ error_msg "lwrun not found, download and install it first!"
699
+ exit 1
 
 
 
 
 
 
 
700
  fi
701
  fi
702
  exit $?
lux-wine CHANGED
@@ -1,6 +1,6 @@
1
  #!/usr/bin/env bash
2
 
3
- export LW_VERSION="0.78.5.5"
4
  export LW_DEVELOPERS="VHSgunzo"
5
 
6
  export RED='\033[1;91m'
@@ -59,7 +59,7 @@ OLD_LW_DIR="$HOME/.local/share/LutrisWine"
59
  [ ! -n "$LW_NAME" ] && export LW_NAME="$(basename "$0")"
60
  [ ! -n "$LW_DIR" ] && export LW_DIR="$HOME/.local/share/LuxWine"
61
  [ ! -n "$LW_BIN_DIR" ] && export LW_BIN_DIR="$LW_DIR/bin"
62
- [ ! -n "$LWRAP" ] && export LWRAP="$LW_BIN_DIR/lwrap"
63
  if [ ! -n "$LW_TRAY" ]
64
  then
65
  [ "$DESKTOP_SESSION" == "plasma" ] && \
@@ -1561,7 +1561,7 @@ create_shortcut() {
1561
  SHRT_NAME="$SHRT_NAME ($(basename "$WINEPREFIX"))"
1562
  DESKF="${LW_DEF_TMP}/${SHRT_NAME}.desktop"
1563
  echo "[Desktop Entry]" > "$DESKF"
1564
- (LW_SOURCE="$LWRAP"
1565
  [[ "$1" =~ "'" ]] && \
1566
  SHRTEXEPATH="\"$1\""||\
1567
  SHRTEXEPATH="'$1'"
@@ -3770,11 +3770,11 @@ is_app_exist() {
3770
  do
3771
  [ -n "$(if [ -n "$args" ]
3772
  then
3773
- awk -v s="Exec='$LWRAP' '$1' $args" '$0==s' "$app" 2>/dev/null
3774
- awk -v s="Exec='$LWRAP' \"$1\" $args" '$0==s' "$app" 2>/dev/null
3775
  else
3776
- awk -v s="Exec='$LWRAP' '$1'" '$0==s' "$app" 2>/dev/null
3777
- awk -v s="Exec='$LWRAP' \"$1\"" '$0==s' "$app" 2>/dev/null
3778
  fi|head -1)" ] && ret=0 && echo "$app" && break
3779
  done
3780
  return $ret
@@ -4160,13 +4160,11 @@ lu_help() {
4160
  exit 1
4161
  fi
4162
  echo_help() {
4163
- [[ "$RUNSRC" =~ "lwrun" ]] && \
4164
- local LW_NAME="lwrap"
4165
  echo -e "
4166
  ${GREEN}Lux Wine ${RED}v${LW_VERSION} ${GREEN}by $LW_DEVELOPERS
4167
  ${RED}Usage:
4168
  $RED┌──[$GREEN$USER$YELLOW@$BLUE`uname -a|awk '{print$2}'`$RED]─[$GREEN$PWD$RED]
4169
- $RED└──╼ \$$GREEN $LW_NAME $BLUE{$LW_NAME arg} ${RED}blabla.exe $YELLOW{exe args}
4170
 
4171
  ${RED}-explorer $GREEN Wine explorer
4172
  ${RED}-cmd $GREEN Open CMD or open file in CMD
@@ -6915,44 +6913,6 @@ if [[ "$EUID" == 0 && "$ALLOW_ROOT" != 1 ]]
6915
  print_error yad "Don't run Lux Wine as root!"
6916
  exit 1
6917
  else
6918
- (if [[ "$RUNSRC" =~ "lwrun" ]]
6919
- then
6920
- lwait_fl="/tmp/.lwait.$RUNPID"
6921
- [[ -f "$lwait_fl" && ! -d "/proc/$RUNPID" ]] && \
6922
- rm -f "$lwait_fl"
6923
- if [ ! -f "$lwait_fl" ]
6924
- then
6925
- find_processes() {
6926
- processes="$(ls -l /proc/*/exe 2>/dev/null|grep ' ->')"
6927
- for ps in "${IGNPS[@]}"
6928
- do processes="$(grep -wv "$ps"<<<"$processes")"
6929
- done
6930
- }
6931
- IGNPS=(
6932
- 'tee' 'ls' 'ssrv' 'cat' 'tini'
6933
- 'sleep' 'gamemoded' 'bash' 'grep'
6934
- )
6935
- find_processes
6936
- wait_lwpids=100
6937
- while [[ "$wait_lwpids" -gt 0 && \
6938
- ! -n "$processes" && -d "/proc/$LWPID" ]]
6939
- do
6940
- wait_lwpids="$(( $wait_lwpids - 1 ))"
6941
- sleep 0.01 2>/dev/null
6942
- find_processes
6943
- done
6944
- touch "$lwait_fl"
6945
- while [[ -f "$lwait_fl" && \
6946
- -n "$processes" && -d "/proc/$LWPID" ]]
6947
- do
6948
- sleep 1
6949
- find_processes
6950
- done
6951
- rm -f "$lwait_fl"
6952
- sleep 0.5
6953
- fi
6954
- fi) 2>/dev/null &
6955
- lwait_pid=$!
6956
  lite_init "$@"
6957
  case $1 in
6958
  -init) full_init "$@" ;;
@@ -6992,4 +6952,3 @@ if [[ "$EUID" == 0 && "$ALLOW_ROOT" != 1 ]]
6992
  *) lu_start "$@" ;;
6993
  esac
6994
  fi
6995
- wait "$lwait_pid" &>/dev/null
 
1
  #!/usr/bin/env bash
2
 
3
+ export LW_VERSION="0.80.1"
4
  export LW_DEVELOPERS="VHSgunzo"
5
 
6
  export RED='\033[1;91m'
 
59
  [ ! -n "$LW_NAME" ] && export LW_NAME="$(basename "$0")"
60
  [ ! -n "$LW_DIR" ] && export LW_DIR="$HOME/.local/share/LuxWine"
61
  [ ! -n "$LW_BIN_DIR" ] && export LW_BIN_DIR="$LW_DIR/bin"
62
+ [ ! -n "$LWRUN" ] && export LWRUN="$LW_BIN_DIR/lwrun"
63
  if [ ! -n "$LW_TRAY" ]
64
  then
65
  [ "$DESKTOP_SESSION" == "plasma" ] && \
 
1561
  SHRT_NAME="$SHRT_NAME ($(basename "$WINEPREFIX"))"
1562
  DESKF="${LW_DEF_TMP}/${SHRT_NAME}.desktop"
1563
  echo "[Desktop Entry]" > "$DESKF"
1564
+ (LW_SOURCE="$LWRUN"
1565
  [[ "$1" =~ "'" ]] && \
1566
  SHRTEXEPATH="\"$1\""||\
1567
  SHRTEXEPATH="'$1'"
 
3770
  do
3771
  [ -n "$(if [ -n "$args" ]
3772
  then
3773
+ awk -v s="Exec='$LWRUN' '$1' $args" '$0==s' "$app" 2>/dev/null
3774
+ awk -v s="Exec='$LWRUN' \"$1\" $args" '$0==s' "$app" 2>/dev/null
3775
  else
3776
+ awk -v s="Exec='$LWRUN' '$1'" '$0==s' "$app" 2>/dev/null
3777
+ awk -v s="Exec='$LWRUN' \"$1\"" '$0==s' "$app" 2>/dev/null
3778
  fi|head -1)" ] && ret=0 && echo "$app" && break
3779
  done
3780
  return $ret
 
4160
  exit 1
4161
  fi
4162
  echo_help() {
 
 
4163
  echo -e "
4164
  ${GREEN}Lux Wine ${RED}v${LW_VERSION} ${GREEN}by $LW_DEVELOPERS
4165
  ${RED}Usage:
4166
  $RED┌──[$GREEN$USER$YELLOW@$BLUE`uname -a|awk '{print$2}'`$RED]─[$GREEN$PWD$RED]
4167
+ $RED└──╼ \$$GREEN lwrun $BLUE{lwrun arg} ${RED}blabla.exe $YELLOW{exe args}
4168
 
4169
  ${RED}-explorer $GREEN Wine explorer
4170
  ${RED}-cmd $GREEN Open CMD or open file in CMD
 
6913
  print_error yad "Don't run Lux Wine as root!"
6914
  exit 1
6915
  else
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6916
  lite_init "$@"
6917
  case $1 in
6918
  -init) full_init "$@" ;;
 
6952
  *) lu_start "$@" ;;
6953
  esac
6954
  fi
 
lwrap/PKGBUILD CHANGED
@@ -1,8 +1,8 @@
1
  # Maintainer: VHSgunzo <vhsgunzo.github.io>
2
 
3
  pkgname='lwrap'
4
- pkgver='0.78.5'
5
- pkgrel='5'
6
  pkgdesc='Lux Wine wrapper for RunImage container'
7
  arch=('x86_64')
8
  url='https://github.com/VHSgunzo/lux-wine'
@@ -41,8 +41,8 @@ optdepends=(
41
  'lib32-opencl-icd-loader' 'opencl-icd-loader'
42
  'lib32-llvm' 'wine-prefix-dotnet'
43
  )
44
- source=('lwrap' 'lwexec')
45
- sha256sums=('SKIP' 'SKIP')
46
  install='lwrap.install'
47
 
48
  shopt -s extglob
@@ -50,9 +50,9 @@ shopt -s extglob
50
  package() {
51
  install -dm755 "$pkgdir/usr/bin"
52
  install -Dm755 "$pkgname" "$pkgdir/opt/$pkgname/bin/$pkgname"
53
- install -Dm755 "lwexec" "$pkgdir/opt/$pkgname/bin/lwexec"
54
  cp -ar --no-preserve=ownership "$(realpath ../../)"/!(.git*|$pkgname|lutris-wine) "$pkgdir/opt/$pkgname"
55
  mv -f "$pkgdir/opt/$pkgname/lux-wine" "$pkgdir/opt/$pkgname/bin/lux-wine"
 
56
  ln -sfr "$pkgdir/opt/$pkgname/bin/$pkgname" "$pkgdir/usr/bin/$pkgname"
57
  mkdir -p "$pkgdir/usr"/{lib,lib32}
58
  ln -sfr "$pkgdir/usr/lib/syslog-ng/libcef.so" "$pkgdir/usr/lib/libcef.so"
 
1
  # Maintainer: VHSgunzo <vhsgunzo.github.io>
2
 
3
  pkgname='lwrap'
4
+ pkgver='0.80'
5
+ pkgrel='1'
6
  pkgdesc='Lux Wine wrapper for RunImage container'
7
  arch=('x86_64')
8
  url='https://github.com/VHSgunzo/lux-wine'
 
41
  'lib32-opencl-icd-loader' 'opencl-icd-loader'
42
  'lib32-llvm' 'wine-prefix-dotnet'
43
  )
44
+ source=('lwrap')
45
+ sha256sums=('SKIP')
46
  install='lwrap.install'
47
 
48
  shopt -s extglob
 
50
  package() {
51
  install -dm755 "$pkgdir/usr/bin"
52
  install -Dm755 "$pkgname" "$pkgdir/opt/$pkgname/bin/$pkgname"
 
53
  cp -ar --no-preserve=ownership "$(realpath ../../)"/!(.git*|$pkgname|lutris-wine) "$pkgdir/opt/$pkgname"
54
  mv -f "$pkgdir/opt/$pkgname/lux-wine" "$pkgdir/opt/$pkgname/bin/lux-wine"
55
+ ln -sfr "$pkgdir/opt/$pkgname/bin/lux-wine" "$pkgdir/usr/bin/lux-wine"
56
  ln -sfr "$pkgdir/opt/$pkgname/bin/$pkgname" "$pkgdir/usr/bin/$pkgname"
57
  mkdir -p "$pkgdir/usr"/{lib,lib32}
58
  ln -sfr "$pkgdir/usr/lib/syslog-ng/libcef.so" "$pkgdir/usr/lib/libcef.so"
lwrap/lwexec DELETED
@@ -1,109 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- PATH="$PATH:$RUNSTATIC"
4
- JOBNUMFL="$LWEXECFLDIR/job"
5
-
6
- get_child_pids() {
7
- local child_pids="$(ps --forest -o pid= -g $(ps -o sid= -p $1 2>/dev/null) 2>/dev/null)"
8
- echo -e "$1\n$(ps -o pid=,cmd= -p $child_pids 2>/dev/null|sort -n|\
9
- sed "0,/$1/d" 2>/dev/null|grep -Pv '\d+ sleep \d+'|awk '{print$1}')"|sort -nu
10
- }
11
-
12
- try_kill() {
13
- ret=1
14
- if [ -n "$1" ]
15
- then
16
- for pid in $1
17
- do
18
- trykillnum=1
19
- while [[ -n "$pid" && -d "/proc/$pid" ]]
20
- do
21
- if [[ "$trykillnum" -le 3 ]]
22
- then
23
- kill -2 $pid 2>/dev/null
24
- ret=$?
25
- sleep 0.05
26
- else
27
- kill -9 $pid 2>/dev/null
28
- ret=$?
29
- wait $pid &>/dev/null
30
- wait_pid "$pid"
31
- fi
32
- trykillnum="$(( $trykillnum + 1 ))"
33
- done
34
- done
35
- fi
36
- return $ret
37
- }
38
-
39
- wait_pid() {
40
- if [ -n "$1" ]
41
- then
42
- if [ "$UNLIM_WAIT" == 1 ]
43
- then
44
- while [ -d "/proc/$1" ]; do sleep 0.1; done
45
- else
46
- [ -n "$2" ] && \
47
- timeout="$2"||
48
- timeout="100"
49
- waittime=1
50
- while [[ -d "/proc/$1" && "$waittime" -le "$timeout" ]]
51
- do
52
- sleep 0.01
53
- waittime="$(( $waittime + 1 ))"
54
- done
55
- fi
56
- fi
57
- }
58
-
59
- killjobpids() { try_kill "$(get_child_pids "$execjobpid")" ; }
60
-
61
- check_args_spaces() {
62
- for arg in "$@"
63
- do
64
- (echo "$arg"|grep -Po '\s' &>/dev/null||\
65
- echo "$arg"|grep -Eo '.*(.*|.*).*' &>/dev/null) && \
66
- arg="$(echo "$arg"|sed 's|.*|"&"|' 2>/dev/null)"
67
- args+=("$arg")
68
- done
69
- }
70
-
71
- cleanup() { [[ -d "$execjobdir" && -n "$jobnum" ]] && rm -rf "$execjobdir" 2>/dev/null ; }
72
-
73
- if [[ -d "$LWEXECFLDIR" && -e "$JOBNUMFL" ]]
74
- then
75
- trap 'killjobpids;cleanup' SIGINT SIGTERM
76
- trap 'cleanup' EXIT
77
- unset args
78
- jobnum="$(cat "$JOBNUMFL" 2>/dev/null)"
79
- if [ -n "$jobnum" ]
80
- then
81
- execjobdir="$LWEXECFLDIR/$jobnum"
82
- execenvfl="$execjobdir/env"
83
- execjobfl="$execjobdir/exec"
84
- execjoboutfl="$execjobdir/out"
85
- execjobstatfl="$execjobdir/stat"
86
- export -p|\
87
- grep -v 'SHELL='|\
88
- grep -v 'DISPLAY='|\
89
- grep -v 'XDG_DATA_DIRS='|\
90
- grep -v 'XDG_CONFIG_DIRS='|\
91
- grep -v 'XDG_RUNTIME_DIR='|\
92
- grep -v 'DBUS_SESSION_BUS_ADDRESS=' \
93
- > "$execenvfl" 2>/dev/null
94
- if [ -n "$1" ]
95
- then
96
- check_args_spaces "$@"
97
- echo "${args[@]}" > "$execjobfl"
98
- else cat > "$execjobfl" 2>/dev/null
99
- fi
100
- execjobpid="$(cat "$execjobstatfl" 2>/dev/null)"
101
- cat "$execjoboutfl" 2>/dev/null
102
- execstat="$(cat "$execjobstatfl" 2>/dev/null)"
103
- fi
104
- [ -n "$execstat" ]||execstat=1
105
- exit $execstat
106
- else
107
- echo "LWEXECFLDIR is not configured!"
108
- exit 1
109
- fi
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lwrap/lwrap CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env bash
2
  # Lux Wine wrapper for RunImage container
3
 
4
  shopt -s extglob
@@ -9,50 +9,20 @@ GREEN='\033[1;92m'
9
  YELLOW='\033[1;33m'
10
  RESETCOLOR='\033[1;00m'
11
 
12
- # YC_S3="https://storage.yandexcloud.net"
13
- GIT_REPO='https://github.com/VHSgunzo'
14
- GIT_HF_REPO='https://huggingface.co/spaces/lux-wine'
15
- # GIT_YC_REPO="$YC_S3/lux-wine"
16
  LW_DIR="$HOME/.local/share/LuxWine"
17
  MENU_APPS_DIR="$HOME/.local/share/applications"
18
- LW_APPS_DIR="$MENU_APPS_DIR/LuxWineApps"
19
  LW_CFG="$LW_DIR/luwine.wcfg"
20
- TMP_LW_CFG="$LW_DIR/tmp/luwine.wcfg"
21
  LWBIN_DIR="$LW_DIR/bin"
22
- LWSRC="$LWBIN_DIR/lux-wine"
23
- GIT_RAW='https://raw.githubusercontent.com/VHSgunzo/lux-wine/main'
24
- GIT_LWSRC="$GIT_RAW/lux-wine"
25
- GIT_HF_LWSRC="$GIT_HF_REPO/git/resolve/main/lux-wine"
26
- # GIT_YC_LWSRC="$GIT_YC_REPO/git/lux-wine"
27
- GIT_LWZIP="$GIT_REPO/lux-wine/archive/refs/heads/main.zip"
28
- GIT_HF_LWZIP="$GIT_HF_REPO/git/resolve/main/main.zip"
29
- # GIT_YC_LWZIP="$GIT_YC_REPO/main.zip"
30
- GIT_LWRAP="$GIT_RAW/lwrap/lwrap"
31
- GIT_HF_LWRAP="$GIT_HF_REPO/git/resolve/main/lwrap/lwrap"
32
- # GIT_YC_LWRAP="$GIT_YC_REPO/git/lwrap/lwrap"
33
- GIT_LWRUN="$GIT_REPO/lwrun/releases"
34
- GIT_HF_LWRUN="${GIT_HF_REPO//\/spaces/}/lwrun/resolve/main/releases"
35
- # YC_LWRUN="$YC_S3/lwrun"
36
  HOME_ICONS="$HOME/.local/share/icons"
37
  HOME_DESK_DIRS="$HOME/.local/share/desktop-directories"
38
  HSTEAM_DESKF="$MENU_APPS_DIR/steam-lw.desktop"
39
- RSTEAM_DESKF="$RUNROOTFS/usr/share/applications/steam.desktop"
40
- F_RC="$HOME/.config/fish/config.fish"
41
- B_RC="$HOME/.bashrc"
42
- Z_RC="$HOME/.zshrc"
43
  HBIN_DIR="$HOME/.local/bin"
44
  LWRUN_LN="$HBIN_DIR/lwrun"
45
- LWRAP_LN="$HBIN_DIR/lwrap"
46
- LWRAP="$LWBIN_DIR/lwrap"
47
- LWBASH="$LWBIN_DIR/bash"
48
  LWRUN="$LWBIN_DIR/lwrun"
49
  RUNIMAGE_LW="$LWBIN_DIR/runimage-lw"
50
- LWRAP_DIR='/opt/lwrap'
51
- LWRUNTIME="$LWRAP_DIR/runtime.tar.zst"
52
- HLWDIRLN="$HOME/LuxWine"
53
- LW_DEF_TMP="$LW_DIR/tmp"
54
- LWRPIDFL="$LW_DEF_TMP/lwrpid"
55
- LWEXEC="$LWBIN_DIR/lwexec"
56
  HICOLOR_SIZES=(
57
  "512x512" "256x256" "192x192" "128x128"
58
  "96x96" "80x80" "72x72" "64x64" "48x48"
@@ -64,20 +34,12 @@ LW_MIMETYPES=(
64
  'application/x-ms-shortcut' 'text/x-ms-regedit'
65
  )
66
 
67
- if [[ -n "$RUNSRC" && -d "$RUNROOTFS" ]] && \
68
- [[ -x "$LWRAP" && "$NO_EXT_LWRAP" != 1 ]]
69
- then
70
- NO_EXT_LWRAP=1 "$LWRAP" "$@"
71
- exit $?
72
- fi
73
- unset NO_EXT_LWRAP
74
-
75
  CFG_CHK_UPDATE="$(grep '^CHK_UPDATE=.*$' "$LW_CFG" 2>/dev/null)"
76
  [ -n "$CFG_CHK_UPDATE" ] && \
77
  eval "$CFG_CHK_UPDATE"||\
78
  CHK_UPDATE='3'
79
 
80
- [ ! -n "$(tty|grep -v 'not a'|grep -Eo 'tty|pts')" ] && \
81
  NOT_TERM=1||NOT_TERM=0
82
 
83
  error_msg() {
@@ -107,124 +69,96 @@ warn_msg() {
107
  fi
108
  }
109
 
110
- check_path() {
111
- if [ "$1" == "$F_RC" ]
112
- then grep -om1 '^set -U fish_user_paths "$HOME/.local/bin"' "$1" &>/dev/null
113
- else grep -om1 '^export PATH=.*/.local/bin' "$1" &>/dev/null
114
- fi
115
- }
116
-
117
- add_path() {
118
- if [ "$1" == "$F_RC" ]
119
- then check_path "$1"||(mkdir -p "$(dirname "$1")" && echo -e '\nset -U fish_user_paths "$HOME/.local/bin"' >> "$1")
120
- else check_path "$1"||echo -e '\nexport PATH="$HOME/.local/bin:$PATH"' >> "$1"
121
- fi
122
- }
123
-
124
- ln_lwrap() { [[ -x "$LWRAP" && -x "$LWRAP_LN" ]]||(mkdir -p "$HBIN_DIR" && ln -sfr "$LWRAP" "$LWRAP_LN") ; }
125
-
126
  make_install() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  if [ "$1" == "force" ]
128
  then QUIET_MODE=1 uninstall_lw force
129
  else QUIET_MODE=1 uninstall_lw update
130
  fi
131
- [ -f 'lux-wine' ] && \
132
- local lwf='lux-wine'||\
133
- local lwf='bin/lux-wine'
134
- install -Dm755 "$lwf" "$LWSRC"
135
- if is_not_pts_home
 
 
 
 
 
 
 
 
 
 
136
  then
137
- grep -m1 '^Exec=".*"' -lr ./*|\
138
- xargs -d'\n' sed -i "s|^Exec=\".*\"|Exec=\"$LWRAP\"|g" 2>/dev/null
139
- if [ -f 'lwrap' ]
140
- then local lwrapf='lwrap'
141
- elif [ -f 'bin/lwrap' ]
142
- then local lwrapf='bin/lwrap'
143
- else local lwrapf='lwrap/lwrap'
144
- fi
145
- if [ -f 'lwexec' ]
146
- then local lwexecf='lwexec'
147
- elif [ -f 'bin/lwexec' ]
148
- then local lwexecf='bin/lwexec'
149
- else local lwexecf='lwrap/lwexec'
150
- fi
151
- if [ -x "$RUNSTATIC/bash" ]
152
- then
153
- sed -i "1 s|^.*$|#!$LWBASH|" "$lwrapf"
154
- sed -i "1 s|^.*$|#!$LWBASH|" "$lwexecf"
155
- install -Dm755 "$RUNSTATIC/bash" "$LWBASH"
156
- fi
157
- install -Dm755 "$lwrapf" "$LWRAP"
158
- ln_lwrap
159
- install -Dm755 "$lwexecf" "$LWEXEC"
160
- install -Dm644 LuxWine.menu "$HOME/.config/menus/applications-merged/LuxWine.menu"
161
- if [ "$KDE_SESSION_VERSION" == 6 ]
162
- then install -Dm755 LuxWineService.desktop "$HOME/.local/share/kio/servicemenus/LuxWineService.desktop"
163
- elif [ "$KDE_SESSION_VERSION" == 5 ]
164
- then install -Dm755 LuxWineService.desktop "$HOME/.local/share/kservices5/ServiceMenus/LuxWineService.desktop"
165
- fi
166
- mkdir -p "$MENU_APPS_DIR"
167
- mkdir -p "$HOME_DESK_DIRS"
168
- cp -rf mime "$HOME/.local/share/mime"
169
- cp -rf applications "$MENU_APPS_DIR/LuxWine"
170
- cp -rf directories/* "$HOME_DESK_DIRS/"
171
- if [[ -d "$RUNROOTFS" && -f "$RSTEAM_DESKF" ]]
172
- then
173
- cp -rf "$RSTEAM_DESKF" "$HSTEAM_DESKF"
174
- sed -i "s|^Exec.*steam-runtime|Exec='$HBIN_DIR/steam-runtime'|g" "$HSTEAM_DESKF"
175
- sed -i "s|^Name=Steam (Runtime)|Name=Steam (RunImage LW)|g" "$HSTEAM_DESKF"
176
- HICNSTM="$HOME_ICONS/steam.png"
177
- for hi_icon_size in ${HICOLOR_SIZES[@]}
178
- do
179
- HICONS_DIR="$HOME_ICONS/hicolor/$hi_icon_size/apps"
180
- RSTEAM_ICON="$RUNROOTFS/usr/share/icons/hicolor/$hi_icon_size/apps/steam.png"
181
- HSTEAM_ICON="$HICONS_DIR/steam.png"
182
- if [[ -f "$RSTEAM_ICON" && ! -f "$HSTEAM_ICON" ]]
183
- then
184
- mkdir -p "$HICONS_DIR"
185
- [ -L "$HSTEAM_ICON" ] && \
186
- rm -f "$HSTEAM_ICON"
187
- cp -rf "$RSTEAM_ICON" "$HSTEAM_ICON"
188
- fi
189
- if [[ -f "$RSTEAM_ICON" && ! -f "$HICNSTM" ]]
190
- then
191
- mkdir -p "$HOME_ICONS"
192
- [ -L "$HICNSTM" ] && \
193
- rm -f "$HICNSTM"
194
- cp -rf "$RSTEAM_ICON" "$HICNSTM"
195
- fi
196
- done
197
- fi
198
- [ "$ENABLE_HOSTEXEC" == 1 ] && \
199
- local INSTALL_SHELL="$(hostexec echo '$SHELL')"||\
200
- local INSTALL_SHELL="$SHELL"
201
- case "$(basename "$INSTALL_SHELL")" in
202
- zsh) add_path "$Z_RC" ;;
203
- bash) add_path "$B_RC" ;;
204
- fish) add_path "$F_RC" ;;
205
- esac
206
- update-desktop-database -q "$MENU_APPS_DIR" &>/dev/null
207
- update-mime-database "$HOME/.local/share/mime" &>/dev/null
208
- for mimetype in "${LW_MIMETYPES[@]}"
209
- do xdg-mime default LuxWine.desktop "$mimetype" &>/dev/null
210
  done
211
  fi
 
 
 
 
 
 
 
 
 
 
 
 
 
212
  cp -rf registry_patch "$LW_DIR/"
213
  cp -rf LICENSE "$LW_DIR/"
214
  cp -rf themes "$LW_DIR/"
215
  cp -rf icons "$LW_DIR/"
216
  cp -rf gif "$LW_DIR/"
217
  cp -rf db "$LW_DIR/"
 
218
  if [ -f "$LWRUNTIME" ]
219
  then
 
220
  tar -xf "$LWRUNTIME" -C "$LW_DIR" && \
221
  [[ ! -f "$LW_CFG" && -f "$TMP_LW_CFG" ]] && \
222
  cp -f "$TMP_LW_CFG" "$LW_CFG"
223
  fi
224
- grep "$LWRUN_LN" -lr "$MENU_APPS_DIR"|\
225
- xargs -d'\n' sed -i "s|$LWRUN_LN|$LWRAP|g" 2>/dev/null
226
- grep "$LWRUN" -lr "$MENU_APPS_DIR"|\
227
- xargs -d'\n' sed -i "s|$LWRUN|$LWRAP|g" 2>/dev/null
228
  }
229
 
230
  mv_lwrun() {
@@ -235,80 +169,65 @@ mv_lwrun() {
235
  fi
236
  }
237
 
238
- is_not_pts_home() {
239
- [[ "$SANDBOX_HOME" != 1 && "$SANDBOX_HOME_DL" != 1 && ! -d "$SANDBOXHOMEDIR/lwrap" && \
240
- "$PORTABLE_HOME" != 1 && "$TMP_HOME" != 1 && "$TMP_HOME_DL" != 1 && ! -d "$PORTABLEHOMEDIR/lwrap" ]]
241
- }
242
-
243
  try_install_lwrun() {
244
- finalize_install() {
245
- chmod u+x "$LWRUN"
246
- ln_lwrun
247
- export LWRUN_INSTALLED=1
248
- info_msg "lwrun installed!"
249
- if [ ! -n "$TMP_LWRUN" ] && \
250
- is_net_conn
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251
  then
252
- update_lwrap
253
- "$LWRAP" --install
 
 
254
  fi
255
- try_shutdown_lw && \
256
- return 0||return 1
257
  }
258
- if is_not_pts_home
 
 
259
  then
260
- REALP_LWRUN="$(readrealpath "$LWRUN")"
261
- if [[ "$RUNSRC" =~ "lwrun" && -f "$RUNSRCRPTH" && \
262
- "$RUNSRCRPTH" != "$LWRUN" && ! "$RUNSRCRPTH" =~ "Run" && \
263
- "$LWRUN_INSTALLED" != 1 ]]
264
  then
265
- info_msg "Installing lwrun..."
266
- mkdir -p "$LWBIN_DIR"
267
- if mv_lwrun "$RUNSRCRPTH" "$LWRUN"
268
- then finalize_install
269
- else
270
- error_msg "Failed to install lwrun!"
271
- is_lwrun && \
272
- return 1||exit 1
273
- fi
274
- elif [[ "$RUNSRCRPTH" =~ "Run" && "$RUNSRCRPTH" != "$REALP_LWRUN" ]]
275
- then
276
- mkdir -p "$LWBIN_DIR"
277
- ln -sf "$RUNSRCRPTH" "$LWRUN"
278
  ln_lwrun
279
- return 0
280
- elif [[ ! -n "$TMP_LWRUN" && "$LWRUN_PKG" == 1 && \
281
- "$LWRUN_INSTALLED" != 1 ]]
282
- then finalize_install
 
 
 
283
  fi
284
- fi
285
- }
286
-
287
- ln_lwrun() {
288
- if is_lwrun
289
  then
290
- mkdir -p "$HBIN_DIR"
291
- REALP_LWRUN="$(readrealpath "$LWRUN")"
292
- if [ "$(readrealpath "$LWRUN_LN")" != "$REALP_LWRUN" ]
293
- then
294
- info_msg "Update lwrun link..."
295
- ln -sfr "$LWRUN" "$LWRUN_LN"
296
- fi
297
- for steam in {steam,steam-runtime,steam-native}
298
- do
299
- if [ ! -f "$HBIN_DIR/$steam" ]
300
- then
301
- info_msg "Update $steam link..."
302
- ln -sfr "$LWRUN" "$HBIN_DIR/$steam"
303
- fi
304
- done
305
- if [ "$(readrealpath "$RUNIMAGE_LW")" != "$REALP_LWRUN" ]
306
- then
307
- info_msg "Update runimage link..."
308
- mkdir -p "$LWBIN_DIR"
309
- ln -sfr "$LWRUN" "$RUNIMAGE_LW"
310
- ln -sfr "$LWRUN" "$HBIN_DIR/runimage-lw"
311
- fi
312
  fi
313
  }
314
 
@@ -316,29 +235,31 @@ uninstall_lw() {
316
  if [ "$1" == "force" ] || is_lw || is_lwrun
317
  then
318
  info_msg "Removing Lux Wine..."
319
- rm -rf "$HSTEAM_DESKF"
320
  rm -rf "$MENU_APPS_DIR/LuxWine"
321
  rm -rf "$HOME_DESK_DIRS/LuxWine"*
322
- rm -rf "$HOME/.config/menus/applications-merged/LuxWine.menu"
323
  rm -rf "$HOME/.local/share/kservices5/ServiceMenus/LuxWine"*
324
  rm -rf "$HOME/.local/share/kio/servicemenus/LuxWine"*
 
 
 
 
 
325
  if [ "$1" == "update" ]
326
  then
327
- rm -rf "$LWSRC"
328
- rm -rf "$LWRAP"
329
- rm -rf "$LWBASH"
330
  rm -rf "$LW_DIR/db"
331
  rm -rf "$LW_DIR/gif"
332
  rm -rf "$LW_DIR/icons"
333
  rm -rf "$LW_DIR/themes"
334
- rm -rf "$LW_DIR/LICENSE"
335
- rm -rf "$LW_DIR/.lwcfgchksum"
336
  rm -rf "$LW_DIR/registry_patch"
337
  else
 
338
  rm -rf "$LW_DIR"
339
- rm -rf "$HLWDIRLN"
340
  rm -rf "$LWRUN_LN"
341
- rm -rf "$LWRAP_LN"
342
  rm -rf "$HBIN_DIR/runimage-lw"
343
  rm -rf "$MENU_APPS_DIR/LuxWine"*
344
  rm -rf "$HOME/Desktop/LuxWine.desktop"
@@ -362,68 +283,22 @@ is_net_conn() {
362
  fi
363
  }
364
 
365
- exzip() {
366
- if is_exe_exist unzip
367
- then
368
- unzip "$1" -d "$2" &>/dev/null
369
- elif is_exe_exist 7z
370
- then
371
- 7z x "$1" -o"$2" &>/dev/null
372
- elif is_exe_exist bsdtar
373
- then
374
- mkdir -p "$2"
375
- bsdtar -x -f "$1" -C "$2" &>/dev/null
376
- else
377
- error_msg "zip archivator not found!"
378
- exit 1
379
- fi
380
- }
381
 
382
- is_lw() { (is_not_pts_home && [[ -x "$LWSRC" && -x "$LWRAP" ]])||[ -x "$LWSRC" ] ; }
383
 
384
  is_lwrun() { [ -x "$LWRUN" ] ; }
385
 
386
- try_dl_lwzip() {
387
- local lwzipurl=(
388
- # "$GIT_YC_LWZIP"
389
- "$GIT_HF_LWZIP"
390
- "$GIT_LWZIP"
391
- )
392
- for url in "${lwzipurl[@]}"
393
- do
394
- try_dl "$url" "$TMP_LW.zip" && \
395
- return 0
396
- done
397
- return 1
398
- }
399
-
400
  install_lw() {
401
- install_local_lw() {
402
- if [ -d "/opt/lwrap" ]
403
- then
404
- info_msg "Installing Lux Wine from container..."
405
- (mkdir -p "$TMP_LW" && \
406
- cp -rf "/opt/lwrap"/!(runtime.tar.zst|prefix_backups) "$TMP_LW" && \
407
- cd "$TMP_LW" && \
408
- make_install "$1"
409
- rm_tmplw)
410
- fi
411
- }
412
- rm_tmplw() { [[ -d "$TMP_LW" || -f "$TMP_LW.zip" ]] && rm -rf "$TMP_LW"* ; }
413
  TMP_LW="/tmp/lux-wine.$RANDOM"
414
- if [ "$1" != "local" ] && \
415
- is_net_conn
416
  then
417
  info_msg "Installing Lux Wine..."
418
- if try_dl_lwzip
419
- then
420
- (exzip "$TMP_LW.zip" "$TMP_LW" && \
421
- cd "$TMP_LW/lux-wine-main" && \
422
- make_install "$1"
423
- rm_tmplw)
424
- else install_local_lw "$1"
425
- fi
426
- else install_local_lw "$1"
427
  fi
428
  if is_lw
429
  then info_msg "Lux Wine installed!"
@@ -433,167 +308,40 @@ install_lw() {
433
  fi
434
  }
435
 
436
- vers_parser() { grep -Po '\d+'|sed ':a;/$/N;s/\n//;ta' ; }
437
-
438
- set_git_lw_version() {
439
- unset GIT_LW_VERSION
440
- local lwsrcusrls=(
441
- # "$GIT_YC_LWSRC"
442
- "$GIT_HF_LWSRC"
443
- "$GIT_LWSRC"
444
- )
445
- for url in "${lwsrcusrls[@]}"
446
- do
447
- GIT_LW_VERSION="$(NO_ARIA2C=1 NO_DL_GUI=1 NO_DL_REPEAT=1 \
448
- try_dl "$url" /dev/stdout 2>/dev/null|get_lw_version)"
449
- [ -n "$GIT_LW_VERSION" ] && return 0
450
- done
451
- return 1
452
- }
453
-
454
- get_lw_version() {
455
- if [ -n "$1" ]
456
- then grep -m1 'LW_VERSION' "$1" 2>/dev/null|vers_parser
457
- else grep -m1 'LW_VERSION'|vers_parser
458
- fi
459
- }
460
-
461
- try_dllwrap_mirror() {
462
- local lwrapurl=(
463
- # "$GIT_YC_LWRAP"
464
- "$GIT_HF_LWRAP"
465
- "$GIT_LWRAP"
466
- )
467
- for url in "${lwrapurl[@]}"
468
- do
469
- try_dl "$url" "$TMP_LWRAP" && \
470
- return 0
471
- done
472
- return 1
473
- }
474
-
475
- update_lwrap() {
476
- info_msg "Update lwrap..."
477
- TMP_LWRAP="${LWRAP}.new$BASHPID"
478
- if try_dllwrap_mirror
479
- then
480
- mv -f "$TMP_LWRAP" "$LWRAP"
481
- chmod +x "$LWRAP"
482
- ln_lwrap
483
- else
484
- error_msg "Failed to get lwrap!"
485
- return 1
486
- fi
487
- }
488
-
489
- update_lw() {
490
- if is_lw
491
- then
492
- info_msg "Checking the Lux Wine update..."
493
- set_git_lw_version
494
- LW_VERSION="$(get_lw_version "$LWSRC")"
495
- if [[ -n "$GIT_LW_VERSION" && -n "$LW_VERSION" ]]
496
- then
497
- if [ "$LW_VERSION" != "$GIT_LW_VERSION" ]
498
- then
499
- if is_update "Lux Wine"
500
- then
501
- info_msg "Lux Wine update..."
502
- if update_lwrap
503
- then "$LWRAP" --install||\
504
- exit 1
505
- else exit 1
506
- fi
507
- fi
508
- else
509
- info_msg "The latest version is already installed!"
510
- touch "$LWSRC"
511
- fi
512
- else
513
- error_msg "Failed to check for updates!"
514
- return 1
515
- fi
516
- else
517
- error_msg "Lux Wine is not installed!"
518
- exit 1
519
- fi
520
- }
521
-
522
- get_lwrun_git_ver() {
523
- NO_ARIA2C=1 NO_DL_GUI=1 NO_DL_REPEAT=1 try_dl "$GIT_LWRUN/latest" \
524
- /dev/stdout 2>/dev/null|grep -m1 "Release v.*"|awk '{print$2}'
525
- }
526
-
527
- get_lwrun_hf_ver() {
528
- NO_ARIA2C=1 NO_DL_GUI=1 NO_DL_REPEAT=1 try_dl \
529
- "${GIT_HF_LWRUN/resolve/tree}" /dev/stdout \
530
- 2>/dev/null|grep -Po "v\d+\.\d+\.\d+"|tail -1
531
- }
532
-
533
- # get_lwrun_yc_ver() {
534
- # NO_ARIA2C=1 NO_DL_GUI=1 NO_DL_REPEAT=1 try_dl \
535
- # "$YC_LWRUN" /dev/stdout 2>/dev/null|tr '<' '\n'|\
536
- # grep '^Key>'|sed 's|^Key>||g'|grep '^releases'|\
537
- # awk -F/ 'END {print$2}'
538
- # }
539
-
540
- set_git_lwrun_ver() {
541
- # for src in yc git hf
542
- for src in git hf
543
- do
544
- GIT_LWRUN_VERSION="$(get_lwrun_${src}_ver)"
545
- [ -n "$GIT_LWRUN_VERSION" ] && return 0
546
- done
547
- return 1
548
- }
549
-
550
- try_dllwrun_mirror() {
551
- local lwrunurl=(
552
- # "$YC_LWRUN/releases/$GIT_LWRUN_VERSION/lwrun"
553
- "$GIT_HF_LWRUN/$GIT_LWRUN_VERSION/lwrun"
554
- "$GIT_LWRUN/download/$GIT_LWRUN_VERSION/lwrun"
555
- )
556
- for url in "${lwrunurl[@]}"
557
- do
558
- try_dl "$url" "$TMP_LWRUN" && \
559
- return 0
560
- done
561
- return 1
562
- }
563
-
564
  try_dl_lwrun() {
565
- TMP_LWRUN="$LWRUN.new$BASHPID"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
566
  info_msg "Downloading lwrun..."
567
- set_git_lwrun_ver
568
- if [ -n "$GIT_LWRUN_VERSION" ] && \
569
- try_dllwrun_mirror
570
  then
571
  info_msg "lwrun downloaded!"
572
- RUNSRCRPTH="$TMP_LWRUN" \
573
- RUNSRC="lwrun" try_install_lwrun &&
574
- return 0||return 1
575
  else
576
  error_msg "Failed to download lwrun!"
577
  [ -f "$TMP_LWRUN" ] && \
578
  rm -rf "$TMP_LWRUN"*
579
  exit 1
580
  fi
581
- }
582
-
583
- runimage_lw() {
584
- [ "$NOT_TERM" != 1 ] && \
585
- unset HOSTEXEC_IN_TERM||\
586
- HOSTEXEC_IN_TERM=(
587
- "xterm" "-fa" "Monospace"
588
- "-fs" "11" "-geometry" "130x45"
589
- "-bg" "black" "-fg" "white" \
590
- "-T" "Updating RunImage packages..." "-e"
591
- )
592
- if [ "$ENABLE_HOSTEXEC" == 1 ]
593
- then "${HOSTEXEC_IN_TERM[@]}" hostexec ptyspawn importenv '$RUNPID' \
594
- env DONT_NOTIFY=1 NO_RPIDSMON=1 "$RUNIMAGE_LW" "$@"
595
- else "$RUNIMAGE_LW" "$@"
596
- fi
597
  }
598
 
599
  yn_case() {
@@ -633,7 +381,7 @@ is_update() {
633
  }
634
 
635
  try_shutdown_lw() {
636
- if [ -n "$(pgrep -fa lux-wine|grep -om1 'LuxWine/bin')" ]
637
  then
638
  if [ "$FORCE_UPDATE" != 1 ]
639
  then
@@ -658,51 +406,33 @@ try_shutdown_lw() {
658
 
659
  no_color() { sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2};?)?)?[mGK]//g" ; }
660
 
661
- update_runimage() {
 
662
  if is_update "RunImage" "Do you want to check updates for RunImage packages?"
663
  then
664
- if (runimage_lw --rU && try_shutdown_lw)
665
- then return 0
666
- else return 1
667
- fi
668
- else
669
- touch "$LWRUN"
670
- return 1
671
- fi
672
- }
673
-
674
- lwrap_init() {
675
- if [ "$ENABLE_HOSTEXEC" == 1 ]
676
- then hostexec ptyspawn importenv '$RUNPID' "$LWRAP" -init
677
- else "$LWRAP" -init
678
  fi
679
- }
680
-
681
- update_lwrun() {
682
- if is_lwrun
683
- then
684
- local ret=1
685
- info_msg "Checking the lwrun update..."
686
- if [ "$NO_RUNPKG_UPDATE" != 1 ]
687
- then
688
- update_runimage
689
- ret=$?
690
- [ "$ret" == 0 ] && \
691
- lwrap_init
692
- fi
693
- return $ret
694
- else
695
- error_msg "lwrun is not installed!"
696
- exit 1
697
- fi
698
- }
699
 
700
  is_exe_exist() { command -v "$@" &>/dev/null ; }
701
 
702
  which_exe() { command -v "$@" ; }
703
 
704
  check_url_stat_code() {
705
- set -o pipefail
706
  if is_exe_exist curl
707
  then curl -sL -o /dev/null -I -w "%{http_code}" "$@" 2>/dev/null
708
  elif is_exe_exist wget
@@ -780,7 +510,7 @@ try_dl() {
780
  fi
781
  if is_url "$URL"
782
  then
783
- WGET_ARGS=(--no-check-certificate -t 3 -T 5 -w 0.5 "$URL" -O "$FILEDIR/$FILENAME")
784
  [ ! -d "$FILEDIR" ] && \
785
  mkdir -p "$FILEDIR"
786
  if [[ "$NOT_TERM" == 1 && "$NO_DL_GUI" != 1 ]] && \
@@ -849,7 +579,7 @@ try_dl() {
849
  elif is_exe_exist curl
850
  then
851
  curl -R --progress-bar --insecure --fail -L "$URL" -o \
852
- "$FILEDIR/$FILENAME" |& tr '\r' '\n'|sed '0,/100/{/100/d;}'|\
853
  sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g'|\
854
  dl_progress
855
  elif is_exe_exist wget2
@@ -892,28 +622,38 @@ try_dl() {
892
  fi
893
  }
894
 
895
- try_set_lwrpid() { lwrpid="$(cat "$LWRPIDFL" 2>/dev/null)" ; }
896
-
897
  rm_broken_link() { find -L "$1" -type l -exec rm -rf {} \; 2>/dev/null ; }
898
 
899
- readrealpath() {
900
- if is_exe_exist readlink
901
- then readlink -f "$@" 2>/dev/null
902
- elif is_exe_exist realpath
903
- then realpath "$@" 2>/dev/null
904
- else return 1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
905
  fi
906
  }
907
 
908
  print_help() {
909
- HLPHOSTNAME="$(uname -a|awk '{print$2}')"
910
- [[ "$RUNSRC" =~ "lwrun" ]] && \
911
- HLPEXENAME="lwrun"||\
912
- HLPEXENAME="lwrap"
913
  echo -e "
914
  ${RED}Usage:
915
  $RED┌──[$GREEN$RUNUSER$YELLOW@$BLUE${RUNHOSTNAME}$RED]─[$GREEN$PWD$RED]
916
- $RED└──╼ \$$GREEN $HLPEXENAME ${BLUE}{args}
917
 
918
  ${BLUE}--lwrap-help $GREEN Show this usage info
919
  ${BLUE}--install $YELLOW{force|local}$GREEN Re/Install Lux Wine and lwrun
@@ -922,112 +662,41 @@ print_help() {
922
  "
923
  }
924
 
925
- RUNSRCRPTH="$(readrealpath "$RUNSRC")"
926
-
927
  case "$1" in
928
- --lwrap-help) print_help
929
- exit ;;
930
- --uninstall) uninstall_lw "$2"
931
- exit $? ;;
932
- --install) try_install_lwrun
933
- is_lwrun||try_dl_lwrun
934
- install_lw "$2"
935
- exit $? ;;
936
- --update) FORCE_UPDATE=1
937
- update_lw
938
- update_lwrun
939
- exit $? ;;
940
  esac
941
 
942
- if [[ -n "$RUNSRC" && -d "$RUNROOTFS" ]]
943
  then
 
 
 
 
 
 
 
 
 
944
  try_install_lwrun
945
- is_lw||install_lw
946
  if [[ "$CHK_UPDATE" != 0 || "$FORCE_UPDATE" == 1 ]] && \
947
  is_net_conn
948
  then
949
- if [[ ! -x "$(find "$LWSRC" -mtime -$CHK_UPDATE \
950
- -print 2>/dev/null)" || "$FORCE_UPDATE" == 1 ]]
951
- then update_lw
952
- fi
953
- if is_not_pts_home && \
954
- [[ ! -x "$(find "$LWRUN" -mtime -$CHK_UPDATE \
955
  -print 2>/dev/null)" || "$FORCE_UPDATE" == 1 ]]
956
  then update_lwrun && exit $?
957
  fi
958
  fi
959
- if [ "$LWRUN_INSTALLED" == 1 ]
960
- then "$LWSRC" -init
961
- else
962
- try_set_lwrpid
963
- if ! [[ -n "$lwrpid" && -f "/tmp/.bwinf.$lwrpid" && -d "/proc/$lwrpid" ]]
964
- then
965
- LWEXECFLDIR="/tmp/.lwexec.$RUNPID"
966
- mkdir -p "$LW_DEF_TMP"
967
- echo "$RUNPID" > "$LWRPIDFL" 2>/dev/null
968
- (JOBNUMFL="$LWEXECFLDIR/job"
969
- mkdir -p "$LWEXECFLDIR" 2>/dev/null
970
- mkfifo "$JOBNUMFL" 2>/dev/null
971
- unset jobnum
972
- while [[ -d "/proc/$RUNPID" && -d "$LWEXECFLDIR" ]]
973
- do
974
- jobnum=$(( $jobnum + 1 ))
975
- execjobdir="$LWEXECFLDIR/$jobnum"
976
- execenvfl="$execjobdir/env"
977
- execjobfl="$execjobdir/exec"
978
- execjoboutfl="$execjobdir/out"
979
- execjobstatfl="$execjobdir/stat"
980
- mkdir "$execjobdir" 2>/dev/null
981
- mkfifo "$execenvfl" 2>/dev/null
982
- mkfifo "$execjobfl" 2>/dev/null
983
- mkfifo "$execjoboutfl" 2>/dev/null
984
- mkfifo "$execjobstatfl" 2>/dev/null
985
- tee <<<"$jobnum" "$JOBNUMFL" &>/dev/null
986
- if [ -e "$execjobfl" ]
987
- then
988
- (OLD_PATH="$PATH"
989
- OLD_LD_LIBRARY_PATH="$LD_LIBRARY_PATH"
990
- source "$execenvfl" && cd "$PWD"
991
- export PATH="$PATH:$OLD_PATH"
992
- export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$OLD_LD_LIBRARY_PATH"
993
- cat "$execjobfl" 2>/dev/null|"$RUNSTATIC/bash" &>"$execjoboutfl" &
994
- execjobpid=$!
995
- tee <<<"$execjobpid" "$execjobstatfl" &>/dev/null
996
- wait $execjobpid 2>/dev/null
997
- execstat=$?
998
- tee <<<"$execstat" "$execjobstatfl" &>/dev/null) &
999
- fi
1000
- done) &
1001
- fi
1002
- "$LWSRC" "$@"
1003
- [ -d "$LWEXECFLDIR" ] && \
1004
- rm -rf "$LWEXECFLDIR"
1005
- [ -f "$LWRPIDFL" ] && \
1006
- rm -f "$LWRPIDFL"
1007
- fi
1008
  else
1009
- try_set_lwrpid
1010
- if [[ "$FORCE_UPDATE" != 1 && -x "$LWEXEC" && -x "$LWSRC" ]] && \
1011
- [[ -n "$lwrpid" && -f "/tmp/.bwinf.$lwrpid" && -d "/proc/$lwrpid" ]]
1012
- then
1013
- LWEXECFLDIR="/tmp/.lwexec.$lwrpid" \
1014
- NOT_TERM="$NOT_TERM" "$LWEXEC" "$LWSRC" "$@"
1015
- elif [ -x "$LWRUN_LN" ]
1016
- then "$LWRUN_LN" "$@"
1017
- elif is_lwrun
1018
- then "$LWRUN" "$@"
1019
- elif [ -x "$(which_exe lwrun)" ]
1020
- then "$(which_exe lwrun)" "$@"
1021
  else
1022
- if is_net_conn
1023
- then
1024
- update_lwrap
1025
- try_dl_lwrun && \
1026
- "$LWRUN"
1027
- else
1028
- error_msg "lwrun not found, download and install it first!"
1029
- exit 1
1030
- fi
1031
  fi
1032
  fi
1033
  exit $?
 
1
+ #!/usr/bin/bash
2
  # Lux Wine wrapper for RunImage container
3
 
4
  shopt -s extglob
 
9
  YELLOW='\033[1;33m'
10
  RESETCOLOR='\033[1;00m'
11
 
 
 
 
 
12
  LW_DIR="$HOME/.local/share/LuxWine"
13
  MENU_APPS_DIR="$HOME/.local/share/applications"
 
14
  LW_CFG="$LW_DIR/luwine.wcfg"
 
15
  LWBIN_DIR="$LW_DIR/bin"
16
+ LWSRC='/opt/lwrap/bin/lux-wine'
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  HOME_ICONS="$HOME/.local/share/icons"
18
  HOME_DESK_DIRS="$HOME/.local/share/desktop-directories"
19
  HSTEAM_DESKF="$MENU_APPS_DIR/steam-lw.desktop"
 
 
 
 
20
  HBIN_DIR="$HOME/.local/bin"
21
  LWRUN_LN="$HBIN_DIR/lwrun"
22
+ OLDLWRAP="$LWBIN_DIR/lwrap"
 
 
23
  LWRUN="$LWBIN_DIR/lwrun"
24
  RUNIMAGE_LW="$LWBIN_DIR/runimage-lw"
25
+ PKGUPDFL="$LWBIN_DIR/.update"
 
 
 
 
 
26
  HICOLOR_SIZES=(
27
  "512x512" "256x256" "192x192" "128x128"
28
  "96x96" "80x80" "72x72" "64x64" "48x48"
 
34
  'application/x-ms-shortcut' 'text/x-ms-regedit'
35
  )
36
 
 
 
 
 
 
 
 
 
37
  CFG_CHK_UPDATE="$(grep '^CHK_UPDATE=.*$' "$LW_CFG" 2>/dev/null)"
38
  [ -n "$CFG_CHK_UPDATE" ] && \
39
  eval "$CFG_CHK_UPDATE"||\
40
  CHK_UPDATE='3'
41
 
42
+ [[ ! "$(LANG= tty|grep -v 'not a')" =~ tty|pts ]] && \
43
  NOT_TERM=1||NOT_TERM=0
44
 
45
  error_msg() {
 
69
  fi
70
  }
71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  make_install() {
73
+ add_path() {
74
+ check_path() {
75
+ if [ "$1" == "$F_RC" ]
76
+ then grep -om1 '^set -U fish_user_paths "$HOME/.local/bin"' "$1" &>/dev/null
77
+ else grep -om1 '^export PATH=.*/.local/bin' "$1" &>/dev/null
78
+ fi
79
+ }
80
+ if [ "$1" == "$F_RC" ]
81
+ then check_path "$1"||(mkdir -p "$(dirname "$1")" && echo -e '\nset -U fish_user_paths "$HOME/.local/bin"' >> "$1")
82
+ else check_path "$1"||echo -e '\nexport PATH="$HOME/.local/bin:$PATH"' >> "$1"
83
+ fi
84
+ }
85
+ F_RC="$HOME/.config/fish/config.fish"
86
+ B_RC="$HOME/.bashrc"
87
+ Z_RC="$HOME/.zshrc"
88
  if [ "$1" == "force" ]
89
  then QUIET_MODE=1 uninstall_lw force
90
  else QUIET_MODE=1 uninstall_lw update
91
  fi
92
+ grep -m1 '^Exec=".*"' -lr ./*|\
93
+ xargs -d'\n' sed -i "s|^Exec=\".*\"|Exec=\"$LWRUN\"|g" 2>/dev/null
94
+ install -Dm644 LuxWine.menu "$HOME/.config/menus/applications-merged/LuxWine.menu"
95
+ if [ "$KDE_SESSION_VERSION" == 6 ]
96
+ then install -Dm755 LuxWineService.desktop "$HOME/.local/share/kio/servicemenus/LuxWineService.desktop"
97
+ elif [ "$KDE_SESSION_VERSION" == 5 ]
98
+ then install -Dm755 LuxWineService.desktop "$HOME/.local/share/kservices5/ServiceMenus/LuxWineService.desktop"
99
+ fi
100
+ mkdir -p "$MENU_APPS_DIR"
101
+ mkdir -p "$HOME_DESK_DIRS"
102
+ cp -rf mime "$HOME/.local/share/mime"
103
+ cp -rf applications "$MENU_APPS_DIR/LuxWine"
104
+ cp -rf directories/* "$HOME_DESK_DIRS/"
105
+ RSTEAM_DESKF="$RUNROOTFS/usr/share/applications/steam.desktop"
106
+ if [[ -d "$RUNROOTFS" && -f "$RSTEAM_DESKF" ]]
107
  then
108
+ cp -rf "$RSTEAM_DESKF" "$HSTEAM_DESKF"
109
+ sed -i "s|^Exec.*steam-runtime|Exec='$HBIN_DIR/steam-runtime'|g" "$HSTEAM_DESKF"
110
+ sed -i "s|^Name=Steam (Runtime)|Name=Steam (RunImage LW)|g" "$HSTEAM_DESKF"
111
+ HICNSTM="$HOME_ICONS/steam.png"
112
+ for hi_icon_size in ${HICOLOR_SIZES[@]}
113
+ do
114
+ HICONS_DIR="$HOME_ICONS/hicolor/$hi_icon_size/apps"
115
+ RSTEAM_ICON="$RUNROOTFS/usr/share/icons/hicolor/$hi_icon_size/apps/steam.png"
116
+ HSTEAM_ICON="$HICONS_DIR/steam.png"
117
+ if [[ -f "$RSTEAM_ICON" && ! -f "$HSTEAM_ICON" ]]
118
+ then
119
+ mkdir -p "$HICONS_DIR"
120
+ [ -L "$HSTEAM_ICON" ] && \
121
+ rm -f "$HSTEAM_ICON"
122
+ cp -rf "$RSTEAM_ICON" "$HSTEAM_ICON"
123
+ fi
124
+ if [[ -f "$RSTEAM_ICON" && ! -f "$HICNSTM" ]]
125
+ then
126
+ mkdir -p "$HOME_ICONS"
127
+ [ -L "$HICNSTM" ] && \
128
+ rm -f "$HICNSTM"
129
+ cp -rf "$RSTEAM_ICON" "$HICNSTM"
130
+ fi
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
  done
132
  fi
133
+ [ "$INSIDE_RUNIMAGE" == 1 ] && \
134
+ local INSTALL_SHELL="$(hostexec printenv SHELL)"||\
135
+ local INSTALL_SHELL="$SHELL"
136
+ case "$(basename "$INSTALL_SHELL")" in
137
+ zsh) add_path "$Z_RC" ;;
138
+ bash) add_path "$B_RC" ;;
139
+ fish) add_path "$F_RC" ;;
140
+ esac
141
+ update-desktop-database -q "$MENU_APPS_DIR" &>/dev/null
142
+ update-mime-database "$HOME/.local/share/mime" &>/dev/null
143
+ for mimetype in "${LW_MIMETYPES[@]}"
144
+ do xdg-mime default LuxWine.desktop "$mimetype" &>/dev/null
145
+ done
146
  cp -rf registry_patch "$LW_DIR/"
147
  cp -rf LICENSE "$LW_DIR/"
148
  cp -rf themes "$LW_DIR/"
149
  cp -rf icons "$LW_DIR/"
150
  cp -rf gif "$LW_DIR/"
151
  cp -rf db "$LW_DIR/"
152
+ LWRUNTIME="/opt/lwrap/runtime.tar.zst"
153
  if [ -f "$LWRUNTIME" ]
154
  then
155
+ TMP_LW_CFG="$LW_DIR/tmp/luwine.wcfg"
156
  tar -xf "$LWRUNTIME" -C "$LW_DIR" && \
157
  [[ ! -f "$LW_CFG" && -f "$TMP_LW_CFG" ]] && \
158
  cp -f "$TMP_LW_CFG" "$LW_CFG"
159
  fi
160
+ grep "$OLDLWRAP" -lr "$MENU_APPS_DIR"|\
161
+ xargs -d'\n' sed -i "s|$OLDLWRAP|$LWRUN|g" 2>/dev/null
 
 
162
  }
163
 
164
  mv_lwrun() {
 
169
  fi
170
  }
171
 
 
 
 
 
 
172
  try_install_lwrun() {
173
+ readrealpath() {
174
+ if is_exe_exist readlink
175
+ then readlink -f "$@" 2>/dev/null
176
+ elif is_exe_exist realpath
177
+ then realpath "$@" 2>/dev/null
178
+ else return 1
179
+ fi
180
+ }
181
+ ln_lwrun() {
182
+ mkdir -p "$HBIN_DIR"
183
+ if [ "$(readrealpath "$LWRUN_LN")" != "$LWRUN" ]
184
+ then
185
+ info_msg "Update lwrun link..."
186
+ ln -sf "$LWRUN" "$LWRUN_LN"
187
+ fi
188
+ for steam in {steam,steam-runtime,steam-native}
189
+ do
190
+ STEAM_LN="$HBIN_DIR/$steam"
191
+ if [ "$(readrealpath "$STEAM_LN")" != "$LWRUN" ]
192
+ then
193
+ info_msg "Update $steam link..."
194
+ ln -sf "$LWRUN" "$STEAM_LN"
195
+ fi
196
+ done
197
+ if [ "$(readrealpath "$RUNIMAGE_LW")" != "$LWRUN" ]
198
  then
199
+ info_msg "Update runimage link..."
200
+ mkdir -p "$LWBIN_DIR"
201
+ ln -sf "$LWRUN" "$RUNIMAGE_LW"
202
+ ln -sf "$LWRUN" "$HBIN_DIR/runimage-lw"
203
  fi
 
 
204
  }
205
+ if [[ "$RUNSRC" =~ "lwrun" && -f "$REALRUNSRC" && "$LWLN_ONLY" != 1 && \
206
+ "$REALRUNSRC" != "$LWRUN" && ! "${REALRUNSRC,,}" =~ .*/(run$|cdrom/lwrun|sr[0-9]/lwrun)$ && \
207
+ ! "$REALRUNSRC" =~ ^/(usr/bin|bin|opt)/lwrun$ ]]
208
  then
209
+ info_msg "Installing lwrun..."
210
+ mkdir -p "$LWBIN_DIR"
211
+ if mv_lwrun "$REALRUNSRC" "$LWRUN"
 
212
  then
 
 
 
 
 
 
 
 
 
 
 
 
 
213
  ln_lwrun
214
+ info_msg "lwrun installed!"
215
+ try_shutdown_lw && \
216
+ return 0||return 1
217
+ else
218
+ error_msg "Failed to install lwrun!"
219
+ is_lwrun && \
220
+ return 1||exit 1
221
  fi
222
+ elif [[ "$REALRUNSRC" != "$(readrealpath "$LWRUN")" ]] && \
223
+ [[ "${REALRUNSRC,,}" =~ .*/(run|cdrom.*/lwrun|sr[0-9]/lwrun)$ ||\
224
+ "$REALRUNSRC" =~ ^/(usr/bin|bin|opt)/lwrun$ || "$LWLN_ONLY" == 1 ]]
 
 
225
  then
226
+ mkdir -p "$LWBIN_DIR"
227
+ ln -sf "$REALRUNSRC" "$LWRUN"
228
+ ln_lwrun
229
+ [ "$LWLN_ONLY" != 1 ] && \
230
+ return 0||exit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
231
  fi
232
  }
233
 
 
235
  if [ "$1" == "force" ] || is_lw || is_lwrun
236
  then
237
  info_msg "Removing Lux Wine..."
238
+ rm -f "$HSTEAM_DESKF"
239
  rm -rf "$MENU_APPS_DIR/LuxWine"
240
  rm -rf "$HOME_DESK_DIRS/LuxWine"*
241
+ rm -f "$HOME/.config/menus/applications-merged/LuxWine.menu"
242
  rm -rf "$HOME/.local/share/kservices5/ServiceMenus/LuxWine"*
243
  rm -rf "$HOME/.local/share/kio/servicemenus/LuxWine"*
244
+ rm -f "$OLDLWRAP"
245
+ rm -f "$LWBIN_DIR/lux-wine"
246
+ rm -f "$LWBIN_DIR/bash"
247
+ rm -f "$LWBIN_DIR/lwexec"
248
+ rm -f "$HBIN_DIR/lwrap"
249
  if [ "$1" == "update" ]
250
  then
 
 
 
251
  rm -rf "$LW_DIR/db"
252
  rm -rf "$LW_DIR/gif"
253
  rm -rf "$LW_DIR/icons"
254
  rm -rf "$LW_DIR/themes"
255
+ rm -f "$LW_DIR/LICENSE"
256
+ rm -f "$LW_DIR/.lwcfgchksum"
257
  rm -rf "$LW_DIR/registry_patch"
258
  else
259
+ chmod u+rw -R "$LWBIN_DIR/overlayfs/lux-wine/workdir" 2>/dev/null
260
  rm -rf "$LW_DIR"
261
+ rm -rf "$HOME/LuxWine"
262
  rm -rf "$LWRUN_LN"
 
263
  rm -rf "$HBIN_DIR/runimage-lw"
264
  rm -rf "$MENU_APPS_DIR/LuxWine"*
265
  rm -rf "$HOME/Desktop/LuxWine.desktop"
 
283
  fi
284
  }
285
 
286
+ is_lw() { [ -f "$MENU_APPS_DIR/LuxWine/LuxWine.desktop" ] ; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
287
 
288
+ is_old_lw() { [ -x "$LWBIN_DIR/lux-wine" ] ; }
289
 
290
  is_lwrun() { [ -x "$LWRUN" ] ; }
291
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
292
  install_lw() {
 
 
 
 
 
 
 
 
 
 
 
 
293
  TMP_LW="/tmp/lux-wine.$RANDOM"
294
+ if [ -d "/opt/lwrap" ]
 
295
  then
296
  info_msg "Installing Lux Wine..."
297
+ (mkdir -p "$TMP_LW" && \
298
+ cp -rf "/opt/lwrap"/!(runtime.tar.zst|prefix_backups) "$TMP_LW" && \
299
+ cd "$TMP_LW" && \
300
+ make_install "$1"
301
+ [ -d "$TMP_LW" ] && rm -rf "$TMP_LW")
 
 
 
 
302
  fi
303
  if is_lw
304
  then info_msg "Lux Wine installed!"
 
308
  fi
309
  }
310
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
311
  try_dl_lwrun() {
312
+ try_dllwrun_mirror() {
313
+ local GIT_LWRUN_VERSION='continuous'
314
+ local GIT_LWRUN="https://github.com/VHSgunzo/lwrun/releases"
315
+ local GIT_HF_LWRUN="https://huggingface.co/lux-wine/lwrun/resolve/main/releases"
316
+ # YC_LWRUN="https://storage.yandexcloud.net/lwrun"
317
+ local lwrunurl=(
318
+ # "$YC_LWRUN/releases/$GIT_LWRUN_VERSION/lwrun"
319
+ "$GIT_HF_LWRUN/$GIT_LWRUN_VERSION/lwrun"
320
+ "$GIT_LWRUN/download/$GIT_LWRUN_VERSION/lwrun"
321
+ )
322
+ for url in "${lwrunurl[@]}"
323
+ do
324
+ try_dl "$url" "$TMP_LWRUN" && \
325
+ return 0
326
+ done
327
+ return 1
328
+ }
329
+ local ret=1
330
+ TMP_LWRUN="$LW_DIR/tmp/lwrun"
331
  info_msg "Downloading lwrun..."
332
+ if try_dllwrun_mirror
 
 
333
  then
334
  info_msg "lwrun downloaded!"
335
+ chmod +x "$TMP_LWRUN"
336
+ exec "$TMP_LWRUN"
337
+ ret=0
338
  else
339
  error_msg "Failed to download lwrun!"
340
  [ -f "$TMP_LWRUN" ] && \
341
  rm -rf "$TMP_LWRUN"*
342
  exit 1
343
  fi
344
+ return $ret
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
345
  }
346
 
347
  yn_case() {
 
381
  }
382
 
383
  try_shutdown_lw() {
384
+ if [ -n "$(pgrep -fa lux-wine|grep -E "$LWSRC|$LW_DIR/bin/lux-wine"|grep -v grep)" ]
385
  then
386
  if [ "$FORCE_UPDATE" != 1 ]
387
  then
 
406
 
407
  no_color() { sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2};?)?)?[mGK]//g" ; }
408
 
409
+ update_lwrun() (
410
+ local ret=1
411
  if is_update "RunImage" "Do you want to check updates for RunImage packages?"
412
  then
413
+ mkdir -p "$LWBIN_DIR"
414
+ date '+%y.%m.%d.%H%M%S' > "$PKGUPDFL"
415
+ [ "$NOT_TERM" == 1 ] && \
416
+ IN_TERM=(
417
+ "xterm" "-fa" "Monospace"
418
+ "-fs" "11" "-geometry" "130x45"
419
+ "-bg" "black" "-fg" "white" \
420
+ "-T" "Updating RunImage packages..." "-e"
421
+ )||unset IN_TERM
422
+ HOSTEXEC_ARGS=(hostexec env RIM_RUN_IN_ONE=0)
423
+ "${HOSTEXEC_ARGS[@]}" ls "$RUNIMAGE_LW" &>/dev/null||\
424
+ "${HOSTEXEC_ARGS[@]}" LWLN_ONLY=1 "$RUNSRC"
425
+ "${HOSTEXEC_ARGS[@]}" "$RUNIMAGE_LW" "${IN_TERM[@]}" rim-update
426
+ ret="$?"
427
  fi
428
+ return $ret
429
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
430
 
431
  is_exe_exist() { command -v "$@" &>/dev/null ; }
432
 
433
  which_exe() { command -v "$@" ; }
434
 
435
  check_url_stat_code() {
 
436
  if is_exe_exist curl
437
  then curl -sL -o /dev/null -I -w "%{http_code}" "$@" 2>/dev/null
438
  elif is_exe_exist wget
 
510
  fi
511
  if is_url "$URL"
512
  then
513
+ WGET_ARGS=(--no-check-certificate --content-disposition -t 3 -T 5 -w 0.5 "$URL" -O "$FILEDIR/$FILENAME")
514
  [ ! -d "$FILEDIR" ] && \
515
  mkdir -p "$FILEDIR"
516
  if [[ "$NOT_TERM" == 1 && "$NO_DL_GUI" != 1 ]] && \
 
579
  elif is_exe_exist curl
580
  then
581
  curl -R --progress-bar --insecure --fail -L "$URL" -o \
582
+ "$FILEDIR/$FILENAME" |& tr '\r' '\n'|\
583
  sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g'|\
584
  dl_progress
585
  elif is_exe_exist wget2
 
622
  fi
623
  }
624
 
 
 
625
  rm_broken_link() { find -L "$1" -type l -exec rm -rf {} \; 2>/dev/null ; }
626
 
627
+ try_update_old_lwrun() {
628
+ if [ "$RUNIMAGE_VERSION" == '0.39.1' ]
629
+ then
630
+ runimage_lw() {
631
+ [ "$NOT_TERM" != 1 ] && \
632
+ unset HOSTEXEC_IN_TERM||\
633
+ HOSTEXEC_IN_TERM=(
634
+ "xterm" "-fa" "Monospace"
635
+ "-fs" "11" "-geometry" "130x45"
636
+ "-bg" "black" "-fg" "white" \
637
+ "-T" "Updating RunImage packages..." "-e"
638
+ )
639
+ "${HOSTEXEC_IN_TERM[@]}" hostexec ptyspawn importenv '$RUNPID' \
640
+ env DONT_NOTIFY=1 NO_RPIDSMON=1 RIM_CMPRS_LVL=22 RIM_UPDATE_CLEANUP=1 \
641
+ "$RUNIMAGE_LW" "$@"
642
+ }
643
+ info_msg "Checking the lwrun update..."
644
+ if runimage_lw --rU
645
+ then FORCE_UPDATE=1 try_shutdown_lw
646
+ fi
647
+ date '+%y.%m.%d.%H%M%S' > "$PKGUPDFL"
648
+ return 1
649
  fi
650
  }
651
 
652
  print_help() {
 
 
 
 
653
  echo -e "
654
  ${RED}Usage:
655
  $RED┌──[$GREEN$RUNUSER$YELLOW@$BLUE${RUNHOSTNAME}$RED]─[$GREEN$PWD$RED]
656
+ $RED└──╼ \$$GREEN lwrap ${BLUE}{args}
657
 
658
  ${BLUE}--lwrap-help $GREEN Show this usage info
659
  ${BLUE}--install $YELLOW{force|local}$GREEN Re/Install Lux Wine and lwrun
 
662
  "
663
  }
664
 
 
 
665
  case "$1" in
666
+ --lwrap-help) print_help ; exit ;;
667
+ --uninstall ) uninstall_lw "$2" ; exit $? ;;
 
 
 
 
 
 
 
 
 
 
668
  esac
669
 
670
+ if [ "$INSIDE_RUNIMAGE" == 1 ]
671
  then
672
+ case "$1" in
673
+ --install ) try_install_lwrun
674
+ install_lw "$2"
675
+ try_update_old_lwrun
676
+ exit $? ;;
677
+ --update ) FORCE_UPDATE=1
678
+ update_lwrun
679
+ exit $? ;;
680
+ esac
681
  try_install_lwrun
682
+ (! is_lw || is_old_lw) && install_lw
683
  if [[ "$CHK_UPDATE" != 0 || "$FORCE_UPDATE" == 1 ]] && \
684
  is_net_conn
685
  then
686
+ if [[ ! -f "$(find "$PKGUPDFL" -mtime -$CHK_UPDATE \
 
 
 
 
 
687
  -print 2>/dev/null)" || "$FORCE_UPDATE" == 1 ]]
688
  then update_lwrun && exit $?
689
  fi
690
  fi
691
+ exec "$LWSRC" "$@"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
692
  else
693
+ if [ -x "$LWRUN" ]
694
+ then exec "$LWRUN" "$@"
695
+ elif is_net_conn
696
+ then try_dl_lwrun
 
 
 
 
 
 
 
 
697
  else
698
+ error_msg "lwrun not found, download and install it first!"
699
+ exit 1
 
 
 
 
 
 
 
700
  fi
701
  fi
702
  exit $?
lwrap/lwrap.install CHANGED
@@ -1,4 +1,5 @@
1
  pkg_tool() {
 
2
  unset pacdblck_exist
3
  pacdblck='/var/lib/pacman/db.lck'
4
  if [ -f "$pacdblck" ]
@@ -7,8 +8,11 @@ pkg_tool() {
7
  rm -f "$pacdblck"
8
  fi
9
  LANG= sh -c "$@"
10
- [ "$pacdblck_exist" == 1 ] && \
11
- touch "$pacdblck"
 
 
 
12
  }
13
  export -f pkg_tool
14
 
@@ -31,12 +35,21 @@ export -f pkg_tool
31
  ## arg 1: the new package version
32
  ## arg 2: the old package version
33
  post_upgrade() {
34
- pac -Q zenity 2>/dev/null|grep -q '4.0.0' && \
35
  pkg_tool 'yes|sudo downgrade zenity=3.44.2'
36
 
37
  pac -Q chromium &>/dev/null && \
38
  pkg_tool 'yes|pac -Rsndd chromium'
39
 
 
 
 
 
 
 
 
 
 
40
  return 0
41
  }
42
 
 
1
  pkg_tool() {
2
+ local ret=1
3
  unset pacdblck_exist
4
  pacdblck='/var/lib/pacman/db.lck'
5
  if [ -f "$pacdblck" ]
 
8
  rm -f "$pacdblck"
9
  fi
10
  LANG= sh -c "$@"
11
+ ret="$?"
12
+ if [ "$pacdblck_exist" == 1 ]
13
+ then touch "$pacdblck"
14
+ fi
15
+ return $ret
16
  }
17
  export -f pkg_tool
18
 
 
35
  ## arg 1: the new package version
36
  ## arg 2: the old package version
37
  post_upgrade() {
38
+ pac -Q zenity 2>/dev/null|grep -q '4\.[0-9]\.[0-9]' && \
39
  pkg_tool 'yes|sudo downgrade zenity=3.44.2'
40
 
41
  pac -Q chromium &>/dev/null && \
42
  pkg_tool 'yes|pac -Rsndd chromium'
43
 
44
+ pac -Q amdvlk &>/dev/null && \
45
+ pkg_tool 'yes|pac -Rsndd amdvlk'
46
+
47
+ pac -Q lib32-amdvlk &>/dev/null && \
48
+ pkg_tool 'yes|pac -Rsndd lib32-amdvlk'
49
+
50
+ pac -Q glibc-eac lib32-glibc-eac &>/dev/null||\
51
+ pkg_tool 'yes|pac -Sy glibc-eac lib32-glibc-eac'
52
+
53
  return 0
54
  }
55
 
main.zip CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:26dfe1d0518d215e634fbfc7ed06df9572b8c2778bb6b48e54e41d6cf20e8723
3
- size 589365
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7b4e0897a767a6a42511054580dec3323f8a9f24a4ea30a6c9449ea367fb77a8
3
+ size 586388