1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
# 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](../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 | launcher, volume, microphone, language | Takes a path: either static, or from a script that resolves the current state. |
| CSS `background-image` | workspaces, clock, mail, presentation mode | `format-icons` takes text, not paths. |
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 three 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. It is filled with the
bar's background colour rather than the accent, because it sits on the accent
pill and the accent would render it invisible against itself.
`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 | `document-edit` |
| 2 | `utilities-terminal` | 6 | `applications-graphics` |
| 3 | `text-editor` | 7 | `internet-chat` |
| 4 | `network-server` | 8 | `input-gaming` |
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. `styles/theme.css` is
generated by `udt-palette` and gitignored, like every other generated file in
that project.
The dot scripts are bash and cannot read `@define-color`, so `install.sh`
writes `~/.config/waybar-udt/dots.colors` for them to source. Both fall back to
Macchiato values when it 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.
|