Omahub
← All plugins
K

Omacade

by Keith

A modular, theme-aware five-cabinet arcade for Omarchy.

Security review

Review recommended · 4 findings

Deterministic scan — not a security guarantee

Medium
Risk level
Medium
Analyzed commit
e91bdd8
Scanned
1 month ago
  • Command runs with sudo, elevating the process beyond the plugin environment.

    SUDO PURGED " + purged + " DAEMON" + (purged > 1 ? "S" : "")
  • Command runs with sudo, elevating the process beyond the plugin environment.

    SUDO PURGE    P PAUSE    H RECORDS    R REMOUNT    Q QUIT"
  • Augments a command with octal/hex escape sequences.

    \x89PNG\r\n\x1a\n")
  • Augments a command with octal/hex escape sequences.

    \x89PNG\r\n\x1a\n")

Automated analysis only — not a security guarantee.

AI advisory review

No obvious issues detected

Language-model assessment · ~deepseek/deepseek-v4-flash-latest — advisory only

None
AI risk level
None
Recommendation
install
Model
~deepseek/deepseek-v4-flash-latest
Analyzed commit
e91bdd8
Reviewed
1 month ago

Omacade is a well-crafted collection of five arcade games with no network access, no credential handling, and file I/O limited to local game state (scores, settings, theme colors). The deterministic scan's medium-risk findings are all false positives: the 'obfuscation' flags are PNG magic-byte assertions in the test suite, and the 'sudo' flags are game HUD text strings in a filesystem-themed game, not actual privilege-escalation commands. The code demonstrates defensive practices (O_NOFOLLOW, file-size limits, atomic writes) and the optional setup script is clearly documented as never run automatically.

How this check works

This review combines the deterministic scan (the rule-based results above) with an independent look at the plugin's code by a language model. The model reads a trimmed sample of the repository's files, the manifest, and the README, then gives a plain-language risk level and a recommendation: install (no notable danger), review (look closer first), or avoid (clearly dangerous).

It runs on the same analyzed commit as the deterministic scan and is strictly advisory — it is not a security guarantee and never blocks a plugin by itself. A human moderator still reviews plugins before they are listed.

AI advisory only — automated analysis, not a security guarantee.

Install
$ omarchy plugin add https://github.com/keithnyc/omacade --enable
Widgets #bar #quickshell #games

Omacade

Insert no coins. Omacade is a modular, theme-aware arcade for Omarchy with five original cabinets, one local pilot profile, persistent records and achievements, and a full-stack Circuit mode.

Omacade arcade lobby

Preview

<p align="center"> <video src="docs/videos/theme-showcase.mp4" controls width="720"></video> </p> <p align="center"> <video src="docs/videos/daemon-swarm-gameplay.mp4" controls width="372"></video> <video src="docs/videos/lander-gameplay.mp4" controls width="372"></video> </p>

The cabinets

01 // Lander

Precision lunar flight inspired by the classic landing genre. Rotate the craft, manage limited fuel, and settle both feet onto one of two illuminated pads. The narrower pad pays more, while Cadet, Pilot, and Ace tighten the safe velocity and attitude limits.

Every successful landing opens a harder stage with narrower pads, taller mountains, deeper craters, rougher ground, and increasingly hostile approaches. The cabinet adds a rotating pixel-art lander, engine plume, touchdown dust, crash debris, twinkling stars, and occasional comets over a generated lunar surface.

<p align="center"> <img src="docs/screenshots/lander-title.png" alt="Lander title screen" width="372"> <img src="docs/screenshots/lander.png" alt="Lander gameplay" width="372"> </p>

Controls: ← / A and → / D rotate; ↑ / W / Space thrust; 1 / 2 / 3 select Cadet, Pilot, or Ace.

02 // Rootbound

A filesystem action game inspired by underground arcade combat. Dig through block storage, recover package shards, and use a sudo purge pulse to quarantine rogue daemons before they overrun the mount.

Its four zones—/home, /var, /tmp, and /root—change tunnel topology, digging resistance, daemon behavior, hazards, and bonus objectives. Later zones introduce moving log blocks, rebuilding cache cells, unstable terrain, and timed firewall gates rather than merely making the same enemies faster.

