Installation
Two lines in your flake, one option in your configuration:
inputs.offline-banner.url = "github:LarsArtmann/offline-banner";inputs.offline-banner.inputs.nixpkgs.follows = "nixpkgs"; # one nixpkgs in your lock, not two# your NixOS configuration{ imports = [ inputs.offline-banner.nixosModules.default ]; services.offline-banner.enable = true;}Keep the follows line: this flake tracks nixos-unstable (the NixOS-test-gated
channel), and the follows makes sure only one nixpkgs lands in your lock. The
module only needs quickshell from it — no channel-specific behavior.
What starts
Section titled “What starts”The unit is a systemd --user service bound to graphical-session.target — it
starts with your graphical session and creates one banner surface per
connected monitor.
Requirements
Section titled “Requirements”- A Wayland compositor with layer-shell support. Proven on niri; sway and Hyprland are expected but untested here. X11 is out of scope, full stop.
- Quickshell (pulled in automatically as
pkgs.quickshell; override withservices.offline-banner.package).
First start behavior
Section titled “First start behavior”If the session starts with no active monitor (lid closed, headless boot), quickshell runs against Qt’s placeholder screen — no banner surfaces exist, but the probe keeps running, so the journal and state file stay truthful. Surfaces are created per monitor as outputs connect.
Next steps
Section titled “Next steps”- Configuration — every option, live tuning, demo mode
- How it works — the two-leg probe and the debounce
- Observability — journal lines and the state file