Skip to content

Commit 4b2a402

Browse files
authored
Merge pull request #49 from nmlynch94/feature/umu-swap
Feature/umu swap
2 parents e6af0ff + 5395d42 commit 4b2a402

File tree

2 files changed

+179
-30
lines changed

2 files changed

+179
-30
lines changed

com.jagexlauncher.JagexLauncher.yml

Lines changed: 99 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Versions
22
x-gl-version: &gl-version '1.4'
33
x-gl-versions: &gl-versions 25.08;1.4
4+
x-gl-merge-dirs: &gl-merge-dirs vulkan/icd.d;glvnd/egl_vendor.d;OpenCL/vendors;lib/dri;lib/d3d;vulkan/explicit_layer.d;vulkan/implicit_layer.d
45
x-runtime-version: &runtime-version '25.08'
56
# Flatpak manifest
67
app-id: com.jagexlauncher.JagexLauncher
@@ -9,22 +10,42 @@ runtime-version: *runtime-version
910
sdk: org.freedesktop.Sdk
1011
command: jagex-run
1112
finish-args:
13+
# pressure vessel
14+
- --device=all
15+
- --env=PATH=/app/bin:/app/utils/bin:/usr/bin:/usr/lib/extensions/vulkan/MangoHud/bin:/usr/lib/extensions/vulkan/gamescope/bin:/usr/lib/extensions/vulkan/OBSVkCapture/bin:/app/bin/heroic/resources/app.asar.unpacked/build/bin/linux
16+
- --env=LD_LIBRARY_PATH=/usr/lib/extensions/vulkan/gamescope/lib
17+
- --persist=Games
18+
- --persist=.local
19+
- --filesystem=xdg-run/gamescope-0:rw
20+
# See: https://github.com/flathub/com.valvesoftware.Steam/commit/0538256facdb0837c33232bc65a9195a8a5bc750
21+
- --env=XDG_DATA_DIRS=/app/share:/usr/lib/extensions/vulkan/share:/usr/share:/usr/share/runtime/share:/run/host/user-share:/run/host/share:/usr/lib/pressure-vessel/overrides/share
22+
- --allow=per-app-dev-shm
23+
# umu
1224
- --share=ipc
1325
- --socket=x11
1426
- --socket=wayland
1527
- --socket=pulseaudio
16-
- --device=dri
1728
- --share=network
18-
- --allow=multiarch
1929
- --allow=devel
30+
- --allow=multiarch
2031
- --talk-name=org.freedesktop.Notifications
32+
- --talk-name=org.freedesktop.Flatpak
33+
- --filesystem=xdg-data/icons:create
34+
- --filesystem=xdg-run/app/com.discordapp.Discord
35+
- --filesystem=xdg-run/discord-ipc-0
2136
sdk-extensions:
2237
- org.freedesktop.Sdk.Compat.i386
2338
- org.freedesktop.Sdk.Extension.openjdk17
2439
add-extensions:
2540
org.freedesktop.Platform.Compat.i386:
2641
directory: lib/i386-linux-gnu
2742
version: *runtime-version
43+
44+
org.freedesktop.Platform.Compat.i386.Debug:
45+
directory: lib/debug/lib/i386-linux-gnu
46+
version: *runtime-version
47+
no-autodownload: true
48+
2849
org.freedesktop.Platform.GL32:
2950
directory: lib/i386-linux-gnu/GL
3051
version: *gl-version
@@ -33,10 +54,61 @@ add-extensions:
3354
no-autodownload: true
3455
autodelete: false
3556
add-ld-path: lib
36-
merge-dirs: vulkan/icd.d;glvnd/egl_vendor.d;OpenCL/vendors;lib/dri;lib/d3d;vulkan/explicit_layer.d;vulkan/implicit_layer.d
57+
merge-dirs: *gl-merge-dirs
3758
download-if: active-gl-driver
3859
enable-if: active-gl-driver
60+
autoprune-unless: active-gl-driver
61+
62+
org.freedesktop.Platform.GL32.Debug:
63+
directory: lib/debug/lib/i386-linux-gnu/GL
64+
version: *gl-version
65+
versions: *gl-versions
66+
subdirectories: true
67+
no-autodownload: true
68+
merge-dirs: *gl-merge-dirs
69+
enable-if: active-gl-driver
70+
autoprune-unless: active-gl-driver
71+
72+
org.freedesktop.Platform.VAAPI.Intel.i386:
73+
directory: lib/i386-linux-gnu/dri/intel-vaapi-driver
74+
version: *runtime-version
75+
versions: *runtime-version
76+
autodelete: false
77+
no-autodownload: true
78+
add-ld-path: lib
79+
download-if: have-intel-gpu
80+
autoprune-unless: have-intel-gpu
81+
3982
modules:
83+
- name: platform-bootstrap
84+
buildsystem: simple
85+
build-commands:
86+
- |
87+
set -e
88+
mkdir -p /app/bin
89+
mkdir -p /app/lib/i386-linux-gnu
90+
mkdir -p /app/lib/i386-linux-gnu/GL
91+
mkdir -p /app/lib/i386-linux-gnu/dri/intel-vaapi-driver
92+
mkdir -p /app/lib/debug/lib/i386-linux-gnu
93+
mkdir -p /app/lib/debug/lib/i386-linux-gnu/GL
94+
install -Dm644 -t /app/etc ld.so.conf
95+
mkdir -p /app/lib{,32}/ffmpeg
96+
mkdir -p /app/share/steam/compatibilitytools.d
97+
mkdir -p /app/utils /app/share/vulkan
98+
ln -srv /app/{utils/,}share/vulkan/explicit_layer.d
99+
ln -srv /app/{utils/,}share/vulkan/implicit_layer.d
100+
mkdir -p /app/links/lib
101+
ln -srv /app/lib /app/links/lib/x86_64-linux-gnu
102+
ln -srv /app/lib32 /app/links/lib/i386-linux-gnu
103+
sources:
104+
- type: inline
105+
dest-filename: ld.so.conf
106+
contents: |
107+
# We just make any GL32 extension have higher priority
108+
include /run/flatpak/ld.so.conf.d/app-*-org.freedesktop.Platform.GL32.*.conf
109+
/app/lib32
110+
/app/lib/i386-linux-gnu
111+
/lib64
40112
- name: libnotify
41113
buildsystem: meson
42114
config-opts:
@@ -58,35 +130,40 @@ modules:
58130
- name: openjdk
59131
buildsystem: simple
60132
build-commands:
133+
# https://gitlab.com/hdos/issues/-/issues/2004
61134
- /usr/lib/sdk/openjdk17/install.sh
62135
- mv /app/jre/bin/java /app/jre/bin/java.bk
63136
- mv java /app/jre/bin/java
64137
- chmod +x /app/jre/bin/java
65138
sources:
66139
- type: script
67-
dest-filename: java # https://gitlab.com/hdos/issues/-/issues/2004
140+
dest-filename: java
68141
commands:
69142
-
70143
#!/bin/bash
71-
- /app/jre/bin/java.bk $(echo "$@" | sed 's|--add-opens java.desktop/java.awt=ALL-UNNAMED||g')
72-
- name: wine-ge
144+
- /run/parent/app/jre/bin/java.bk $(echo "$@" | sed 's|--add-opens java.desktop/java.awt=ALL-UNNAMED||g')
145+
- name: proton-ge
73146
buildsystem: simple
74147
build-commands:
75-
- mkdir wine
76-
- tar xf wine.tar.xz -C wine --strip-components 1 # String top level dir and place into predictable directory name to decouple from the name of the top-level dir
148+
- mkdir proton
149+
- tar xf protonge.tar.xz -C proton --strip-components 1
77150
- install --directory /app/opt
78-
- mv wine /app/opt/wine
151+
- chmod 755 -R proton
152+
- mv proton /app/opt/proton
79153
sources:
80154
- type: file
81-
dest-filename: wine.tar.xz
82-
url: https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton8-26/wine-lutris-GE-Proton8-26-x86_64.tar.xz
83-
sha512: 3abd578ed45a16096843936e0258799450e6a5751bc67afaf8c58cd245c40e62794a89af25ae482d74d5ca2b7527d17ff77232781c6d9cf97bc02976c2f960bd
84-
x-checker-data:
85-
type: json
86-
url: https://api.github.com/repos/GloriousEggroll/wine-ge-custom/releases/latest
87-
version-query: .tag_name | sub("^GE-Proton-"; "")
88-
url-query: .assets[] | select(.name=="wine-lutris-" + $version + "-x86_64.tar.xz")
89-
| .browser_download_url
155+
dest-filename: protonge.tar.xz
156+
url: https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton10-27/GE-Proton10-27.tar.gz
157+
sha512: 7bc683b62a9cdf027089af501c93cf78c7aaef30c70010c54389d199894a679870becfda417ad1761c4d8faa17ac3d2da805d4c4efce8992197eaff74fcb5fea
158+
- name: umu-run
159+
buildsystem: simple
160+
build-commands:
161+
- |
162+
install umu-run /app/bin/umu-run
163+
sources:
164+
- type: archive
165+
url: https://github.com/Open-Wine-Components/umu-launcher/releases/download/1.3.0/umu-launcher-1.3.0-zipapp.tar
166+
sha256: 36502de766f3cc549ff85196a04fb5afdb4eb2a72c023f22fd25895df91fda2f
90167
- name: runelite-jar
91168
buildsystem: simple
92169
build-commands:
@@ -110,7 +187,7 @@ modules:
110187
-
111188
#!/bin/bash
112189
- set -x
113-
- /app/jre/bin/java.bk -Duser.home="$XDG_DATA_HOME/user_home" -jar /app/RuneLite.jar
190+
- /run/parent/app/jre/bin/java.bk -Duser.home="$XDG_DATA_HOME/user_home" -jar /run/parent/app/RuneLite.jar
114191
-J-Duser.home="$XDG_DATA_HOME/user_home"
115192
- name: hdos-jar
116193
buildsystem: simple
@@ -126,13 +203,13 @@ modules:
126203
type: html
127204
url: https://cdn.hdos.dev/client/getdown.txt
128205
version-pattern: launcher.version = (\d.*)
129-
url-template: https://cdn.hdos.dev/launcher/v$version/hdos-launcher.jar
206+
url-template: https://cdn.hdos.dev/launcher/$version/hdos-launcher.jar
130207
- type: script
131-
dest-filename: HDOS.exe # We name this bash script .exe bc Jagex Launcher runs RuneLite.exe. Wine is able to somehow intepret it is a bash script and run that instead.
208+
dest-filename: HDOS.exe
132209
commands:
133210
-
134211
#!/bin/bash
135-
- /app/jre/bin/java -jar /app/hdos-launcher.jar
212+
- /run/parent/app/jre/bin/java -jar /run/parent/app/hdos-launcher.jar
136213
- name: jagex-launcher
137214
buildsystem: simple
138215
build-commands:

