Omahub
← All plugins
M

Quakattro

by mic-kul

A raycaster for Omarchy Quattro. The walls are tiled with your window manager's dwindle layout, the enemies are merchants of complexity, and the holy grail is Linux on the desktop.

Security review

Review recommended · 1 finding

Deterministic scan — not a security guarantee

Low
Risk level
Low
Analyzed commit
7596ccb
Scanned
1 month ago

Flagged patterns appear only in documentation files (README / docs) — descriptive examples, not executable code.

  • Docs external_hosts README.md:17

    Downloads or connects to an external HTTP(S) host.

    git clone https://github.com/mic-kul/quakattro

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
7596ccb
Reviewed
1 month ago

This is a self-contained QML raycaster game overlay with no network access, no persistence outside its own directory, and no install-time or runtime shell commands. The deterministic scan flagged a git clone URL in the README, but that is documentation only and not part of the executable plugin.

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/mic-kul/quakattro --enable
Other #games

Quakattro

A raycaster for Omarchy Quattro. The walls are tiled with your window manager's dwindle layout, the enemies are merchants of complexity, and the holy grail is Linux on the desktop.

Eat every apple. Each one is a thing you no longer need, and putting it down makes you twice as fast for ten seconds. The merchants sell you the cloud; carrying one makes you four times slower for ten. A merchant that has made its sale is done and leaves. The grail does not open for the cluttered.

There is no mouse. Clicking one ends the run.

Play it without installing

git clone https://github.com/mic-kul/quakattro
cd quakattro
qml6 Standalone.qml

An ordinary window. ? or F1 for help, ~ for the console.

W A S D move
← → turn
Shift run
~ console
? F1 help
Esc close, then leave

Console commands: /godmode plays it for you, breadth-first through the maze and around the merchants; /reset, /where, /help.

Install as an Omarchy plugin

omarchy plugin add https://github.com/mic-kul/quakattro.git --enable

Check it registered:

omarchy plugin list | grep quakattro

You should see quakattro enabled third-party overlay Quakattro.

Launch it

omarchy-shell shell toggle quakattro '{}'

Run that once to make sure it opens; run it again to close. The '{}' is required. The shell's IPC method is toggle(id, payload), and calling it with only the id exits 0 and does nothing at all.

Then give it a key. Add this to ~/.config/hypr/bindings.conf:

bindd = SUPER SHIFT, Q, Quakattro, exec, omarchy-shell -q shell toggle quakattro '{}'

Hyprland reloads its config on save, so the key works immediately — if you have autoreload turned off, hyprctl reload. The -q makes the binding fail quietly if the shell is not running, which is what you want from a hotkey.

SUPER SHIFT Q is only a suggestion; check it is free with omarchy menu keybindings first. Press the same key again to put it away, or Esc from inside the game.

Once it is open: ? for help, ~ for the console, /godmode to watch it play itself.

The overlay covers one monitor, not all of them — the same as Omarchy's own emoji picker and clipboard, which do not use Variants either.

Remove it

omarchy plugin remove quakattro

That disables the plugin in the running shell and deletes ~/.config/omarchy/plugins/quakattro. Two things it cannot do for you:

  • Delete the keybind. Remove the bindd line you added from ~/.config/hypr/bindings.conf, or the key will run a toggle for a plugin that is no longer there.
  • Reach outside its own directory. Quakattro writes nothing anywhere else — no config, no save file, no cache — so once the directory and the keybind are gone, nothing of it remains.

If you installed it by hand instead, rm -rf ~/.config/omarchy/plugins/quakattro and reload the shell.

Build

Both generated files are committed; rebuild them only if you change the source.

tools/build-maze.py         # writes the map into raycast.frag and maze.js
bin/build                   # bakes raycast.frag -> .qsb (needs qt6-shadertools)
omarchy plugin validate .   # checks the manifest against the shell's own schema

Run them in that order; the maze builder edits the shader, so the bake has to follow it. Both are idempotent: running them without changing anything leaves no diff, which is the check worth putting in CI.

The maze generator seeds from a constant, so a given release always plays the same maze. Pass a seed to get a different one.

GLSL has no #include, so the renderer's copy of the map cannot be a separate file — it lives inside raycast.frag between two markers, and the generator rewrites it there. That is the whole reason the generator touches the shader: the map the renderer draws and the map collision believes have to be written by the same program, or the first seed change gives you walls you can walk through.

How it works

The whole renderer is one fragment shader. Per-pixel DDA against a 21×21 bitmask maze, floor and ceiling cast from mirrored row distance, torchlight falling off as 1 / (1 + d²). Apples, merchants and the grail are billboards drawn as signed-distance fields — no textures, no meshes, no assets.

The walls are Hyprland's dwindle layout: eleven levels of recursive halving, alternating axis, each split leaving one pane behind and carrying on with the other, so the pattern spirals into a corner the way your windows do. Gap width scales with pane size, or the deepest panes would vanish into their own gaps.

Licence

MIT.