Temparchy — Omarchy Quattro plugin
A neon 3D tube-shooter (Tempest-inspired) with massive voxel explosions,
radiating neon shockwaves, and a local high-score table. Ships as a real
Omarchy Quattro shell plugin: manifest.json + QML entry points,
discovered and summoned by omarchy-shell like any other plugin.
How it works
The game itself is a self-contained WebGL/Three.js page (game/index.html
plus game/vendor/, no server required to run). Rather than rendering
WebGL inside the shell's QML compositor — which currently crashes
Quickshell's WebEngineView (see quickshell-mirror/quickshell#298) — this
plugin's job is just to launch the game in its own app-mode browser window
via Omarchy's own omarchy-launch-webapp. That's a robust, already-supported
mechanism (same one Omarchy webapps use), so the game runs full-speed as a
normal browser-rendered window instead of fighting an unstable embed path.
Since that launcher opens the game via a file:// URL, index.html loads
three pre-built classic scripts (game/vendor/three-core.bundle.js,
game/vendor/three-addons.bundle.js, game/vendor/game.bundle.js) rather
than ES modules — Chromium refuses to resolve relative module imports when
the document itself is file://, and the marketplace's static security scan
hard-fails on any single file over 512 KB, which the vendored Three.js
runtime doesn't fit in one file (see
HANCORE-linux/omarchy-plugin-marketplace#1862). See
game/vendor/three/PROVENANCE.md and "Developing" below for what's vendored
and how the bundles are built.
Two entry points, per manifest.json:
bar-widget(BarWidget.qml) — a clickable "▲ TEMPARCHY" icon you can place in the bar. Click it to launch.overlay(Overlay.qml) — a headless summon target for keybinds, the Omarchy menu, or IPC. Launches the game and immediately closes itself (there's nothing to render inside the shell).
Install
Manual install (local plugin, no git remote needed):
cp -r /path/to/temparchy-omarchy-plugin ~/.config/omarchy/plugins/marc.temparchy
omarchy-shell shell rescanPlugins
omarchy plugin enable marc.temparchy
omarchy bar put marc.temparchy # place the bar icon (optional)
Or, once pushed to a git remote, the standard way:
omarchy plugin add <git-url-of-this-repo>
omarchy plugin enable marc.temparchy
Launch without the bar icon
omarchy-shell shell summon marc.temparchy '{}'
or bind a key to it in Hyprland, e.g. in ~/.config/hypr/bindings.conf:
bind = SUPER, T, exec, omarchy-shell shell summon marc.temparchy '{}'
Developing
The maintained source for the game logic is game/src/main.js (an ES
module that imports Three.js via game/src/three-shim.js, which reads off
the window.THREE_VENDOR global rather than importing game/vendor/three/
directly — see the comments in game/three-core-entry.js,
game/three-addons-entry.js, and game/three-vendor-shim.js for why). It
is not loaded directly — game/index.html loads three pre-built classic
bundles instead, so the game keeps working when launched via file:// and
no single file trips the marketplace's 512 KB static-scan limit. The one
vendored file that's too large to commit at all (game/vendor/three/build/ three.module.js, ~1.24 MB) is fetched and checksum-verified at build time
instead — see game/vendor/fetch-three.sh and game/vendor/three/PROVENANCE.md.
After editing game/src/main.js or the vendored Three.js sources, rebuild:
./game/build.sh # requires npx (Node.js) and curl; fetches+verifies
# three.module.js, then runs esbuild — fails if any
# output file exceeds 512 KB
Commit the regenerated game/vendor/three-core.bundle.js,
game/vendor/three-addons.bundle.js, and game/vendor/game.bundle.js along
with your source change.
Controls
Arrows / A-D / mouse to steer, Space / click to fire, Z for the
superzapper. High scores are saved locally in the browser profile that
omarchy-launch-webapp opens the game in.