scripts/jagex-run.sh

Lines changed: 80 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,81 @@
11
#!/bin/sh
2-
set -e
2+
set -euo pipefail
33

44
winebin="/app/opt/wine/bin"
5-
wineprefix="$XDG_DATA_HOME"/prefix
6-
jagex_launcher_exe_path="$wineprefix/drive_c/Program Files (x86)/Jagex Launcher/JagexLauncher.exe"
5+
wineprefix="$XDG_DATA_HOME"/umu_prefix
6+
JAGEX_LAUNCHER_EXE_PATH="$wineprefix/drive_c/Program Files (x86)/Jagex Launcher/JagexLauncher.exe"
7+
JAGEX_LAUNCHER_GAMES_PATH="$(dirname "$JAGEX_LAUNCHER_EXE_PATH")/Games"
8+
# The umu_proton_dir and protonpath need to be different because umu_proton_dir is from the flatpak sandbox perspective, while protonpath is from the steam runtime perspective.
9+
export UMU_PROTON_DIR="$HOME/.var/app/com.jagexlauncher.JagexLauncher/.local/share/umu/proton-bundled/proton"
10+
export PROTONPATH="$HOME/.local/share/umu/proton-bundled"
11+
export WINEPREFIX="$wineprefix"
712

8-
if ! [ -f "$jagex_launcher_exe_path" ]; then
13+
function ensure_latest_file () {
14+
SOURCE_FILE_PATH="$1"
15+
DEST_FILE_PATH="$2"
16+
17+
echo "ensuring $SOURCE_FILE_PATH matches $DEST_FILE_PATH"
18+
if [[ -f "$DEST_FILE_PATH" ]]; then
19+
SOURCE_SHA256="$(sha256sum "$SOURCE_FILE_PATH" | awk '{ print $1 }')"
20+
DEST_SHA256="$(sha256sum "$DEST_FILE_PATH" | awk '{ print $1 }')"
21+
22+
if [[ "$SOURCE_SHA256" != "$DEST_SHA256" ]]; then
23+
echo "$SOURCE_SHA256 does not match $DEST_SHA256. Updating $DEST_FILE_PATH..."
24+
25+
mkdir -p "$(dirname "$DEST_FILE_PATH")"
26+
cp -r "$SOURCE_FILE_PATH" "$DEST_FILE_PATH"
27+
else
28+
echo "$SOURCE_SHA256 DOES match $DEST_SHA256. No update needed."
29+
fi
30+
31+
else
32+
echo "$DEST_FILE_PATH does not exist. Copying..."
33+
mkdir -p "$(dirname "$DEST_FILE_PATH")"
34+
cp -r "$SOURCE_FILE_PATH" "$DEST_FILE_PATH"
35+
fi
36+
}
37+
38+
function ensure_latest_dir () {
39+
SOURCE_FILE_PATH="$1"
40+
DEST_FILE_PATH="$2"
41+
42+
echo "ensuring $SOURCE_FILE_PATH matches $DEST_FILE_PATH"
43+
if [[ -f "$DEST_FILE_PATH" ]]; then
44+
SOURCE_SHA256="$(sha256sum "$SOURCE_FILE_PATH" | awk '{ print $1 }')"
45+
DEST_SHA256="$(sha256sum "$DEST_FILE_PATH" | awk '{ print $1 }')"
46+
47+
if [[ "$SOURCE_SHA256" != "$DEST_SHA256" ]]; then
48+
echo "$SOURCE_SHA256 does not match $DEST_SHA256. Updating $DEST_FILE_PATH..."
49+
50+
mkdir -p "$(dirname "$DEST_FILE_PATH")"
51+
rm -r "$(dirname "$DEST_FILE_PATH")"
52+
cp -r "$(dirname "$SOURCE_FILE_PATH")" "$(dirname "$DEST_FILE_PATH")"
53+
else
54+
echo "$SOURCE_SHA256 DOES match $DEST_SHA256. No update needed."
55+
fi
56+
57+
else
58+
echo "$DEST_FILE_PATH does not exist. Copying..."
59+
mkdir -p "$(dirname "$DEST_FILE_PATH")"
60+
rm -r "$(dirname "$DEST_FILE_PATH")"
61+
cp -r "$(dirname "$SOURCE_FILE_PATH")" "$(dirname "$DEST_FILE_PATH")"
62+
fi
63+
}
64+
65+
ensure_latest_dir "/app/opt/proton/proton" "$UMU_PROTON_DIR"
66+
67+
# If we are still using wine-ge, migrate to umu proton
68+
if [[ -z "$XDG_DATA_HOME/prefix" ]]; then
69+
70+
echo "We are still on wine-ge. Migrating to proton..."
71+
umu-run wineboot -u
72+
mkdir -p "$WINEPREFIX/umu_prefix/drive_c/Program Files (x86)/Jagex Launcher"
73+
cp -r "$XDG_DATA_HOME/prefix/drive_c/Program Files (x86)/Jagex Launcher" "$WINEPREFIX/drive_c/Program Files (x86)/Jagex Launcher" || exit 1
74+
mv "$XDG_DATA_HOME/prefix" "$XDG_DATA_HOME/prefix.bk"
75+
76+
fi
77+
78+
if ! [ -f "$JAGEX_LAUNCHER_EXE_PATH" ]; then
979
mkdir tmp
1080
cd tmp
1181
python3 /app/bin/jagex-install
@@ -17,11 +87,13 @@ if ! [ -f "$jagex_launcher_exe_path" ]; then
1787
cp /app/steamdeck-settings.properties "$XDG_DATA_HOME/steamdeck-settings.properties"
1888
fi
1989