<p align="center"> <img src="docs/screenshots/rootbound-title.png" alt="Rootbound title screen" width="372"> <img src="docs/screenshots/rootbound.png" alt="Rootbound gameplay" width="372"> </p>

Controls: arrows or WASD dig and move; hold Space to charge and route a purge pulse through connected tunnels.

03 // Packet Hop

A network-crossing game inspired by lane-dodging arcades. Route a packet through hostile process traffic, ride encrypted carriers across the transit layer, and bind all five root ports before TTL expires.

The /LAN, /WAN, /VPN, and /ROOT routes introduce switches, firewalls, DPI beams, SSH carriers, VPN relays, and progressively tighter TTL budgets. Telegraphed cache hits, packet-loss windows, traffic bursts, and route flaps temporarily rewrite a lane's rules while the ingress and egress rails explain exactly what changed.

<p align="center"> <img src="docs/screenshots/packet-hop-title.png" alt="Packet Hop title screen" width="372"> <img src="docs/screenshots/packet-hop.png" alt="Packet Hop gameplay" width="372"> </p>

Controls: arrows or WASD hop one route cell at a time. Time each move from the visible sprite gaps—the logical board always preserves square cells.

04 // Core Command

A stack-defense game inspired by missile-command arcades. Aim three firewall batteries, launch limited interceptors, and detonate expanding quarantine fields to catch inbound payloads and build cascading score chains.

Six critical services each power a defensive ability; losing one changes how the stack plays. Later waves add fork bombs, stealth payloads, diving rootkits, salvos, and rotating three-layer zero-day sieges. Ammunition, battery cooldowns, a shared launch bus, and two in-flight slots per node reward deliberate shots instead of screen flooding.

<p align="center"> <img src="docs/screenshots/core-command-title.png" alt="Core Command title screen" width="372"> <img src="docs/screenshots/core-command.png" alt="Core Command gameplay" width="372"> </p>

Controls: mouse or arrows / WASD aim; click or Space fires; 1 / 2 / 3 select a firewall battery and 0 returns to automatic selection.

05 // Daemon Swarm

A super-lite survivors game. One security daemon, an endless run of escalating waves of rogue processes, and no aiming — your loadout auto-fires at the nearest threat. Collect packets dropped by kills to level up and pick new defenses — a piercing packet burst, a pulsing firewall ring, an orbiting patch shard, chain-lightning traceroute arcs, or proximity honeypot mines — with no cap on how far any of them can be stacked.

Each wave takes more kills to clear than the last; clearing one banks a free wave reward (a heal, a burst of bonus packets, a full weapon recharge, brief invulnerability, or a score surge) before the next wave begins. Forks split into two on death, trojans hit harder and soak more damage, and from wave 6 onward a rootkit elite periodically breaches with a telegraphed warning. Threat level escalates from LOW to CRITICAL as the waves climb, and enemy strength keeps pace with your build — the only way to stay overpowered for long is to keep clearing waves faster than they scale.

<p align="center"> <img src="docs/screenshots/daemon-swarm-title.png" alt="Daemon Swarm title screen" width="372"> <img src="docs/screenshots/daemon-swarm.png" alt="Daemon Swarm gameplay" width="372"> </p>

Controls: ← → ↑ ↓ or WASD move. Auto-fire always targets the nearest threat — you just need to keep moving and pick good patches.

Omacade Circuit

Press C in the lobby to run Lander, Rootbound, Packet Hop, Core Command, and Daemon Swarm as one five-contract challenge. Each cabinet contributes up to 3000 normalized points based on its own objectives rather than incomparable raw scores.

Two continues let you replay a completed contract before locking its result. The final screen records every split, remaining continues, total full-stack score, and the Circuit Champion achievement. If a cabinet is closed before it records a result, the lobby reports a lost cabinet signal and offers recovery instead of inventing a score.

