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.
`omarchy update` hangs on a sudo password prompt even after `omarchy sudo passwordless`
Reported by duffmahn · filed Aug 30, 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
What happens
omarchy sudo passwordless writes a NOPASSWD: ALL sudoers drop-in, so the user should not be prompted.
But omarchy update still stops on [sudo] password for <user>: and, with no one at the keyboard, hangs
until the prompt times out and set -e aborts the run.
The abort happens after the pre-update snapshot has been taken, so the machine is left having done the
risky half of the operation and none of the useful half. On an unattended box (CI, a server, a VM driven by
an agent) this is a silent five-minute stall followed by a failed update.
Cause
bin/omarchy-update-stay-awake, in the systemd-inhibit branch:
if omarchy-cmd-present systemd-inhibit; then
if (( EUID != 0 )); then
if [[ -t 0 ]]; then
sudo -v # ← line 95
inhibit_runner=(sudo)
else
inhibit_runner=(pkexec)Two things combine:
omarchy updategives itself a tty (viascript), so[[ -t 0 ]]is true and thesudo -vbranch is
taken even in a fully unattended run.
2. sudo -v is governed by sudo's verifypw option, whose default is `all`. Under verifypw=all, sudo -v
demands a password if any rule for that user requires one. A stock Arch install has wheel's
%wheel ALL=(ALL:ALL) ALL alongside the NOPASSWD: ALL file that omarchy-sudo-passwordless writes — so
the passworded wheel rule is enough to make sudo -v prompt, and the NOPASSWD file never gets a say.
So omarchy sudo passwordless does not actually make omarchy update passwordless.
Reproduce
omarchy sudo passwordless- Run
omarchy updatenon-interactively (no human to type a password) - Observe the hang at
[sudo] password for <user>:, then theset -eabort — with the snapshot already created
Observed on Omarchy 4.0.1: a 5-minute hang, then abort.
Workaround that works
Add verifypw=any for the user in a sudoers drop-in:
Defaults:<user> verifypw=anyWith that in place the same omarchy update completed in about 20 seconds.
Suggested fix
Either drop the sudo -v pre-flight (it is only warming the sudo timestamp — sudo will prompt when actually
needed), or make it non-fatal and non-blocking (sudo -n -v || true) so a passwordless configuration is
respected and an unattended run degrades to pkexec/failure fast instead of hanging. Alternatively, haveomarchy-sudo-passwordless also set verifypw=any for the user, so the guarantee it advertises holds forsudo -v too.
Environment
Omarchy 4.0.1-1, Arch, x86_64, KVM guest. sudo defaults unmodified apart from the NOPASSWD file written byomarchy sudo passwordless. First observed 2026-08-28.
View raw text
### What happens
`omarchy sudo passwordless` writes a `NOPASSWD: ALL` sudoers drop-in, so the user should not be prompted.
But `omarchy update` still stops on `[sudo] password for <user>:` and, with no one at the keyboard, hangs
until the prompt times out and `set -e` aborts the run.
The abort happens **after the pre-update snapshot has been taken**, so the machine is left having done the
risky half of the operation and none of the useful half. On an unattended box (CI, a server, a VM driven by
an agent) this is a silent five-minute stall followed by a failed update.
### Cause
`bin/omarchy-update-stay-awake`, in the `systemd-inhibit` branch:
```bash
if omarchy-cmd-present systemd-inhibit; then
if (( EUID != 0 )); then
if [[ -t 0 ]]; then
sudo -v # ← line 95
inhibit_runner=(sudo)
else
inhibit_runner=(pkexec)
```
Two things combine:
1. `omarchy update` gives itself a tty (via `script`), so `[[ -t 0 ]]` is **true** and the `sudo -v` branch is
taken even in a fully unattended run.
2. `sudo -v` is governed by sudo's `verifypw` option, whose default is **`all`**. Under `verifypw=all`, `sudo -v`
demands a password if *any* rule for that user requires one. A stock Arch install has wheel's
`%wheel ALL=(ALL:ALL) ALL` alongside the `NOPASSWD: ALL` file that `omarchy-sudo-passwordless` writes — so
the passworded wheel rule is enough to make `sudo -v` prompt, and the `NOPASSWD` file never gets a say.
So `omarchy sudo passwordless` does not actually make `omarchy update` passwordless.
### Reproduce
1. `omarchy sudo passwordless`
2. Run `omarchy update` non-interactively (no human to type a password)
3. Observe the hang at `[sudo] password for <user>:`, then the `set -e` abort — with the snapshot already created
Observed on Omarchy 4.0.1: a 5-minute hang, then abort.
### Workaround that works
Add `verifypw=any` for the user in a sudoers drop-in:
```
Defaults:<user> verifypw=any
```
With that in place the same `omarchy update` completed in about 20 seconds.
### Suggested fix
Either drop the `sudo -v` pre-flight (it is only warming the sudo timestamp — `sudo` will prompt when actually
needed), or make it non-fatal and non-blocking (`sudo -n -v || true`) so a passwordless configuration is
respected and an unattended run degrades to `pkexec`/failure fast instead of hanging. Alternatively, have
`omarchy-sudo-passwordless` also set `verifypw=any` for the user, so the guarantee it advertises holds for
`sudo -v` too.
### Environment
Omarchy 4.0.1-1, Arch, x86_64, KVM guest. sudo defaults unmodified apart from the `NOPASSWD` file written by
`omarchy sudo passwordless`. First observed 2026-08-28.
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
- Related PRpr/9511· confirmed
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 10:03 UTC