Skip to content
CPT-DawnPublic

About

The lightest beautiful status bar for Wayland. About one wakeup a second and near-zero CPU at idle, hot-reloaded TOML + CSS, built in Rust on GTK4.

Topics

Resources

Contributing

Stars

4 stars

Watchers

0 watching

Forks

Repository files navigation

Zenith

The lightest beautiful status bar for Wayland.

AUR version MIT license Performance budgets

Zenith with the default Midnight Bloom theme floating over a snowy forest wallpaper on Hyprland: the compositor blurs the trees through the smoked-glass bar, with a logo and todo count on the left, a mint glowing clock and the date in the middle, and media, CPU, memory and temperature on the right

Midnight Bloom on Hyprland, with the wallpaper blurred through the glass. A real capture, not a mock-up.

Zenith does nothing unless something on the bar changes. No polling helpers, no animations running in the background, a clock that wakes on the minute. And it still looks like the screenshot above: smoked glass, a mint neon accent, one glowing focal element.

It runs on any compositor with wlr-layer-shell: Hyprland (most tested), Sway, niri, river and friends.

Install

paru -S zenith-bar-bin   # prebuilt; or zenith-bar to build from source

Not on Arch? Build from source: GTK 4.22+, gtk4-layer-shell and Rust.

Then start it from your compositor. On Hyprland, with blur for the glass look:

-- hyprland.lua
hl.on("hyprland.start", function() hl.exec_cmd("zenith-bar") end)
hl.layer_rule({ name = "zenith-bar-blur", match = { namespace = "^zenith-bar$" }, blur = true, ignore_alpha = 0.3 })

Still on hyprland.conf, or on Sway, niri or river? Those snippets are in installation.

Configure

No config file is needed: the default is the bar in the screenshot. To make it yours:

zenith-bar init      # writes ~/.config/zenith-bar/config.toml, every default commented

Every key is optional, so a config only holds what you change:

[bar]
position = "bottom"
monitors = ["DP-1"]

[layout]
left = ["logo"]
center = ["clock"]
right = ["media", "system"]

[theme]
name = "tokyo-night"
accent = "#ff79c6"

Save, and the bar updates. A typo keeps the last good config running; zenith-bar check says exactly what's wrong:

config.toml:2:1: unknown key `heigth` in [bar] (did you mean `height`?)

A published JSON Schema gives your editor autocomplete, and gives AI assistants an exact contract.

Presets and themes

Start from a curated look with one command:

zenith-bar init --preset bloom     # floating glass, glowing clock (the default look)
zenith-bar init --preset minimal   # flush, no glow, no motion: the leanest Zenith
zenith-bar init --preset classic   # the Zenith 1.x layout in Tokyo Night

Themes: Midnight Bloom (default), Tokyo Night, Catppuccin Mocha and Gruvbox Dark. Override the accent, opacity or radius in one line, or restyle anything with your own style.css on top of documented --zb-* variables and zb-* classes.

Gallery

Every shot below is the same bar over the same wallpaper on Hyprland, changed only by config. The glass bars let the compositor's blur through; minimal is flush and opaque on purpose.

Midnight Bloom (default) Midnight Bloom: smoked glass with a mint clock

Tokyo Night: [theme] name = "tokyo-night" Tokyo Night: navy glass with a blue clock

Catppuccin Mocha: [theme] name = "catppuccin-mocha" Catppuccin Mocha: violet-tinted glass with a mauve clock

Gruvbox Dark: [theme] name = "gruvbox-dark" Gruvbox Dark: warm brown glass with a green clock

Your own accent: [theme] accent = "#ff79c6", one line on top of any theme Midnight Bloom with a pink accent on the clock and logo

Preset minimal: flush to the edge, no glow, no motion The minimal preset: a flat, opaque bar touching the screen edge

Preset classic: the Zenith 1.x layout, reborn in Tokyo Night The classic preset: todos on the left, day, time, logo and date in the middle

Where it started: Zenith 1.x

The original bar, for the record. v2 is a clean rewrite of this look, at a fraction of the cost (see Numbers).

Zenith 1.x floating over a teal wallpaper, with media, CPU, memory and temperature Zenith 1.x stuck flush to the top edge

Numbers

Measured by the benchmark harness in a headless Sway (gles2 renderer) on one laptop (Intel Core i7-13700HX, Arch Linux, GTK 4.24.1), median of three runs, 30 s idle window:

Zenith 1.x Zenith 2, bloom Zenith 2, minimal
Idle CPU 17.132 % 0.000 % 0.000 %
Wakeups 196.55 /s 1.23 /s 0.27 /s
Time to first frame 281 ms 194 ms 189 ms
Proportional memory (PSS) 92.9 MiB 58.4 MiB 58.1 MiB

Resident memory is 145.6 MiB for bloom, most of it shared GTK, font and GPU driver mappings, and it moves with the machine's page cache: read performance before quoting it. CI holds every preset to its performance budgets on every code change.

Docs

License

MIT © Swastik Patel

About

The lightest beautiful status bar for Wayland. About one wakeup a second and near-zero CPU at idle, hot-reloaded TOML + CSS, built in Rust on GTK4.

Topics

Resources

Contributing

Stars

4 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages