aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
5 daysfeat(ledstrip): breathe the accent while suspendedDanilo M.2-9/+37
`udt-ledstrip sleep` plays the accent alone as the strip's breathing scene, desaturated to 60 and at half brightness. Its DP 51 layout, mode 0x03 with flags 0, was read off the strip's status push while the Tuya app set a breathing scene; the selftest checks it against that capture. AGENTS.md also records why poweroff never reached the strip: rc.6 stops networking before it signals Hyprland, so the hyprland.shutdown handler fires with no route. The power menu now switches the strip off before loginctl instead. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 daysfeat(ledstrip): switch the strip on and off with the sessionDanilo M.2-8/+42
`udt-ledstrip on|off` switches the strip, replaying the gradient when it comes on; with no argument it still only replays the gradient, so a wallpaper change leaves a strip the user switched off alone. The last address is cached in ~/.cache/udt/ledstrip.json, because `off` runs as the session ends and cannot wait up to 20 s for a broadcast. From the cache a switch takes under half a second; discovery is the fallback when the cached address fails. hypr-theme calls it at login, on Hyprland's shutdown event, and around suspend from hypridle. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 daysfeat(accent): play the border gradient on a Tuya LED stripDanilo M.4-3/+195
udt-ledstrip sends the window border's three hues to every Tuya addressable strip in the tinytuya device list as a flow scene (DP 51, dreamlight_scene_mode), so the strip moves with the wallpaper accent. Fully local: it speaks protocol 3.5 itself with cryptography, finds the strip by its UDP discovery broadcast, and reads the local key from ~/.config/udt/tuya/devices.json, written once by tinytuya's wizard. DP 51's layout is undocumented and missing from the cloud spec; it was read off the strip's status pushes while the app set scenes. Saturation is floored at full because LEDs render pastel accents as white. udt-accent starts it detached next to udt-keyboard; install.sh links it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 daysfix(accent): survive a Firefox write failure, reject bad argumentsDanilo M.1-17/+49
write_firefox reports a PIL or disk error instead of raising, so main() still updates GRUB and the homepage and starts the helpers; a selftest case covers a real image and a broken one under a temporary HOME. An unknown option or a missing file was taken as the wallpaper and its path written into SDDM's config and colors.json. Now --help prints the usage and anything else that is not an existing file exits 2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 daysfeat(rofi): fullscreen icon-grid launcherDanilo M.1-32/+77
launcher.rasi becomes a fullscreen layer: the wallpaper dimmed by the scrim, an 800px search bar, a tab row for the Apps, Run and Folders modes, and a 10x5 grid of 64px icons with the name below, in a centred 1500px column. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 dayschore: rofi menu scripts move to rofi-scriptsDanilo M.2-11/+10
udt-powermenu.sh, udt-launcher.sh, qar-scrotmenu.sh and blackpearl-sshmenu.sh now live in the sibling rofi-scripts repo with the other rofi scripts, which links them into ~/bin itself. This repo keeps their layouts. install.sh generates header.rasi alongside launcher.rasi. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 daysfeat(rofi): shared wallpaper header for the searchable layoutsDanilo M.8-210/+73
The ssh menu's banner, title plate and plated search bar move into header.rasi, which ssh.rasi, list.rasi and grid.rasi import, so every searchable menu gets the same header with its -p as the title. The banner's @WPAPER@ now lives in header.rasi, so that file is generated and ssh.rasi is linked again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 daysfeat(rofi): wallpaper banner and placeholder on the ssh headerDanilo M.3-15/+54
The header and search bar share the wallpaper banner the Alt+F2 runner uses, each on a plate so it stays legible over any image, and the entry gets a placeholder. ssh.rasi now carries the @WPAPER@ placeholder, so install.sh generates it like launcher.rasi instead of linking it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 daysfeat(rofi): screenshot menu header, as in the ssh menuDanilo M.2-2/+9
The prompt is lifted onto the card as a left-aligned "Screenshot:" header with a camera glyph. confirm.rasi sets its own card children, so the power menu's confirm step keeps its centred question and no header. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 daysfeat(rofi): ssh menu as a grid of host cardsDanilo M.4-3/+83
rofi's ssh mode shows the alias only. blackpearl-sshmenu.sh now reads ~/.ssh/config itself and feeds dmenu two-line cards: the alias, then "user · address" with the user only where the config sets one. ssh.rasi lays them out 4x3 under an "SSH:" header lifted out of the inputbar. The script moves into bin/ under the name hypr-theme's keybinding calls, and install.sh links it and the theme like the other menus. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 daysfix(rofi): power menu wraps on Left and RightDanilo M.1-1/+3
The listview cycles along its flow. With the default vertical flow, Left and Right move between columns and stop at the ends. Horizontal flow, as the confirm and screenshot menus already use, makes them step through the row and wrap. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 daysfix(rofi): compact confirm and screenshot cards, centre glyphsDanilo M.5-46/+53
The confirm and screenshot menus split the monitor into two half-screen buttons with a glyph sized from the monitor height. They are now a fixed 368px card centred on the scrim, two 150px buttons at 72pt, so the scripts no longer compute a glyph size. Glyphs in all three menus sat right of centre: common.rasi's element spacing still reserved a gap for the hidden icon. Elements now hold element-text only. The power menu's greeting ignored horizontal-align, so spacers either side centre it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6 daysudt-steps pokes the quickshell desktop shellDanilo M.3-3/+5
quickshell's appearance shell was merged into its desktop process, whose settings window now holds the appearance pages and the steps window. The appearance IPC target kept its verbs there, so only the path changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07chore: waybar is gone, stop theming and reloading itDanilo M.3-37/+9
The quickshell island replaced both waybar bars and reads the palette itself, so install.sh no longer runs waybar-theme-udt's installer or signals a bar that is not running. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07feat(firefox): blur the new tab backgroundDanilo M.2-8/+21
The new tab showed the wallpaper verbatim, so it read as a hole onto the desktop. write_firefox now scales the wallpaper to 1920 wide and applies a Gaussian blur (FIREFOX_BLUR, radius 24) with PIL before saving it into FF Ultima's darknix.png slot. Saving through PIL also makes the file a real PNG whatever the wallpaper's format. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07feat(accent): hand SDDM each screen's wallpaperDanilo M.1-2/+51
Write background_<output>= into the SDDM theme config for every screen wallp manages, read from wallp.conf's OUTPUT_H/OUTPUT_V and the saved wall_h/wall_v. The greeter shows each monitor its own wallpaper instead of the horizontal one on both. Missing wallp state writes no keys, so the greeter falls back to the shared background. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05fix(firefox): copy the wallpaper, Firefox won't follow the linkDanilo M.3-13/+23
The darknix.png symlink out of the profile left the new tab blank, even after a restart: Firefox's sandbox does not follow it. udt-accent now copies the wallpaper over the slot on every change instead, removing any leftover link first so the copy cannot write through it into the wallpaper. install.sh no longer makes the link. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05feat(firefox): new tab background follows the wallpaperDanilo M.2-0/+16
FF Ultima selects the new tab image from a fixed list by pref. Its darknix.png slot is now a link to ~/.cache/udt/wpaper, so selecting it once in about:config makes the new tab show the current wallpaper, and Firefox picks up a change without a restart. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05feat(accent): GRUB and homepage follow the wallpaper accentDanilo M.3-26/+78
Both sat on the scheme's fixed accent, on the grounds that nothing at boot and nothing on the dashboard host can read the wallpaper. Neither needs to: both are generated here, and both already carry the wallpaper itself, so a wallpaper change already leaves them stale and raises their root steps. Following the accent adds no step. udt-accent rewrites the accent in the generated files before it starts udt-grub and udt-homepage: the accent= value on theme.txt's '# udt:' line, which grub-theme-udt's build reads for its PNG slices, and a single --udt-accent line in homepage's custom.css that every accent rule now reads. Sublime's rewrite moves onto the same helper, which also keeps the file's mode rather than leaving it 0600. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05feat(accent): pick the colour that stands out, not the averageDanilo M.2-16/+92
colorz returned cluster means, which averaged a small vivid element into its surroundings, so a violet motif on a frame of pale skin came out as a muddy red. signature_color() now reads the pixels of a 256px thumbnail itself and scores each by chroma times its distance from the image's mean colour. The top 2% vote by hue, neighbouring bands summed, and the most vivid pixel near the peak is snapped. A pick under chroma 25 is a tint and takes the fallback. Dropping colorz also fixes two bugs. Its k-means seeds are random, so one wallpaper could snap differently between runs. And it calls sys.exit() on some images, which `except Exception` in main() does not catch, so udt-accent died without writing and the previous accent stayed. Over 314 wallpapers: no errors (colorz failed on 18), 25 fall back, about 0.06s each. The selftest gains a small-vivid-patch case and a grey-image case. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02feat(keyboard): light the AK820 Pro in the wallpaper accentDanilo M.4-4/+65
udt-keyboard sets an Ajazz AK820 Pro to its "launch" effect in the current accent through ak820-ctl, and does nothing without it. udt-accent starts it detached on every run; --watch reapplies the accent when the USB cable is plugged in, since the keyboard takes no commands over its dongle or Bluetooth. The firmware ignores a mode change unless the lights go off first and settle, so it sends off, waits three seconds, then the mode. A lock keeps a wallpaper change and a plug-in from interleaving the pairs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30fix(install): raise the install tab only when there is something to doDanilo M.2-5/+11
The recap was handed to the steps window on every run, so the file always existed. Any later poke, such as udt-grub or udt-homepage starting from a login's wallpaper restore, reopened the window on an old summary with nothing to act on. Keep the tab only when install.sh failed or printed a command; clear it otherwise. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29feat(palette): theme btop, Joplin and FeishinDanilo M.5-8/+241
btop gets a generated udt.theme and only the color_theme line of btop.conf is rewritten. Joplin gets userchrome.css overriding the --joplin-* custom properties most of its UI is built on, with !important since Joplin's own :root block is injected later; a userchrome.css udt did not write is left alone. Feishin 1.17 watches a Themes folder for JSON themes, so UDT.json extends its built-in Catppuccin Mocha with the scheme's roles and reaches a running Feishin live once selected. All three use existing roles, so no scheme file changes. udt-appthemes installs them next to Obsidian and Typora; the recap hint names btop and Joplin among the apps that need a restart. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29docs: Firefox and the terminal follow the scheme; stock waybar is goneDanilo M.3-22/+18
udt-accent's docstrings and AGENTS.md still said colors.json was a fixed Macchiato palette. It has been built from udt_colors.PALETTE, which udt-palette generates per scheme, since schemes became switchable; the live file carries candy-night's colours. The terminal likewise follows the scheme, only never the wallpaper. The stock ~/.config/waybar/ has been deleted, so the notes explaining why install.sh leaves it alone now just record that it is gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29feat(install): always hand the output to the steps windowDanilo M.2-8/+25
The appearance panel is the usual way a scheme gets applied, so the hints install.sh prints belong on screen whoever calls it, not only when the panel pipes them. install.sh reruns itself as a child, tees the output to the terminal and a temporary log, and passes the log to udt-steps install, keeping the child's exit status. With the window as its main reader, the output is now a summary: only udt-palette's count line rather than all 86 generated paths, and a restart hint in place of the closing ls -l dump. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29feat(steps): hand pending root steps to a quickshell windowDanilo M.5-43/+125
Notification balloons carried the GRUB and homepage root commands, but a balloon cannot stay open while its commands are pasted into a root shell. bin/udt-steps NAME writes a consumer's pending steps to ~/.cache/udt/steps/NAME and pokes quickshell's appearance shell, which shows one tab per file on DP-3. Empty stdin clears the tab, so producers report on every run and a consumer that caught up drops out by itself. udt-grub and udt-homepage now route through it. install.sh's SDDM block checks what is installed and reports only the steps still missing, rather than printing the full install on every run. udt-homepage remembers the last staged pair, since udt-accent now also runs on icon switches, which change neither file and would re-raise the finish steps for nothing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29feat(grub): rebuild on every wallpaper change via udt-grubDanilo M.4-38/+74
GRUB's background is a wallpaper snapshot, but only install.sh rebuilt it, so a wallpaper change left the /boot copy stale with no hint. udt-grub now holds the build-and-print logic; install.sh runs it in the foreground and udt-accent starts it detached next to udt-homepage. A stale installed theme gets a notification carrying the root copy command. A flock serialises the two runs install.sh triggers, since build swaps dist/udt in by rename. AGENTS.md: udt-accent writes seven outputs (SDDM was missing), and names the two detached helpers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29feat(grub): print only the root steps still neededDanilo M.1-4/+12
Up to date when the installed theme matches dist/udt, the copy line alone when GRUB_THEME already names the udt theme, the full three steps otherwise. The build is deterministic, so a clean diff -rq means nothing changed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29feat(bin): udt-machine-name writes PRETTY_HOSTNAME to /etc/machine-infoDanilo M.4-1/+75
The GRUB theme titles its panel with the machine's pretty name, and on Slackware nothing writes /etc/machine-info: hostnamectl is systemd's. This sets the one key, keeping any others, and with no argument prints it. The value is double-quoted with only \ and " escaped, the escapes systemd's reader and the GRUB build's shlex agree on; control characters are refused. It needs root and is never run by install.sh, which only suggests it in the GRUB output while no name is set. tests/machine-name.sh checks the quoting round-trip against shlex. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29fix(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>
2026-09-29feat(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>
2026-09-29feat(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>
2026-09-28docs(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>
2026-09-27feat(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>
2026-09-27feat(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>
2026-09-27feat(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>
2026-09-25feat(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>
2026-09-25docs(todo): drop the em dashes from TODO-iconsDanilo M.1-2/+2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25feat(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>
2026-09-23fix: 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>
2026-09-23feat: 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>
2026-09-23fix: 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>
2026-09-20fix: 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>
2026-09-20feat: 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>
2026-09-20feat: 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>
2026-09-19feat: 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