Oma-Play
<p align="center"> <video src="docs/videos/oma-play-demo.mp4" width="100%" controls autoplay loop muted playsinline poster="preview.png"></video> <br/> <em>▶️ <strong>Full demo — 2 min 19s</strong> — 720p60 showcase of all 8 native games • <a href="docs/videos/oma-play-demo.mp4">download mp4 (6.2 MB)</a> • <a href="preview.png">screenshot</a></em> </p>🕹️ Play fun games in between intense work hours. Helps with relaxation and clearing mental fog.
A decompression arcade for software developers — instant, zero-dependency games that live in your Omarchy status bar. Click the bar icon, play for two minutes, close it, get back to work. No windows, no launchers, no waiting.
Genres inside: Snow Run (8-level text-free platformer, springs/ice/moving platforms), racer (OutRun 3D), endless runner (Chrome Dino), snake, breakout (brick-breaker), asteroids (vector shooter), wandering wraith (cave flight) and sandbox simulation (Falling Sand). All games are native QML + pure JavaScript — idle-safe (exit on close, Dino/SnowRun pausable), no web ports, no emulators, no external processes.
<span style="color: #888888;">📖 Read the Full Engineering & Architecture Documentation →</span>
<p align="center"> <img src="preview.png" alt="Oma-Play preview — accurate screenshot from /home/dex/Pictures/oma-play.png" width="100%" /> <br/> <em>Accurate 1920×1080 screenshot — source: <code>/home/dex/Pictures/oma-play.png</code> (copied to <code>preview.png</code> & <code>docs/oma-play.png</code>). Legacy video <code>docs/videos/intro-readme.mp4</code> (22 MB) is HexGL-era and kept for archive.</em> </p>
📦 Install
Repo vs Plugin vs Folder — no confusion:
- GitHub repo name:
omarchy-racer(https://github.com/oppenheimer-rick/omarchy-racer) — legacy name, do not rename on GitHub unless you create a new repo.- Plugin name/id inside:
Oma-Play(io.github.oppenheimer-rick.oma-playinmanifest.json).- Local folder after clone: you may keep it as
Oma-play(/home/dex/bug_hunt/Oma-play) — the name on disk does not matter, theidinsidemanifest.jsondoes.
One-line install — this is the ONLY working command (tested):
omarchy plugin add https://github.com/oppenheimer-rick/omarchy-racer.git --enable
Omarchy clones
omarchy-racer, validatesmanifest.json(id: io.github.oppenheimer-rick.oma-play) and enablesOma-Playinstantly. There is nohttps://github.com/oppenheimer-rick/oma-play.git— that URL 404s.
Manual clone + validate (exactly as the marketplace does):
git clone https://github.com/oppenheimer-rick/omarchy-racer.git Oma-play
cd Oma-play
omarchy plugin validate # or: omarchy plugin validate .
# alternative marketplace helpers:
# omarchy plugin clone https://github.com/oppenheimer-rick/omarchy-racer.git
# omarchy plugin validate ./omarchy-racer # path must match cloned dir
Manual enable / disable (after install):
omarchy plugin enable io.github.oppenheimer-rick.oma-play
omarchy plugin disable io.github.oppenheimer-rick.oma-play
omarchy plugin list | grep oma-play
🗑️ Removal
Safe removal — does not overwrite user configuration:
omarchy plugin disable io.github.oppenheimer-rick.oma-play
omarchy plugin remove io.github.oppenheimer-rick.oma-play
No user shell.json keys are overwritten without explicit consent.
🧘 Philosophy: The Decompression Arcade
Deep work is a muscle, and recovery is part of the training. Oma-Play is designed around the shortest possible path from "I need a break" to "I'm playing."
- Zero latency — native QML games are pure JavaScript; the panel opens instantly.
- Zero dependencies — native games are pure QML + vanilla JS; web ports run from a tiny local static server spawned on demand. No Python, no WASM runtime.
- Zero flicker, unified window — all games share the same card ratio (
420×340logical, streamed at840×680@60fps). Native and web no longer jump between 16:9 and 4:3 — one window, one aspect, one smooth Image buffer. - Zero clutter —
Tabcycles instant games,Lopens the full library.ESCcloses.F11toggles fullscreen.
🕹️ Included Games & Toys
Native — instant play, cycle with Tab / G
| # | Title | Genre | Controls |
|---|---|---|---|
| 1 | OutRun 3D Road Racer | Racer — pseudo-3D procedural road, hills, traffic, parallax | ↑/W accelerate, ←/→ steer, P pause, R new track |
| 2 | Chrome Dino Runner | Endless runner / Platformer — authentic physics | SPACE/↑ jump, ↓ duck, P pause |
| 3 | Snake | Arcade / Snake — grid court, accelerating speed | ←→↑↓/WASD steer, P pause |
| 4 | Snow Run | Platformer — 8-level, text-free HUD (dots + coin pips + hearts), springs/ice/moving platforms/breakables, wall-jump, Frost Caverns & Windy Peaks | ←→ move, SPACE jump, P pause, R restart, stomp foes |
| 5 | Breakout | Breakout / Brick-breaker — paddle angle control | ←→ move, SPACE launch, P pause |
| 6 | Asteroids | Shooter / Vector — rotate/thrust/shoot, splitting rocks | ←→ rotate, ↑ thrust, SPACE shoot, P pause |
| 7 | Wandering Wraith | Cave flight — hold to rise, thread luminous gates | ↑/SPACE hold to rise, R restart, P pause |
| 8 | Falling Sand | Sandbox simulation / Zen toy — sand, water, acid | 1/2/3/4 material, mouse paint, C clear |
Library — press L to open the Arcade Library (see Controls below)
Every title in the library is a native QML game — instant play, zero dependencies:
| Title | Kind | Source |
|---|---|---|
| (native entries) | QML native | OutRun Racer, Chrome Dino, Snake, Falling Sand, Snow Run, Breakout, Asteroids — instant play |
Web games removed: All bundled web ports (HexGL, Pac-Man, Hextris, 2048, Mario, Floppy Bird, DOOM, console-ROM emulation via EmulatorJS, …) were removed by maintainer decision. The plugin is now 100% native QML — it spawns no servers, browsers or external processes. The racer is the default game on panel open.
🎮 Controls — Complete Guide
🔄 Global (always available)
| Key | Action |
|---|---|
TAB / G |
Cycle native games — racer → dino → snake → sand → snowrun → breakout → asteroids → wraith → back to racer. Instant, no load. Idle-safe: all exit on close; Dino/SnowRun pausable. |
L |
Open / close Library — works from any game. |
F11 |
Toggle Fullscreen (compact 420×340 card ↔ full display) |
ESC |
Close popup (or if library/search is open, close that layer first) |
R |
Restart current QML game — resets score/level instantly. Also R in Falling Sand triggers funPreset(), in Breakout/Asteroids/SnowRun restarts the level. |
📚 Library Menu — How to Open & Use
- Open: With the Oma-Play panel open (click
Oma-Playicon in bar), pressL. The CRT-styled▓▒░ ARCADE LIBRARY ░▒▓overlay covers the game canvas. - Browse:
↑/↓orj/kmove the yellow▶highlight.Enter/Spacelaunches the highlighted title. - Search: Press
/to focus the search box, type (e.g.,snow,break), live-filter narrows the list.Enterlaunches the top hit.Escclears focus back to the list. - Launch behaviour: Native (
QMLbadge) — instantly swapscurrentGame. No servers or browsers are ever spawned. - Close library: Press
Lagain orEsc(if not typing). Mouse click on a row also launches. - Counts: Header shows e.g.,
7 GAMES ▸ L=CLOSE(7 natives).
🕹️ Per-Game Keys (while NOT in library)
| Game | Keys | Notes |
|---|---|---|
| OutRun Racer (default on open) | ↑/W accelerate, ↓/S brake, ←→/A/D steer, P pause, R new random track |
Procedural hills/curves; off-road slows you |
| Chrome Dino | SPACE/↑/W/Click jump/start, ↓/S duck, P pause, R restart |
Hold duck to stay low |
| Snake | ←→↑↓/WASD steer (also starts), P pause, R restart |
Speed ramps per fruit |
| Falling Sand | 1 Sand, 2 Water, 3 Wall, 4 Acid, Mouse paint, C clear, P pause, R fun preset |
R builds demo piles |
| Snow Run | ←→/A/D move, SPACE/↑/W jump, P pause, R restart, SPACE next level (icon) |
Text-free HUD dots/pips; springs *, ice ~, moving M, breakable ?; wall-jump, Frost Caverns & Windy Peaks |
| Breakout | ←→/A/D move paddle (or mouse), SPACE launch/next level, P pause, R restart |
Paddle hit position controls angle; pause overlay |
| Asteroids | ←→/A/D rotate, ↑/W thrust, SPACE shoot, P pause, R restart |
Thrust flame visible when holding; pause overlay |
| Wandering Wraith | ↑/SPACE/W hold to rise, release to sink, R restart, P pause |
Thread gates; glow trail; idle-safe |
Tip:
TabwhileLlibrary is closed cycles only QML natives — fastest decompression.
🔧 Technical
All games are native QML Canvas + pure JavaScript models running inside the quickshell panel — no Chromium, no local HTTP server, no external processes of any kind.
The legacy web-port tooling (games/, WebEmbedView.qml, scripts/web-stream.js, EmulatorJS player) was removed by maintainer decision; earlier native QML games remain archived in _later_work/ for isolated iteration:
cp _later_work/qml_games/*.qml .
cp _later_work/qml_games/*.js .
⚙️ Configuration
In ~/.config/omarchy/shell.json:
"right": [
{ "id": "io.github.oppenheimer-rick.oma-play" }
]
📄 Publish Your Plugin — Marketplace Checklist
This repository is ready for Omarchy Plugin Marketplace submission:
-
Prepare the repository
- Public GitHub repository
- Valid
manifest.jsonin repository root (omarchy plugin validatepasses) -
README.mdwith install & removal instructions -
LICENSE(MIT) and preview (preview.png) - Safe install and removal (no config overwrite)
-
Add a manifest —
manifest.json:{ "schemaVersion": 1, "id": "io.github.oppenheimer-rick.oma-play", "name": "Oma-Play", "version": "1.1.0", "description": "Play fun games in between intense work hours. Helps with relaxation and clearing mental fog — Snow Run (8-level text-free), racer, endless runner, snake, breakout, asteroids, wandering wraith and sandbox simulation, all in your Omarchy bar. Idle-safe." }Validate:
omarchy plugin validate(inside the cloned dir) — notoma-play.git. -
Submit — open the issue form with repository URL, category
Games, tags (e.g.,games,arcade,fun).
Note: Marketplace validates listings, not plugin security. Plugins run unsandboxed — you remain responsible for code, assets, documentation and license.
🛡️ Security Notice
Third-party unsandboxed code. Automated checks are limited and are not a security audit. Verify the current commit matches the reviewed commit, inspect source and capabilities, and report suspicious plugins ASAP.
| Check | Status |
|---|---|
| Compatibility | Passed |
| Branch | main |
| Dependencies | 0 external binaries for native; headless Chromium (chromium) + python3 for web streams only on demand |
| License | MIT |
📄 License
MIT License © 2026 oppenheimer-rick — see LICENSE.
🙏 Credits
- Jake Gordon —
javascript-racer,javascript-snakes,javascript-breakout(MIT) - Kenney.nl — Pixel Platformer art (CC0)