Skip to content

Installation

Two lines in your flake, one option in your configuration:

flake.nix
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.

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.

  • 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 with services.offline-banner.package).

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.