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.
Bar widgets cannot be dragged into an empty section (e.g. empty left section)
Reported by aronnaxlin · filed Sep 2, 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
System details
Intel Core Ultra 9 185H, NVIDIA GeForce RTX 4060 Mobile, Omarchy 4.0.2-1, Hyprland 0.56.2
What's wrong?
When a bar layout section (such as left) becomes completely empty ("left": [] in ~/.config/omarchy/shell.json), widgets from center or right cannot be moved into that section via mouse drag-and-drop.
Steps to reproduce
- Empty the left section of the bar, for example:
omarchy bar move omarchy.menu --section center
omarchy bar move omarchy.workspaces --section center Now ~/.config/omarchy/shell.json has "left": [].
2. Attempt to drag any widget (such as omarchy.workspaces) from the center section to the far left side of the bar.
3. Release the mouse.
Observed behavior
The widget cannot be dropped into the left section. It always snaps to the nearest widget in the center section (or right). It is impossible to restore widgets to the empty section via GUI drag-and-drop. The only workaround is using CLI (omarchy bar move <widget> --section left) or manually editing shell.json.
Root cause analysis
In shell/plugins/bar/Bar.qml:
- moduleDropAtScene() iterates over moduleSlots to find drop target candidates:
var candidates = []
for (var i = 0; i < moduleSlots.length; i++) {
var slot = moduleSlots[i]
if (!slot || slot === sourceSlot || !slot.visible || slot.width <= 0 || slot.height <= 0) continue
...
candidates.push({ slot: slot, ... })
}
return BarModel.nearestDropTarget(candidates, scenePoint, root.vertical)BarModel.nearestDropTarget()selects the closest existingslotamongcandidatesand drops before/after that slot's section.- When
lefthas 0 widgets, there are noModuleSlotitems inregion: "left". - Consequently, all candidates belong to
centerorright. Any cursor position (even at x=0) resolves to a slot incenterorright, so the drop target region is never"left".
Empty layout regions should have drop target bounds (or fallback to empty section bounds) so widgets can be dropped into an empty section.
View raw text
### System details
Intel Core Ultra 9 185H, NVIDIA GeForce RTX 4060 Mobile, Omarchy 4.0.2-1, Hyprland 0.56.2
### What's wrong?
When a bar layout section (such as `left`) becomes completely empty (`"left": []` in `~/.config/omarchy/shell.json`), widgets from `center` or `right` cannot be moved into that section via mouse drag-and-drop.
#### Steps to reproduce
1. Empty the left section of the bar, for example:
```bash
omarchy bar move omarchy.menu --section center
omarchy bar move omarchy.workspaces --section center
```
Now `~/.config/omarchy/shell.json` has `"left": []`.
2. Attempt to drag any widget (such as `omarchy.workspaces`) from the center section to the far left side of the bar.
3. Release the mouse.
#### Observed behavior
The widget cannot be dropped into the left section. It always snaps to the nearest widget in the `center` section (or `right`). It is impossible to restore widgets to the empty section via GUI drag-and-drop. The only workaround is using CLI (`omarchy bar move <widget> --section left`) or manually editing `shell.json`.
#### Root cause analysis
In `shell/plugins/bar/Bar.qml`:
- `moduleDropAtScene()` iterates over `moduleSlots` to find drop target candidates:
```javascript
var candidates = []
for (var i = 0; i < moduleSlots.length; i++) {
var slot = moduleSlots[i]
if (!slot || slot === sourceSlot || !slot.visible || slot.width <= 0 || slot.height <= 0) continue
...
candidates.push({ slot: slot, ... })
}
return BarModel.nearestDropTarget(candidates, scenePoint, root.vertical)
```
- `BarModel.nearestDropTarget()` selects the closest existing `slot` among `candidates` and drops before/after that slot's section.
- When `left` has 0 widgets, there are no `ModuleSlot` items in `region: "left"`.
- Consequently, all candidates belong to `center` or `right`. Any cursor position (even at x=0) resolves to a slot in `center` or `right`, so the drop target region is never `"left"`.
Empty layout regions should have drop target bounds (or fallback to empty section bounds) so widgets can be dropped into an empty section.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-09 10:37 UTC