90+
ensure_latest_file "/app/RuneLite.exe" "$JAGEX_LAUNCHER_GAMES_PATH/RuneLite.exe"
91+
ensure_latest_file "/app/HDOS.exe" "$JAGEX_LAUNCHER_GAMES_PATH/HDOS.exe"
92+
2093
# Make sure the registry has the installation location for runelite.
21-
WINEPREFIX="$wineprefix" WINEDEBUG="-all" "$winebin/wine" reg.exe add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\RuneLite Launcher_is1" /v "InstallLocation" /t REG_SZ /d "Z:\app" /f
94+
WINEDEBUG="-all" umu-run reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\RuneLite Launcher_is1" /v "InstallLocation" /t REG_SZ /d "C:\Program Files (x86)\Jagex Launcher\Games" /f
2295

2396
# Make sure the registry has the installation location for hdos
24-
WINEPREFIX="$wineprefix" WINEDEBUG="-all" "$winebin/wine" reg.exe add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\HDOS Launcher_is1" /v "InstallLocation" /t REG_SZ /d "Z:\app" /f
97+
WINEDEBUG="-all" umu-run reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\HDOS Launcher_is1" /v "InstallLocation" /t REG_SZ /d "C:\Program Files (x86)\Jagex Launcher\Games" /f
2598

26-
# Run with overrides for dxvk
27-
WINEPREFIX="$wineprefix" WINEDLLOVERRIDES="dxgi=b" "$winebin/wine" "$jagex_launcher_exe_path"
99+
umu-run "$JAGEX_LAUNCHER_EXE_PATH"

0 commit comments

Comments
 (0)