aboutsummaryrefslogtreecommitdiffstats

waybar-theme-udt

Two waybar bars for DP-3: pill clusters, icons from the desktop's own icon theme instead of font glyphs, and colours driven by unified-desktop-theme.

DP-3  [📅 Wed 15/09] [🕑 14:32] [●]      [●] [✉ 9] [🔊] [tray] [⏻] [🇮🇹]
DP-1  [1..8]                 [S]                      [ open windows ]

Each bracket is a pill. Pills group into clusters with gaps between them, so the bars read as a few objects rather than one strip. Hover cross-fades background and text over 0.3s; taskbar buttons underline in the accent.

DP-3 is rotated, so a bar there is only 1080px wide, which is why it carries status alone. The desktop itself, the workspaces and the window list, sits on DP-1 where there are 2560px to spread them across. Both bars are one waybar process reading one stylesheet: waybar takes a top-level array of bars, so they cannot drift apart.

This replaces the stock bar. Hyprland starts it from ~/.config/hypr/sections/autostart.lua; ~/.config/waybar/ is left on disk but nothing reads it.

Install

./install.sh

Installs to ~/.config/waybar-udt/ and prints the command to run it. The existing bar at ~/.config/waybar/ is left alone, so DP-1 keeps working while this one is tried on DP-3.

Needs unified-desktop-theme checked out next to this repo: the palette comes from there, and install.sh fails clearly if it is missing.

No glyphs

Every symbol on this bar is a real icon from Material-Black-Plum-Suru, the theme GTK already uses. Icons keep their own colours, matching every other application on the desktop.

waybar offers three ways to draw one, and this bar uses all three because no single one covers everything:

Mechanism Used by Why
icon-theme config key taskbar, tray Native support, nothing else needed.
image module volume, microphone, language Takes a path from a script that resolves the current state.
CSS background-image workspaces, clock, mail, presentation mode, launcher format-icons takes text, not paths, and CSS can swap the image per state.

The consequence worth knowing: the workspace icons live in styles/modules.css, not in the module config. Changing one means editing CSS. The alternative was eight custom modules faking a workspace strip, which would have cost click-to-switch and the active and urgent states.

The language flag went the other way. hyprland/language styles as #language and nothing else, with no per-language class, so the flag could not be picked by a selector; it is an image module driven by wb-lang instead.

wb-icon --selftest checks every icon name the bar asks for, CSS ones included, and install.sh runs it. A missing icon renders as an empty pill with nothing to say why, so it fails while someone is watching instead.

Why the icons do not follow the accent

2466 of the 5169 panel icons in Material-Black-Plum-Suru carry a hardcoded gradient and are not recolourable. That is intended here: icons match the rest of the desktop rather than the bar.

The icons this repo ships are the exception, because the icon theme has none of them. icons/slackware.svg (Simple Icons, CC0) is single-path monochrome, so install.sh tints it from the palette, twice: the launcher pill inverts on hover, so the mark has to invert with it, dark on the accent pill at rest and light on the dark pill hovered. One mark would be invisible in one of the two states, which is what shipped twice before this. Both tints are generated from one source file, so they cannot drift apart in shape.

icons/flag-it.svg and icons/burger.svg (Twemoji, CC-BY 4.0) keep their own colours. The hamburger stands in for the English layout, which is what the stock bar showed: not a flag, and deliberately so.

Layout

Bar Cluster Modules
DP-3 left date, time, VM dots
DP-3 right privacy dots, mail, volume drawer, tray, presentation mode, language
DP-1 left workspaces
DP-1 centre launcher
DP-1 right open windows

No battery, temperature, CPU, memory or backlight: this is a desktop.

The clock is the only text on the bar. An icon cannot say 14:32, so the icon sits before the text, which is what makes the pair match the icon-only pills around it.

Workspaces

WS Icon
1 web-browser 5
2 utilities-terminal 6
3 text-editor 7
4 network-server 8

Workspace 4 uses the same icon as the quickshell drawer's VM tile. Names are generic, so the bar does not lie when the application on a workspace changes.

Colours

This repo holds the bar; udt holds the palette. The palette reaches the bar as three generated files, all written by this repo's install.sh:

File For
styles/theme.css every @name the stylesheets reference
dots.colors the two dot scripts, which are bash and cannot read @define-color
slackware.svg, slackware-light.svg the launcher mark, tinted for each state

All three are generated, so all three have to be rewritten when the scheme changes. udt/install.sh calls this script to do that, rather than copying the stylesheet itself: copying only theme.css recoloured the pills and left the dots and the mark on the previous scheme.

So a scheme switch is still one command, udt/install.sh, and this script is what you run after editing the bar. Running it directly regenerates the palette first; called from udt it skips that, since udt has just done it.

The dot scripts fall back to Macchiato values when dots.colors is missing, so they still run standalone.

Layout of this repo

config.jsonc          entry point; `include`s every module file
modules/              one file per module, by source
styles/               style.css imports the rest in order
icons/                the two icons the icon theme lacks
bin/                  wb-icon, wb-lang, and the two dot scripts

Wildcard include has been broken since waybar v0.14.0, so config.jsonc lists every module file explicitly.

bin/vms_dots.sh and bin/privacy_dots.sh used to live only in ~/bin, in no repository. They are versioned here now and symlinked back; install.sh keeps any real file it finds there as .pre-udt first.

Reload

killall -SIGUSR2 waybar

reload_style_on_change is on, so CSS edits apply by themselves.

Visual changes are measured, not reasoned about:

grim -o DP-3 /tmp/shot.png

License

GPLv2 only. See LICENSE.

Development Approach

This project is developed using AI-assisted tools. Code is generated with the help of AI based on human-provided specifications, design decisions, and iterative feedback.

All contributions are reviewed, tested, and curated by the maintainer before being included in the codebase. AI is used as a productivity and exploration tool, while human oversight remains central to all decisions.

The goal is to combine the flexibility of AI-assisted development with standard open-source practices such as transparency, review, and accountability.