Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A 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.

Inbox
ReportR-169GitHub issuePublicFixed

Bar: allow the bar to be inset from the screen edges so it lines up with tiled windows

Reported by DukeOfContention · filed Sep 23, 2026 · open at source

Decided: Out of scope — decided by agents · verified 3 days ago.

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

Bar: allow the bar to be inset from the screen edges so it lines up with tiled windowsrevision 1 · captured 2026-09-28 21:23 UTC via poll

What I'd like

A way to make the top bar span the same rectangle a tiled window does, rather
than the full screen edge to edge — i.e. inset by Hyprland's general:gaps_out
on the long axis, so the bar's ends line up with the windows underneath it.

Why it needs to be a shell option

As far as I can tell there is no way to express this in config today. The bar
reads six sizing tokens — size-horizontal, size-vertical, icon-slot,
icon-canvas, icon-font, status-slot — all of which are thickness or icon
metrics, and shell.json's bar block understands position, id, layout
and transparent. Length isn't a number the bar picks: a horizontal bar sets
anchors { left: true; right: true } with implicitWidth: 0 and the
compositor stretches it. So insetting it means dropping those anchors and
giving the window an explicit implicitWidth, which isn't reachable from a
theme or from shell.json.

Why I can't just use a plugin

A third-party bar can do it — clone omarchy.bar and change those few lines —
but since 4.0.4 that has a significant cost: pluginShellForBarEntry() builds
a hosted widget's facade with no _serviceLookup, so widgets hosted by a
replacement bar get serviceFor() and firstPartyServiceFor() returning null.
Only a first-party bar receives ShellRoot and can hand out service-capable
facades via pluginShellForId().

I understand that's deliberate, and I'm not asking for it to be relaxed. But it
does mean any purely cosmetic change to the bar currently costs every hosted
third-party widget its service access. In my case a cloned bar silently
disabled a notification plugin's entire persistence layer (its settings are
applied by its own bar widget, which could no longer reach its daemon) and
killed a dock's notification badges. Nothing was logged; toasts still rendered,
so it looked fine for weeks.

A first-party option for this would let people get the look without cloning
the bar, which seems strictly better for the plugin ecosystem.

Suggested shape

A bar key in shell.json, e.g. "edgeGap": <px> (0 = current behaviour), or
a bar theme token like edge-gap, whichever fits the existing split better.
In my own patch I derive it from Hyprland live rather than configuring a number
— Style.gapsOut * 2, because Style.gapsOut is general:gaps_out halved
while a window's outer edge sits the full gaps_out from the screen — so
changing gaps_out re-fits the bar with no further edits. A "edgeGap": "auto"
that means "match gaps_out" would cover that nicely.

Happy to send a PR. I have this running locally as a 3-hunk patch (+30/-6)
against shell/plugins/bar/Bar.qml: a windowEdgeGap property, anchoring only
to the edge the bar lives on, and a longSpan that is the screen minus the gap
at both ends, falling back to the current stretch-to-fit when the screen isn't
resolved yet. Vertical bars work the same way. Say the word on which config
shape you'd prefer and I'll shape it to that.

View raw text
**What I'd like**

A way to make the top bar span the same rectangle a tiled window does, rather
than the full screen edge to edge — i.e. inset by Hyprland's `general:gaps_out`
on the long axis, so the bar's ends line up with the windows underneath it.

**Why it needs to be a shell option**

As far as I can tell there is no way to express this in config today. The bar
reads six sizing tokens — `size-horizontal`, `size-vertical`, `icon-slot`,
`icon-canvas`, `icon-font`, `status-slot` — all of which are thickness or icon
metrics, and `shell.json`'s `bar` block understands `position`, `id`, `layout`
and `transparent`. Length isn't a number the bar picks: a horizontal bar sets
`anchors { left: true; right: true }` with `implicitWidth: 0` and the
compositor stretches it. So insetting it means dropping those anchors and
giving the window an explicit `implicitWidth`, which isn't reachable from a
theme or from `shell.json`.

**Why I can't just use a plugin**

A third-party bar can do it — clone `omarchy.bar` and change those few lines —
but since 4.0.4 that has a significant cost: `pluginShellForBarEntry()` builds
a hosted widget's facade with no `_serviceLookup`, so widgets hosted by a
replacement bar get `serviceFor()` and `firstPartyServiceFor()` returning null.
Only a first-party bar receives `ShellRoot` and can hand out service-capable
facades via `pluginShellForId()`.

I understand that's deliberate, and I'm not asking for it to be relaxed. But it
does mean **any** purely cosmetic change to the bar currently costs every hosted
third-party widget its service access. In my case a cloned bar silently
disabled a notification plugin's entire persistence layer (its settings are
applied by its own bar widget, which could no longer reach its daemon) and
killed a dock's notification badges. Nothing was logged; toasts still rendered,
so it looked fine for weeks.

A first-party option for this would let people get the look without cloning
the bar, which seems strictly better for the plugin ecosystem.

**Suggested shape**

A `bar` key in `shell.json`, e.g. `"edgeGap": <px>` (0 = current behaviour), or
a `bar` theme token like `edge-gap`, whichever fits the existing split better.
In my own patch I derive it from Hyprland live rather than configuring a number
— `Style.gapsOut * 2`, because `Style.gapsOut` is `general:gaps_out` halved
while a window's outer edge sits the full `gaps_out` from the screen — so
changing `gaps_out` re-fits the bar with no further edits. A `"edgeGap": "auto"`
that means "match gaps_out" would cover that nicely.

**Happy to send a PR.** I have this running locally as a 3-hunk patch (+30/-6)
against `shell/plugins/bar/Bar.qml`: a `windowEdgeGap` property, anchoring only
to the edge the bar lives on, and a `longSpan` that is the screen minus the gap
at both ends, falling back to the current stretch-to-fit when the screen isn't
resolved yet. Vertical bars work the same way. Say the word on which config
shape you'd prefer and I'll shape it to that.

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

  • Fixed bypr/13140· confirmed

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 17:37 UTC