Fix what the review found in the desktop package

Pin the build stamp. write-build-stamp.mjs resolves the commit the app pins
its first-launch bootstrap to, preferring $GITHUB_SHA and otherwise running
`git rev-parse`. That fallback is wrong under makepkg: the build happens
inside this repository, so git ascends out of srcdir and stamps the app with
an omarchy-pkgs commit that means nothing upstream. Confirmed by rebuilding --
the stamp now reads the tag's own commit rather than this repo's HEAD.

Ship upstream's MIT licence. The package declares MIT and was installing only
Electron's licence text.

Repair a drifted CLI before launching rather than only a missing one. `mise
up` can leave Hermes rebuilt against the system Python, and a stub can be
there but cold; either way the wrapper's own repair takes minutes while the
app allows 15 seconds before bootstrapping its own copy. Running the installer
unconditionally costs nothing when Hermes is healthy.

Register the hermes:// scheme. The desktop entry took %U while declaring no
MimeType, so the scheme electron-builder configures went unhandled.
This commit is contained in:
Omabot
2026-08-19 03:08:40 -07:00
parent d2247aa363
commit 4ebb07b267
3 changed files with 24 additions and 9 deletions
+14 -2
View File
@@ -58,19 +58,29 @@ makedepends=('git' 'imagemagick' 'nodejs' 'npm' 'python')
# Electron bundles prebuilt binaries that stripping corrupts. # Electron bundles prebuilt binaries that stripping corrupts.
options=('!strip' '!debug') options=('!strip' '!debug')
# The tag's commit. apps/desktop/scripts/write-build-stamp.mjs pins the app's
# first-launch bootstrap to a Hermes commit, and resolves it from $GITHUB_SHA
# before falling back to `git rev-parse`. That fallback is wrong here: makepkg
# builds inside this repository, so git ascends out of srcdir and stamps the
# app with an omarchy-pkgs commit that means nothing upstream.
_commit=e624e9fde561e1add9388384012b295fde669ade
_srcdir="hermes-agent-${pkgver}" _srcdir="hermes-agent-${pkgver}"
source=("${pkgname}-${pkgver}.tar.gz::${url}/archive/refs/tags/v${pkgver}.tar.gz" source=("${pkgname}-${pkgver}.tar.gz::${url}/archive/refs/tags/v${pkgver}.tar.gz"
'hermes-desktop.sh' 'hermes-desktop.sh'
'hermes-desktop.desktop' 'hermes-desktop.desktop'
'hermes-desktop.png') 'hermes-desktop.png')
sha256sums=('1e3d39d3638ec15fa9d31af262568a953e9272090deb1c50c44cd401175f5b80' sha256sums=('1e3d39d3638ec15fa9d31af262568a953e9272090deb1c50c44cd401175f5b80'
'f6d06594c2a60a01c369992e44b20afcaf92d8f454a822dc6fccad67d4b6c58b' 'bac4626a3bbde4c05cf6072c05f6c47d1804c99066e04ee5328cea707fae1a3f'
'a71e5b3599515b97ea694d51771edede69107a221f301f91c088a5d81de7a8c0' '3ef685bfcf366776b025d26c37d32854d8d4aa2023b2bd07c8e08b001ef1e8c4'
'd60d164e24fdcf6532133b8ea43c77a201e4b9e9dbc396187b58d51d8590ef52') 'd60d164e24fdcf6532133b8ea43c77a201e4b9e9dbc396187b58d51d8590ef52')
build() { build() {
cd "${srcdir}/${_srcdir}" cd "${srcdir}/${_srcdir}"
export GITHUB_SHA="${_commit}"
export GITHUB_REF_NAME="v${pkgver}"
# The desktop workspace resolves against the repo root, so the install has to # The desktop workspace resolves against the repo root, so the install has to
# happen there rather than in apps/desktop. # happen there rather than in apps/desktop.
npm ci npm ci
@@ -99,6 +109,8 @@ package() {
"${pkgdir}/usr/share/icons/hicolor/${size}x${size}/apps/${pkgname}.png" "${pkgdir}/usr/share/icons/hicolor/${size}x${size}/apps/${pkgname}.png"
done done
install -Dm644 "${srcdir}/${_srcdir}/LICENSE" \
"${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
install -Dm644 "${pkgdir}/opt/${pkgname}/LICENSE.electron.txt" \ install -Dm644 "${pkgdir}/opt/${pkgname}/LICENSE.electron.txt" \
"${pkgdir}/usr/share/licenses/${pkgname}/LICENSE.electron.txt" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE.electron.txt"
@@ -8,6 +8,7 @@ Exec=hermes-desktop %U
Icon=hermes-desktop Icon=hermes-desktop
Terminal=false Terminal=false
Categories=Development; Categories=Development;
MimeType=x-scheme-handler/hermes;
Keywords=ai;agent;assistant;hermes;nous; Keywords=ai;agent;assistant;hermes;nous;
StartupNotify=true StartupNotify=true
StartupWMClass=Hermes StartupWMClass=Hermes
+9 -7
View File
@@ -7,13 +7,15 @@ set -euo pipefail
# #
# command -v rather than omarchy-cmd-present: no other launcher in this repo # command -v rather than omarchy-cmd-present: no other launcher in this repo
# makes a package depend on omarchy, and this has to behave on a plain Arch box. # makes a package depend on omarchy, and this has to behave on a plain Arch box.
if ! command -v hermes >/dev/null 2>&1; then # Run the installer even when hermes is already on PATH. A stub can be there
if command -v omarchy-install-hermes-cli >/dev/null 2>&1; then # and cold, and `mise up` can leave one pointing at a Hermes built against the
omarchy-install-hermes-cli --now # wrong Python; repairing either costs minutes, and the app allows 15 seconds
else # before it gives up and bootstraps. Installing here is a no-op when healthy.
echo "The Hermes CLI is not installed, so Hermes Desktop will install its" >&2 if command -v omarchy-install-hermes-cli >/dev/null 2>&1; then
echo "own copy under ~/.hermes. Install the CLI first to avoid that." >&2 omarchy-install-hermes-cli --now
fi elif ! command -v hermes >/dev/null 2>&1; then
echo "The Hermes CLI is not installed, so Hermes Desktop will install its" >&2
echo "own copy under ~/.hermes. Install the CLI first to avoid that." >&2
fi fi
# Chromium's own Ozone detection falls back to XWayland often enough to matter, # Chromium's own Ozone detection falls back to XWayland often enough to matter,