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-4874GitHub issuePublicReceived

Network panel shows fake "Ethernet" instead of Wi-Fi when a VPN/tunnel owns the default route (hides Wi-Fi QR share button)

Reported by sal-he · filed Sep 4, 2026Closed upstream on 2026-09-21 by bjarneo via an automated message, as a duplicate of #7438 (R-1669). GitHub close reason: completed.

Received and recorded verbatim. Nothing has been checked yet.

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?
Not yet mapped to any requirement or component.
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?
Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.

Original report

Network panel shows fake "Ethernet" instead of Wi-Fi when a VPN/tunnel owns the default route (hides Wi-Fi QR share button)revision 1 · captured 2026-10-04 12:10 UTC via poll

Summary

omarchy-network-status (and therefore the Network bar panel) misclassifies a VPN/tunnel interface as a wired Ethernet connection whenever that tunnel has installed itself as the default route for internet-bound traffic — even when the only real network device is Wi-Fi. This hides Wi-Fi-only UI, e.g. the panel's "Show QR code" Wi-Fi-sharing button, which only renders when info.type === "wifi".

Steps to reproduce

  1. Connect only to Wi-Fi (no Ethernet cable/adapter attached).
  2. Enable a VPN/tunnel client that takes over the default route for the internet probe target, e.g. Cloudflare WARP (warp-cli connect) or similar.
  3. Open the Network panel from the bar.

Expected

The panel shows the Wi-Fi network as the primary connection (SSID, signal, and the "Show QR code" share button).

Actual

The panel shows a fabricated "Ethernet (10gbit)" hero instead, with no way to reach the Wi-Fi QR-share button from the panel.

Root cause

omarchy-network-status --verbose (and the non-verbose print_status) picks the "primary" device via:

device=$(ip route get "$internet_probe" 2>/dev/null | awk '{ for (i = 1; i <= NF; i++) if ($i == "dev") { print $(i + 1); exit } }')

When a VPN client (Cloudflare WARP, in this case) is active, it installs itself as the route for that probe, so $device becomes the VPN's virtual interface (e.g. CloudflareWARP) instead of the real Wi-Fi adapter.

The script then classifies any non-wireless device as Ethernet:

if [[ ! -d /sys/class/net/$device/wireless ]]; then
  printf 'ethernet\t%s\t\t\n' "$device"
  return
fi

A tunnel interface has no wireless sysfs entry either, so it falls through to the ethernet branch. It then reads /sys/class/net/$device/speed, and virtual tunnel drivers commonly report a fixed placeholder (10000), which is where the bogus "10gbit" comes from.

Reproduced on this machine:

$ ip route get 1.1.1.1
1.1.1.1 dev CloudflareWARP table 65743 src 172.16.0.2 uid 1000

$ ls /sys/class/net/CloudflareWARP/wireless
ls: cannot access '/sys/class/net/CloudflareWARP/wireless': No such file or directory

$ cat /sys/class/net/CloudflareWARP/speed
10000

$ nmcli -t -f DEVICE,TYPE,STATE device status
wlp3s0:wifi:connected:Blue
CloudflareWARP:tun:connected (externally):CloudflareWARP
tailscale0:tun:connected (externally):tailscale0

Only wlp3s0 is a real network device; CloudflareWARP and tailscale0 are virtual tunnels, but the script has no way to tell them apart from a genuine wired NIC.

Suggested fix

Real network hardware exposes a device symlink to its backing PCI/USB device; virtual tunnel interfaces do not:

$ ls -la /sys/class/net/wlp3s0/device
lrwxrwxrwx 1 root root 0 ... /sys/class/net/wlp3s0/device -> ../../../0000:03:00.0

$ ls /sys/class/net/CloudflareWARP/device
ls: cannot access '/sys/class/net/CloudflareWARP/device': No such file or directory

Gating the ethernet classification on [[ -e /sys/class/net/$device/device ]] (or otherwise excluding devices without that symlink) would fix both print_status and print_verbose without needing to special-case specific VPN products.

The Network panel's bar-tray icon logic (Panel.qml's kind property, based on Quickshell's native NetworkManager DeviceType.Wired) does not have this bug — only the omarchy-network-status shell script's route-based detection does — which is why the tray icon correctly shows Wi-Fi while the opened panel's hero incorrectly shows Ethernet.

