aboutsummaryrefslogtreecommitdiffstats
path: root/appearance/README.md
AgeCommit message (Collapse)AuthorFilesLines
26 hoursfeat(appearance): find a larger version of a low-res wallpaperDanilo M.1-0/+9
When the image staged for the targeted screen gets a yellow or red quality note, a button under the mock screens copies it to the clipboard and opens TinEye in the browser, where Ctrl+V runs the reverse search and the matches can be sorted by size. It acts on the staged image, not the hovered one, because the pointer leaves the thumbnail to reach it. The image goes through the clipboard because a search engine takes no local file in a URL, and scripted uploads did not get through: TinEye answered 403 to curl and 405 with a browser user agent, and Google Lens redirected to its consent page, dropping the image. The paste in the browser is the upload, and only on the user's click. The copy is converted to PNG with magick. Copied as itself, a JPEG put only image/jpeg on the clipboard and Firefox pasted nothing into the page; it hands web content image/png. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
26 hoursfeat(appearance): wallpapers by folder, system ones, quality bordersDanilo M.1-7/+29
The wallpaper tab showed every image under ~/Pictures/wallpapers in one grid. It now groups them by top-level folder, each behind a header that opens and closes it, and adds the distribution's /usr/share/wallpapers: its loose images as "system", its Plasma packages as "Plasma". A package carries one picture at several resolutions under contents/images/, some with a dark version under contents/images_dark/, so it shows once, the dark version where there is one and the largest of those, labelled with the package name rather than "5120x2880.png". Groups are keyed apart from their names, so a local folder called "system" does not share open state with the system group. Open state lives in the Wallpapers singleton, because the panel is destroyed on close. The list is one flat ListView of rows, a header or a row of thumbnails, so only rows in view (plus cacheBuffer) are instantiated and decode. A first version made each folder one delegate, which loaded every image of a folder as soon as it opened; the system group alone is 727. The rows live in a ListModel and a toggle inserts or removes only that folder's rows: assigning a fresh JS array instead resets the view, which loses the scroll position and re-decodes everything visible. cacheBuffer is clamped at 0 because the column's width reads negative before layout and the ListView warns on each negative value. The scan's find calls go through a small shell function rather than eval. Each thumbnail's 2px border tells how it will look on the targeted screen. `file -N -0` reads every image's size from its header after each scan, ~0.6s for 1161; the NUL keeps names containing ": " intact, and the size is the last WxH in the description because a JPEG's "density 72x72" comes first. wallp runs swaybg -m fill, which scales to cover, so the measure is the enlargement factor: <=1 green, <=1.33 yellow, else red, in the udt palette colours. A note under the mock screens, in that colour, gives the size, the factor and why it will look soft or pixelated, for the hovered image or else the staged one. The staged image keeps its accent border. Screen sizes are fixed, as the mock's already were. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8 daysfeat(appearance): recap tab first, consumer tabs by display nameDanilo M.1-1/+1
install.sh's tab is the overview of a whole run, so it leads as "General recap"; the consumer tabs follow, labelled GRUB, SDDM and Homepage. File names stay the producers' short ids, and one without a label shows under its own name, so a new producer still needs no edit here. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8 daysfeat(appearance): steps window, icon regen, cursor out of hypr-themeDanilo M.1-10/+36
StepsWindow shows unified-desktop-theme's pending manual steps, one tab per consumer, centred on DP-3 on the top layer with on-demand focus so it can stay open while commands are pasted elsewhere. udt-steps writes the files and calls the new `steps` IPC verb; indented lines become command blocks with a copy button. The Theme tab pipes install.sh's output into it. The icon switch now also reruns udt-accent (SDDM power icons) and waybar-theme-udt's install.sh (taskbar theme, module icons), chained after the gsettings write both read. Cursor changes write ~/.config/udt/cursor.lua instead of editing hypr-theme's tracked environment.lua. The theme notice and the Udt.qml comment claimed install.sh reloads nothing; it reloads Hyprland, waybar, kitty and conky now. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-16feat(appearance): polish the Icons tab previews and applyDanilo M.1-7/+14
Cursor previews were extracted only on hover, so the row stayed blank until each card was visited. They are now batched on open: one python pass extracts four shapes per theme (arrow, hand, text, horizontal resize) through the theme's aliases and every storage form it may use (hyprcursor .hlc, a shape directory SVG, or a legacy Xcursor binary via xcur2png). The card rows are Flows so they wrap instead of running off the right edge, and the tab scrolls. Cards widened and names wrap to two lines. A size selector (16-64) applies the pointer size live, to gsettings, the GTK settings.ini files and environment.lua. gsettings alone does not reliably switch icon/cursor here: both gtk-3.0 and gtk-4.0 settings.ini carry the names, so apply now rewrites gtk-icon-theme-name / gtk-cursor-theme-name / gtk-cursor-theme-size there too. The symlinked `default` cursor alias is skipped in the scan and the current value resolved through it, so the real theme carries the current marker. The tab row is centred against the panel so it reads as drawer chrome rather than the first line of a tab's content.
2026-09-16docs(appearance): fix stale Theme tab phrase and align the tab diagramDanilo M.1-9/+9
The five-tab shell's paragraph still said theme opened "the other tab", and the widened top border left the body and bottom border 6 columns short. Widen lines 7-14 to match and name the Theme tab.
2026-09-16docs(appearance): document the Sunset, Idle and Icons tabsDanilo M.1-1/+27
Records the IPC verbs, the shared hyprsunset.conf format, the preserved hypridle comments, and the preview mechanisms. The hardcoded icon theme in udt, waybar and rofi is tracked as a TODO in those repos.
2026-09-16refactor(theme): read the palette from ~/.cache/udtDanilo M.1-1/+1
unified-desktop-theme moved its generated files out of ~/.cache/wal, which pywal used to own and nothing writes any more. The palette udt-accent generates is now at ~/.cache/udt/udt-palette.qml. shared/Theme.qml is the only code change; every component reaches it through a symlink. The module READMEs cite the path, so they move with it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-11fix(appearance): rescan schemes and wallpapers on openDanilo M.1-0/+3
Both scans ran once at startup. This shell is autostarted, so that is once per session: a scheme or a wallpaper added afterwards never appeared, and restarting the shell was the only way to see it. Six schemes added during a session were invisible for exactly this reason. Opening the panel now refreshes both. Verified by adding a palette pair to a running shell and watching it appear, with its colours resolved, after the refresh. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G7NRsGyF9jGfPYS4zPqpN7
2026-09-11feat(appearance): wallpaper picker and scheme switcherDanilo M.1-0/+95
One drawer for how the desktop looks, on SUPER+Return, replacing the qarma file dialog that key used to open. wallp is untouched and still does the work: the panel calls it with H= and V= and it still runs from a terminal. Clicking a thumbnail stages it rather than setting it, so both screens can be composed before anything changes and Apply is a single wallp call. The mock screens show the result: the staged pick where there is one, what is set where there is not, and the hovered thumbnail on the targeted screen. They are drawn at the real proportions from hyprctl monitors, DP-3 upright because it has transform=1, centred against each other as Hyprland has them. The scheme tab reads the palette pair unified-desktop-theme keeps for each scheme, so the swatches are that scheme's real colours and the list needs no edit when a scheme is added. Applying writes roles.conf and runs install.sh, and reloads nothing, because install.sh reloads nothing: the panel says what is still showing the old scheme rather than pretending the switch is done. Two QML traps are documented in AGENTS.md because neither announces itself: there is no String.matchAll, which threw inside a try and left every swatch empty, and assigning running = true to an already-running Process does nothing, which stopped the scheme loader after the first file. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G7NRsGyF9jGfPYS4zPqpN7