--uninstall undoes what punktfunk-omarchy setup did, and the detection matrix grows an Omarchy row #434

Merged
enricobuehler merged 1 commits from worktree-omarchy-installer-gaps into main 2026-08-28 21:45:57 +00:00
Owner

PR #428 taught scripts/install.sh about Omarchy: detection, the -Sy then -S split that gets past the libalpm guard, and the hand-off to punktfunk-omarchy setup. It wired the install path only.

--uninstall left the whole integration behind

It removed the packages but left everything punktfunk-omarchy setup had put outside them:

  • the tagged ufw rules,
  • the user-unit drop-in,
  • the app-menu entry,
  • hooks.json,
  • and the custom_picker_binary takeover in xdph.conf.

That last one is the sharp edge: it keeps pointing a live compositor at a picker shim that is no longer installed.

punktfunk-omarchy remove is exactly the reverse and is idempotent, so it is safe when setup never ran. But it ships in the host package, so it has to run before pacman takes it away. Its guard carries the || [ "$DRY" = 1 ] that step 1b already uses, so the dry-run matrix can see it on a machine that has never had the package.

Gate 7 had no Omarchy row

That is why this went unnoticed. The matrix in scripts/ci/check-docs-drift.sh runs a fake os-release through the real script under --dry-run --yes, and its own comment says a fix to the installer adds its case there. Three added:

case asserts
omarchy the split install reaches sudo pacman -S --noconfirm …
omarchy2 the run hands off to punktfunk-omarchy setup
omarchy-rm --uninstall calls punktfunk-omarchy remove

Each was proved non-vacuous by reverting the code it covers and watching the gate go red.

One row covers a fix that reached main separately

run()'s non-interactive rewrite matched only ^sudo pacman -Syu . Omarchy's line is sudo pacman -S <pkgs>, so --yes — and every terminal-less curl | sh, which behaves the same — asked "Proceed with installation?" with stdin on /dev/null and the step died. Omarchy was the one family that could not be installed unattended.

The -S rule that fixes it landed in the --channel switch work while this branch was open, so it is not part of this diff. The omarchy row keeps it from regressing.

Verification

  • scripts/ci/check-docs-drift.sh exits 0 after rebasing onto 14ec3d1b.
  • Each new row proved non-vacuous by reverting its fix.
  • Arch is byte-identical on both paths: install still sudo pacman -Syu --noconfirm …, uninstall still without the Omarchy hand-back. Detection is unchanged — Omarchy writes ID=omarchy / ID_LIKE=arch, so like arch gives the pacman family and [ "$ID" = omarchy ] fires.
  • --noconfirm is added inside run(), never to the command literal, so gate 6's "install.sh carries platforms.json's lines verbatim" check still passes.

Not in this diff

The uninstall epilogue still says "any firewall rules you opened" are left behind, which is now wrong on Omarchy because remove closes them. It is generic text shared by four families, so I left it alone.