Shared arcade features

  • Native graphical windows that tile and resize with Hyprland.
  • Live colors from the active Omarchy theme.
  • Responsive playfields with preserved sprite and collision geometry.
  • Keyboard-first attract screens, pause states, records, initials, and restart flows.
  • One persistent three-character pilot identity across all cabinets.
  • Separate top-ten tables, run counts, personal bests, stage records, session recaps, and eight cross-cabinet achievements.
  • Original raster sprites and synthesized sound effects with a persistent mute setting.
  • Atomic local score writes and no network access, accounts, or telemetry.
  • Independent cabinet processes so game loops do not live inside Omarchy's long-running shell.
  • Original terminal Lander retained as a fallback.

Controls

Lobby

Key Action
← / → or A / D Select a cabinet
Enter / Space Launch selected cabinet
C Start Omacade Circuit
H Open records
I Edit pilot initials
M Toggle sound
Q / Escape Quit

Common cabinet controls

Key Action
P Pause / resume
H Open or close top-ten records
R Restart the current run
Q / Escape Close cabinet and return to lobby
Enter Start, advance, retry, or confirm initials

A qualifying score opens a classic three-character initials prompt. Saved initials become the default for future records and Circuit runs.

Install

No dependencies beyond Omarchy's bundled Quickshell (qs) — every sprite, sound effect, and score file ships in this repository, and nothing reaches the network at runtime.

Install and enable the bar widget directly from GitHub:

omarchy plugin add https://github.com/keithnyc/omacade.git --enable

Omarchy clones the repository and enables the reviewed bar widget; it does not execute the optional setup script. The bar icon and panel work immediately. To also install the omacade-gui graphical command, terminal fallback, Super+Space launcher, and theme-change icon hook, run:

~/.config/omarchy/plugins/io.github.keithnyc.omacade/scripts/setup-user-entry

Then launch the lobby from the bar, Super+Space, or a terminal:

omacade-gui

Launch individual cabinets for development or troubleshooting:

omacade-gui lander
omacade-gui rootbound
omacade-gui packet-hop
omacade-gui core-command
omacade-gui daemon-swarm

The original terminal cabinet remains available with omacade lander.

Local data

  • Settings: ~/.local/state/omarchy/omacade.json
  • Scores and progression: ~/.local/share/omacade/scores.json

Score writes are atomic. Each cabinet retains its ten best rows plus run counts, the most recent run, cabinet-specific performance fields, and achievement state. Omacade reads only these files and Omarchy's current theme palette.

Optional integration removal

If you ran the optional setup script, remove its launcher, commands, and theme hook before removing the plugin:

~/.config/omarchy/plugins/io.github.keithnyc.omacade/scripts/remove-user-entry
omarchy plugin remove io.github.keithnyc.omacade

Local development

From the parent directory of this checkout, link it under its manifest ID:

ln -s "$PWD/omacade" ~/.config/omarchy/plugins/io.github.keithnyc.omacade
omarchy-shell shell rescanPlugins
omarchy plugin enable io.github.keithnyc.omacade

Files under ~/.config/omarchy/plugins/ hot-reload. Run the lobby with ./omacade/omacade-gui, a direct cabinet with ./omacade/omacade-gui <id>, or the terminal fallback with ./omacade/omacade lander.

Validate the checkout from its parent directory:

omarchy-plugin-validate ./omacade
python3 -m py_compile ./omacade/omacade
python3 ./omacade/tests/test_omacade.py

Cabinet framework

game/arcade.qml is the arcade lobby and process orchestrator. Cabinet identity and launch metadata live in game/framework/CabinetRegistry.js; reusable theme and persistence services live beside it. Each game remains an isolated Quickshell process, so adding a cabinet does not enlarge the bar widget or couple unrelated game loops together.

Circuit uses timestamped last-run records as a process-safe completion handshake. See game/framework/README.md for the cabinet contract and DEVELOPMENT.md for the complete maintainer handoff, persistence schema, implementation lessons, test safety, and architectural invariants.

Roadmap

Before v1

  • Balance Circuit normalization from several complete real-world runs.
  • Finish cross-cabinet window-size, input-focus, wording, and sound-level QA.
  • Verify a clean install/removal cycle and resolve the marketplace guidance around Omacade's intentionally isolated Quickshell game processes.

After v1

  • Daily seeded Circuits and optional run mutators.
  • Gamepad support.
  • A sixth cabinet when it brings a genuinely different play style.

License

MIT. See LICENSE.