Skip to content

Instantly share code, notes, and snippets.

@Phil-Venter
Created October 10, 2025 13:30
Show Gist options
  • Select an option

  • Save Phil-Venter/3200b869dad93e1466e8da59dc79a679 to your computer and use it in GitHub Desktop.

Select an option

Save Phil-Venter/3200b869dad93e1466e8da59dc79a679 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
# --- UPDATE GE PROTON ---
set -euo pipefail
# --- CONFIG ---
GITHUB_API_URL="https://api.github.com/repos/GloriousEggroll/proton-ge-custom/releases/latest"
COMPAT_DIR_NAME="compatibilitytools.d"
STEAM_NATIVE_DIR="$HOME/.steam/root"
STEAM_FLATPAK_DIR="$HOME/.var/app/com.valvesoftware.Steam/data/Steam"
# --- DEPENDENCY CHECK ---
if ! command -v jq >/dev/null 2>&1; then
echo "Error: jq is required but not installed."
echo "On Debian/Ubuntu, install it with: sudo apt install jq"
echo "On Fedora: sudo dnf install jq"
exit 1
fi
# --- DETERMINE INSTALL DIR (PREFER NATIVE) ---
if [[ -d "$STEAM_NATIVE_DIR" ]]; then
INSTALL_DIR="$STEAM_NATIVE_DIR/$COMPAT_DIR_NAME"
elif [[ -d "$STEAM_FLATPAK_DIR" ]]; then
INSTALL_DIR="$STEAM_FLATPAK_DIR/$COMPAT_DIR_NAME"
else
echo "steam not installed or installation not supported"
echo "folders searched:"
echo "- $STEAM_NATIVE_DIR/$COMPAT_DIR_NAME"
echo "- $STEAM_FLATPAK_DIR/$COMPAT_DIR_NAME"
exit 1
fi
mkdir -p "$INSTALL_DIR"
# --- TEMP WORKSPACE WITH AUTOMATIC CLEANUP ---
TMPDIR="$(mktemp -d -t proton-ge-XXXXXX)"
cleanup() { rm -rf "$TMPDIR"; }
trap cleanup EXIT
# --- FETCH LATEST RELEASE JSON ---
latest_json="$(curl -fsSL --retry 3 --retry-delay 2 "$GITHUB_API_URL")"
# --- EXTRACT FIELDS WITH JQ ---
version="$(printf '%s' "$latest_json" | jq -r '.tag_name')"
tar_url="$(printf '%s' "$latest_json" | jq -r '.assets[] | select(.name|endswith(".tar.gz")) | .browser_download_url' | head -n1)"
sha_url="$(printf '%s' "$latest_json" | jq -r '.assets[] | select(.name|endswith(".sha512sum")) | .browser_download_url' | head -n1)"
release_body="$(printf '%s' "$latest_json" | jq -r '.body // ""')"
if [[ -z "$version" || -z "$tar_url" || -z "$sha_url" ]]; then
echo "Failed to determine version or asset URLs from GitHub API."
exit 1
fi
# --- IF ALREADY INSTALLED, EXIT ---
if [[ -d "$INSTALL_DIR/$version" ]]; then
echo "latest version $version already installed"
exit 0
fi
echo "installing version $version"
cd "$TMPDIR"
# --- DOWNLOAD TARBALL + CHECKSUM ---
curl -fL --retry 3 --retry-delay 2 -O "$tar_url" &
curl -fL --retry 3 --retry-delay 2 -O "$sha_url" &
wait || {
echo "Download failed"
exit 1
}
# --- DETERMINE FILENAMES ---
tar_file="$(basename "$tar_url")"
sha_file="$(basename "$sha_url")"
if [[ ! -s "$tar_file" || ! -s "$sha_file" ]]; then
echo "Download failed or files are empty."
ls -l
exit 1
fi
# --- VERIFY CHECKSUM ---
grep " $tar_file\$" "$sha_file" > "$sha_file.filtered" || {
echo "Checksum file does not contain entry for $tar_file"
exit 1
}
sha512sum -c "$sha_file.filtered"
# --- EXTRACT INTO INSTALL DIR ---
tar -xzf "$tar_file" -C "$INSTALL_DIR"
# --- WRITE RELEASE NOTES ---
notes_dir="$INSTALL_DIR/$version"
mkdir -p "$notes_dir"
printf '%s\n' "$release_body" > "$notes_dir/release_note.txt"
echo "version $version installed"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment