Blackjack
A hand of blackjack in the Omarchy bar. Click the ♠ and play. No chips, no betting, no running out — just deal, play, deal again. The popup sits under the bar like the network and audio panels, and follows your theme.
| Your move | Round over |
|---|---|
![]() |
![]() |
Install
omarchy plugin add https://github.com/PierSilvioLucchese/omarchy-blackjack.git --enable
That puts a ♠ button on the right of the bar. Move it wherever you like:
omarchy bar move lucchese.blackjack --section center
To open it from a key instead, add to ~/.config/hypr/bindings.conf:
bindd = SUPER, B, Blackjack, exec, omarchy-shell lucchese.blackjack toggle
Removing it
Take the button off the bar but keep the plugin installed:
omarchy plugin disable lucchese.blackjack
Or remove it altogether:
omarchy plugin remove lucchese.blackjack
rm -rf ~/.local/state/omarchy/lucchese.blackjack # the saved record
The plugin writes nothing else. It does not touch your Hyprland config, and
the only line it adds to ~/.config/omarchy/shell.json is its own bar entry,
put there by omarchy plugin enable and taken away by disable.
Playing
| Key | What it does |
|---|---|
enter / space |
deal, or play the button the cursor is on |
h |
hit |
s |
stand |
d |
double — one card, then the hand is over |
p |
split |
n |
deal |
← → |
move the cursor between buttons |
shift+r |
clear the record |
esc |
close |
Only the legal moves are shown, and the line along the bottom lists the shortcuts that would currently do something — so there is nothing to memorise. Illegal moves are ignored.
Your win/loss/push record is kept in
~/.local/state/omarchy/lucchese.blackjack/state.json and survives a shell
restart.
House rules
- Six-deck shoe, reshuffled below 25% penetration
- Dealer stands on soft 17 and peeks for blackjack
- Double on any two cards
- Split up to four hands, on any two cards of equal value
- Split aces draw one card each; twenty-one after a split is a plain win
- Blackjack is called out as its own result, but with no money on the table it counts as one win like any other
- No insurance, no surrender
Requirements
Omarchy 4. Nothing else — no network, no external commands, no data leaves the machine.
Hacking
The rules are plain JavaScript in Game.js, with no Qt dependency, so they run
under node — and so do the manifest checks, which mirror what
omarchy plugin validate enforces. Both run in CI on every push:
node --test 'test/*.test.js'
Panel.qml only draws state and forwards input; it never decides a rule. If a
total looks wrong, Game.js is the only file to read.
Two things worth knowing if you fork this:
Game.jshands out a fresh copy of its state on everyview()call. That is deliberate. QML compares aproperty varby reference, so an array mutated in place reads as unchanged and the table silently keeps drawing the previous cards.- Keys are handled directly instead of through
PanelKeyCatcher, because that helper claimsh/j/k/lfor cursor movement before the plugin sees them — andhbelongs to hit.
License
MIT

