An enhanced network bar widget for Omarchy — everything the built-in network widget does, plus captive-portal detection, per-process bandwidth, and nearby-device discovery.
Part of OMARCHY100 — a 100-plugin suite for Omarchy.
Features • Install • Usage • How it works
Omarchy's built-in network widget is already deep: Wi-Fi scan/connect with known-network memory, enterprise WPA2-EAP auth, band pinning, DNS provider switching, and live IP/gateway/throughput/ping stats. This plugin clones that code as-is (nothing removed, nothing rebuilt) and adds the three things it doesn't have: captive-portal detection, a per-process bandwidth breakdown, and a read-only list of other devices on the network.
It installs as its own independent plugin — both it and the built-in widget can be enabled at once, so you can compare them side by side before deciding which stays on your bar.
Everything the built-in omarchy.network already has:
- Wi-Fi list (known networks first, then others), signal strength, security detection, enterprise WPA2-EAP login, forget/disconnect.
- Ethernet detection, live speed/duplex.
- Ping latency and packet loss to both the router and the open internet.
- Live download/upload rate and session totals.
- IP address and gateway, click-to-copy.
- DNS provider quick-switch (DHCP / Cloudflare / Google / Custom).
- Wi-Fi band pinning (2.4/5/6GHz) when the AP supports more than one.
New in this plugin:
- Captive-portal detection — a plain
generate_204check (the same one Android/ChromeOS use) while connected. Flags "connected, but the internet may need a sign-in" instead of silently looking fine when you're actually behind a hotel/airport/cafe login wall, with a one-click "open in browser" action. Stays completely out of the way on a normal connection — no banner, no extra space taken. - Bandwidth by process — the top processes currently moving TCP data, with live download/upload rates each. TCP-only (same limitation the plugin this idea came from documents for its own version); UDP/QUIC traffic isn't attributed to a process. Hidden entirely when nothing's actively transferring.
- Nearby devices — a read-only list built from the kernel's own ARP/NDP
table (
ip neigh), each row showing IP, a best-effort hostname, and a vendor guess from a small common MAC-prefix table. No active scanning, no port probing, no mDNS — this reads what's already cached, nothing more. Manual refresh button included since device presence isn't polled continuously.
omarchy plugin add https://github.com/AROICE-HQ/omarchy-network.git --enable
Or, to develop/inspect it locally first:
omarchy plugin clone io.github.aryan-techie.network --edit
(swap in this repo's contents, or copy this folder to
~/.config/omarchy/plugins/io.github.aryan-techie.network/ directly and
run omarchy-shell shell rescanPlugins if it doesn't pick up right away).
Everything from the built-in widget works the same way — click the bar pill to open the panel, click a network to connect, click a DNS pill to switch providers, and so on.
The three new sections need no setup:
- A captive-portal banner appears above the DNS section only when one's suspected; click the browser icon on it to open a sign-in page.
- Bandwidth by process appears below the DNS section once at least one process has measurable traffic (needs two samples a few seconds apart to compute a rate, so it may take a moment to show up after opening).
- Nearby devices always shows, with a refresh button in its header.
- Captive portal:
curlprobeshttp://connectivitycheck.gstatic.com/generate_204every 30 seconds while connected. A clean204with no body means real internet; any other response (or a redirect a captive portal would inject) flags the banner. A total failure to respond isn't treated as a portal — that's a connectivity problem, already visible via the existing ping stats. - Bandwidth by process: one
ss -tipsample every 3 seconds, which pairs each TCP socket's owning process with its cumulativebytes_acked/bytes_received. Diffing consecutive samples per process (summed across all of that process's sockets) gives a rate, the same technique the built-in widget already uses for the interface-wide total. - Nearby devices:
ip neigh show(the kernel's live ARP/NDP cache) — no packets are sent to discover anything not already there. One batchedgetent hosts <ip> <ip> ...call resolves hostnames for whichever addresses have reverse DNS; the rest just show their IP. Vendor labels come from a short hardcoded table of common MAC prefixes, not the full IEEE OUI registry. - Settings: none of the three add persisted preferences — captive- portal and bandwidth-by-process are always-on background checks while the panel is open, and nearby devices refreshes on open plus manual refresh.
Runs curl, ss, ip, and getent via Quickshell's Process — all
standard on any Omarchy install, no extra packages required. curl is the
only thing that calls the network, and only ever to the one fixed
captive-portal-check URL above — no data sent, no response body kept
beyond the plain status code.
omarchy plugin remove io.github.aryan-techie.network
This removes the plugin and its bar entry. The built-in network widget (if you still have it enabled) is unaffected.
See CHANGELOG.md.
MIT — see LICENSE.
Aryan Techie (Aryan Jangra)
- 🌐 Website: aryan.aroice.in
- 📧 Email: aryan@aroice.in
- 🐙 GitHub: @Aryan-Techie
- 🏢 Organization: AROICE
Made with ❤️ by AROICE
Clear tools for a clear mind.