files:
- sha256sums: https://github.com/DawnMagnet/hearthstone-linux-gui/releases/latest/download/SHA256SUMS.txt
game:
exe: start-launcher.sh
launch_configs:
- args: --launch
exe: $GAMEDIR/start-launcher.sh
name: Play directly (skip the launcher window)
working_dir: $GAMEDIR
working_dir: $GAMEDIR
install_complete_text: 'The Hearthstone Linux Launcher is installed.
Start it, then click Install / Update, Login and Play.
Before every start it updates itself to the newest release from GitHub.
The in-game shop does not work in the native Linux version; purchases are not possible
there.
The game data is kept outside the Lutris game folder, by default in ~/.local/share/hearthstone-linux-gui.'
installer:
- move:
dst: $GAMEDIR
src: sha256sums
- write_file:
content: "#!/bin/sh\n# Updates hearthstone-linux-gui.AppImage next to this script\
\ to the\n# newest GitHub release. The download is checked against the release's\n\
# SHA256SUMS.txt, and only a complete, verified file replaces the\n# installed\
\ AppImage. Without network access the installed one is kept.\n# Exits non-zero\
\ only when no usable AppImage is left.\ncd \"$(dirname \"$0\")\" || exit 1\n\
api=https://api.github.com/repos/DawnMagnet/hearthstone-linux-gui/releases/latest\n\
target=hearthstone-linux-gui.AppImage\nstamp=.launcher-release\n\nrelease=$(curl\
\ -fsSL --connect-timeout 5 --max-time 15 \"$api\") || release=\ntag=$(printf\
\ '%s\\n' \"$release\" | sed -n 's/^ *\"tag_name\": *\"\\([^\"]*\\)\".*/\\1/p'\
\ | head -n 1)\nif [ -z \"$tag\" ]; then\n echo \"GitHub is not reachable;\
\ keeping the installed launcher.\" >&2\n [ -x \"$target\" ]\n exit\nfi\n\
if [ -x \"$target\" ] && [ \"$(cat \"$stamp\" 2>/dev/null)\" = \"$tag\" ]; then\n\
\ exit 0\nfi\n\nurl=$(printf '%s\\n' \"$release\" | sed -n 's/^ *\"browser_download_url\"\
: *\"\\([^\"]*-x86_64\\.AppImage\\)\".*/\\1/p' | head -n 1)\nsums=$(printf '%s\\\
n' \"$release\" | sed -n 's/^ *\"browser_download_url\": *\"\\([^\"]*\\/SHA256SUMS\\\
.txt\\)\".*/\\1/p' | head -n 1)\nif [ -z \"$url\" ] || [ -z \"$sums\" ]; then\n\
\ echo \"Release $tag has no AppImage or SHA256SUMS.txt; keeping the installed\
\ launcher.\" >&2\n [ -x \"$target\" ]\n exit\nfi\nname=$(basename \"$url\"\
)\nexpected=$(curl -fsSL --connect-timeout 5 --max-time 30 \"$sums\" | awk -v\
\ f=\"$name\" '$2 == f || $2 == \"*\" f { print $1; exit }')\n\ntmp=$(mktemp\
\ ./.download.XXXXXX) || exit 1\ntrap 'rm -f \"$tmp\"' EXIT\necho \"Downloading\
\ hearthstone-linux-gui $tag ...\"\nif [ -n \"$expected\" ] &&\n curl -fL --connect-timeout\
\ 10 --retry 2 -o \"$tmp\" \"$url\" &&\n [ \"$(sha256sum \"$tmp\" | cut -d\
\ ' ' -f 1)\" = \"$expected\" ] &&\n chmod 755 \"$tmp\" && mv -f \"$tmp\" \"\
$target\"; then\n printf '%s\\n' \"$tag\" > \"$stamp\"\n echo \"Installed\
\ hearthstone-linux-gui $tag.\"\nelse\n echo \"Download or checksum check of\
\ $tag failed; keeping the installed launcher.\" >&2\n [ -x \"$target\" ]\n\
fi\n"
file: $GAMEDIR/update-launcher.sh
- write_file:
content: "#!/bin/sh\n# Starts the Hearthstone Linux Launcher from Lutris after\
\ updating it to\n# the newest release.\n# Without arguments the launcher starts\
\ detached: Lutris stops watching\n# once this script exits, because the launcher\
\ processes are excluded\n# from its process monitoring, and without LUTRIS_GAME_UUID\
\ Lutris does\n# not close the launcher as a leftover game process either.\n\
# With --launch the launcher starts the game and exits; Lutris keeps\n# tracking\
\ the game until it quits.\ncd \"$(dirname \"$0\")\" || exit 1\n./update-launcher.sh\
\ || exit 1\nif [ \"$1\" = --launch ]; then\n ./hearthstone-linux-gui.AppImage\
\ \"$@\"\n exit\nfi\nenv -u LUTRIS_GAME_UUID ./hearthstone-linux-gui.AppImage\
\ \"$@\" >/dev/null 2>&1 &\nsleep 3\n"
file: $GAMEDIR/start-launcher.sh
- chmodx: $GAMEDIR/update-launcher.sh
- chmodx: $GAMEDIR/start-launcher.sh
- execute:
description: Downloading the newest Hearthstone Linux Launcher from GitHub...
disable_runtime: true
file: $GAMEDIR/update-launcher.sh
require-binaries: curl, sha256sum
system:
disable_runtime: true
exclude_processes: hearthstone-linux-gui
gamemode: false
description: Native Linux client through the open-source Hearthstone Linux Launcher
(hearthstone-linux-gui). No Wine and no Battle.net app. The in-game shop does not
work in this version.
game_slug: hearthstone
gogslug: ''
humblestoreid: ''
installer_slug: hearthstone-native-hearthstone-l
name: Hearthstone
notes: "- Unofficial community project, not affiliated with Blizzard Entertainment.\
\ Use at your own risk.\r\n- After the installer finishes, start the game: the launcher\
\ window opens. Click Install / Update (downloads the official game data, several\
\ GB), then Login (Battle.net in your browser), then Play.\r\n- Game data, login\
\ token and settings are stored by the launcher in ~/.local/share/hearthstone-linux-gui,\
\ ~/.config/hearthstone-linux-gui and ~/.cache/hearthstone-linux-gui. Removing the\
\ game in Lutris does not delete them; use Uninstall in the launcher first.\r\n\
- The installer always uses the newest launcher release from GitHub: it is downloaded\
\ during installation and updated before every start, checked against the release's\
\ SHA-256 sums. Without network access the installed version is started.\r\n- Requires\
\ x86_64, curl, sha256sum and FUSE for AppImages (the release notes of the launcher\
\ list the minimum glibc). Without FUSE, add APPIMAGE_EXTRACT_AND_RUN=1 to the environment\
\ variables in the game's system options.\r\n- The in-game shop does not work in\
\ the native Linux version: it is locked and purchases are not possible.\r\n- The\
\ launcher is started detached: Lutris shows the game as stopped after a few seconds\
\ while the launcher window stays open. The \"Play directly\" option starts the\
\ game without the launcher window, and Lutris tracks it until it exits."
runner: linux
script:
files:
- sha256sums: https://github.com/DawnMagnet/hearthstone-linux-gui/releases/latest/download/SHA256SUMS.txt
game:
exe: start-launcher.sh
launch_configs:
- args: --launch
exe: $GAMEDIR/start-launcher.sh
name: Play directly (skip the launcher window)
working_dir: $GAMEDIR
working_dir: $GAMEDIR
install_complete_text: 'The Hearthstone Linux Launcher is installed.
Start it, then click Install / Update, Login and Play.
Before every start it updates itself to the newest release from GitHub.
The in-game shop does not work in the native Linux version; purchases are not
possible there.
The game data is kept outside the Lutris game folder, by default in ~/.local/share/hearthstone-linux-gui.'
installer:
- move:
dst: $GAMEDIR
src: sha256sums
- write_file:
content: "#!/bin/sh\n# Updates hearthstone-linux-gui.AppImage next to this script\
\ to the\n# newest GitHub release. The download is checked against the release's\n\
# SHA256SUMS.txt, and only a complete, verified file replaces the\n# installed\
\ AppImage. Without network access the installed one is kept.\n# Exits non-zero\
\ only when no usable AppImage is left.\ncd \"$(dirname \"$0\")\" || exit\
\ 1\napi=https://api.github.com/repos/DawnMagnet/hearthstone-linux-gui/releases/latest\n\
target=hearthstone-linux-gui.AppImage\nstamp=.launcher-release\n\nrelease=$(curl\
\ -fsSL --connect-timeout 5 --max-time 15 \"$api\") || release=\ntag=$(printf\
\ '%s\\n' \"$release\" | sed -n 's/^ *\"tag_name\": *\"\\([^\"]*\\)\".*/\\\
1/p' | head -n 1)\nif [ -z \"$tag\" ]; then\n echo \"GitHub is not reachable;\
\ keeping the installed launcher.\" >&2\n [ -x \"$target\" ]\n exit\nfi\n\
if [ -x \"$target\" ] && [ \"$(cat \"$stamp\" 2>/dev/null)\" = \"$tag\" ];\
\ then\n exit 0\nfi\n\nurl=$(printf '%s\\n' \"$release\" | sed -n 's/^ *\"\
browser_download_url\": *\"\\([^\"]*-x86_64\\.AppImage\\)\".*/\\1/p' | head\
\ -n 1)\nsums=$(printf '%s\\n' \"$release\" | sed -n 's/^ *\"browser_download_url\"\
: *\"\\([^\"]*\\/SHA256SUMS\\.txt\\)\".*/\\1/p' | head -n 1)\nif [ -z \"$url\"\
\ ] || [ -z \"$sums\" ]; then\n echo \"Release $tag has no AppImage or SHA256SUMS.txt;\
\ keeping the installed launcher.\" >&2\n [ -x \"$target\" ]\n exit\nfi\n\
name=$(basename \"$url\")\nexpected=$(curl -fsSL --connect-timeout 5 --max-time\
\ 30 \"$sums\" | awk -v f=\"$name\" '$2 == f || $2 == \"*\" f { print $1;\
\ exit }')\n\ntmp=$(mktemp ./.download.XXXXXX) || exit 1\ntrap 'rm -f \"$tmp\"\
' EXIT\necho \"Downloading hearthstone-linux-gui $tag ...\"\nif [ -n \"$expected\"\
\ ] &&\n curl -fL --connect-timeout 10 --retry 2 -o \"$tmp\" \"$url\" &&\n\
\ [ \"$(sha256sum \"$tmp\" | cut -d ' ' -f 1)\" = \"$expected\" ] &&\n chmod\
\ 755 \"$tmp\" && mv -f \"$tmp\" \"$target\"; then\n printf '%s\\n' \"$tag\"\
\ > \"$stamp\"\n echo \"Installed hearthstone-linux-gui $tag.\"\nelse\n \
\ echo \"Download or checksum check of $tag failed; keeping the installed\
\ launcher.\" >&2\n [ -x \"$target\" ]\nfi\n"
file: $GAMEDIR/update-launcher.sh
- write_file:
content: "#!/bin/sh\n# Starts the Hearthstone Linux Launcher from Lutris after\
\ updating it to\n# the newest release.\n# Without arguments the launcher\
\ starts detached: Lutris stops watching\n# once this script exits, because\
\ the launcher processes are excluded\n# from its process monitoring, and\
\ without LUTRIS_GAME_UUID Lutris does\n# not close the launcher as a leftover\
\ game process either.\n# With --launch the launcher starts the game and exits;\
\ Lutris keeps\n# tracking the game until it quits.\ncd \"$(dirname \"$0\"\
)\" || exit 1\n./update-launcher.sh || exit 1\nif [ \"$1\" = --launch ]; then\n\
\ ./hearthstone-linux-gui.AppImage \"$@\"\n exit\nfi\nenv -u LUTRIS_GAME_UUID\
\ ./hearthstone-linux-gui.AppImage \"$@\" >/dev/null 2>&1 &\nsleep 3\n"
file: $GAMEDIR/start-launcher.sh
- chmodx: $GAMEDIR/update-launcher.sh
- chmodx: $GAMEDIR/start-launcher.sh
- execute:
description: Downloading the newest Hearthstone Linux Launcher from GitHub...
disable_runtime: true
file: $GAMEDIR/update-launcher.sh
require-binaries: curl, sha256sum
system:
disable_runtime: true
exclude_processes: hearthstone-linux-gui
gamemode: false
slug: hearthstone-native-hearthstone-l
steamid: null
version: Native (hearthstone-linux-gui)
year: 2014
{
"game_slug": "hearthstone",
"version": "Native (hearthstone-linux-gui)",
"description": "Native Linux client through the open-source Hearthstone Linux Launcher (hearthstone-linux-gui). No Wine and no Battle.net app. The in-game shop does not work in this version.",
"notes": "- Unofficial community project, not affiliated with Blizzard Entertainment. Use at your own risk.\r\n- After the installer finishes, start the game: the launcher window opens. Click Install / Update (downloads the official game data, several GB), then Login (Battle.net in your browser), then Play.\r\n- Game data, login token and settings are stored by the launcher in ~/.local/share/hearthstone-linux-gui, ~/.config/hearthstone-linux-gui and ~/.cache/hearthstone-linux-gui. Removing the game in Lutris does not delete them; use Uninstall in the launcher first.\r\n- The installer always uses the newest launcher release from GitHub: it is downloaded during installation and updated before every start, checked against the release's SHA-256 sums. Without network access the installed version is started.\r\n- Requires x86_64, curl, sha256sum and FUSE for AppImages (the release notes of the launcher list the minimum glibc). Without FUSE, add APPIMAGE_EXTRACT_AND_RUN=1 to the environment variables in the game's system options.\r\n- The in-game shop does not work in the native Linux version: it is locked and purchases are not possible.\r\n- The launcher is started detached: Lutris shows the game as stopped after a few seconds while the launcher window stays open. The \"Play directly\" option starts the game without the launcher window, and Lutris tracks it until it exits.",
"name": "Hearthstone",
"year": 2014,
"steamid": null,
"gogslug": "",
"humblestoreid": "",
"runner": "linux",
"slug": "hearthstone-native-hearthstone-l",
"installer_slug": "hearthstone-native-hearthstone-l",
"script": {
"files": [
{
"sha256sums": "https://github.com/DawnMagnet/hearthstone-linux-gui/releases/latest/download/SHA256SUMS.txt"
}
],
"game": {
"exe": "start-launcher.sh",
"launch_configs": [
{
"args": "--launch",
"exe": "$GAMEDIR/start-launcher.sh",
"name": "Play directly (skip the launcher window)",
"working_dir": "$GAMEDIR"
}
],
"working_dir": "$GAMEDIR"
},
"install_complete_text": "The Hearthstone Linux Launcher is installed.\nStart it, then click Install / Update, Login and Play.\nBefore every start it updates itself to the newest release from GitHub.\nThe in-game shop does not work in the native Linux version; purchases are not possible there.\nThe game data is kept outside the Lutris game folder, by default in ~/.local/share/hearthstone-linux-gui.",
"installer": [
{
"move": {
"dst": "$GAMEDIR",
"src": "sha256sums"
}
},
{
"write_file": {
"content": "#!/bin/sh\n# Updates hearthstone-linux-gui.AppImage next to this script to the\n# newest GitHub release. The download is checked against the release's\n# SHA256SUMS.txt, and only a complete, verified file replaces the\n# installed AppImage. Without network access the installed one is kept.\n# Exits non-zero only when no usable AppImage is left.\ncd \"$(dirname \"$0\")\" || exit 1\napi=https://api.github.com/repos/DawnMagnet/hearthstone-linux-gui/releases/latest\ntarget=hearthstone-linux-gui.AppImage\nstamp=.launcher-release\n\nrelease=$(curl -fsSL --connect-timeout 5 --max-time 15 \"$api\") || release=\ntag=$(printf '%s\\n' \"$release\" | sed -n 's/^ *\"tag_name\": *\"\\([^\"]*\\)\".*/\\1/p' | head -n 1)\nif [ -z \"$tag\" ]; then\n echo \"GitHub is not reachable; keeping the installed launcher.\" >&2\n [ -x \"$target\" ]\n exit\nfi\nif [ -x \"$target\" ] && [ \"$(cat \"$stamp\" 2>/dev/null)\" = \"$tag\" ]; then\n exit 0\nfi\n\nurl=$(printf '%s\\n' \"$release\" | sed -n 's/^ *\"browser_download_url\": *\"\\([^\"]*-x86_64\\.AppImage\\)\".*/\\1/p' | head -n 1)\nsums=$(printf '%s\\n' \"$release\" | sed -n 's/^ *\"browser_download_url\": *\"\\([^\"]*\\/SHA256SUMS\\.txt\\)\".*/\\1/p' | head -n 1)\nif [ -z \"$url\" ] || [ -z \"$sums\" ]; then\n echo \"Release $tag has no AppImage or SHA256SUMS.txt; keeping the installed launcher.\" >&2\n [ -x \"$target\" ]\n exit\nfi\nname=$(basename \"$url\")\nexpected=$(curl -fsSL --connect-timeout 5 --max-time 30 \"$sums\" | awk -v f=\"$name\" '$2 == f || $2 == \"*\" f { print $1; exit }')\n\ntmp=$(mktemp ./.download.XXXXXX) || exit 1\ntrap 'rm -f \"$tmp\"' EXIT\necho \"Downloading hearthstone-linux-gui $tag ...\"\nif [ -n \"$expected\" ] &&\n curl -fL --connect-timeout 10 --retry 2 -o \"$tmp\" \"$url\" &&\n [ \"$(sha256sum \"$tmp\" | cut -d ' ' -f 1)\" = \"$expected\" ] &&\n chmod 755 \"$tmp\" && mv -f \"$tmp\" \"$target\"; then\n printf '%s\\n' \"$tag\" > \"$stamp\"\n echo \"Installed hearthstone-linux-gui $tag.\"\nelse\n echo \"Download or checksum check of $tag failed; keeping the installed launcher.\" >&2\n [ -x \"$target\" ]\nfi\n",
"file": "$GAMEDIR/update-launcher.sh"
}
},
{
"write_file": {
"content": "#!/bin/sh\n# Starts the Hearthstone Linux Launcher from Lutris after updating it to\n# the newest release.\n# Without arguments the launcher starts detached: Lutris stops watching\n# once this script exits, because the launcher processes are excluded\n# from its process monitoring, and without LUTRIS_GAME_UUID Lutris does\n# not close the launcher as a leftover game process either.\n# With --launch the launcher starts the game and exits; Lutris keeps\n# tracking the game until it quits.\ncd \"$(dirname \"$0\")\" || exit 1\n./update-launcher.sh || exit 1\nif [ \"$1\" = --launch ]; then\n ./hearthstone-linux-gui.AppImage \"$@\"\n exit\nfi\nenv -u LUTRIS_GAME_UUID ./hearthstone-linux-gui.AppImage \"$@\" >/dev/null 2>&1 &\nsleep 3\n",
"file": "$GAMEDIR/start-launcher.sh"
}
},
{
"chmodx": "$GAMEDIR/update-launcher.sh"
},
{
"chmodx": "$GAMEDIR/start-launcher.sh"
},
{
"execute": {
"description": "Downloading the newest Hearthstone Linux Launcher from GitHub...",
"disable_runtime": true,
"file": "$GAMEDIR/update-launcher.sh"
}
}
],
"require-binaries": "curl, sha256sum",
"system": {
"disable_runtime": true,
"exclude_processes": "hearthstone-linux-gui",
"gamemode": false
}
}
}