Commit Graph
6594 Commits
Author SHA1 Message Date
Spencer BullandGPT-6 XHigh 033a1496b2 Describe plugin catalog load order
The catalog comment should retain its purpose and state the HOME, checkout, and ordered XDG root precedence now used by the shell and CLI.

Co-Authored-By: GPT-6 XHigh <noreply@openai.com>
2026-09-24 23:57:27 -05:00
Spencer BullandGPT-6 XHigh 026045c584 Reject disabled services and failed widget replacements
A pending service could publish after disablement, and an asynchronous widget replacement could leave its displaced registration behind if the new component failed. Check the enabled state before service publication and remove the previous widget registration when replacement starts.

Co-Authored-By: GPT-6 XHigh <noreply@openai.com>
2026-09-24 23:57:27 -05:00
Spencer BullandGPT-6 XHigh 667a63e2d7 Ignore stale widget loads after plugin source changes
A delayed widget load can finish after discovery selects a different source and restore the displaced component or clear the new load claim. Bind completion to its claim and selected manifest, and clear pending claims when widgets disappear.

Co-Authored-By: GPT-6 XHigh <noreply@openai.com>
2026-09-24 23:57:26 -05:00
Spencer BullandGPT-6 XHigh a33b767a79 Revoke widget facades when plugin sources change
Bind widget registry, built-in bar and replacement-bar entry facades to the selected plugin source. A replacement gets fresh callbacks and presentation bindings; unchanged selections keep their existing instances.

Co-Authored-By: GPT-6 XHigh <noreply@openai.com>
2026-09-24 23:57:26 -05:00
Spencer BullandGPT-6 XHigh 11e429f6f8 Stamp plugin capabilities from the selected manifest
The first valid manifest is already the authority for an ID. Stamp its capabilities directly so a personal override cannot inherit those of a packaged copy, while clones still inherit from the selected trusted source.

Co-Authored-By: GPT-6 XHigh <noreply@openai.com>
2026-09-24 23:57:26 -05:00
Spencer Bull 87927ed809 Keep plugin clone limited to Omarchy built-ins
Packaged omacom.* plugins are trusted by the registry, but the clone command derives its local ID from an omarchy.* built-in. Require that namespace explicitly and make the fixture valid so the test reaches the catalog selection.
2026-09-24 23:57:26 -05:00
Spencer BullandGPT-6 XHigh cfdb071d04 Revoke stale plugin facades when their source changes
Bind scoped callbacks and registry facade caches to the source and trust that created them. Revoke old facades before synchronization can hand them a trusted replacement manifest, and decide ownership from host cache keys so a writable facade ID cannot abort reconciliation. Keep the asynchronous provenance guard observable with both loads pending.

Co-Authored-By: GPT-6 XHigh <noreply@openai.com>
2026-09-24 23:57:26 -05:00
Spencer Bull ec22ff60d2 Honor default XDG roots in shell plugin discovery
Normalize an unset XDG_DATA_DIRS before passing it to Bash so the runtime uses the same default roots as the CLI catalog. Exercise the native Quickshell argument and resulting scan with the variable truly unset.
2026-09-24 23:57:26 -05:00
Spencer BullandGPT-6 XHigh d27dd53424 Trust packaged Omacom plugins without trusting personal overrides
Preserve search precedence while granting first-party APIs to omacom.* plugins from the active checkout and XDG roots. Recreate retained services when their source or trust changes so old personal code cannot inherit a packaged replacement’s access.

Co-Authored-By: GPT-6 XHigh <noreply@openai.com>
2026-09-24 23:57:26 -05:00
Spencer BullandGPT-6 XHigh d39e655d9e Discover plugins through XDG data directories
Resolve external plugin IDs from the user directory, the active Omarchy checkout, then XDG data directories in order. Track discovery origin separately from the manifest path so external directories cannot claim the reserved built-in namespace.

Co-Authored-By: GPT-6 XHigh <noreply@openai.com>
2026-09-24 23:57:26 -05:00
Spencer Bull c3e67f5d40 Merge pull request #12844 from omacom/hermes-desktop-default-agent
Install Hermes for the default agent as the desktop app's self-updating runtime
2026-09-24 23:41:18 -05:00
Ryan Hughes 5bc098d749 Merge pull request #11690 from Yarlord/fix-hybrid-nvidia-vaapi
Only force NVIDIA VA-API/GLX env when NVIDIA drives the display
2026-09-24 21:52:04 -05:00
Ryan Hughes 28405af27f Request reboot for hybrid NVIDIA fix and streamline tests 2026-09-24 22:49:41 -04:00
5630c6f561 Count Hermes run as a module from an activated venv as Hermes too
With the venv active, a gateway started by hand is `python -m hermes_cli.main gateway run`: the interpreter is bare, the executable resolves outside the runtime, and no runtime path is on the command line, so the removal took it for a stranger and refused over the files it holds rather than closing it. Hermes's own package named with -m is the program.