PR #428 taught `scripts/install.sh` about Omarchy: detection, the `-Sy` then `-S` split that gets past the libalpm guard, and the hand-off to `punktfunk-omarchy setup`. It wired the **install** path only. ## `--uninstall` left the whole integration behind It removed the packages but left everything `punktfunk-omarchy setup` had put *outside* them: - the tagged ufw rules, - the user-unit drop-in, - the app-menu entry, - `hooks.json`, - and the `custom_picker_binary` takeover in `xdph.conf`. That last one is the sharp edge: it keeps pointing a live compositor at a picker shim that is no longer installed. `punktfunk-omarchy remove` is exactly the reverse and is idempotent, so it is safe when setup never ran. But it ships **in** the host package, so it has to run *before* pacman takes it away. Its guard carries the `|| [ "$DRY" = 1 ]` that step 1b already uses, so the dry-run matrix can see it on a machine that has never had the package. ## Gate 7 had no Omarchy row That is why this went unnoticed. The matrix in `scripts/ci/check-docs-drift.sh` runs a fake `os-release` through the real script under `--dry-run --yes`, and its own comment says a fix to the installer adds its case there. Three added: | case | asserts | | --- | --- | | `omarchy` | the split install reaches `sudo pacman -S --noconfirm …` | | `omarchy2` | the run hands off to `punktfunk-omarchy setup` | | `omarchy-rm` | `--uninstall` calls `punktfunk-omarchy remove` | Each was proved non-vacuous by reverting the code it covers and watching the gate go red. ## One row covers a fix that reached main separately `run()`'s non-interactive rewrite matched only `^sudo pacman -Syu `. Omarchy's line is `sudo pacman -S <pkgs>`, so `--yes` — and every terminal-less `curl | sh`, which behaves the same — asked "Proceed with installation?" with stdin on `/dev/null` and the step died. Omarchy was the one family that could not be installed unattended. The `-S ` rule that fixes it landed in the `--channel` switch work while this branch was open, so it is **not** part of this diff. The `omarchy` row keeps it from regressing. ## Verification - `scripts/ci/check-docs-drift.sh` exits 0 after rebasing onto `14ec3d1b`. - Each new row proved non-vacuous by reverting its fix. - Arch is byte-identical on both paths: install still `sudo pacman -Syu --noconfirm …`, uninstall still without the Omarchy hand-back. Detection is unchanged — Omarchy writes `ID=omarchy` / `ID_LIKE=arch`, so `like arch` gives the pacman family and `[ "$ID" = omarchy ]` fires. - `--noconfirm` is added inside `run()`, never to the command literal, so gate 6's "install.sh carries `platforms.json`'s lines verbatim" check still passes. ## Not in this diff The uninstall epilogue still says "any firewall rules you opened" are left behind, which is now wrong on Omarchy because `remove` closes them. It is generic text shared by four families, so I left it alone.
enricobuehler added 1 commit 2026-08-28 21:04:02 +00:00
--uninstall undoes what punktfunk-omarchy setup did, and the detection matrix grows an Omarchy row
ci / web (pull_request) Successful in 57s
ci / docs-site (pull_request) Successful in 1m0s
ci / docs-drift (pull_request) Successful in 55s
ci / bun-nix (pull_request) Successful in 1m23s
apple / swift (pull_request) Successful in 2m11s
apple / distribute (pull_request) Skipped
apple / screenshots (pull_request) Skipped
ci / rust-arm64 (pull_request) Successful in 2m26s
installer-smoke / smoke (arch) (pull_request) Successful in 1m24s
installer-smoke / smoke (fedora-44) (pull_request) Successful in 2m2s
installer-smoke / smoke (debian-13) (pull_request) Successful in 3m19s
ci / rust (pull_request) Successful in 7m48s
android / android (pull_request) Failing after 12m41s
51f64382ec
PR #428 taught scripts/install.sh about Omarchy: detection, the `-Sy` then `-S` split that gets past
the libalpm guard, and the hand-off to `punktfunk-omarchy setup`. It wired the INSTALL path only.

`--uninstall` removed the packages but left everything `punktfunk-omarchy setup` had put OUTSIDE
them: tagged ufw rules, the user-unit drop-in, the app-menu entry, hooks.json, and the
`custom_picker_binary` takeover in xdph.conf — the last of which keeps pointing a live compositor at
a picker shim that is no longer installed. `punktfunk-omarchy remove` is the reverse and is
idempotent, but it ships IN the host package, so it has to run before pacman takes it away. Its
guard carries the `|| [ "$DRY" = 1 ]` that step 1b already uses, so the dry-run matrix can see it on
a machine that has never had the package.

Gate 7's matrix had no Omarchy row at all, which is why this went unnoticed; its own comment says a
fix to the installer adds its case there. Three added — the split install, the setup hand-off, and
the uninstall — each proved non-vacuous by reverting the code it covers and watching the gate go red.

The first of those three now covers a fix that reached main separately: `run()`'s non-interactive
rewrite matched only `^sudo pacman -Syu `, so `--yes` and every terminal-less `curl | sh` asked
"Proceed with installation?" with stdin on /dev/null and died. The `-S ` rule that fixes it landed in
the --channel switch work while this branch was open. The row keeps it from regressing.
enricobuehler merged commit 60d3e89c07 into main 2026-08-28 21:45:57 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: unom/punktfunk#434