aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
3 daysfix(grub): copy the theme from dist/udt, where the build script writes itDanilo M.1-1/+1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3 daysfeat(grub): render grub-theme-udt's theme.txt and print its root installDanilo M.3-3/+41
theme.txt has no include, so udt-palette substitutes eight roles and the scheme name into the sibling repo's theme.txt.in, conky-style. The accent is the scheme's fixed one; nothing at boot can read the wallpaper. install.sh runs that repo's build as the user and, only when it succeeds, prints the root copy into /boot/grub/themes plus the one-time GRUB_THEME and grub-mkconfig steps. External targets are now skipped whenever their template is missing, not only when the repo is, so a sibling mid-setup cannot break an install. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3 daysfeat(install): track rofi scripts, wire nvim and hypr-theme, merge qt/gtk keysDanilo M.14-58/+374
The rofi menus' launch scripts lived loose in ~/bin, so the themes were tracked and the only things that open them were not. They now live in bin/ and are symlinked under the names hypr-theme's keybindings call. neovim gets a generated colorscheme: catppuccin/nvim with all 26 palette colours overridden from the active scheme, selected by rewriting only the colorscheme line of init.vim. hypr-theme is linked as the whole of ~/.config/hypr, leaving a real directory there alone. The qt-gtk templates were reference copies nothing installed. They now hold theme keys only and ini_merge writes them into the live qt5ct, qt6ct and gtk3 files key by key, keeping every other line; tests/ini-merge.sh checks it. The stale kvantum.kvconfig template is gone, install.sh writes that file. Fresh-machine fixes: settings.ini and ~/.config/gtk-4.0 are created when missing instead of aborting under set -e, and conky is found as a sibling checkout and skipped when absent, in udt-palette as well as install.sh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4 daysdocs(terminal): current-theme.conf is a symlink into kitty-confDanilo M.1-2/+5
The README still called it a real file. It now links into the kitty-conf repository and install.sh writes the theme through it (47dcb72). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 daysfeat(rofi): fullscreen layout for the power menu's confirmationDanilo M.1-42/+10
The yes/no gate was a 500px box, small next to the fullscreen power menu in front of it. confirm.rasi now imports the screenshot menu's layout, two half-monitor buttons on the scrim, and adds the question above them. The glyph size arrives from the calling script with -theme-str, derived from the focused monitor, as it does there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 daysfeat(rofi): fullscreen two-button layout for the screenshot menuDanilo M.2-1/+55
The screenshot menu (Mod+Shift+S) borrowed menu.rasi, a small list box, so its two options were small glyphs in a narrow column. screenshot.rasi gives each option half the monitor on the scrim, centred vertically by spacers because rofi sizes a row by its text. rofi cannot size a font by percentage, so the calling script passes the glyph size with -theme-str, derived from the focused monitor and aware of rotated outputs; the size in the theme is only a fallback. install.sh links the new file with the other layouts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 daysfeat(palette): add a translucent scrim role for fullscreen overlaysDanilo M.13-7/+50
The power menu's ground was a hardcoded rgba(36, 39, 58, 0.88), Macchiato's base, so every other scheme drew its overlay with a Macchiato tint. Each roles file now defines scrim as its own background at 88% alpha, udt-palette emits it into palette.rasi, and powermenu.rasi uses @scrim. scrim is the first translucent palette entry, so udt-accent's QML palette no longer drops the alpha pair: an opaque colour still goes out as #rrggbb, a translucent one as QML's #aarrggbb. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
7 daysfeat(palette): emit peach, mauve and termblue for quickshellDanilo M.2-4/+13
palette.rasi is what udt-accent forwards to quickshell as udt-palette.qml, and the keybind reminder there draws the macropad's orange, purple and blue keycaps. peach and mauve come from the peach and highlight roles every scheme defines; mauve used to be added only to waybar's compat list, which now reads it from ROFI_NAMES instead of defining it twice. The existing "blue" name carries the active-border role, magenta under candy-night, so the terminal's blue goes out as termblue. The first spelling, term_blue, made rofi reject palette.rasi and with it every theme; AGENTS.md now says so next to the selftest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
7 daysdocs(todo): drop the em dashes from TODO-iconsDanilo M.1-2/+2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
7 daysfeat(accent): hand the login avatar to the SDDM themeDanilo M.1-2/+20
The greeter drew the AccountsService icon while hyprlock and the rofi powermenu draw ~/.user-icon.jpg, so one login showed two pictures. udt-accent now writes that path as `avatar`, plus `avatarUser` naming who it belongs to, into the generated theme.conf.user. Both stay empty when the file is missing so the greeter keeps its fallback. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
9 daysfix: theme KDE Frameworks apps off PlasmaDanilo M.4-1/+64
kcalc rendered white under the dark Kvantum theme. Off Plasma, KStyleManager forces Breeze unless kdeglobals names a widgetStyle, and KColorSchemeManager applies BreezeLight unless kdeglobals names a colour scheme; qt6ct never forwards the portal's prefer-dark to Qt. Generate a udt.colors KColorScheme from the Kvantum roles, install it to ~/.local/share/color-schemes/, and point kdeglobals at it and at kvantum-dark. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
9 daysfeat: stage the wallpaper on homepage and notify on completionDanilo M.4-22/+69
bin/udt-homepage replaces install.sh's inline scp. It stages custom.css and the current wallpaper, keeping the wallpaper's own extension, then raises a desktop notification with the root commands that install both and point settings.yaml at the new background. Plain root commands, not sudo: the login user on that host has no sudo rights. udt-accent starts it detached on every run, so it follows a wallpaper change (wallp) as well as a scheme switch (install.sh) without holding either up when the host is unreachable. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
9 daysfix: write the kitty theme through its symlinkDanilo M.1-2/+5
~/.config/kitty/current-theme.conf is now a symlink into the kitty-conf repo. install -Dm644 unlinked it and left a plain file in its place, so the theme is written through the link with cat instead. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
12 daysfix: draw the pcmanfm file view transparentDanilo M.1-1/+1
The key was set by hand through Kvantum Manager, which writes to the installed theme. That file is generated, so the next install.sh would have reverted it without saying anything. Setting it in the template is what makes it survive a scheme switch. On its own this only stops the file list painting its own background; the window's opacity is the compositor's, and is set by a scoped rule in hypr-theme rather than here. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
12 daysfeat: make the Kvantum theme translucent and blurredDanilo M.1-3/+7
Qt windows were opaque while the rest of the desktop was not. This turns on translucent_windows and blurring and lifts reduce_window_opacity from 10 to 15. The keys are global rather than per-scheme placeholders on purpose: every scheme wants the same frame treatment, and making it a role would add three keys to all ten role files to encode a value none of them would disagree about. All ten schemes gain the effect. Worth knowing when this looks wrong: Kvantum only makes the window see-through. The blur behind it is the compositor's, so under a Hyprland without a blur rule covering Qt surfaces these settings read as plain transparency rather than the intended glass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
12 daysfeat: add the candy-night schemeDanilo M.4-5/+161
A tenth scheme, sampled from a desktop shot built on the Candy icon set (https://github.com/EliverLara/candy-icons) over a near-black purple ground. Its hue ramp is deliberately that icon set's folder gradients, so the palette names the same colours the icons are drawn in. The colours are measured from solid regions of the source image rather than taken from a published scheme, which is why the palette names are this file's own. The window body in that image is translucent over the wallpaper and so contributes no value; that is opacity, not a colour. One split is load-bearing: [ui] accent is the true magenta #cc0dbf from the image, while [terminal] magenta is #f00fe0, the same hue lifted to lightness 0.50. Against the scheme's background the original scores 3.79 contrast, under the 4.5 wanted for body text. The accent only ever fills large areas, where it reads fine; terminal magenta is glyphs on a dark ground, where it does not. Every other terminal colour already clears 4.5 (lowest: red at 5.42); ANSI black stays low as it does in every other scheme, since it is never body text. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
13 daysfeat: theme hyprlock from the UDT palette and accentDanilo M.6-12/+114
udt-palette renders the scheme-level palette to templates/hyprlock/hyprlock-palette.conf ($panel, $input_bg, $text, $subtext, $fail); udt-accent writes the wallpaper accent gradient to ~/.cache/udt/hyprlock-border.conf as a hyprlang variable. The hyprlock config sources both, so a scheme switch recolours the lock and a wallpaper change recolours its border. install.sh copies the palette and seeds the border from the committed fallback on a fresh cache. Both selftests cover the new outputs.
2026-09-17fix: rank udt-accent power icons by name order and sizeDanilo M.1-19/+59
find_icon merged all candidate names into one set and ranked across them, so a later alternate name could beat the first name present, and size directories spelled 48x48 or scalable were not parsed. Try the names in order instead: the first with a match wins, and within a name prefer -symbolic, then scalable, then the largest size directory. Update the docstring and selftest comment to match, extend the selftest with size and name-order cases. Add the missing GPL-2.0-only SPDX line.
2026-09-17feat: resolve SDDM power icons from the selected icon themeDanilo M.1-2/+101
The greeter runs as the sddm user and cannot read the login user's dconf, so udt-accent resolves the four FreeDesktop power icon names in the icon theme gsettings reports and bakes absolute paths into the generated sddm-theme.conf. An unresolved key stays empty and the theme falls back to its bundled SVGs.
2026-09-17fix: make the SDDM palette file readable without a chmod raceDanilo M.1-5/+30
2026-09-17feat: print the sddm-theme-udt root install blockDanilo M.1-0/+13
2026-09-17test: make the SDDM selftest independent of SDDM_KEYSDanilo M.1-10/+25
2026-09-17feat: write the SDDM theme palette for sddm-theme-udtDanilo M.1-0/+58
2026-09-17feat: substitute the warning role into the conky templateDanilo M.1-1/+1
2026-09-17added TODO.md to the ignored listDanilo M.1-0/+1
2026-09-17feat: link the conky bin dir, and restart conky silentlyDanilo M.1-1/+14
bin/ holds the weather fetch script that conky.text runs on an execi, so it needs the same symlink treatment as lib/ and widgets/. The restart now goes through hyprctl with `[workspace special:dash silent]`. The dashboard's window rule puts it on that workspace but cannot suppress the switch to it, so before this every reinstall threw the dashboard up over whatever was on screen. Guarded by a check for a running Hyprland, falling back to a plain exec elsewhere, since the workspace rule is the only reason hyprctl is involved. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17fix(gtk): let the appearance drawer own the icon and cursor themesDanilo M.5-2/+54
templates/gtk/index.theme.in named IconTheme and CursorTheme, and it is installed whole-file into ~/.themes/udt/index.theme, which the drawer's Icons tab never rewrites. Every switch there left this file naming the old theme. Both keys are dropped: gsettings wins over a metatheme hint on Wayland, so the drawer's value stands on its own. templates/qt-gtk/{gtk3-settings.ini,qt5ct.conf,qt6ct.conf} were checked and are not a conflict: nothing installs them, and install.sh only seds gtk-theme-name into the live gtk-3.0/settings.ini. Each now says so at the top, so the next reader does not have to establish it again. TODO-icons.md records the audit, including the three consumers outside this repo that resolved icons against a hardcoded theme name. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16fix: name the conky config explicitly on restartDanilo M.1-1/+5
The restart ran a bare `conky -d` and relied on conky's default lookup finding ~/.config/conky/conky.conf. It does resolve to the same file, so this changes nothing today. It is worth pinning anyway: the dashboard's own hypr/README.md tells the user to launch it from autostart.lua as `conky -c ~/.config/conky/conky.conf`, and two launch paths that disagree in form are how they later drift apart in effect. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16fix: keep a temp-dir render inside the temp dirDanilo M.1-1/+14
The conky dashboard target is an absolute path now that it lives in another repo, and `out_dir / absolute` discards out_dir, a documented pathlib behaviour. For the default in-repo render that is correct: the file genuinely belongs at that path. For a render aimed anywhere else it is not. selftest renders every scheme to a temp dir to have rofi parse the result, so the escaping target rewrote the live file each time, silently leaving the user's rendered conky.conf set to whichever scheme was probed last rather than the one they run. Confirmed with a sentinel line: before the fix it vanished after a selftest, after it survives. So an absolute target is honoured only when out_dir is the repo, and rebased under out_dir otherwise. Rebasing unconditionally was the wrong fix and was caught in testing: it sent the real render into a home/danix/... tree inside this repo and stopped updating the live file at all. Verified both directions: selftest leaves the live file alone and creates no stray tree, a real render still updates it, and all nine schemes still pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16refactor: render the conky template from the dashboard repoDanilo M.3-111/+23
The Lua dashboard lives in conky-theme-udt now, so udt-palette renders that repo's conky.conf.in instead of a local template and install.sh links the Lua alongside the config. gen_conky also substitutes critical, for the dashboard's error overlay: conky reports a Lua fault as a blank window, so the dashboard catches it and draws the message instead. The old variables-and-execi template is deleted. Its hardware discovery was not lost; the hwmon glob-by-name approach is carried into lib/data.lua deliberately, since fixed indices drift across kernel reorders. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16docs(gtk): record the derived-tint rule and its ceilingDanilo M.1-2/+33
The README said derived tints were left alone, which was true for an hour and is now wrong for twelve of them. Records which widget each paints, what it became, and why shade() keeps the relationship rather than the upstream value. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16fix(gtk): derive the twelve computed tints from the palette tooDanilo M.3-22/+59
Twelve hexes were shades upstream computed from a palette colour rather than taking one. They were left literal on the same reasoning as the neutral greys, which was wrong: a grey is shading, but each of these paints one widget surface in a colour that is supposed to be the theme's. Under any scheme but Macchiato they stayed Macchiato, including the window close, minimise and maximise hover fills. They are substituted as @ROLE_PCT@ now, the percentage being that shade's brightness relative to its base. shade() scales each channel and clamps, so it keeps the relationship rather than the exact upstream value; closest on the accent family, crudest on the reds, where upstream darkened toward saturation. GTK4 carries ten of the twelve: the selected progress bar and the selection-mode titlebar backdrop are GTK3-only widgets upstream. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16docs(gtk): record GTK as a generated consumerDanilo M.4-10/+91
AGENTS.md listed GTK3/GTK4 among the covered consumers, but nothing generated or installed a theme for it: the claim had been aspirational since the repo started. It now describes what the code does, and says plainly that the old state was a gap rather than a drift. templates/qt-gtk/ documented both Qt and GTK as installed from upstream. Qt still derives from catppuccin/Kvantum and GTK from catppuccin/gtk, but both are generated here now, so the table and the gsettings line say 'udt'. Its tracked gtk3-settings.ini carried the old theme name too, which made the record disagree with the live config it mirrors. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16feat(install): install the generated GTK theme as ~/.themes/udtDanilo M.1-0/+33
One fixed name for every scheme, like Kvantum: the name is referenced by gsettings and by the GTK4 symlink, so a per-scheme name would mean rewriting both on every switch and leaving stale themes behind. Only the two GTK directories are installed. The upstream theme this derives from also ships cinnamon, gnome-shell, metacity, xfwm4 and plank directories, none of which anything here reads. gtk-dark.css is written alongside gtk.css because apps request one or the other depending on the prefer-dark setting; upstream ships them identical. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16test(palette): assert every GTK template placeholder maps to a roleDanilo M.1-0/+13
A placeholder with no matching role renders literally into the CSS and GTK drops the declaration without an error. The stylesheets are 8500 lines each, so nothing would catch it by eye. Verified the assertion fires: renaming @ACCENT@ to @NOSUCHROLE@ in one asset template fails the selftest, naming the file and the placeholder. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16feat(palette): add GTK3 and GTK4 as palette consumersDanilo M.2-0/+47
70 new targets: the two stylesheets, the metatheme descriptor and 67 widget assets. The assets are discovered from disk rather than listed, because they arrive as a set from upstream and a hand-written list would miss one added by a future refresh. Substitution does the _RGB@ form before the bare @ROLE@: @FG@ is a prefix of @FG_RGB@, so the other order would eat the start of the triple placeholder and leave a literal "_RGB@" in the CSS. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16feat(gtk): template the GTK widget assets and metatheme descriptorDanilo M.68-0/+1359
67 SVGs carrying only three palette colours: bg, bg_alt and the accent, the last in 36 of them. The upstream gtk-3.0 and gtk-4.0 asset directories are byte-identical, so one templated set is rendered and copied into both. index.theme names the theme in three places and has no placeholders; it is a template only so it installs through the same code path. Its icon and cursor entries are this desktop's, not upstream's Tela-circle-Dark and Macchiato-cursors, which nothing here uses. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16feat(gtk): template the upstream GTK3 and GTK4 stylesheetsDanilo M.2-0/+17041
Derived from catppuccin/gtk v1.0.3. Substitution is whole-file rather than confined to the @define-color block at the tail: 338 palette hexes in GTK3 and 328 in GTK4 sit in the 8400 lines above it, so a block-scoped template would have left most of the theme macchiato. Both colour forms are replaced, the hex and the bare decimal triple GTK writes inside rgba(). Neutral greys, upstream's derived tints and the Material swatch constants are left exactly as drawn, the same rule the Kvantum SVG follows. #eff1f5 is upstream's foreground, which is Latte text: a near-white it pairs with a Macchiato background. It maps to the fg role so GTK text matches rofi, kitty and waybar rather than being brighter than all of them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16feat(palette): add an rgb_triple helper and the GTK role listDanilo M.1-0/+17
GTK's stylesheets write colours two ways: as a hex, and as a bare decimal triple inside rgba(). The existing rgba() helper emits without spaces and wraps the call itself, so neither form matches what the upstream theme contains; rgb_triple emits just `r, g, b` and the template keeps the call. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16feat(palette): add a peach role for GTK's chart and badge coloursDanilo M.9-0/+45
GTK4 uses an orange for weather chart fills and badge backgrounds, and no role exposed one. Every scheme defines it or --selftest fails, which is what that identical-role-set check is for. Catppuccin schemes name it peach; tokyo-night, dracula and the three material schemes call it orange; nord calls it aurora_orange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16docs: add the GTK palette-consumer implementation planDanilo M.1-0/+831
GTK was listed in AGENTS.md as a covered consumer but nothing generated or installed a theme for it. Every GTK app sat on a hardcoded upstream catppuccin-macchiato-lavender while the rest of the desktop ran tokyo-night. The plan templates the upstream stylesheets and assets the way Kvantum already is, rendering into ~/.themes/udt under one fixed name per scheme. Substitution is whole-file rather than confined to the @define-color block: 338 palette hexes in GTK3 and 328 in GTK4 sit outside it, which was measured before the approach was chosen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16refactor(cache): move the generated files to ~/.cache/udtDanilo M.6-21/+45
They lived in ~/.cache/wal because pywal owned that directory and udt-accent was written alongside a pywal run. Nothing on this desktop invokes pywal any more: the wal binary is unused, and udt-accent imports pywal.backends.colorz as a quantisation library, which writes nothing. Sharing the cache only left the ownership ambiguous. colors.json is the one file that cannot move. pywalfox hardcodes <cache>/wal/colors.json and honours only XDG_CACHE_HOME, which would relocate every cache on the system, so udt-accent writes the real file to ~/.cache/udt and install.sh symlinks the old path at it. ~/.cache/wal now holds that link and nothing else. Consumers repointed here: install.sh, udt-accent, launcher.rasi's @WPAPER@. Outside the repo, wallp, Hyprland's look_and_feel.lua and quickshell's shared/Theme.qml move with it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16fix(conky): install the generated config, do not just restart conkyDanilo M.1-0/+7
install.sh generated templates/conky.conf and restarted conky, but no line ever put the file where conky reads it. git log -S"config/conky" finds nothing, so the install step never existed: ~/.config/conky/conky.conf was a hand-placed copy that happened to match while the scheme was macchiato, and silently desynced when it changed. The restart then made it worse than doing nothing, relaunching conky onto a stale config on every install. Symlinked, like everything else the repo owns, and placed before the restart because conky reads its config once at startup. Safe to link wholesale: the host-specific parts, the mpd host and the tuned ${goto} offsets in conky.text, live in conky.conf.in, so only the colours differ between schemes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16refactor(dunst): drop dunst as a consumer, quickshell presents nowDanilo M.11-160/+35
dunst no longer runs on this desktop. notifyd owns org.freedesktop.Notifications and the quickshell notifications shell draws the balloons, reading the palette from ~/.cache/wal/udt-palette.qml like every other quickshell component. So the whole dunst path was generating a config nothing read. It was also actively wrong. pywal rendered ~/.cache/wal/dunstrc from the installed template, then wal.sh restarted dunst on it while @ACCENT@ was still an unsubstituted placeholder, and udt-accent restarted it a second time after substituting. Two restarts per wallpaper change, the first on a broken config, for a daemon that could not claim the bus name anyway. Removes gen_dunst and its TARGETS entry, write_dunst and DUNSTRC, the install block, templates/dunstrc.in and the gitignore entry. The reload table now lists quickshell, which needs no signal: it watches the generated palette and re-reads it in place. The [state] roles stay. They were never dunst-only; waybar module states and conky warnings use the same four. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15fix(waybar): call the bar's installer instead of copying one fileDanilo M.2-11/+34
The palette reaches the bar as three generated files, not one: the stylesheet, dots.colors for the two dot scripts, which are bash and cannot read @define-color, and two tints of the Slackware mark, which has to contrast with the accent pill at rest and the dark pill on hover. Copying only the stylesheet meant a scheme switch recoloured every pill and left the dots and the mark on the previous scheme. Generating the other two here would have put a second writer on files the bar's own install.sh already writes, drifting apart the moment either side was edited. So this calls that script rather than reimplementing it, with UDT_PALETTE_DONE=1 so it skips the palette run this one has just done. Never fatal, like udt-appthemes: a failure there warns and leaves the bar on its old colours rather than stopping kitty, Kvantum and Sublime from being themed. Verified by switching tokyo-night to nord and back with only this script: the accent, DOT_SUCCESS and both mark tints followed in each direction. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15fix(waybar): drop the per-module colours, and aim at the bar that runsDanilo M.13-161/+72
The bar these roles existed for is gone. The stock one alternated module backgrounds so it read as stripes, and carried a role for each: workspaces, temperature, memory, cpu, time, date, tray, volume, backlight, battery, plus charging. waybar-theme-udt draws every pill on main_bg, and its stylesheets reference seven names in total, none of them a module. So all eleven had no consumer left in any of the nine schemes. They are deleted rather than renamed. Renaming them after the new bar's modules would have invented consumers that do not exist: nothing reads a "mail" or "launcher" colour, because the pills are deliberately uniform. Re-adding one means a stylesheet that actually references it. install.sh was still writing the theme into ~/.config/waybar/, which hyprland no longer launches, so switching scheme recoloured a bar nobody sees while the running one kept its old palette. It writes to ~/.config/waybar-udt/ now, under the fixed name that bar imports, so there is no import to repoint. The stock directory is left exactly as it was, and deliberately gets no new theme: its stylesheets still ask for the per-module names, so writing one there would leave it referencing colours that no longer exist. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15feat(palette): add Sublime Text as a consumerDanilo M.7-6/+583
Two outputs, not one. The colour scheme themes the editor pane and tracks the wallpaper accent; the theme themes the UI chrome and sits on the scheme's fixed accent, because Sublime reads a theme once per window and a moving accent would leave open windows disagreeing with new ones. The colour scheme costs no new roles. Its scopes map onto the sixteen ANSI slots every scheme already declares, so all nine satisfy it and the identical-role-set selftest passes untouched. The theme is an override layered over Material Behave rather than a theme of its own: that theme hardcodes 419 rules of [r,g,b] literals with no variables, so the chrome surfaces are restated and its geometry, icons and animations are inherited. It installs under the name of the theme it overrides, because Sublime merges .sublime-theme files by filename with Packages/User last; under its own name it would never apply. It also has to follow Material Behave's material_theme_contrast_mode block and carry no settings gate, or contrast mode wins. The accent is replaced by matching the variable's current value rather than a placeholder: install.sh copies the file out of the repo, so after the first wallpaper change there is no placeholder left to substitute. udt-accent --selftest now covers that it stays idempotent. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14fix(dunst): make the repo the real source of the dunst configDanilo M.2-1/+11
templates/dunstrc was generated and then went nowhere. dunst reads ~/.cache/wal/dunstrc, which pywal renders from its own template directory, and install.sh never wrote to either. The generated config was therefore dead, and the live one was a hand-maintained copy under ~/.config/wal/templates that this repo did not own, contradicting what AGENTS.md already claimed about dunst being a consumer. install.sh now copies the generated config into both places: the pywal template, so a later `wal` run keeps it, and the cache file, so the install reaches dunst immediately. Both retain @ACCENT@, which udt-accent substitutes in the step just below. Also bump the notification font from Noto Sans 11 to 12 for readability. Width stays at 300, so longer bodies wrap sooner rather than overflowing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LvSnbnNgdZS7YAqioCJhpT
2026-09-12chore(git): untrack the generated dunst, conky and homepage configsDanilo M.4-219/+1
All three are written by udt-palette and rewritten by every install, so each scheme switch showed them as modified. dunstrc and conky.conf were already in .gitignore and tracked anyway, which does nothing: the ignore list is not consulted for files already in the index. homepage's custom.css was missing from the list entirely. Add the missing entry and drop all three from the index. AGENTS.md already documents them as generated and gitignored, so this makes the repo match what it says. Verified all three regenerate from an absent file. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0176XsV85ByN2ee7HseUKcqA
2026-09-12fix(palette): emit waybar's Catppuccin names from rolesDanilo M.1-2/+18
styles/main.css and styles/global.css are edited in place, not generated, and reference nineteen colours by Catppuccin name: @surface1, @text, @crust, @lavender and the rest. gen_waybar emitted only the role layer plus the scheme's own palette names, which happen to include those names under the four Catppuccin schemes and none of the other five. Under tokyo-night every one of those references was undefined, GTK fell back to a default, and the separators in main.css went from a dim alpha(@surface1, 0.4) hairline to full brightness. The workspace underline, the bluetooth, mail and breaktimer state colours and the tooltip border were falling back the same way. Emit them from roles, reusing the ROFI_NAMES table that exists because rofi had this exact bug; mauve is the one name waybar uses that rofi does not, and maps to the highlight role. Verified across all nine schemes: every referenced name now resolves. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0176XsV85ByN2ee7HseUKcqA