System

  • Omarchy: 4.0.2-1
  • Kernel: 7.1.9-arch1-2
  • NetworkManager: 1.58.1-1
  • Trigger: Cloudflare WARP client active and set as default route (also reproducible with Tailscale in a similar "exit node"/default-route configuration, though not tested directly)
View raw text
## Summary

`omarchy-network-status` (and therefore the Network bar panel) misclassifies a VPN/tunnel interface as a wired Ethernet connection whenever that tunnel has installed itself as the default route for internet-bound traffic — even when the only real network device is Wi-Fi. This hides Wi-Fi-only UI, e.g. the panel's "Show QR code" Wi-Fi-sharing button, which only renders when `info.type === "wifi"`.

## Steps to reproduce

1. Connect only to Wi-Fi (no Ethernet cable/adapter attached).
2. Enable a VPN/tunnel client that takes over the default route for the internet probe target, e.g. Cloudflare WARP (`warp-cli connect`) or similar.
3. Open the Network panel from the bar.

## Expected

The panel shows the Wi-Fi network as the primary connection (SSID, signal, and the "Show QR code" share button).

## Actual

The panel shows a fabricated "Ethernet (10gbit)" hero instead, with no way to reach the Wi-Fi QR-share button from the panel.

## Root cause

`omarchy-network-status --verbose` (and the non-verbose `print_status`) picks the "primary" device via:

```bash
device=$(ip route get "$internet_probe" 2>/dev/null | awk '{ for (i = 1; i <= NF; i++) if ($i == "dev") { print $(i + 1); exit } }')
```

When a VPN client (Cloudflare WARP, in this case) is active, it installs itself as the route for that probe, so `$device` becomes the VPN's virtual interface (e.g. `CloudflareWARP`) instead of the real Wi-Fi adapter.

The script then classifies any non-wireless device as Ethernet:

```bash
if [[ ! -d /sys/class/net/$device/wireless ]]; then
  printf 'ethernet\t%s\t\t\n' "$device"
  return
fi
```

A tunnel interface has no `wireless` sysfs entry either, so it falls through to the `ethernet` branch. It then reads `/sys/class/net/$device/speed`, and virtual tunnel drivers commonly report a fixed placeholder (`10000`), which is where the bogus "10gbit" comes from.

Reproduced on this machine:

```
$ ip route get 1.1.1.1
1.1.1.1 dev CloudflareWARP table 65743 src 172.16.0.2 uid 1000

$ ls /sys/class/net/CloudflareWARP/wireless
ls: cannot access '/sys/class/net/CloudflareWARP/wireless': No such file or directory

$ cat /sys/class/net/CloudflareWARP/speed
10000

$ nmcli -t -f DEVICE,TYPE,STATE device status
wlp3s0:wifi:connected:Blue
CloudflareWARP:tun:connected (externally):CloudflareWARP
tailscale0:tun:connected (externally):tailscale0
```

Only `wlp3s0` is a real network device; `CloudflareWARP` and `tailscale0` are virtual tunnels, but the script has no way to tell them apart from a genuine wired NIC.

## Suggested fix

Real network hardware exposes a `device` symlink to its backing PCI/USB device; virtual tunnel interfaces do not:

```
$ ls -la /sys/class/net/wlp3s0/device
lrwxrwxrwx 1 root root 0 ... /sys/class/net/wlp3s0/device -> ../../../0000:03:00.0

$ ls /sys/class/net/CloudflareWARP/device
ls: cannot access '/sys/class/net/CloudflareWARP/device': No such file or directory
```

Gating the `ethernet` classification on `[[ -e /sys/class/net/$device/device ]]` (or otherwise excluding devices without that symlink) would fix both `print_status` and `print_verbose` without needing to special-case specific VPN products.

The Network panel's bar-tray icon logic (`Panel.qml`'s `kind` property, based on Quickshell's native NetworkManager `DeviceType.Wired`) does not have this bug — only the `omarchy-network-status` shell script's route-based detection does — which is why the tray icon correctly shows Wi-Fi while the opened panel's hero incorrectly shows Ethernet.

## System

- Omarchy: 4.0.2-1
- Kernel: 7.1.9-arch1-2
- NetworkManager: 1.58.1-1
- Trigger: Cloudflare WARP client active and set as default route (also reproducible with Tailscale in a similar "exit node"/default-route configuration, though not tested directly)

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.

No decision has been recorded yet.