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-1704GitHub issuePublicDecided· Out of scope

Network panel reports NOT CONNECTED with live IP, ping and throughput after NetworkManager restarts

Reported by skoom21 · filed Aug 17, 2026 · open at source

Decided: Out of scope — decided by agents · verified 4 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

Network panel reports NOT CONNECTED with live IP, ping and throughput after NetworkManager restartsrevision 1 · captured 2026-09-28 21:29 UTC via poll

System details

Dell Latitude E5470 · Intel Core i5-6440HQ · Omarchy 4.0.0-1 · Kernel 7.1.8-arch1-3 · Hyprland 0.56.2 · quickshell-git 0.3.0.r20.g28771c7-1

What's wrong?

When NetworkManager.service restarts while the Omarchy shell is already running, the network panel gets stuck reporting NOT CONNECTED with a crossed-out Wi-Fi icon — while simultaneously displaying a live IP address, gateway, ping and throughput for the connection it claims does not exist.

The panel showed StormFiber-AD40 / NOT CONNECTED alongside Ping 7.7 ms, IP Address 192.168.1.5, Gateway 192.168.1.1, Downloaded 1.5 MB, Uploaded 8.3 MB. Meanwhile the connection was entirely healthy:

$ nmcli -t -f DEVICE,STATE,CONNECTION device | grep wlp2s0
wlp2s0:connected:StormFiber-AD40

$ busctl --system get-property org.freedesktop.NetworkManager \
    /org/freedesktop/NetworkManager/Devices/4 \
    org.freedesktop.NetworkManager.Device State
u 100        # NM_DEVICE_STATE_ACTIVATED

The state does not self-correct. It persisted until the shell was restarted.

Root cause

plugins/panels/network/Panel.qml derives its display from two independent sources, and only one of them survives a NetworkManager restart:

  1. D-Bus, via `Quickshell.Networking` — drives the connected state:
   readonly property var networkDevices: Networking.devices ? Networking.devices.values : []
   readonly property var wifiDevice: findDevice(DeviceType.Wifi)
   readonly property var connectedWifiNetwork: findConnectedWifiNetwork()

with

   if (wiredDevice && wiredDevice.connected) return "ethernet"
   if (connectedWifiNetwork) return "wifi"
   return "disconnected"
  1. A polled shell command — drives the statistics. omarchy-network-status --verbose is sampled roughly every 1.5s via detailsPoll and reads ip / /sys / iw, never touching D-Bus.

When NetworkManager restarts, its bus name changes owner. The Networking binding does not recover, so connectedWifiNetwork stays null and the panel renders disconnected. The polled command is unaffected and keeps reporting the truth, producing the contradiction on screen. The SSID in the header also comes from the polled side, which is why the network is named correctly while being labelled disconnected.

Steps to reproduce

  1. Log in and let the Omarchy shell start.
  2. Connect to Wi-Fi.
  3. sudo systemctl restart NetworkManager (this also happens on its own during package updates).
  4. Wait for Wi-Fi to reconnect and confirm with nmcli device status that it is connected.
  5. Open the network panel → header reads NOT CONNECTED with a crossed-out icon, while IP, gateway, ping and throughput are populated and updating.

Why this matters

NetworkManager.service is restarted by ordinary package upgrades, so any user who updates while logged in can land in this state. It reads as "my Wi-Fi is broken" when nothing is wrong, and the only way out is a shell restart, which is not discoverable.

Workaround

omarchy restart shell

Notes

The fix may belong in Quickshell.Networking rather than here, if it is not tracking NameOwnerChanged for org.freedesktop.NetworkManager. If that turns out to be upstream, the panel could still defend against it — for example by treating "polled details report an active L3 connection while the D-Bus view reports none" as a signal to re-query, rather than rendering the contradiction.

View raw text
### System details

Dell Latitude E5470 · Intel Core i5-6440HQ · Omarchy 4.0.0-1 · Kernel 7.1.8-arch1-3 · Hyprland 0.56.2 · quickshell-git 0.3.0.r20.g28771c7-1

### What's wrong?

When `NetworkManager.service` restarts while the Omarchy shell is already running, the network panel gets stuck reporting **NOT CONNECTED** with a crossed-out Wi-Fi icon — while simultaneously displaying a live IP address, gateway, ping and throughput for the connection it claims does not exist.

The panel showed `StormFiber-AD40` / `NOT CONNECTED` alongside `Ping 7.7 ms`, `IP Address 192.168.1.5`, `Gateway 192.168.1.1`, `Downloaded 1.5 MB`, `Uploaded 8.3 MB`. Meanwhile the connection was entirely healthy:

```
$ nmcli -t -f DEVICE,STATE,CONNECTION device | grep wlp2s0
wlp2s0:connected:StormFiber-AD40

$ busctl --system get-property org.freedesktop.NetworkManager \
    /org/freedesktop/NetworkManager/Devices/4 \
    org.freedesktop.NetworkManager.Device State
u 100        # NM_DEVICE_STATE_ACTIVATED
```

The state does not self-correct. It persisted until the shell was restarted.

### Root cause

`plugins/panels/network/Panel.qml` derives its display from two independent sources, and only one of them survives a NetworkManager restart:

1. **D-Bus, via `Quickshell.Networking`** — drives the connected state:
   ```qml
   readonly property var networkDevices: Networking.devices ? Networking.devices.values : []
   readonly property var wifiDevice: findDevice(DeviceType.Wifi)
   readonly property var connectedWifiNetwork: findConnectedWifiNetwork()
   ```
   with
   ```qml
   if (wiredDevice && wiredDevice.connected) return "ethernet"
   if (connectedWifiNetwork) return "wifi"
   return "disconnected"
   ```

2. **A polled shell command** — drives the statistics. `omarchy-network-status --verbose` is sampled roughly every 1.5s via `detailsPoll` and reads `ip` / `/sys` / `iw`, never touching D-Bus.

When NetworkManager restarts, its bus name changes owner. The `Networking` binding does not recover, so `connectedWifiNetwork` stays null and the panel renders `disconnected`. The polled command is unaffected and keeps reporting the truth, producing the contradiction on screen. The SSID in the header also comes from the polled side, which is why the network is named correctly while being labelled disconnected.

### Steps to reproduce

1. Log in and let the Omarchy shell start.
2. Connect to Wi-Fi.
3. `sudo systemctl restart NetworkManager` (this also happens on its own during package updates).
4. Wait for Wi-Fi to reconnect and confirm with `nmcli device status` that it is `connected`.
5. Open the network panel → header reads **NOT CONNECTED** with a crossed-out icon, while IP, gateway, ping and throughput are populated and updating.

### Why this matters

`NetworkManager.service` is restarted by ordinary package upgrades, so any user who updates while logged in can land in this state. It reads as "my Wi-Fi is broken" when nothing is wrong, and the only way out is a shell restart, which is not discoverable.

### Workaround

```bash
omarchy restart shell
```

### Notes

The fix may belong in `Quickshell.Networking` rather than here, if it is not tracking `NameOwnerChanged` for `org.freedesktop.NetworkManager`. If that turns out to be upstream, the panel could still defend against it — for example by treating "polled details report an active L3 connection while the D-Bus view reports none" as a signal to re-query, rather than rendering the contradiction.

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 04:38 UTC