Skip to content

Merge upstream quattro (Elsewhen default plugin, leftover PHP/omarchy up) - #37

Merged
mark-groves merged 18 commits into
quattrofrom
cursor/upstream-sync-88dd
Sep 20, 2026
Merged

mark-groves merged 18 commits into
quattrofrom
cursor/upstream-sync-88dd

Conversation

@mark-groves

@mark-groves mark-groves commented Sep 20, 2026 •

Copy link
Copy Markdown
Owner

Merges omacom/omarchy quattro through e38c1d12 into this fork’s current quattro (2b723bd8, face #34/#35).

This is the same leftover-plus-Elsewhen package as PR #33, remade on today’s quattro tip. A raw git merge of upstream quattro is not a fast-forward (69 first-parent commits already landed via earlier cherry-pick syncs) and conflicts in 17 fork-only files (face/lock, Cursor agents). Those leftover-only nits are left alone.

PR #33, PR #32, and PR #25 stay open and are superseded by this branch.

Fork-only Cursor work is untouched: official-tarball installer, no mise wrapper, usage collector, Cursor/Grok update steps, the theme-set fix from #22, face scan #29–#35, and the fork polkit-chrome docs note.

Elsewhen ships as a default world-clock plugin (upstream omacom#12157)

  • New elsewhen package is in omarchy-base.packages; the packaged plugin lives at /usr/share/omarchy/plugins/omacom.elsewhen
  • Fresh installs get a user symlink at ~/.config/omarchy/plugins/omacom.elsewhen
  • Default shell.json places omacom.elsewhen immediately before the center clock
  • Migration 1789581661 installs the package, creates the symlink only when nothing is already there, rescans plugins, then omarchy bar put omacom.elsewhen --before omarchy.clock
  • Existing checkouts, custom symlinks, and current placements stay intact
  • The migration does not restart the shell; omarchy update already restarts after migrations

Ignore .claude/

  • .gitignore now excludes .claude/ (upstream e38c1d12)

Leftover from unmerged sync PRs #25 / #32 / #33

PHP and Laravel now install through mise (upstream omacom#12141)

  • PHP is no longer a system pacman package. Install uses mise tool-alias set php github:nunomaduro/static-php-builds and mise use --global php@latest
  • Composer global bin-dir is $HOME/.local/bin; Laravel installer runs as mise x php -- composer global require laravel/installer
  • Remove still drops old pacman PHP packages, uninstalls the mise PHP tool/alias, and deletes both ~/.local/bin/laravel and the old Composer laravel path

omarchy up is an alias for omarchy update

  • New # omarchy:alias=omarchy up on omarchy-update

1Password survives closing the installer terminal (upstream omacom#12402)

  • omarchy-install-service-1password now launches with setsid uwsm-app -- 1password

Offline Node pin no longer freezes mise up (upstream omacom#11656)

  • After the offline exact-version pin, mise config set tools.node latest so the first networked mise up tracks new releases

Factory reset now actually erases old hashes (upstream omacom#10379)

  • Shared scrub_factory_accounts runs on both the staged reset root and the retained @factory baseline

Hook and state names cannot be paths (upstream omacom#8170)

  • omarchy-hook, omarchy-hook-install, and omarchy-state set refuse an empty name, a name with /, or a name that is exactly . or .. (exit 2)

Tests

Passed locally on this branch:

  • ./test/cli (includes omarchy up alias in metadata/routes)
  • test/shell.d/hook-state-name-guard-test.sh (19 cases)
  • test/shell.d/factory-reset-accounts-test.sh (both roots, repeat reset, six injected cleanup failures; ran via user namespace)
  • test/shell.d/elsewhen-default-migration-test.sh
  • test/shell.d/config-test.sh (Elsewhen immediately before the clock)
  • test/shell.d/menu-test.sh
  • test/shell.d/menu-guards-test.sh
  • test/shell.d/launch-1password-test.sh
  • omarchy up --help routes to omarchy-update and lists the alias

mise-work-path-test.sh was not run: this environment has no mise binary. The leftover Node-pin change is the same mise config set tools.node latest rewrite already reviewed on #32.

Open in Web Open in Cursor 

Adolanium and others added 18 commits September 19, 2026 23:05
omarchy-hook and omarchy-state set join a name straight into a path. A name
with a slash, or a bare . or .., points outside the hooks or state directory.
Every caller in the repo passes a fixed label, so this is a footgun guard for
future callers, not a fix for anything that ships today.

Names with dots in the middle (a..b) stay allowed. omarchy-state clear is
untouched: find -name matches basenames only.

(cherry picked from commit 0a65b45)
(cherry picked from commit e18b5aa)
(cherry picked from commit a75924a)
(cherry picked from commit 9a54c41)
userdel rewrites /etc/subuid and /etc/subgid, and like every shadow-utils database write it leaves the previous contents behind in a dash-suffixed backup. The scrub removed four of the six backups those tools produce, so the retained @factory baseline still named the previous owner in /etc/subuid- and /etc/subgid- along with their subordinate ID range.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit a00be8f)
(cherry picked from commit a6f02d1)
The runner already rejects a slash, a bare . or .. The installer still
joined the type into hooks/<type>.d before mkdir/cp, so a name nothing
can run could still land on disk.

(cherry picked from commit e522a18)
(cherry picked from commit c84ebda)
Offline installs unpack the bundled tarball and pin Node to its exact
version, since latest can't be resolved without network. But nothing ever
loosened that pin, so Node stayed frozen at the ISO's version and mup
skipped it forever, while online installs tracked latest.

Rewrite the pin to latest right after registering the bundled version:
mise resolves latest to the installed version while offline (verified
with no network and an empty cache), and the first mise up with network
picks up new releases just like an online install.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017LseZ1jcLaFBnndRnW4yb5
(cherry picked from commit 5db4a40)
(cherry picked from commit a4ec934)
(cherry picked from commit 181ad4b)
(cherry picked from commit 1ce5592)
(cherry picked from commit 456af5c)
(cherry picked from commit d97b2b6)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 486e1ca)
(cherry picked from commit fcf9e66)
(cherry picked from commit 85da80d)
(cherry picked from commit fbbbb32)
(cherry picked from commit 5f34ce4)
(cherry picked from commit 75e8fd1)
(cherry picked from commit d174d4a)
(cherry picked from commit f049e1f)
Elsewhen (omacom.elsewhen) arrives as the elsewhen package under
/usr/share/omarchy/plugins, the packaged root the shell scans between its
bundled plugins and the user's. It opens the right section of the default
bar, just before the tray, and a migration installs the package, writes the
widget into a customized shell.json in the same spot, and retires a pristine
pre-package clone of the upstream repo that the package now shadows.

(cherry picked from commit 531c3e8)
Retire only checkouts whose refs and reflogs are reachable from recorded origin history, and preserve ignored files. Leave configs without an explicit supported bar layout untouched so migration does not replace the shell fallback with an almost empty bar.

Co-Authored-By: Codex XHigh <noreply@openai.com>
(cherry picked from commit e8a8236)
Link the package into the existing plugin directory and let bar put handle enablement, clock-relative placement, and the missing-clock fallback. Preserve user checkouts and existing placements, and seed the same link for new users. This removes the Atreyu packaged-discovery prerequisite and the checkout cleanup and JSON rewrite machinery.

(cherry picked from commit 9e3ff71)
Restarting immediately after the plugin rescan races Quickshell IPC handler creation and can crash the exiting shell. The normal update flow already restarts after migrations. Let this migration finish through live enablement and placement without adding timing workarounds.

(cherry picked from commit 16cc7d7)
(cherry picked from commit e38c1d1)
… up)

Brings mark-groves/omarchy quattro to omacom/omarchy quattro e38c1d1.

Co-authored-by: Mark Groves <mark-groves@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented Sep 20, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 0c337ffb-d93c-4130-9ae6-e320849ac2d3


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants