Repository navigation
feat: Omarchy's app grid behind the Omarchy button (Omarchy 4.5) - #73
Conversation
Omarchy 4.5 ships an app grid with its own dock: every app on one searchable grid, keyboard driven, with Keep in dock and Uninstall, from which an app can be dragged onto the dock. A new Appearance choice, "Omarchy button opens": the Omarchy menu (default, as before) or the app grid, offered only when AppGrid.qml and AppLibrary.qml exist. The grid and its library are Omarchy's files, loaded on the first open instead of copied, so they follow Omarchy's look, search ranking and translations, and cost nothing until used. LocalAppLibrary could not stand in: it has no search and no remove. If either file fails to load the button opens the menu. The grid asks its dock for six functions. AppGridHost provides them for all docks: launch through launchApp, pin state through dock.json, and the drags: over a dock on the grid's monitor the dock reveals and its pinned run shows the drop line at rowInsertIndex; letting go pins the app there, or moves it when it is pinned already. The grid draws its own dragged icon, so the gap is the line, not a full slot.
Omarchy's app grid behind the Omarchy button is open upstream as thepathless#73 and runs in priard.
Omarchy 4.5 adds a shell-wide display language (omarchy language) and Commons.Translations for plugins: flat catalogs in i18n/, the language followed live. This prepares the dock for it and ships Polish. components/strings/Tr.qml is a singleton that creates Commons.Translations by name, as a shell from before 4.5 has no such type and naming it outright would stop the dock loading there. Without it every call returns the English text it carries, so 4.0 is unchanged. Settings rows translate their own texts from their search key (setting.<key>.label / .hint / .option.<value>) and SectionLabel its heading (section.<slug>), so the pages only touch rows whose text changes at run time. The settings search matches the translated label as well as the English one and shows the hit in the dock's language. Menus, tooltips, popups, notifications and new group and preset names go through Tr.t / Tr.tn. JS modules take the translator as an argument (DockTasks.chipLabel). Dock.qml gains no line: notifyAppMissing takes a reason and the logic module words it. i18n/en.json holds every key; tests/unit/i18n.test.mjs checks that each Tr.t call has its English entry with the same text, and that every catalog uses only en.json's keys with the same placeholders. The Polish catalog also covers the Floating workspaces (#72) and Omarchy button opens (#73) rows.
|
Merged into The "nothing is copied" design is the standout here: loading Omarchy's Also worth naming: Verified on Shipped in v4.8.0. |
thepathless
left a comment
There was a problem hiding this comment.
Late protocol approval: verified on experimental against 268 Node + 116 Python unit tests, qmllint 0 errors, all static gates, smoke (incl. --restart) PASSED, and the live probe suites green. The app-grid flow's drop logic is pinned by griddrop.test.mjs; the Omarchy button opens row renders in the settings panel (confirmed on the Appearance page capture).
|
Correction to my review note above: the "Omarchy button opens" row itself was not visually confirmed — it sits below the settings panel's hard height cap ( |
|
Update — the visual proof is now complete, the earlier gap is closed. The "Omarchy button opens" row was captured whole on a probe dock (headless output, disposable config copy): label, hint ("The app grid searches every app and lets you drag one onto the dock to pin it."), and both option pills read back from the pixels — "Omarchy menu" (selected) and "App grid". What made the difference: the row's |
Why
Omarchy 4.5 ships an app grid with its own dock: every app on one searchable, keyboard-driven grid, with Keep in dock and Uninstall in its menu, and apps can be dragged out of it onto the dock. OmaDock's Omarchy button can only open the Omarchy menu.
What
A new Settings → Appearance → Omarchy button opens choice: Omarchy menu (default, unchanged) or App grid. It is offered only when
$OMARCHY_PATH/shell/plugins/dock/AppGrid.qmlandshell/services/AppLibrary.qmlexist (feature detection, so Omarchy 4.0 sees no change). Config keyappsButtonAction("menu"/"grid"), documented in the README.With the grid, an app dragged over the dock on the grid's monitor reveals the dock (autohide included) and shows the drop line in the pinned run; letting go pins the app there, or moves it there when it is pinned already. One pinned inside a group stays in its group; a drop above the dock does nothing.
How
components/AppGridHost.qml(one for all docks, as the grid opens on the focused monitor) loads Omarchy'sAppGrid.qmlandAppLibrary.qmlwith aLoaderon the first open, so the grid keeps Omarchy's look, search ranking and translations, and costs nothing until used.LocalAppLibrarycould not stand in: it has no search (sortedEntriesignores the query and returns entries, not rows) and noremove. If either file fails to load, the button opens the menu.launchEntrythroughlaunchApp,isPinned/setPinnedthrough the dock's pins, andmoveExternalDrag/dropExternalDrag/endExternalDrag. The drag point is mapped into the pinned row and placed with the existingrowInsertIndex;dropRowIndexdraws the usual drop line. The grid draws its own dragged icon, so the gap is the line rather than a full slot.DockGridDrop.js(tests/unit/griddrop.test.mjs). An app that is not installed goes throughtogglePin, which refuses it and says so.sharedState.appGrid, soDock.qmlis untouched (it sits at its ceiling).omarchyPathchanges are deferred a turn, because aProcesscommand bound to the path may not have caught up with it yet.Tested
footthere, a second drop moves it to the front, a drop above the dock changes nothing.node --test,structure-check.py,security-grep.py,smoke-test.sh.Overlaps #72 only in
ci.yml(both add anode --check), the README options table andSettingsSearch.js; keep both sides.