From 04bd03db72c7165debb79d1858f39121757ca358 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Mon, 9 Nov 2026 19:19:58 +0100 Subject: feat: animate the UDT border gradient on the cards --- deckit/theme.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'deckit') diff --git a/deckit/theme.py b/deckit/theme.py index 7aa347b..5603d5b 100644 --- a/deckit/theme.py +++ b/deckit/theme.py @@ -10,9 +10,11 @@ from pathlib import Path PALETTE_LINE = re.compile(r"^\s*([a-z0-9]+)\s*:\s*(#[0-9a-fA-F]{6,8});", re.M) ACCENT = re.compile(r"accent:\s*(#[0-9a-fA-F]{6,8})") +BORDER = re.compile(r"rgb\(\s*([0-9a-fA-F]{6})\s*\)") PALETTE_PATH = Path.home() / ".config" / "rofi" / "udt" / "palette.rasi" ACCENT_PATH = Path.home() / ".cache" / "udt" / "udt-accent.rasi" +BORDER_PATH = Path.home() / ".cache" / "udt" / "udt-border.lua" # Catppuccin Macchiato, used before UDT has ever generated its files. FALLBACK = { @@ -35,10 +37,19 @@ def parse_accent(text: str) -> str | None: return m[1] if m else None -def css(colors: dict, accent: str | None) -> str: +def parse_border(text: str) -> list[str]: + """The three hues Hyprland rotates in the window border, as hex.""" + return ["#" + value.lower() for value in BORDER.findall(text)] + + +def css(colors: dict, accent: str | None, border: list[str] | None = None) -> str: lines = [":root {"] lines += [f" --udt-{name}: {value};" for name, value in colors.items()] lines.append(f" --udt-accent: {accent or FALLBACK['accent']};") + stops = border if border and len(border) >= 3 else [ + FALLBACK["mauve"], FALLBACK["lavender"], FALLBACK["blue"]] + for index, value in enumerate(stops[:3], 1): + lines.append(f" --udt-border-{index}: {value};") lines.append("}") return "\n".join(lines) + "\n" @@ -55,4 +66,8 @@ def load() -> str: accent = parse_accent(ACCENT_PATH.read_text()) except OSError: accent = None - return css(colors, accent) + try: + border = parse_border(BORDER_PATH.read_text()) + except OSError: + border = None + return css(colors, accent, border) -- cgit v1.2.3