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.
Bluetooth bar toggle can't turn Bluetooth back on once it's off (adapter becomes null)
Reported by Fab1anBecker · filed Sep 28, 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
- Omarchy: 4.0.4-1 - Quickshell: 0.3.1 (Arch Linux package) - bluez: 5.87-2 - Kernel: 7.2.5-3-omarchy (
Linux ... 7.2.5-3-omarchy #1 SMP PREEMPT_DYNAMIC) - CPU: Intel(R) Core(TM) i5-8350U CPU @ 1.70GHz - GPU: Intel Corporation Kaby Lake-R GT2 [UHD Graphics 620]
What's wrong?
What happened
The Bluetooth on/off toggle in the top bar panel (Panel.qml) works to turn
Bluetooth off, but once it's off, clicking the toggle again does nothing —
Bluetooth can never be turned back on from the UI.
Why
toggleBluetooth() inshell/plugins/panels/bluetooth/Panel.qml is:
function toggleBluetooth() {
if (!adapter) return
Quickshell.execDetached(["omarchy-bluetooth-power", adapter.enabled ? "off" : "on"])
}
omarchy-bluetooth-power off calls rfkill block bluetooth. Once the
adapter is rfkill-blocked, BlueZ removes the controller from D-Bus
entirely (bluetoothctl list returns nothing while blocked), soBluetooth.defaultAdapter in Quickshell becomes null. The `if (!adapter)
return guard then makes toggleBluetooth()` a silent no-op — there's no
adapter object left to read .enabled off of, so it can never issue the"on" command.
The backend script itself is fine: runningomarchy-bluetooth-power on / off / toggle directly from a terminal
works correctly every time. The bug is purely in the QML guard clause
losing the adapter reference it needs to decide which direction to toggle.
Steps to reproduce
- Turn Bluetooth off via the bar toggle (or
omarchy-bluetooth-power off). - Open the Bluetooth panel again and click the toggle to turn it back on.
- Nothing happens — the switch and icon stay in the "off" state.
Confirmed independently of the UI:
- rfkill block bluetooth → bluetoothctl list prints nothing (adapter
gone from D-Bus).
- Quickshell IPC call ipc call omarchy.bluetooth toggleBluetooth while
blocked also does nothing, rfkill list bluetooth shows still blocked.
- omarchy-bluetooth-power on run directly immediately restores it.
Expected
Toggling should work in both directions regardless of whether the adapter
is currently enumerable on D-Bus — e.g. fall back to unconditionally
running omarchy-bluetooth-power toggle, or track last-known enabled
state separately from adapter presence, instead of returning early whenadapter is null.
View raw text
### System details
- Omarchy: 4.0.4-1 - Quickshell: 0.3.1 (Arch Linux package) - bluez: 5.87-2 - Kernel: 7.2.5-3-omarchy (`Linux ... 7.2.5-3-omarchy #1 SMP PREEMPT_DYNAMIC`) - CPU: Intel(R) Core(TM) i5-8350U CPU @ 1.70GHz - GPU: Intel Corporation Kaby Lake-R GT2 [UHD Graphics 620]
### What's wrong?
## What happened
The Bluetooth on/off toggle in the top bar panel (Panel.qml) works to turn
Bluetooth off, but once it's off, clicking the toggle again does nothing —
Bluetooth can never be turned back on from the UI.
## Why
`toggleBluetooth()` in
`shell/plugins/panels/bluetooth/Panel.qml` is:
function toggleBluetooth() {
if (!adapter) return
Quickshell.execDetached(["omarchy-bluetooth-power", adapter.enabled ? "off" : "on"])
}
`omarchy-bluetooth-power off` calls `rfkill block bluetooth`. Once the
adapter is rfkill-blocked, BlueZ removes the controller from D-Bus
entirely (`bluetoothctl list` returns nothing while blocked), so
`Bluetooth.defaultAdapter` in Quickshell becomes `null`. The `if (!adapter)
return` guard then makes `toggleBluetooth()` a silent no-op — there's no
adapter object left to read `.enabled` off of, so it can never issue the
`"on"` command.
The backend script itself is fine: running
`omarchy-bluetooth-power on` / `off` / `toggle` directly from a terminal
works correctly every time. The bug is purely in the QML guard clause
losing the adapter reference it needs to decide which direction to toggle.
## Steps to reproduce
1. Turn Bluetooth off via the bar toggle (or `omarchy-bluetooth-power off`).
2. Open the Bluetooth panel again and click the toggle to turn it back on.
3. Nothing happens — the switch and icon stay in the "off" state.
Confirmed independently of the UI:
- `rfkill block bluetooth` → `bluetoothctl list` prints nothing (adapter
gone from D-Bus).
- Quickshell IPC call `ipc call omarchy.bluetooth toggleBluetooth` while
blocked also does nothing, `rfkill list bluetooth` shows still blocked.
- `omarchy-bluetooth-power on` run directly immediately restores it.
## Expected
Toggling should work in both directions regardless of whether the adapter
is currently enumerable on D-Bus — e.g. fall back to unconditionally
running `omarchy-bluetooth-power toggle`, or track last-known enabled
state separately from `adapter` presence, instead of returning early when
`adapter` is null.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 20:00 UTC