aboutsummaryrefslogtreecommitdiffstats
path: root/templates
AgeCommit message (Collapse)AuthorFilesLines
2026-09-16docs(gtk): record GTK as a generated consumerDanilo M.3-8/+76
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(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-16refactor(dunst): drop dunst as a consumer, quickshell presents nowDanilo M.1-75/+0
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.1-4/+15
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.1-26/+43
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.2-0/+429
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.1-1/+1
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.3-219/+0
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-11feat(palette): add Obsidian and Typora as consumersDanilo M.1-0/+1868
Both expose a first-class, update-safe theming hook, which is what separates them from the Electron apps that cannot be consumers: Signal, Discord and Spotify ship closed bundles whose only theming route is patching a signed asar that every update reverts. Obsidian gets a CSS snippet rather than a theme, so it layers over whatever theme a vault already uses instead of replacing the user's choice. Enabling it means appending to enabledCssSnippets in each vault's appearance.json, which bin/udt-appthemes does by reading the list and adding to it: rewriting the file would have switched off the layout snippet one vault was already using. Typora's theme is derived from the Dracula theme installed here, whose 350 rules all resolve through :root variables, so only that block is templated and none of the layout is touched. Verified across six vaults, nested ones included: the vault with an existing snippet kept it, a vault with no appearance.json got a valid one, and three consecutive installs leave exactly one udt entry. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015gbjA2bmswN8jyPDKzrvqe
2026-09-11feat(palette): generate the Kvantum theme so Qt apps follow the schemeDanilo M.2-0/+2435
Qt and GTK were the one part of the desktop the palette never reached: Kvantum was pinned to a hand-installed catppuccin-macchiato-lavender directory, so pcmanfm-qt and every other Qt app stayed Macchiato no matter which scheme was selected. A Kvantum theme is a .kvconfig of colours and a .svg of widget artwork with colours baked into the paths, which looked like it needed redrawing. It did not: the SVG carries only 27 distinct colours, 12 of them palette colours and the rest neutral greys that are shading, not theme colour. Both files are now templates with the 12 as placeholders, derived from the theme this desktop was already running. Installs to ~/.config/Kvantum/udt/ under one fixed name for every scheme, so a switch needs no change to kvantum.kvconfig and leaves no stale theme behind. Adds accent_dim and accent_bright roles for Kvantum's hover and pressed states. Verified: no placeholders survive generation, the SVG still parses as XML, and pcmanfm-qt picks up the new colours on restart. Qt reads a theme at startup only, so running apps need restarting; AGENTS.md says so. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015gbjA2bmswN8jyPDKzrvqe
2026-09-11feat(palette): add five more schemes, and parse-check them allDanilo M.3-35/+35
Adds Catppuccin Frappe and Mocha, which share Macchiato's colour names so their role maps are the same mapping against different values, and Material Ocean, Palenight and Darker, which bring their own names and their own maps. Nine schemes now, all dark. Material ships one accent per hue and three greys where the roles want five depths, so each Material palette carries four interpolated shades, marked as not upstream, and its bright_* terminal slots name the same colours as the normal ones. The selftest now renders every scheme to a temp directory and has rofi parse every theme, not just check that roles resolve. Resolving was never the property that mattered: the Tokyo Night breakage resolved fine and still emitted a palette the themes could not use. Verified the check fails when a name is removed. Catppuccin Latte is deliberately absent. It is light, and that is not a role remap: homepage is pinned theme: dark and the generated card overrides target its dark-mode class. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015gbjA2bmswN8jyPDKzrvqe
2026-09-11feat(install): reload running apps after generating configsDanilo M.3-35/+35
install.sh wrote every config and reloaded nothing, so a scheme switch looked half-applied: the files were correct but waybar, kitty, conky and dunst kept drawing the old colours until five commands were run by hand. It now signals waybar, kitty and Hyprland, runs udt-accent (which regenerates the accent and restarts dunst), and restarts conky, which has no hot-reload. Each is guarded on the process actually running, so a missing one is skipped rather than started: verified conky stays stopped when it was not up before. rofi needs nothing, it reads its theme per launch. Qt and GTK apps still need a manual restart and the README says so. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015gbjA2bmswN8jyPDKzrvqe
2026-09-11feat(palette): generate the homepage stylesheet and stage it on installDanilo M.1-0/+42
The dashboard's custom.css was written by hand against Macchiato, so it would have drifted the moment the desktop changed scheme. It is now generated from the same roles as everything else and staged on the host by install.sh. Adds four intermediate grey roles to every scheme. homepage wants a full ten-step ramp where the other consumers want three depths, and without them several steps collapsed onto the same colour, flattening the mid-tones. The scp is deliberately soft: five second timeout, BatchMode, a warning rather than a failure when the host is unreachable, so a laptop away from that network still installs the local theme. It stages to ~/hp-stage only, because /opt/homepage/config is root-owned; install.sh prints the sudo copy to finish. Verified: the generated Macchiato stylesheet reproduces the deployed one colour-for-colour, switching to tokyo-night propagates through to the staged file, and a failing scp leaves install.sh exiting 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015gbjA2bmswN8jyPDKzrvqe
2026-09-11fix(accent): make udt-accent scheme-independentDanilo M.2-17/+17
Two things still assumed Catppuccin. The QML header hardcoded "Catppuccin Macchiato" regardless of the scheme in use, and the selftest asserted that an orange input snaps to a colour named "peach", which is true only under Catppuccin: Tokyo Night calls that hue "orange" and the test failed the moment the scheme changed. The header now names the scheme it generated from. The snapping assertions test the property instead of the spelling: an input must land within 0.6 rad of its own hue, and a border neighbour must sit nearer the accent than its opposite. Both hold under any palette. Verified: --selftest passes under macchiato, tokyo-night, nord and dracula. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015gbjA2bmswN8jyPDKzrvqe
2026-09-11feat(palette): generate every themed config from one schemeDanilo M.4-147/+177
Colours were written down five times: rofi's palette.rasi, the waybar theme, the kitty theme, the conky and dunst templates, and a MACCHIATO dict inside udt-accent. Changing scheme meant finding all five, and they had already drifted: the active waybar theme was Macchiato while theme.css next to it was Mocha, and nothing imported the latter. Now a scheme is two files. palette/<scheme>.conf holds the colours under the scheme's own names, and palette/roles-<scheme>.conf says what each is for. palette/roles.conf is one `scheme =` line selecting the pair. bin/udt-palette renders that into each consumer's syntax and install.sh runs it first. The role map is per-scheme rather than shared because the palettes are genuinely different shapes: Nord has no `base`, Dracula no `surface0`, and forcing Catppuccin's names onto them would have meant either renaming their colours or inventing values. A role names a palette colour with two optional modifiers, `name/75` for alpha and `name*50` for brightness. The second exists because GTK's shade() has no palette name to point at. Ships macchiato, tokyo-night, nord and dracula. --selftest resolves every role in every scheme and asserts they define the same set, so a scheme that cannot satisfy a consumer fails at install rather than when someone switches to it. Verified against the live configs: all 46 waybar colours resolve identically to the previously active theme including its alpha() and shade() derivations, the kitty theme is colour-for-colour identical, and the rofi palette has the same 26 values. Generated files are gitignored; switching scheme and switching back reproduces the originals. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015gbjA2bmswN8jyPDKzrvqe
2026-09-11fix: bump kitty font size for Inconsolata's narrower faceDanilo M.1-3/+3
13.0 to 15.0, the same correction waybar needed after the same font change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G6aeE37K4GHBsaM51yLTTq
2026-09-11feat: use Inconsolata for kitty as wellDanilo M.1-3/+10
Brings the terminal onto the same monospace font as the rest of the desktop. The live setting is inside the BEGIN_KITTY_FONTS block managed by kitty's font kitten; a stale commented-out font_family line above it was removed, since it looked authoritative but had no effect. Size left at 13.0. Inconsolata reads slightly smaller than CommitMono at the same nominal size, the same difference that needed a 2px bump in waybar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G6aeE37K4GHBsaM51yLTTq
2026-09-11feat: move kitty and neovim to Catppuccin MacchiatoDanilo M.2-0/+127
These were deliberately left until last: wallpaper-derived colours in kitty's ANSI slots were the original readability problem, since nothing in a wallpaper guarantees color4 stays legible against color0. A hand-tuned palette is safe for the opposite reason, so the move is onto Macchiato rather than back onto pywal. current-theme.conf was a symlink into the wal cache and is now a real file. wal.sh no longer recreates that symlink, which would have silently reverted the theme on the next wallpaper change. Neovim read the same pywal output via colorscheme pywal and now uses the catppuccin/nvim plugin. Its airline theme was base16_dracula, matching nothing; it is now base16, which derives from the active colorscheme. Measured before committing: every ANSI slot clears 4.5:1 against its own background in both themes except color0, which is the near-background slot in both. color8, used by some colourschemes for comments, does drop from 3.83:1 to 2.38:1, but the Catppuccin neovim plugin sets its own comment colour rather than using ANSI 8, confirmed on screen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G6aeE37K4GHBsaM51yLTTq
2026-09-11fix: bump waybar font sizes for Inconsolata's narrower faceDanilo M.2-4/+8
Inconsolata renders smaller than Commit Mono at the same nominal size, so matching the number made the bar read smaller than before. Every size in fonts.css goes up by 2px. Both ends of the bar still fit without truncation. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G6aeE37K4GHBsaM51yLTTq
2026-09-11feat: bring waybar's font in line with the rest of the desktopDanilo M.3-0/+116
Waybar was already Catppuccin Macchiato with a lavender accent, using the same hex values as the rofi palette, so only the font needed changing: it asked for Commit Mono Nerd Font, a third family outside the Noto Sans and Inconsolata pair. Monospace is kept deliberately, since a status bar is dense and numeric and proportional text makes values jitter as they update. Also records that the CSS load order in waybar's own CLAUDE.md is stale. The modules-*.css and states.css files it documents are not imported by anything; style.css pulls in styles/main.css instead. One of the dead files holds a font-family declaration that looks authoritative but has no effect. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G6aeE37K4GHBsaM51yLTTq
2026-09-11feat: unify Qt5, Qt6 and GTK on Macchiato with a lavender accentDanilo M.6-0/+98
Installs the upstream Catppuccin Kvantum and GTK themes and points all four toolkits at them. Qt5 and Qt6 previously disagreed with each other as well as with the desktop: qt5ct carried a hand-rolled grey/purple palette and qt6ct used the stock darker.conf. Both now take their palette from Kvantum. Two things were not where they looked. GTK3's theme comes from gsettings on Wayland, not settings.ini, and gsettings was pinned to Breeze, which silently overrode the file; its icon-theme was likewise on breeze-dark while settings.ini said Material-Black-Plum-Suru. GTK4 ignores gtk-theme-name entirely, so its stylesheet is symlinked into ~/.config/gtk-4.0 instead. The accent is fixed rather than wallpaper-tracking, since Qt and GTK apps only reread a theme on restart. Lavender also replaces mauve as udt-accent's fallback so everything without a wallpaper-derived accent agrees. catppuccin/gtk is archived upstream. v1.0.3 works today but will not track future libadwaita changes; it is removable by deleting the directory. The tracked qt5ct/qt6ct files carry only the theme-relevant keys: the live files also hold an ignored_applications list of local paths. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G6aeE37K4GHBsaM51yLTTq
2026-09-11feat: repalette conky to MacchiatoDanilo M.1-0/+102
Only the seven colour definitions in conky.config changed. The conky.text block is byte-identical: its layout is column-based on absolute ${goto} pixel offsets, so touching label widths or glyphs would need every goto on that line re-tuned. Mapping keeps each colour's role and its light/dark relationship, so the widget reads the same: headings and glyphs to lavender, field labels to teal, accent glyphs to mauve, separators to surface1, values to text. Conky does not hot-reload, so this needs a restart to take effect. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G6aeE37K4GHBsaM51yLTTq
2026-09-11feat: theme dunst in Macchiato with a wallpaper-driven accent frameDanilo M.1-0/+75
Notifications previously drew their colours from the pywal preset, so they were pure black on white and did not match anything else. Structural colours are now fixed Macchiato, with the accent as the frame on normal urgency, a muted surface frame on low, and Macchiato red on critical. Font moves to Noto Sans to match the rest of the desktop. udt-accent substitutes the accent after pywal renders the template, then restarts dunst so it rereads the file. It restarts rather than just killing: nothing else respawns dunst, and a dead dunst means no notifications at all. Also fixes a dangling reference: the template pointed dunst's dmenu at darknix/main.rasi, a theme that no longer exists. The template is tracked here as templates/dunstrc; the live copy is ~/.config/wal/templates/dunstrc. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G6aeE37K4GHBsaM51yLTTq