unified-desktop-theme
A single visual identity for a Hyprland desktop: Catppuccin Macchiato as the fixed base, Noto Sans for UI text, Inconsolata Nerd Font Mono for monospace.
The accent color follows the current wallpaper, but is always snapped to a real Macchiato accent, so it can never render as unreadable.
Phase 1 covers rofi. Later phases extend the same palette to waybar, conky, hyprland and quickshell.
Quickshell reads the palette rather than restating it: udt-accent writes
~/.cache/udt/udt-palette.qml from rofi/udt/palette.rasi, and the
components in the quickshell repo watch that file, so editing the palette
here recolours them without a restart.
Layout
rofi/udt/ the theme files
bin/udt-accent wallpaper accent extractor
Both are installed by symlink, so the repo holds the canonical copies:
./install.sh
Design
See docs/superpowers/specs/ for the design spec and the reasoning behind
each decision, including why accent extraction is deliberately isolated from
the pywal cache.
License
GPLv2 only. See LICENSE.
Changing the colour scheme
Edit one line in ~/.config/udt/roles.conf:
scheme = macchiato
and run ./install.sh. That file is yours, not the repo's: install.sh
creates it on a first run and never overwrites it, so switching scheme leaves
the working tree clean.
install.sh reloads whatever is running (waybar, kitty, Hyprland, conky), so
the switch is visible immediately. Qt and GTK apps only reread a theme on
startup, so those need restarting by hand. Ships with macchiato,
tokyo-night, nord and dracula; rofi, conky, waybar, kitty, Firefox and
quickshell all follow.
A scheme is two files: palette/<name>.conf for the colours under the
scheme's own names, and palette/roles-<name>.conf saying what each is for.
Nothing else needs touching, and bin/udt-palette --selftest checks that a
scheme can satisfy every role before you switch to it.
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.
