Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
Plugin dev guide: qmllint step fails on stock Omarchy (not on PATH) and -I $OMARCHY_PATH/shell does not resolve qs.* imports
Reported by warpek · filed Oct 10, 2026 · open at source
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- AreaOutside the audited area· Decided by agents · verified
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Decided by agents and verified by a second, independent agent — see the decision.
Original report
The validation step in the plugin guide (https://plugins.omarchy.org/develop.html) runs:
qmllint -I "$OMARCHY_PATH/shell" "$PLUGIN_DIR/BarWidget.qml" "$PLUGIN_DIR/Panel.qml"It has two problems on a stock Omarchy 4.0.4 install:
1. qmllint: command not found
Arch's qt6-declarative (6.11.2) installs qmllint only to /usr/lib/qt6/bin/qmllint. That directory isn't on PATH, and the package ships /usr/bin symlinks only for qml6, qmlls6, qmlscene6, qmlpreview6 and qmleasing6, not for qmllint or qmlformat. Omarchy doesn't add /usr/lib/qt6/bin to PATH either.
2. The import path doesn't resolve qs.*, so the check passes without checking anything
With the full binary path, the command exits 0, but every Omarchy import fails:
Warning: BarWidget.qml:3:1: Failed to import qs.Ui. Are your import paths set up properly? [import]
Warning: BarWidget.qml:60:3: WidgetButton was not found ...
Warning: Panel.qml:3:1: Failed to import qs.Commons ...The modules are declared as module qs.Ui / module qs.Commons in their qmldir files, so qmllint looks for <importpath>/qs/Ui/qmldir. $OMARCHY_PATH/shell has Ui/ and Commons/ directly and no qs/ directory. Quickshell maps qs to the shell root at runtime, but qmllint doesn't know about that. The result is around 26 warnings for the guide's own example, including bogus [inheritance-cycle] (BarWidget -> BarWidget) and [unqualified] warnings on Style.*. Because the exit code is still 0, "Both commands should exit without an error" looks like a pass even though the imports were never checked.
Even with imports resolved, the guide's own pattern leaves [missing-property] warnings, because Loader.item is QObject, Ui/Panel.qml declares property QtObject bar, and Commons/Style.qml declares property QtObject font. Omarchy's built-in clock plugin gets the same warnings.
Workaround
mkdir -p /tmp/qs-imports && ln -sfn "$OMARCHY_PATH/shell" /tmp/qs-imports/qs
/usr/lib/qt6/bin/qmllint -I /tmp/qs-imports --missing-property info \
"$PLUGIN_DIR/BarWidget.qml" "$PLUGIN_DIR/Panel.qml"This gives 0 warnings on a correct plugin and still catches real mistakes: a misspelled property such as tooltipTxt: is reported as [missing-property], and Stlye.space(8) is reported as [unqualified]. Add -W 0 to make any warning fail the run. (--missing-property disable is too broad; it hides misspelled properties.)
Suggested fix
- Use
/usr/lib/qt6/bin/qmllintin the guide, or list adding it to PATH as a prerequisite. - Fix the import path so
qs.*resolves, for example with theqssymlink above. - Or have
omarchy plugin validaterun qmllint itself with the correct binary and import directory.
View raw text
The validation step in the plugin guide (https://plugins.omarchy.org/develop.html) runs: ``` qmllint -I "$OMARCHY_PATH/shell" "$PLUGIN_DIR/BarWidget.qml" "$PLUGIN_DIR/Panel.qml" ``` It has two problems on a stock Omarchy 4.0.4 install: ### 1. `qmllint: command not found` Arch's `qt6-declarative` (6.11.2) installs `qmllint` only to `/usr/lib/qt6/bin/qmllint`. That directory isn't on PATH, and the package ships `/usr/bin` symlinks only for `qml6`, `qmlls6`, `qmlscene6`, `qmlpreview6` and `qmleasing6`, not for `qmllint` or `qmlformat`. Omarchy doesn't add `/usr/lib/qt6/bin` to PATH either. ### 2. The import path doesn't resolve `qs.*`, so the check passes without checking anything With the full binary path, the command exits 0, but every Omarchy import fails: ``` Warning: BarWidget.qml:3:1: Failed to import qs.Ui. Are your import paths set up properly? [import] Warning: BarWidget.qml:60:3: WidgetButton was not found ... Warning: Panel.qml:3:1: Failed to import qs.Commons ... ``` The modules are declared as `module qs.Ui` / `module qs.Commons` in their `qmldir` files, so qmllint looks for `<importpath>/qs/Ui/qmldir`. `$OMARCHY_PATH/shell` has `Ui/` and `Commons/` directly and no `qs/` directory. Quickshell maps `qs` to the shell root at runtime, but qmllint doesn't know about that. The result is around 26 warnings for the guide's own example, including bogus `[inheritance-cycle]` (BarWidget -> BarWidget) and `[unqualified]` warnings on `Style.*`. Because the exit code is still 0, "Both commands should exit without an error" looks like a pass even though the imports were never checked. Even with imports resolved, the guide's own pattern leaves `[missing-property]` warnings, because `Loader.item` is `QObject`, `Ui/Panel.qml` declares `property QtObject bar`, and `Commons/Style.qml` declares `property QtObject font`. Omarchy's built-in clock plugin gets the same warnings. ### Workaround ``` mkdir -p /tmp/qs-imports && ln -sfn "$OMARCHY_PATH/shell" /tmp/qs-imports/qs /usr/lib/qt6/bin/qmllint -I /tmp/qs-imports --missing-property info \ "$PLUGIN_DIR/BarWidget.qml" "$PLUGIN_DIR/Panel.qml" ``` This gives 0 warnings on a correct plugin and still catches real mistakes: a misspelled property such as `tooltipTxt:` is reported as `[missing-property]`, and `Stlye.space(8)` is reported as `[unqualified]`. Add `-W 0` to make any warning fail the run. (`--missing-property disable` is too broad; it hides misspelled properties.) ### Suggested fix - Use `/usr/lib/qt6/bin/qmllint` in the guide, or list adding it to PATH as a prerequisite. - Fix the import path so `qs.*` resolves, for example with the `qs` symlink above. - Or have `omarchy plugin validate` run qmllint itself with the correct binary and import directory.
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
Not linked to any known issue, other report or change yet.
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
- Out of scopeDecided by agents · verified · 2026-10-10 13:08 UTC