Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
gum confirm prompts are keyboard-only, so a GUI-initiated `omarchy update` can't be answered with the mouse
Reported by alexgleason · filed Sep 18, 2026 · open at source
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- AreaOutside the audited area· Decided by agents · verified
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Decided by agents and verified by a second, independent agent — see the decision.
Original report
System details
Omarchy Quattro (4.x), reproduced in a virt-manager VM. Not hardware-specific: the cause is in the prompt code itself, referenced below against the current quattro tree.
What's wrong?
Clicking the update affordance in the shell opens a floating terminal whose first interaction is a gum confirm Yes/No. The Yes/No boxes render as buttons but ignore mouse clicks — you have to move to the keyboard mid-flow to answer a prompt you reached by clicking.
Steps:
- Boot, and click the update notification/bar affordance (not
omarchy updatefrom a shell). - A floating terminal opens with "Ready to update?" and a Yes/No confirm.
- Click "Yes". Nothing happens.
- Press Enter. The update starts.
This is not a misconfiguration or a terminal problem. gum's confirm/, choose/, and main.go contain no mouse handling at all. Bubble Tea only receives mouse events when a program opts in with tea.WithMouseCellMotion, which gum never does, so the terminal is never asked to report clicks in the first place. --show-help is on by default, so the key hints are already visible and users still try to click, because styled Yes/No boxes read as buttons.
The prompt in question is bin/omarchy-update-confirm:15, and the post-update reboot prompt at bin/omarchy-update-restart:8 has the same problem. There are 43 gum confirm call sites in bin/ overall, all keyboard-only by construction.
What makes this more than a gum quirk is that every GUI entry point into a terminal prompt has the same shape: shell/plugins/bar/widgets/SystemUpdate.qml:20 and bin/omarchy-migrate-notify:44 both hand off through omarchy-launch-floating-terminal-with-presentation. The mouse works right up until the terminal opens, and then silently stops working. A prompt the user arrived at by clicking should be answerable by clicking.
Suggested fix
fzf is already a runtime invariant (install/omarchy-base.packages) and supports this properly:
- Mouse is on by default (
--no-mousedisables it). left-clickis a bindable key, and fzf moves the cursor to the clicked row before dispatching the binding (t.vset(cy)insrc/terminal.go), so--bind 'left-click:accept'is genuine single-click-to-answer rather than click-then-confirm.- Exit codes already match gum's: 130 on Esc/Ctrl-C, same as gum's
exit.StatusAborted. --no-inputpluspos(n)actions give a real two-button widget with no query line, and--heightkeeps it inline instead of taking the alternate screen — which matters becauseomarchy-updateruns underscript -qefcand a fullscreen TUI would fill/tmp/omarchy-update.logwith escape sequences.- Colors can be read from the gum theme variables
omarchy-restart-gumalready exports (FOREGROUND,BACKGROUND,GUM_CONFIRM_SELECTED_*) and mapped onto fzf--color, so no newdefault/themed/*.tpland no migration are needed.
I'd like to propose an omarchy-confirm helper along those lines, adopted first by the two update-path prompts above, leaving the other call sites for a follow-up if the approach is welcome. Happy to open a PR.
View raw text
### System details Omarchy Quattro (4.x), reproduced in a virt-manager VM. Not hardware-specific: the cause is in the prompt code itself, referenced below against the current `quattro` tree. ### What's wrong? Clicking the update affordance in the shell opens a floating terminal whose first interaction is a `gum confirm` Yes/No. The Yes/No boxes render as buttons but ignore mouse clicks — you have to move to the keyboard mid-flow to answer a prompt you reached by clicking. Steps: 1. Boot, and click the update notification/bar affordance (not `omarchy update` from a shell). 2. A floating terminal opens with "Ready to update?" and a Yes/No confirm. 3. Click "Yes". Nothing happens. 4. Press Enter. The update starts. This is not a misconfiguration or a terminal problem. gum's `confirm/`, `choose/`, and `main.go` contain no mouse handling at all. Bubble Tea only receives mouse events when a program opts in with `tea.WithMouseCellMotion`, which gum never does, so the terminal is never asked to report clicks in the first place. `--show-help` is on by default, so the key hints are already visible and users still try to click, because styled Yes/No boxes read as buttons. The prompt in question is `bin/omarchy-update-confirm:15`, and the post-update reboot prompt at `bin/omarchy-update-restart:8` has the same problem. There are 43 `gum confirm` call sites in `bin/` overall, all keyboard-only by construction. What makes this more than a gum quirk is that every GUI entry point into a terminal prompt has the same shape: `shell/plugins/bar/widgets/SystemUpdate.qml:20` and `bin/omarchy-migrate-notify:44` both hand off through `omarchy-launch-floating-terminal-with-presentation`. The mouse works right up until the terminal opens, and then silently stops working. A prompt the user arrived at *by clicking* should be answerable by clicking. ### Suggested fix fzf is already a runtime invariant (`install/omarchy-base.packages`) and supports this properly: - Mouse is on by default (`--no-mouse` disables it). - `left-click` is a bindable key, and fzf moves the cursor to the clicked row *before* dispatching the binding (`t.vset(cy)` in `src/terminal.go`), so `--bind 'left-click:accept'` is genuine single-click-to-answer rather than click-then-confirm. - Exit codes already match gum's: 130 on Esc/Ctrl-C, same as gum's `exit.StatusAborted`. - `--no-input` plus `pos(n)` actions give a real two-button widget with no query line, and `--height` keeps it inline instead of taking the alternate screen — which matters because `omarchy-update` runs under `script -qefc` and a fullscreen TUI would fill `/tmp/omarchy-update.log` with escape sequences. - Colors can be read from the gum theme variables `omarchy-restart-gum` already exports (`FOREGROUND`, `BACKGROUND`, `GUM_CONFIRM_SELECTED_*`) and mapped onto fzf `--color`, so no new `default/themed/*.tpl` and no migration are needed. I'd like to propose an `omarchy-confirm` helper along those lines, adopted first by the two update-path prompts above, leaving the other call sites for a follow-up if the approach is welcome. Happy to open a PR.
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
Not linked to any known issue, other report or change yet.
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
- Out of scopeDecided by agents · verified · 2026-10-09 15:11 UTC