Port the two open mirror PRs (Omarchy 4.0.3 pluginDir, startup config read) and redraw the launcher icon - #2
Merged
Conversation
Ported into plugin/ from displaywright-shell-plugin#3 and #2, since the repository they were opened against is generated from this directory and would lose them at the next publish. Omarchy 4.0.3 stopped handing third-party plugins the host's private __sourceDir (publicPluginManifest deletes it at shell.qml:320, still there in 4.0.4). Every path this plugin built from it went empty: the service never read wallpapers.json, the overlay never read monitors.lua, and the launcher entry was never installed. Reproduced here on 4.0.4-1 before touching anything -- two displays pinned in the config, `status` reporting theme for both. The three entry files sit at the plugin root, so the directory now comes from Qt.resolvedUrl(".") in each, percent-decoded; LauncherEntry takes it from the service instead of the manifest. Checked offline that the resolved directory matches through both Qt.createComponent and a Loader, and with a space in the path. The startup read is the other half. pluginDir used to arrive after construction and onPluginDirChanged ran before configReader's command binding had re-evaluated, so the reader ran its ["true"] placeholder and read nothing -- pins came back only when the file was next written. pluginDir is a constant now, but the handler still fires during construction, and a probe shows the child's binding has not been evaluated at that moment either. Setting the command at the point the read starts covers both orderings; the comment says why, rather than the reason that stopped being true. The reload IPC also called configFile.reload() on a FileView that no longer exists, so `omarchy-shell displaywright reload` returned an error instead of ok. It calls reloadConfig() now. Version 0.7.4, in the package as well as the manifest, as the last bump did. Co-Authored-By: MACHO MAN <machoxv@protonmail.com> Co-Authored-By: Pawel Waszkiewicz <fizyk@me.com> Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The old one was three white rectangles on a flat blue plate, and in the app menu at 18px it read as a generic settings tile. The new one is a dusk wallpaper -- night sky down to a warm horizon, a sun, hills -- with two display frames standing in front of it, one landscape and one portrait, each framing its own piece of the picture. That is what the plugin does. Still drawn in QML through `make icon`, now on a Canvas so the gradient, the glow and the hill curve are one paint routine rather than a stack of Rectangles. Checked downscaled to 24px: the two frames and the sun survive, which is all a menu row has room to show. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
ZackYang
added a commit
that referenced
this pull request
Sep 18, 2026
displaywright#1 reached the same diagnosis as the mirror's #2 independently, on 4.0.2 with four outputs, and carried the same reload IPC fix. The code that landed came by the other route, but the finding was theirs as well. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this ports
The two open pull requests on the generated mirror, displaywright-shell-plugin#3 and #2, brought into
plugin/where they have to live. Both were reviewed against the shell that is installed here (Omarchy 4.0.4-1) rather than taken on the strength of their descriptions.#3 — pluginDir resolves to "" on Omarchy ≥ 4.0.3 (Macho0x)
publicPluginManifest()atshell.qml:320deletes the private__sourceDirbefore a third-party plugin sees its manifest. Every path built from it went empty: the service never readwallpapers.json, the overlay never readmonitors.lua, and the launcher entry was never installed. Reproduced on this machine before changing anything: two displays pinned in the config,omarchy-shell displaywright statusreportingthemefor both.The fix derives the directory from
Qt.resolvedUrl(".")in the three root-level entry files, percent-decoded, and hands it from the service toLauncherEntry. Verified offline with a qmltestrunner probe that the resolved directory is correct through bothQt.createComponent(how the service is made) and aLoader(how the overlay is), including a path containing a space.#2 — config not read at startup, and a broken
reloadIPC (FizykPSX)onPluginDirChangedran beforeconfigReader'scommandbinding had re-evaluated, so the reader ran the["true"]placeholder and read nothing. With #3 in,pluginDiris a constant — but a probe shows the change handler still fires during construction, before the child's binding has been evaluated, so setting the command at the point the read starts is still needed. The comment now describes that ordering instead of the one that stopped being true. ThereloadIPC also calledconfigFile.reload()on a FileView that no longer exists; it callsreloadConfig()now.Version
0.7.4 in
manifest.jsonanddisplaywright/__init__.py, as the last bump did.Launcher icon
Second commit redraws
plugin/icon.pngviamake icon: a dusk wallpaper with two display frames in front of it, one landscape and one portrait. Checked downscaled to 24px, which is roughly what the app menu shows.Checks run here
make lint— qmlcachegen + qmllint against the installed shell: okmake validate-plugin—omarchy-plugin-validate: okmake test— 335 Python tests OK (4 skipped), 52 QML tests passedAfter merging
make publish-pluginto regenerate the mirror.🤖 Generated with Claude Code