# Shared color palette for the "sci-fi dark glass + vivid neon" desktop. # Single source of truth: every consumer (QuickShell QML theme, kitty, # wvkbd, wofi, hyprlock, Hyprland borders/shadows, matugen fallback) reads # its colors from here instead of hardcoding hex literals. # # Colors are stored as raw hex WITHOUT the leading '#'. Use the helpers below # to format for each consumer: # palette.hash "#rrggbb" (QML, kitty, wofi borders) # palette.cssRgba "rgba(r, g, b, a)" (wofi) # palette.lockRgba "rgba(r, g, b, a)" (hyprlock) # palette.hyprRgba "rgba(rrggbbaa)" (Hyprland, compact hex+alpha) # palette.rgb [ r g b ] decimals rec { # ---- Surfaces (translucent over the Hyprland layer blur) ---- # glass/glassPanel are 8-digit AARRGGBB for QML only. glass = "8c0f111c"; glassPanel = "c2141627"; surface = "24283b"; panel = "141627"; # wofi / hyprlock solid panel line = "394b70"; # ---- Text ---- text = "c0caf5"; muted = "a9b1d6"; ink = "0b0e14"; # ---- Neon accents ---- neon = "00e5ff"; magenta = "ff2e97"; violet = "7c4dff"; cyan = "7dcfff"; blue = "7aa2f7"; green = "9ece6a"; yellow = "e0af68"; purple = "bb9af7"; teal = "73daca"; # kitty url_color danger = "f7768e"; # ---- kitty extras (Tokyo Night inspired) ---- bgDark = "1a1b26"; color0 = "15161e"; color8 = "414868"; selection = "33467c"; tabBg = "292e42"; tabFg = "545c7e"; tabFgBright = "16161e"; # ---- wvkbd ---- wvkbdBg = "1b1e2d"; wvkbdFgSp = "1f2740"; # ---- helpers ---- hexToInt = h: let m = { "0" = 0; "1" = 1; "2" = 2; "3" = 3; "4" = 4; "5" = 5; "6" = 6; "7" = 7; "8" = 8; "9" = 9; a = 10; b = 11; c = 12; d = 13; e = 14; f = 15; }; len = builtins.stringLength h; chars = builtins.genList (i: builtins.substring i 1 h) len; in builtins.foldl' (acc: c: acc * 16 + m.${c}) 0 chars; rgb = h: [ (hexToInt (builtins.substring 0 2 h)) (hexToInt (builtins.substring 2 2 h)) (hexToInt (builtins.substring 4 2 h)) ]; hash = c: "#${c}"; cssRgba = c: a: "rgba(${builtins.concatStringsSep ", " (map toString (rgb c))}, ${a})"; lockRgba = c: a: "rgba(${builtins.concatStringsSep ", " (map toString (rgb c))}, ${a})"; hyprRgba = c: a: "rgba(${c}${a})"; }