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 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.
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 outputWithout a controlling TTY, opening
/dev/ttyfails, the command substitution returns non-zero, andinstall.sh'sset -eEo pipefailaborts 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 emptyTERM_SIZE).2.
install/preflight/guard.sh:gum confirmexits 1 without TTYgum confirmcannot 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 othergum confirmcall sites (e.g. reboot prompt inpost-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/ttyis unavailable.3.
OMARCHY_ONLINE_INSTALLis required but undocumented for the git-clone pathinstall/preflight/pacman.shonly registers the[omarchy]pacman repo (and keyring/mirrors) whenOMARCHY_ONLINE_INSTALLis set — thecurl omarchy.org/installbootstrapper sets it, but nothing in the repo or docs mentions that a directgit clone && bash install.shneeds it too. Without it,packaging/base.shfails witherror: 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_REF=v3.8.2), also verified all three code paths unchanged on mastersetsid nohup bash install.shHappy to PR any of the suggested fixes if the direction sounds right.