Know your network died — on every monitor.
offline-banner is a yellow top-strip for NixOS desktops that appears while your network is offline and slides away the moment it's back. It tells you why ("Network link is down" vs "No internet connection") and how long you've been offline.
A warning, not a page: static yellow, no flashing, no urgency theater. It pushes your bar down instead of covering it — and never asks NetworkManager, which lies on NM-unmanaged uplinks.
# flake.nix
inputs.offline-banner.url = "github:LarsArtmann/offline-banner";
# your NixOS configuration
services.offline-banner.enable = true; See it work end-to-end.
Link drops, the strip slides in, the caption ticks, the link returns — 24 seconds, the real banner behavior.
24 seconds · captured behavior, real module colors · MP4
Built to do one thing well.
One boolean, honestly derived and honestly displayed. No applet framework, no NM lies, no flashing.
Every monitor, one truth
One layer-shell surface per connected output. No screen left quietly lying to you.
Pushes down, never covers
An animated exclusive zone (InOutCubic, 450 ms) that your bar slides beneath — nothing hidden, nothing unreachable.
Debounced, with a memory
Two failed probes (~10 s) before it appears — one lost ping changes nothing. 'last online 4m 12s ago' while it's up.
Sandboxed by contract
A strict systemd sandbox — reads /sys, pings, talks Wayland; nothing else. Asserted line-by-line by a flake check.
Fail visible, never silent
A probe that cannot run counts as a failure. Journal lines and a JSON state file rewritten on every probe.
Tune live, no rebuild
OFFLINE_BANNER_* env vars mirror every option — retune a running system with a drop-in, or force-show with demo mode.
A two-leg probe that doesn't lie.
Never NetworkManager — it reads `none` on NM-unmanaged uplinks while the internet is perfectly reachable. Live-verified on the origin host.
Link leg — kernel carrier
Reads /sys/class/net/*/carrier
Internet leg — one ICMP echo
Reads ping 9.9.9.9
A probe that cannot even run counts as a failure — fail visible, never fail silent
The difference is on screen.
Connectivity loss stops being a mystery and becomes a warning.
One boolean in your config. Every screen tells the truth.
Behavior as shipped in v0.1.0 — see the FEATURES inventory for per-claim evidence.
Who is this for?
Four desktops where a quiet yellow strip earns its place.
NixOS flake users
One input, one option — not a network applet framework.
Multi-monitor desktops
A single bar widget leaves every other screen guessing.
Static-IP / hybrid hosts
NM-unmanaged uplinks make NetworkManager indicators read the wrong answer.
Journal people
journalctl and a state file you can trust more than a tray icon that silently died.
Two lines. That's the whole install.
Free, MIT-licensed, and hardened by contract — the sandbox is asserted by a flake check.