Co-Authored-By: Codex XHigh <noreply@openai.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 21:41:08 -05:00
14eb9430c3 Close Hermes on removal instead of asking the user to close it
Remove > AI refused whenever anything had Hermes's files open and told the user to close it and try again, and the thing open was Hermes: the agent in the terminal that choosing it as the default agent leaves running, the desktop app, a gateway. Those are the removal's to close. It now stops the gateway unit that upstream's `hermes gateway install` wrote, since that unit starts the runtime about to be deleted and would start it again the moment it was killed, then ends every process whose program lives in that runtime or in the package, and only then refuses over whatever is left, which is somebody else's: an editor on a skill, a shell sitting in ~/.hermes, a writer on the state database. Both are judged by the program, never by a later argument or by the home served, so an editor opened on a runtime file is the user's and a unit running a Hermes kept elsewhere is left alone whatever home it serves; for an interpreter the program is the script it runs, so a gateway started by hand as `python .../hermes gateway run` is found too. The refusal comes before anything is touched, so a run that stops leaves Hermes running as it was. A unit that will not stop still aborts the removal, as dropping the package would strand a live gateway on deleted code.

Co-Authored-By: Codex XHigh <noreply@openai.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 21:35:46 -05:00
bjarneo 93e8cd56b1 Merge pull request #12774 from MicahelE/fix/fastfetch-swap-label
Fix Fastfetch swap label spacing
2026-09-24 22:47:46 +02:00
bjarneo 28ceaae70e Merge pull request #7718 from OldJobobo/feature/remember-theme-wallpapers
Remember the selected wallpaper for each theme
2026-09-23 20:39:46 +02:00
OldJobobo 0385610cfe Merge quattro and preserve per-theme wallpaper memory 2026-09-23 10:41:32 -07:00
bjarneo c737c4975f Merge pull request #10134 from Macho0x/fix/vscode-theme-reload
Make VS Code-family editors reload the Omarchy theme when it changes
2026-09-23 19:04:39 +02:00
bjarneo b76a35d633 Merge pull request #12864 from anandude/fix-catppuccin-colorscheme
Point catppuccin theme at its flavour colorscheme
2026-09-23 18:54:59 +02:00
bjarneo a54668dae3 Merge pull request #9964 from ivanskodje/fix/vscode-theme-invisible-states
Fix invisible VSCode status bar labels and current line
2026-09-23 18:46:48 +02:00
bjarneo 9217abeea2 Merge pull request #10016 from ivanskodje/fix/vscode-theme-invisible-hover-states
Fix invisible hover and active states in the generated VS Code theme
2026-09-23 18:46:00 +02:00
Anandakrishnan CV 8d6a738269 Describe mocha as compatible with older plugin checkouts 2026-09-23 10:57:42 +05:30
f3989092b2 Refuse before anything of the user's is touched, whatever state the runtime is in
The refusals that leave a self-installed Hermes alone came before the command was replaced only for a finished runtime. An unfinished one was still bootstrapped over a git status that could not be read, since a failed status read as a clean tree, and a half-built app beside it, or an edit the Linux runtime patch could not land on, was found only after the user's command had been saved aside and replaced and main switched. All three are asked first now, in both states, so a run that is going to stop leaves the launcher, the checkout and ~/.local/bin as they were.

Co-Authored-By: Codex XHigh <noreply@openai.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-23 00:05:51 -05:00
Spencer BullandClaude Fable 5.1 73a2b91cf5 Install Hermes Desktop whenever Hermes is chosen as the default agent
Hermes is only ever installed through the app. Choosing it as the default agent used to stand aside for a hermes that worked but came from somewhere else, and to refuse one that predated seeded sessions; both left the machine on a Hermes that was not the app's, which is the one Omarchy prepares for in-app updates and hands the theme to. Now --check answers only for the app's own Hermes, and --now installs the app whatever answered to hermes before, saving the previous command aside as it always did for the app path. The desktop installer no longer adds the package itself, since the shared install does.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 23:11:16 -05:00
Erik Melton d3cfd53b99 Merge pull request #10217 from omacom/security/ocaml-removal-no-update
Isolate OCaml cleanup authorization
2026-09-22 19:40:27 +02:00
bjarneo 5dc3a41c0d Merge pull request #10033 from vjohansen/fix-sublime-text-and-emacs-icons
Add editor icons for Sublime Text and Emacs
2026-09-22 19:28:56 +02:00
Ryan Hughes 588f339610 Merge pull request #12915 from omacom/terminal-clipboard-shortcuts
Add select all and standard terminal clipboard shortcuts
2026-09-22 12:04:55 -04:00
Ryan Hughes 129c67e25a Add select all and standard terminal clipboard shortcuts 2026-09-22 11:57:55 -04:00
Erik Melton a4dd253287 Merge pull request #11495 from lalvarezt/command-operands-as-literal
Treat command operands as literal values
2026-09-22 17:45:31 +02:00
Vagn Johansen 9b8a906de2 Add editor icons for Sublime Text and Emacs 2026-09-22 17:05:10 +02:00
Anandakrishnan CV 4e404da2b7 Point catppuccin theme at its flavour colorscheme 2026-09-22 08:05:58 +05:30
Spencer Bull 947e2fc002 Merge pull request #12861 from omacom/elsewhen-migration-rerun
Rename the Elsewhen migration so the link repair reaches machines that already ran it
2026-09-21 21:26:59 -05:00
Spencer Bull 73b4fc0d8a Rename the Elsewhen migration so the link repair reaches machines that already ran it
The re-point of a user plugin link stranded by the elsewhen package moving from plugins/ to shell/plugins/ landed in migration 1789581661, which every machine updated between that migration shipping and the package moving had already applied. omarchy-migrate keys completion on the filename alone, so the repair never ran where it was needed. On a dev checkout the shell discovers the packaged plugin only through that link, and a rescan drops a dangling one, so Elsewhen vanished from the bar on the first shell start after the package upgrade.

Renaming the file runs the whole migration again everywhere. Each step is safe to repeat: the package add is a no-op once installed, both link branches are guarded, the rescan is best-effort, and the put keeps an existing placement. The new test holds a state directory with only the old marker and checks the renamed file is still pending, which the old name could not pass.
2026-09-21 21:14:46 -05:00
44b0f2a70f Match the retired mise tool exactly in the global listing
Whether the environment mise built is gone was read by searching the global listing for the prefix `"pipx:hermes-agent`, so a tool that merely starts the same way, `pipx:hermes-agent-tools` say, read as the retired one still requested. Removing the real one changed nothing, the recheck failed again, and the migration stayed pending on every update. The key is matched whole now, with or without its options.

Co-Authored-By: Codex XHigh <noreply@openai.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 20:42:26 -05:00
72608aed85 Find a busy git in the runtime by its path as well as its name
The wait before clearing a stale shallow.lock looked for a git whose command line began with `git`, so one started as `/usr/bin/git`, which is what a caller that resolved it with `which` runs, was never seen: its lock, once a minute old, would have been cleared under it and a second fetch started against the same shallow file. The path is allowed only ahead of the name, at the start of the command line, so a process that merely names git in an argument, an editor opened on /usr/bin/git from inside the runtime say, is not waited for.

Co-Authored-By: Codex XHigh <noreply@openai.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 20:42:26 -05:00
Spencer BullandClaude Fable 5.1 8bffe142ce Answer npx for upstream's installer so the menu install does not stop to ask
Upstream's installer runs `npx playwright install chromium` for the browser tools, and npx asks before fetching a package it does not have. Over ssh, with no terminal, it goes ahead; in the floating terminal the menu opens for choosing Hermes it printed "Ok to proceed? (y)" and waited, so an install a user had every reason to walk away from sat there until someone typed y. The mise-built Hermes this replaces never asked anything. `--skip-setup` already answers the wizard the same way, and the app's own bootstrap never had a terminal to ask in.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 20:42:26 -05:00
Spencer Bull 5364fea467 Merge pull request #12853 from omacom/elsewhen-migration-absent-shell
Let the Elsewhen migration survive a shell it cannot reach
2026-09-21 20:24:29 -05:00
Spencer Bull aa5c4beb50 Re-point the Elsewhen link stranded by the package's move
The 2026-09-19 revision of this migration, and a symlink then shipped under config/, pointed every install's ~/.config/omarchy/plugins/omacom.elsewhen at /usr/share/omarchy/plugins/omacom.elsewhen. elsewhen 1.0.0-2 moved to shell/plugins, so the link dangles, the shell lists the plugin as enabled but never loads it, and the bar carries an empty slot. The migration kept any existing link, resolving or not, so a rerun could not repair it. A link into /usr/share/omarchy that no longer resolves is Omarchy's own and is re-pointed; a link the user made is still left alone.
2026-09-21 19:34:04 -05:00
Spencer Bull 3208fe09ae Let the Elsewhen migration carry on without a shell to ask
A bare `omarchy-shell shell rescanPlugins` exits 1 when no shell answers on the caller's tree, and omarchy-migrate runs migrations under `set -e`, so an update run from a TTY or over ssh, or one whose shell had gone down while the package replaced its QML, died at "omarchy-shell is not running" before its post-update hooks, shell restart and reboot prompt, and re-failed the same way every time until a shell could be asked. The rescan is now best-effort, like `omarchy-bar put` already is and like #11117 makes the plugin commands' closing rescan: the update restarts the shell once the migrations are through, and a session without one has no bar to place on. An unknown widget on a live shell still leaves the migration pending.
2026-09-21 19:33:42 -05:00
7eb818e37b Install Hermes for the default agent as the desktop app's self-updating runtime
Choosing Hermes as the default agent built it through mise: a pipx environment with no checkout, so `hermes update` had nothing to move, and the only Hermes that could update itself was the one Hermes Desktop set up. Both paths now run the same setup. omarchy-install-hermes-cli installs the hermes-desktop package and runs upstream's installer from it, pinned to the packaged release and started on main, exactly as Install > AI did; omarchy-install-ai-hermes is that plus opening the app. The terminal, the default agent and the app share one runtime, and it updates itself.

