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.
Manual install cannot run non-interactively: three TTY/env assumptions kill the installer in automated environments
Reported by seokjushin · filed Jul 7, 2026Closed upstream on 2026-10-08 by the bot omarchybot, as not planned.
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?
- Not yet mapped to any requirement or component.
- 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?
- Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.
Original report
Summary
Running the manual install path (git clone + install.sh, per the documented manual installation) from a non-interactive shell (CI, cloud-init/user-data, nohup/setsid, SSH without PTY) fails in three distinct ways. All three were hit and verified while automating an Omarchy build on EC2 (v3.8.2, code paths confirmed still present on current master).
1. install/helpers/presentation.sh: stty size </dev/tty + set -e → installer dies with zero output
# presentation.sh:8
TERM_SIZE=$(stty size 2>/dev/null </dev/tty)Without a controlling TTY, opening /dev/tty fails, the command substitution returns non-zero, and install.sh's set -eEo pipefail aborts the entire install before a single line is printed. This is the hardest one to diagnose — the installer just silently exits 0-output.
Suggested fix: TERM_SIZE=$(stty size 2>/dev/null </dev/tty || true) (the code below it already handles empty TERM_SIZE).
2. install/preflight/guard.sh: gum confirm exits 1 without TTY
# guard.sh:4
gum confirm "Proceed anyway on your own accord and without assistance?" || exit 1gum confirm cannot open a TTY in non-interactive shells (unable to pick selection: could not open a new TTY), so it returns non-zero and the guard aborts — even when the operator has deliberately accepted the unsupported-configuration warning. Same applies to other gum confirm call sites (e.g. reboot prompt in post-install/finished.sh).
Suggested fix: honor an env var (e.g. OMARCHY_ASSUME_YES=1) to skip confirms, or fall back to proceed/abort-by-env when /dev/tty is unavailable.
3. OMARCHY_ONLINE_INSTALL is required but undocumented for the git-clone path
install/preflight/pacman.sh only registers the [omarchy] pacman repo (and keyring/mirrors) when OMARCHY_ONLINE_INSTALL is set — the curl omarchy.org/install bootstrapper sets it, but nothing in the repo or docs mentions that a direct git clone && bash install.sh needs it too. Without it, packaging/base.sh fails with error: target not found: for every omarchy-repo package (yay, xdg-terminal-exec, omarchy-nvim, ...), which is quite confusing to trace back to a missing env var.
Suggested fix: document it, or default it to true when the repo isn't registered yet.
Environment
- Omarchy v3.8.2 (
OMARCHY_REF=v3.8.2), also verified all three code paths unchanged on master - Arch Linux official cloud image on EC2 (t3.xlarge), GRUB boot, install driven over SSH via
setsid nohup bash install.sh
Happy to PR any of the suggested fixes if the direction sounds right.
View raw text
## Summary Running the manual install path (`git clone` + `install.sh`, per the documented manual installation) from a **non-interactive shell** (CI, cloud-init/user-data, `nohup`/`setsid`, SSH without PTY) fails in three distinct ways. All three were hit and verified while automating an Omarchy build on EC2 (v3.8.2, code paths confirmed still present on current master). ## 1. `install/helpers/presentation.sh`: `stty size </dev/tty` + `set -e` → installer dies with zero output ```bash # presentation.sh:8 TERM_SIZE=$(stty size 2>/dev/null </dev/tty) ``` Without a controlling TTY, opening `/dev/tty` fails, the command substitution returns non-zero, and `install.sh`'s `set -eEo pipefail` aborts the entire install **before a single line is printed**. This is the hardest one to diagnose — the installer just silently exits 0-output. Suggested fix: `TERM_SIZE=$(stty size 2>/dev/null </dev/tty || true)` (the code below it already handles empty `TERM_SIZE`). ## 2. `install/preflight/guard.sh`: `gum confirm` exits 1 without TTY ```bash # guard.sh:4 gum confirm "Proceed anyway on your own accord and without assistance?" || exit 1 ``` `gum confirm` cannot open a TTY in non-interactive shells (`unable to pick selection: could not open a new TTY`), so it returns non-zero and the guard aborts — even when the operator has deliberately accepted the unsupported-configuration warning. Same applies to other `gum confirm` call sites (e.g. reboot prompt in `post-install/finished.sh`). Suggested fix: honor an env var (e.g. `OMARCHY_ASSUME_YES=1`) to skip confirms, or fall back to proceed/abort-by-env when `/dev/tty` is unavailable. ## 3. `OMARCHY_ONLINE_INSTALL` is required but undocumented for the git-clone path `install/preflight/pacman.sh` only registers the `[omarchy]` pacman repo (and keyring/mirrors) when `OMARCHY_ONLINE_INSTALL` is set — the `curl omarchy.org/install` bootstrapper sets it, but nothing in the repo or docs mentions that a direct `git clone && bash install.sh` needs it too. Without it, `packaging/base.sh` fails with `error: target not found:` for every omarchy-repo package (`yay`, `xdg-terminal-exec`, `omarchy-nvim`, ...), which is quite confusing to trace back to a missing env var. Suggested fix: document it, or default it to true when the repo isn't registered yet. ## Environment - Omarchy v3.8.2 (`OMARCHY_REF=v3.8.2`), also verified all three code paths unchanged on master - Arch Linux official cloud image on EC2 (t3.xlarge), GRUB boot, install driven over SSH via `setsid nohup bash install.sh` Happy to PR any of the suggested fixes if the direction sounds right.
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.
No decision has been recorded yet.