Skip to content

Manual install cannot run non-interactively: three TTY/env assumptions kill the installer in automated environments #6187

Description

@seokjushin

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions