Commit Graph
325 Commits
Author SHA1 Message Date
David Heinemeier HanssonandClaude Fable 5 798d6af8b0 Replace the plugin package manager with plain git
A plugin is now just a git repo cloned into ~/.config/omarchy/plugins/<id>/.
That one idea replaces the entire homegrown package-manager half of the
plugin suite: trusted-source registry, clone cache, catalog scanning,
semver comparison, staging dirs, and timestamped backups — 1,025 lines
across five binaries whose jobs git already does.

Gone:

- omarchy-plugin-source: the trusted-repo registry (sources.json) and its
  clone cache under ~/.cache/omarchy/plugin-sources/. The trust decision
  now happens once, at add time, with the same unsandboxed-code warning.
- omarchy-plugin-scan + omarchy-plugin-available: the catalog machinery
  over cached clones. Discovery belongs on a web page, not in the CLI.
- omarchy-plugin-add: copying folders out of cached source clones with
  hand-rolled staging and .bak backups. Replaced by a git clone.
- omarchy-plugin-update: manifest version comparison via sort -V and
  re-installs. Replaced by fetch + diff + fast-forward; git is the version
  and git is the backup.
- omarchy-plugin-remove and omarchy-plugin-edit as separate binaries:
  folded into omarchy-plugin, much slimmer.

The consolidated omarchy-plugin now handles the full lifecycle:

- add <git-url>: warn, clone into a dot-prefixed staging dir (invisible
  to the plugin scanner), validate, then move into place named by the
  manifest id. Plugins land disabled — enabling is the single consent
  moment, replacing the old review-before-copy flow.
- update [id | --all]: fetch origin HEAD, show the diff (delta when
  available), confirm, fast-forward. Updates are code the shell will run,
  so the result is re-validated and rolled back to ORIG_HEAD if upstream
  turned invalid (e.g. smuggled a symlink).
- remove [id]: git checkouts are deleted outright since upstream keeps
  the history; hand-made plugin folders still get a backup, and dev
  symlinks are just unlinked.
- edit [id]: opens the user plugin directory in a shell.

All commands keep the interactive/unattended split: gum prompts in a
terminal, hard refusal without --yes otherwise, so scripts and agents
never hang on a hidden prompt.

Kept as siblings: omarchy-plugin-catalog (omarchy-bar reads it),
omarchy-plugin-validate (the security boundary, now pruning .git from its
symlink scan since installs are git checkouts), and omarchy-plugin-clone
(local development of built-in widgets, a separate concern).

Trade-offs accepted: one repo = one plugin (no more multi-plugin source
repos), and ref pinning or branch switching is no longer a CLI feature —
an installed plugin is a plain checkout, so that is ordinary git in the
plugin directory.

None of the removed machinery ever shipped: it existed only on this
branch, so there is no migration. The net effect is 11 scripts / 2,040
lines down to 4 scripts / 1,080 lines, and one less concept for users to
learn — everyone already knows what a git repo is.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 21:47:33 -07:00
David Heinemeier HanssonandClaude Fable 5 60e0a2a0cd Simplify clipboard watcher lifecycle with pdeathsig
Replace the three-layer process management (trap cleanup, PPID-polling
watchdog subshell, /proc-scanning reaper) with kernel-level lifetime
binding: each wl-paste watcher is spawned under setpriv --pdeathsig TERM,
so it dies with the shell no matter how the shell exits.

- Delete watch.sh: the shell now spawns both watchers directly as
  declarative Process commands instead of a wrapper script with traps
  and a 1s polling loop
- Delete init.sh: reaping stale watchers from a crashed pre-pdeathsig
  shell is a single pkill at startup
- Collapse capture.sh's dual stream/snapshot modes: wl-paste forwards
  arguments to its watch command, so the mime rides along as $1 instead
  of an env var, letting both modes share one emit_image function
- Turn the six-branch image mime chain into a loop

Net: two fewer files, three fewer runtime processes, and the watch-mode
capture tests now exercise the same argument protocol the shell uses.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 21:32:30 -07:00
David Heinemeier Hansson 055ffaccd4 Split omarchy-plugin into siblings and consolidate bar config into omarchy-bar
omarchy-plugin mixed plugin lifecycle, clone/edit, and bar-layout mutation.
The bar layout was mutated by two separate engines (an embedded Python
mutate_bar here and jq in omarchy-config-shell-bar), each with its own
manifest walker.

- omarchy-plugin is now a ~220-line router; clone and edit move to
  omarchy-plugin-clone and omarchy-plugin-edit, matching the existing
  plugin-{source,add,update,remove,available,validate,scan} sibling pattern
- omarchy-config-shell-bar is replaced by omarchy-bar, the single bar engine
  (show/layout/list/options/use/reset/add/move/remove/set/replace/position/
  transparent/settings) with one jq pipeline; the Python mutate_bar and its
  python3 dependency are gone
- omarchy-plugin-catalog is the shared manifest scanner used by omarchy-bar
  (widget/option enumeration, add validation) and omarchy-plugin-clone
  (source enumeration), replacing three find|jq re-implementations
- service install/remove and refresh-shell call omarchy-bar; docs and tests
  updated to the new command surface
2026-07-02 11:10:24 -07:00
David Heinemeier Hansson 738821c3ab Fix clipboard watcher lifecycle 2026-07-02 11:09:42 -07:00
David Heinemeier Hansson beff26d8e0 Replay recent notification history 2026-06-29 15:19:32 -05:00
David Heinemeier Hansson 6ef0c0192b Resolve launcher device icons 2026-06-29 15:04:57 -05:00
David Heinemeier Hansson 38553effa3 Save the default ai harness setup until we have a better use case 2026-06-29 14:42:16 -05:00
David Heinemeier Hansson 89615a526d Render Omarchy menu icon with Omarchy font 2026-06-29 14:12:36 -05:00
David Heinemeier Hansson fed2fd8e3d Fix notification expire timeout being treated as seconds instead of milliseconds 2026-06-29 13:24:04 -05:00
David Heinemeier Hansson b9f2d41e86 Add clipboard history Home End navigation 2026-06-29 12:58:04 -05:00
David Heinemeier Hansson 472b5cd557 Share pointer movement gate across menus 2026-06-29 11:56:21 -05:00
David Heinemeier Hansson a3f8c494e3 Ignore stationary pointer hover in clipboard 2026-06-29 11:44:31 -05:00
David Heinemeier Hansson a0abb1e0d1 Ignore stationary pointer hover in launcher 2026-06-29 11:40:31 -05:00
David Heinemeier Hansson 2cd73f39d2 Close launcher after delete confirmation 2026-06-29 11:30:42 -05:00
David Heinemeier Hansson 987588f512 Launch shell commands on active workspace 2026-06-29 11:26:23 -05:00
David Heinemeier Hansson 987addd7da Launch presentation terminals on active workspace 2026-06-29 11:14:07 -05:00
David Heinemeier Hansson 924254ed11 Update battery icon promptly on power changes 2026-06-29 10:49:43 -05:00
David Heinemeier Hansson 98c7f5b28c Add network ping and speed test sections 2026-06-29 09:44:29 -05:00
David Heinemeier Hansson 67084b153f Fix launcher keyboard scrolling 2026-06-28 20:46:46 -04:00
David Heinemeier Hansson ba0d2a764f Fix launcher entry removal 2026-06-28 20:46:23 -04:00
David Heinemeier Hansson 2f4fc48791 Add ping to network panel 2026-06-28 20:11:21 -04:00
David Heinemeier Hansson 91ee7f20fc Fix media skip OSD metadata 2026-06-25 06:55:11 -04:00
David Heinemeier Hansson b043a9f90e Fix panel IPC hotkeys 2026-06-24 18:26:02 -04:00
David Heinemeier Hansson 89abbddc77 Fix image selector IPC reloads 2026-06-24 13:49:22 +02:00
David Heinemeier Hansson beea78084e Use PATH for panel helper commands 2026-06-24 13:40:16 +02:00
David Heinemeier Hansson 1db2323fd9 Remove legacy bar widgets 2026-06-23 16:22:47 +02:00
David Heinemeier Hansson 3fd36802ac Simplify the system-update check
No need for a panel, just focus on the main omarchy package
2026-06-23 15:59:27 +02:00
David Heinemeier Hansson e8e3b7ef54 Fix weather panel clipping and units 2026-06-22 20:52:02 +02:00
David Heinemeier Hansson 4773202ab0 Apply pending shell theme after background polling 2026-06-22 19:57:05 +02:00
David Heinemeier Hansson cdd833facb Apply shell theme if background reveal stalls 2026-06-22 19:52:35 +02:00
David Heinemeier Hansson eb3cb5225c Delay session lock during display hotplug 2026-06-22 19:44:37 +02:00
David Heinemeier Hansson 8f5336e0d5 Protect against hyprlock crash when there are no screens at all 2026-06-22 19:28:43 +02:00
David Heinemeier Hansson 9a20742ea7 Stop image picker thumbnail flicker
The May 17 picker performance change made activated thumbnail loads asynchronous, which undid the earlier anti-flicker fix and let carousel movement flash blank thumbnails. Keep lazy activation, but load activated thumbnails synchronously so theme/background picker navigation remains stable. Add regression coverage for the thumbnail loading mode.
2026-06-22 17:32:56 +02:00
David Heinemeier HanssonandClaude Opus 4.8 efd8352dfb launcher: show icons for apps installed mid-session
The launcher resolves each entry's icon through Quickshell.iconPath(),
which bottoms out in Qt's QIconLoader / QIcon::fromTheme. That engine
caches the theme's directory listing — and null results — for the life
of the process, and only re-scans when the icon theme or search paths
change. Nothing in Quickshell 0.3 exposes a way to invalidate it, and a
QML reload doesn't reset it either (QIconLoader is a QtGui process
global, not tied to the QML engine).

So when a user installs a new app while the shell is running, its
.desktop file is picked up live (DesktopEntries is file-watched and the
name appears immediately), but its icon resolves to the cached miss and
renders blank until the whole shell is restarted. That's a poor "I just
installed this" experience.

Fix it without a restart by keeping our own on-disk icon index as a
fallback. When themed lookup returns empty, iconSource() consults a
name->path map built by scanning the XDG icon dirs and /usr/share/
pixmaps (SVGs first, so scalable wins). The scan runs on startup and on
a debounced DesktopEntries change — the same signal that already makes
names appear — and swapping the iconIndex property re-evaluates every
iconSource() binding, so freshly installed icons show up live. Icons Qt
can already resolve are untouched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 15:05:06 +02:00
David Heinemeier Hansson 35a6940992 Just 3 seconds of screen on after lock 2026-06-20 22:27:03 +02:00
David Heinemeier Hansson 8ae975357a Make sure we never get in-panel scrolling when we shouldn' 2026-06-20 22:19:53 +02:00
Ryan Hughes fd5063dc30 Fix notification popup placement 2026-06-16 01:25:04 -04:00
Ryan Hughes 227240d280 Collapse inactive indicator spacing 2026-06-14 21:12:42 -04:00
Ryan Hughes 8d490d525e Select Codex icon by surface background 2026-06-14 20:14:09 -04:00
Ryan Hughes e0eaf8eea8 Use light Codex icon on light themes 2026-06-14 20:09:29 -04:00
Ryan Hughes d8cff94711 Fix model usage layout on vertical bar 2026-06-14 17:40:00 -04:00
Ryan Hughes 221fb296fc Simplify theme palette tokens 2026-06-11 02:08:02 -04:00
Ryan Hughes 0f5e81143e Move current theme state to local state 2026-06-09 19:48:37 -04:00
Ryan Hughes 29c4a20a86 Fix Claude weekly usage display 2026-06-09 18:11:47 -04:00
David Heinemeier Hansson 73d47390c4 Improve Bluetooth panel connected devices 2026-06-08 17:20:59 +02:00
David Heinemeier Hansson 42a0b25e01 Merge branch 'omarchy-shell' into quattro 2026-06-08 16:56:51 +02:00
David Heinemeier Hansson 3d4bb9ab81 Add splitters to all panels... for now 2026-06-07 20:58:02 +02:00
Ryan Hughes 5178405d19 Merge remote-tracking branch 'origin/omarchy-shell' into omarchy-4 2026-06-07 14:56:08 -04:00
Ryan Hughes 8baae47d48 Fix wifi frequency displays 2026-06-07 14:55:21 -04:00
Ryan Hughes 4c17f6a675 Merge remote-tracking branch 'origin/omarchy-shell' into omarchy-4
# Conflicts:
#	bin/omarchy-debug
#	bin/omarchy-upload-log
2026-06-06 13:28:47 -04:00