--check answers whether --now has anything left to do, not merely whether a hermes runs: choosing Hermes from the menu asks first and opens a terminal only on a no, so a yes has to mean no minutes-long step would run where nobody can see it. With the app installed that means the runtime's own command, its completion marker and the seeded packaged app; a finished runtime whose command is gone, somebody else's, or its own but unable to run gets it back from upstream's path stage without bootstrapping again. Either way the command has to be the one PATH finds, because omarchy-agent runs bare `hermes` and Omarchy puts mise's shims ahead of ~/.local/bin; a command in the way is named rather than installed over. The modes are named outright because the app's launcher used to call this command with no arguments to reconcile a mise copy; a default of --now would turn every launch into an install. --check still refuses to run the retired wrapper, since running it built Hermes through mise, and a machine whose migration is pending can still have it on PATH.

Provisioning no longer writes the wrapper, Remove Preinstalls no longer looks for it, and the wrapper, the environment it built and what proves them Omarchy's are known to the installer alone: --retire-mise is the migration's whole job, and --now runs the same removal once the runtime installer has saved the wrapper aside, so a user who chose Hermes before their migration ran is not left with mise's shim answering `hermes`. Only the wrapper proves the environment is Omarchy's, at its path or in that saved copy, so the environment goes first and the wrapper last, judged by mise neither having it installed nor still requesting it; a removal that leaves either behind, or a listing that cannot be read, mise missing included, stops with the commands to finish by hand and leaves the migration pending. The migration that once installed the wrapper is kept as a no-op for late updaters, and one whose default agent was Hermes is told to choose it again.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Codex XHigh <noreply@openai.com>
2026-09-21 19:26:02 -05:00
bjarneo b8c382da9e Merge pull request #9656 from Chessing234/fix/sublime-default-editor-uses-subl
Use subl for the Sublime Text default editor
2026-09-21 23:11:07 +02:00
bjarneo 04f6145a16 Merge pull request #9125 from animadito/dropbox-requires-sudo
Dropbox install not flagged as needing sudo
2026-09-21 23:09:04 +02:00
bjarneo 29959d1051 Merge pull request #12839 from Bartok9/fix/drop-libretro-database-on-retroarch-remove
Drop libretro-database-git when removing RetroArch
2026-09-21 22:41:32 +02:00
bjarneo 74f96add07 Merge pull request #10280 from Kenny1291/patch-1
Remove link to Omarchy 3 manual
2026-09-21 22:14:39 +02:00
Bartok 6810131e1d Drop libretro-database-git when removing RetroArch 2026-09-21 16:01:53 -04:00
Michael Etokakpan c3b9e011b4 Fix Fastfetch swap label spacing 2026-09-21 12:50:45 +01:00
David Heinemeier Hansson 8f324c90b8 Merge pull request #12758 from omacom/simplify/test-skip-reporting
Report skipped checks separately in shell tests
2026-09-21 11:55:29 +02:00
David Heinemeier Hansson 599a6a665b Report skipped checks separately in shell tests 2026-09-21 11:49:32 +02:00
David Heinemeier Hansson 961ec7f39f Merge pull request #12748 from omacom/simplify/network-qr-test-environment
Fall back to connected Wi-Fi when QR route lookup fails
2026-09-21 11:37:46 +02:00