From 4b68e62eef24c17be16ebbd88c5de5f3c59791cb Mon Sep 17 00:00:00 2001 From: S4NKALP Date: Fri, 2 Aug 2024 12:24:17 +0545 Subject: [PATCH] dropping pywal --- config/hypr/UserConfigs/ENVariables.conf | 2 +- config/hypr/hyprland.conf | 3 + .../generate.cpython-312.opt-1.pyc | Bin 18329 -> 21519 bytes .../__pycache__/generate.cpython-312.pyc | Bin 17177 -> 18329 bytes config/material-colors/generate.py | 263 ++++++++++++------ config/material-colors/hooks/discord.sh | 4 + config/material-colors/hooks/telegram.sh | 13 + config/material-colors/templates/bg-color | 1 + .../templates/colors-hyprland.conf | 5 + .../templates/colors.tdesktop-theme | 8 +- .../material-colors/templates/hyprlock.conf | 2 +- 11 files changed, 210 insertions(+), 91 deletions(-) create mode 100755 config/material-colors/hooks/discord.sh create mode 100755 config/material-colors/hooks/telegram.sh create mode 100644 config/material-colors/templates/bg-color create mode 100644 config/material-colors/templates/colors-hyprland.conf diff --git a/config/hypr/UserConfigs/ENVariables.conf b/config/hypr/UserConfigs/ENVariables.conf index cfd34ca8..ec3cb1c0 100644 --- a/config/hypr/UserConfigs/ENVariables.conf +++ b/config/hypr/UserConfigs/ENVariables.conf @@ -11,7 +11,7 @@ env = XDG_CURRENT_DESKTOP,Hyprland env = XDG_SESSION_DESKTOP,Hyprland env = XDG_SESSION_TYPE,wayland -env = SDL_VIDEODRIVEVER=wayland +env = SDL_VIDEODRIVEVER,wayland env = GDK_SCALE,1 diff --git a/config/hypr/hyprland.conf b/config/hypr/hyprland.conf index fbc143e5..0a3a5197 100644 --- a/config/hypr/hyprland.conf +++ b/config/hypr/hyprland.conf @@ -18,3 +18,6 @@ source= $UserConfigs/WindowRules.conf source= $UserConfigs/UserKeybinds.conf source= $UserConfigs/UserSettings.conf + +# Material colors +source = ~/.cache/material/colors-hyprland.conf diff --git a/config/material-colors/__pycache__/generate.cpython-312.opt-1.pyc b/config/material-colors/__pycache__/generate.cpython-312.opt-1.pyc index 763722308e74087618da271b801604b40da638bf..2e4deace86a137b63636e1f4bdd8182850a52660 100644 GIT binary patch delta 9460 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 R?+sr6sXY)E_e{pgH-T&IM)Kkn<9 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 diff --git a/config/material-colors/__pycache__/generate.cpython-312.pyc b/config/material-colors/__pycache__/generate.cpython-312.pyc index dd3a09fc77f6567f20abaa586e8917a3de5ddfe5..b4d2f1c85d3e1b5c61c5642aec7c0f77e69d72dd 100644 GIT binary patch delta 1888 zcmZ`(ZA?>F7`~_NZMnrtp%hAKX_-K|U;&|k1LVUGKEz~x?8ioCuyQZ4TH1PAL@ErH z5yp%g=-C`jlj)+ure-c(qCbc;TV}EllXZ|#@7Ua;KXhBRA|`D7*!G?l-Lh==<9Xln zemv*B?>YCJ8b+r^(duc9M$N$W_8TLeSJoY0Z9r8Y+m6ZxY(l=kpOLlI2n9l+3$<+! zs)V&-xnPIaBx;2skY=&GQ!Nw^v2C@~*C`W9h7@ge!nz@*tzM`WN{3KegMdVvP?iBx zfS+bL;4K$73Mi;z7|PX|AXEUyCLv4QEN+3jTr97k(5YNWs|4CcVLi|`iOs^Z2l5#P zC&(DF=@Km+F2wYrUc}dgo|m`jb_PxLg4pTui1rSz+l#G7JkBn$-+E-9c(}h>9n|K; z4OLGpyez1WMf!_6{Qh9#itdL2ZU%PTLN2A%$_&cTPiez)Ljb0aUz?dRwA;Wi{Ye7X zuO+;p8l5MiVKU|KkiI1P4f_kpxpZ9}*SD%qb6I^!9#8L2?$h=q2Q@&T?c)M#S6G=t zj2|6)`9C-oDs=XzQGFa`{(r_}7ZnV-ol%F9h{m`HX~_f2Np&hpC-=8Ym@r#GZCHEQvn_JXU%UC$A$9GgA}a2g@mV{kLQ! z!PJPp4?SmcAbT`d$7Ve)V3MtijDfX`C?ct8Biy_`W7b$aqc54$mxuM`Gy2L$ObS;( z-ZV81%x4x%I>MPHbD5Rl%*secR>Y7EPgKR2)-N&&Q_5IERLvwC$6p9*bH})d&TwYy z*SfrUOVMN?Y;nw4s>7D*d9!Vj4V#N1rd)U+*IEO)*0ix^$kk_^HH1_7<1Nu#nDlWz zlWG{(oW~PA=X&OB1C?Q0<#ol3ZNrSNb|hh5lRTC`zG+5djWUR{oNb7#(u_8}-Za)S zyDDo*4yFZaUnqu;TjCLCr9KN&=37X698&NJ3a?Q(NhT~M=v@-A&CAhuWT^BadO!-xwxDmw!Ll`mAHgfB z;8b#Uy91J{W1rX60l&`!a=GjRnk73OyAo$9V~qO_x$3a7%P=ku%{$&<*Up2wjMhBV zf`pdF=ceHffFM^ah=+hUqDYe+f-*@W|4yQ=M)biG@wz>&3UJVUcXFH=>WofqHA= z57ZFbZYRje`ih!yI;O`)Y}sOK6JM{`4md;|bV(#O(CwoecCXj##<9LA5c#7%JJAd! z!Nd5KvQR<8vuJBHh0&Epba@M`Tqhe$g5RChjctp{WvgX_>IJm}S;qZQ2E^5}n7FBl ViLZ9=iOVkEBK1anh>UJL`WM8D7%Bh& delta 1270 zcmZ8gZ)hA<5Z||(y?-IiwW;(X-X(4RTsFB&a@R}lf||26*Hb7c_{qa^z1-U+NA90* z?`kh12@)!XLK9yx77A9et+p17i$MaWqR{&wR#OoOu|6{ke?)BaW<1V8Q?fHkN-Mah(15RglA&=7F! zp+0r5`ZT;lo3Cd3XIB_l$2#e5piQXzXk@ZS5ST+0)WmsA6doefNR22_Lz7Z1{E;1x ziz^Zj_C}32cRVNY*Soeg%#))7e80EVNe@de3a=2w$&21GQQ6Mx-kPX1b2wern}Lh} z?o%31f-(}}^gToB z{H4A-UW{U2Ae;kGBrC#fpqWYr;wA$L@-1HqjKi_pgOT24h%xOiS2OusrDnQ{)j~R3 z%9ohVR*>Q%!q*5(oCP)c2T)h}wcsjQHcs|CByxtI4k_d;|1PwLyvw(S{nHr2YyhT1 zW2HhmSFA8Ar#6cQp^Wev0;b5O5Q+%c1k2N82J_4aaQPLH$iI9)y39$Qu7?_zbzhXQB!6Bfk{w@ce4+qpFsv z<}0Q>J5kDIRh`}7BzBry=4WFsG+st7>$odi9`Vcf;M-+{Mi%A3RZurb$1OKVsPcc) znQ{(L_0T}En$JUzmifKW_D3MWY1>Roaj`oX zaTnoVSz)L>t!F3Hf@&24{`|vupZpLUJB_utM;tT-NFfN{w`Ks8B=dq`8wgfqu@R>9 z{ImO+gtnVT$KIlN;8WCbj7%AZqFiHjG+60djr5_*r5-LrnpIt8>?1VTp=rfTK{f4} zalM?WOqh;zTFd3tbejE)1lG9D^FPOi!`N)Aqnll}=H?LEuxqAVsg`lf$4jL=vr6|+ z;0F^s8$ASXKU~zC#5kH5A%S&wEAhRf-xff8vfC10Hd*5P0|z%{p?nv;w`06HIrld| CH)=Kj diff --git a/config/material-colors/generate.py b/config/material-colors/generate.py index 1219bd3f..c389c686 100644 --- a/config/material-colors/generate.py +++ b/config/material-colors/generate.py @@ -7,20 +7,21 @@ import argparse from materialyoucolor.quantize import QuantizeCelebi # type: ignore from materialyoucolor.score.score import Score # type: ignore from materialyoucolor.hct import Hct # type: ignore -from materialyoucolor.dynamiccolor.material_dynamic_colors import MaterialDynamicColors # type: ignore -from materialyoucolor.scheme.dynamic_scheme import DynamicScheme # type: ignore -from materialyoucolor.scheme.scheme_tonal_spot import SchemeTonalSpot # type: ignore -from materialyoucolor.scheme.scheme_expressive import SchemeExpressive # type: ignore -from materialyoucolor.scheme.scheme_fruit_salad import SchemeFruitSalad # type: ignore -from materialyoucolor.scheme.scheme_monochrome import SchemeMonochrome # type: ignore -from materialyoucolor.scheme.scheme_rainbow import SchemeRainbow # type: ignore -from materialyoucolor.scheme.scheme_vibrant import SchemeVibrant # type: ignore -from materialyoucolor.scheme.scheme_neutral import SchemeNeutral # type: ignore -from materialyoucolor.scheme.scheme_fidelity import SchemeFidelity # type: ignore -from materialyoucolor.scheme.scheme_content import SchemeContent # type: ignore +from materialyoucolor.dynamiccolor.material_dynamic_colors import MaterialDynamicColors # type: ignore # noqa +from materialyoucolor.scheme.dynamic_scheme import DynamicScheme # type: ignore # noqa +from materialyoucolor.scheme.scheme_tonal_spot import SchemeTonalSpot # type: ignore # noqa +from materialyoucolor.scheme.scheme_expressive import SchemeExpressive # type: ignore # noqa +from materialyoucolor.scheme.scheme_fruit_salad import SchemeFruitSalad # type: ignore # noqa +from materialyoucolor.scheme.scheme_monochrome import SchemeMonochrome # type: ignore # noqa +from materialyoucolor.scheme.scheme_rainbow import SchemeRainbow # type: ignore # noqa +from materialyoucolor.scheme.scheme_vibrant import SchemeVibrant # type: ignore # noqa +from materialyoucolor.scheme.scheme_neutral import SchemeNeutral # type: ignore # noqa +from materialyoucolor.scheme.scheme_fidelity import SchemeFidelity # type: ignore # noqa +from materialyoucolor.scheme.scheme_content import SchemeContent # type: ignore # noqa import hashlib import pickle import numpy as np +import re schemes = { @@ -45,7 +46,6 @@ home = os.path.expanduser('~') script_dir = os.path.dirname(os.path.abspath(__file__)) cache_path = f"{home}/.cache/material/" os.makedirs(cache_path, exist_ok=True) -os.makedirs(f"{home}/.cache/wal/", exist_ok=True) def rgb_to_hex(rgb): @@ -68,41 +68,10 @@ class Color(): return "#000000" -def update_pywal_colors_with_material_you(scheme: DynamicScheme, wallpaper: str) -> dict: - color = Color(scheme) - dict = { - "wallpaper": wallpaper, - "alpha": "100", - - "special": { - "background": color("background"), - "foreground": color("onBackground"), - "cursor": color("onBackground") - }, - "colors": { - "color0": color("background"), - "color1": color("onBackground"), - "color2": color("primary"), - "color3": color("onPrimary"), - "color4": color("surfaceContainer"), - "color5": color("onSurface"), - "color6": color("error"), - "color7": color("onError"), - "color8": color("tertiary"), - "color9": color("onTertiary"), - "color10": color("secondary"), - "color11": color("onSecondary"), - "color12": color("secondaryContainer"), - "color13": color("onSecondaryContainer"), - "color14": color("shadow"), - "color15": color("outlineVariant") - } - } - return dict - - class ColorsCache: - def __init__(self, colors: DynamicScheme | dict, wallpaper: str, original_color: int) -> None: + def __init__( + self, colors: DynamicScheme | dict, wallpaper: str, original_color: int + ) -> None: self.colors: dict[str, str] = {} self.wallpaper = wallpaper self.original_color = original_color @@ -110,7 +79,9 @@ class ColorsCache: for color in vars(MaterialDynamicColors).keys(): color_name = getattr(MaterialDynamicColors, color) if hasattr(color_name, "get_hct"): - self.colors[str(color)] = rgb_to_hex(color_name.get_hct(colors).to_rgba()) + self.colors[str(color)] = rgb_to_hex( + color_name.get_hct(colors).to_rgba() + ) else: self.colors = colors @@ -150,7 +121,107 @@ additional = { } -def generate_templates(folder: str, output_folder: str, scheme: DynamicScheme, color_scheme: str, wallpaper: str = ''): +def generate_color_map(scheme: DynamicScheme): + color_map: dict[str, str] = {} + for color in vars(MaterialDynamicColors).keys(): + color_name = getattr(MaterialDynamicColors, color) + if hasattr(color_name, "get_hct"): + rgba = color_name.get_hct(scheme).to_rgba() + color_map[color.strip()] = rgb_to_hex(rgba) + return color_map + + +class ColorFormatter: + def __init__(self, scheme: DynamicScheme): + self.color_map = generate_color_map(scheme) + + def apply_transformations(self, value, transformations): + intermediate_transforms = [ + t for t in transformations + if not (t.startswith("strip") or t == "rgb") + ] + final_transforms = [ + t for t in transformations + if t.startswith("strip") or t == "rgb" + ] + + for transform in intermediate_transforms: + if transform.startswith("lighten"): + percent = int(re.search(r'\d+', transform).group()) + value = self.adjust_brightness(value, percent) + elif transform.startswith("darken"): + percent = int(re.search(r'\d+', transform).group()) + value = self.adjust_brightness(value, -percent) + + for transform in final_transforms: + if transform.startswith("strip"): + value = value.lstrip('#') + elif transform == "rgb": + value = self.hex_to_rgb(value) + + return value + + def adjust_brightness(self, hex_color, factor): + def min_max(v): + return min(255, max(0, v)) + + hex_color = hex_color.lstrip('#') + r, g, b = (int(hex_color[i:i+2], 16) for i in (0, 2, 4)) + + r = min_max(int(r * (1 + factor / 100))) + g = min_max(int(g * (1 + factor / 100))) + b = min_max(int(b * (1 + factor / 100))) + + return f'#{r:02X}{g:02X}{b:02X}'.lower() + + def hex_to_rgb(self, hex_color): + hex_color = hex_color.lstrip('#') + r, g, b = (int(hex_color[i:i+2], 16) for i in (0, 2, 4)) + return f'{r},{g},{b}' + + def parse_transformations(self, transformations_str): + transformations = re.findall( + r'(\w+)(?:\((\d*)\))?', transformations_str + ) + result = [] + for command, arg in transformations: + if command: + if arg: + result.append(f"{command}({arg})") + else: + result.append(command) + return result + + def format(self, text): + pattern = r'(<(\w+)(?:\.(.+))?>)' + matches = re.findall(pattern, text) + result = [] + last_end = 0 + + for match in matches: + full_match, key, transformations_str = match + if key in self.color_map: + result.append(text[last_end:text.find(full_match, last_end)]) + value = self.color_map[key] + if transformations_str: + transformations = self.parse_transformations( + transformations_str + ) + value = self.apply_transformations(value, transformations) + result.append(value) + last_end = text.find(full_match, last_end) + len(full_match) + + result.append(text[last_end:]) + result = ''.join(result) + pattern = r'<\\\\([^>]+)>' + + result = re.sub(pattern, r'<\1>', result) + + return result + + +def generate_templates(folder: str, output_folder: str, scheme: DynamicScheme, + color_scheme: str, wallpaper: str = ''): if not os.path.exists(output_folder): os.makedirs(output_folder) if not os.path.exists(folder): @@ -160,14 +231,8 @@ def generate_templates(folder: str, output_folder: str, scheme: DynamicScheme, c for file_path in file_list: with open(file_path) as f: template = f.read() - for color in vars(MaterialDynamicColors).keys(): - color_name = getattr(MaterialDynamicColors, color) - if hasattr(color_name, "get_hct"): - rgba = color_name.get_hct(scheme).to_rgba() - hex_color = rgb_to_hex(rgba) - rgb_color = rgba_to_rgb(rgba) - template = template.replace(f"<{color}>", hex_color) - template = template.replace(f"<{color}.rgb>", rgb_color) + formatter = ColorFormatter(scheme) + template = formatter.format(template) template = ( template .replace("", color_scheme) @@ -205,7 +270,6 @@ def generate_templates(folder: str, output_folder: str, scheme: DynamicScheme, c f.write(_template) - def run_hooks(folder: str): if not os.path.exists(folder): os.makedirs(folder) @@ -218,12 +282,6 @@ def run_hooks(folder: str): subprocess.run(['sh', file_path]) -def save_updated_colors(updated_colors): - wal_colors_path = f"{home}/.cache/wal/colors.json" - with open(wal_colors_path, 'w') as f: - json.dump(updated_colors, f, indent=4) - - def process_image(image_path, quality=2, num_colors=128): def get_cache_path(image_path): global cache_path @@ -263,7 +321,10 @@ def process_image(image_path, quality=2, num_colors=128): return color -def main(color_scheme: str, image_path: str, use_color: int | None = None, scheme: DynamicScheme = schemes["tonalSpot"]): +def main( + color_scheme: str, image_path: str, use_color: int | None = None, + scheme: DynamicScheme = schemes["tonalSpot"] +): is_dark = True if color_scheme == "dark" else False if use_color is None: color = process_image(image_path, 4, 1024) @@ -285,13 +346,14 @@ def main(color_scheme: str, image_path: str, use_color: int | None = None, schem object = ColorsCache(scheme, image_path, color) json.dump(colors_dict(object), f, indent=2) - updated_pywal_colors = update_pywal_colors_with_material_you(scheme, image_path) + generate_templates( + f"{script_dir}/templates", cache_path, scheme, color_scheme, image_path + ) + generate_templates( + f"{script_dir}/templates/svg", join(cache_path, "svg/"), scheme, + color_scheme, image_path + ) - generate_templates(f"{script_dir}/templates", cache_path, scheme, color_scheme, image_path) - generate_templates(f"{script_dir}/templates/svg", join(cache_path, "svg/"), scheme, color_scheme, image_path) - save_updated_colors(updated_pywal_colors) - - subprocess.run(['wal', '-s', '-q', '-e', '-n', '-R']) if is_dark: subprocess.run(['sh', join(script_dir, 'gtk-material.sh')]) else: @@ -303,14 +365,27 @@ def main(color_scheme: str, image_path: str, use_color: int | None = None, schem def _argparse() -> tuple[bool, bool, str, str, str, str]: parser = argparse.ArgumentParser() group = parser.add_mutually_exclusive_group(required=True) - group.add_argument("-R", help="Restore previous colorscheme.", action='store_true') - group.add_argument("-w", help="Use last used wallpaper for color generation.", action='store_true') - group.add_argument("--image", type=str, help="Image for color scheme generation") - group.add_argument("--color", type=str, help="Main color for color scheme generation") - parser.add_argument('--color-scheme', type=str, default='dark', choices=['dark', 'light'], - help="Color scheme variant") - parser.add_argument('--scheme', type=str, default="tonalSpot", choices=list(schemes.keys()), - help="Scheme for color generation") + group.add_argument( + "-R", help="Restore previous colorscheme.", action='store_true' + ) + group.add_argument( + "-w", help="Use last used wallpaper for color generation.", + action='store_true' + ) + group.add_argument( + "--image", type=str, help="Image for color scheme generation" + ) + group.add_argument( + "--color", type=str, help="Main color for color scheme generation" + ) + parser.add_argument( + '--color-scheme', type=str, default='dark', choices=['dark', 'light'], + help="Color scheme variant" + ) + parser.add_argument( + '--scheme', type=str, default="tonalSpot", + choices=list(schemes.keys()), help="Scheme for color generation" + ) args = parser.parse_args() @@ -320,31 +395,49 @@ def _argparse() -> tuple[bool, bool, str, str, str, str]: color_scheme = args.color_scheme use_color = args.color scheme = args.scheme - return restore_palette, use_last_used_wallpaper, image, color_scheme, use_color, scheme + return ( + restore_palette, use_last_used_wallpaper, image, + color_scheme, use_color, scheme + ) def _main(): - restore_palette, use_last_used_wallpaper, image, color_scheme, use_color, _scheme = _argparse() + ( + restore_palette, use_last_used_wallpaper, image, + color_scheme, use_color, _scheme + ) = _argparse() scheme = schemes[_scheme] if use_color is not None: try: with open(join(cache_path, "colors.json")) as f: content = get_cache_object(f.read()) - main(color_scheme, image_path=content.wallpaper, use_color=int(use_color.lstrip('#'), 16), scheme=scheme) - except: - main(color_scheme, image_path="/dev/null", use_color=int(use_color.lstrip('#'), 16), scheme=scheme) + main( + color_scheme, image_path=content.wallpaper, + use_color=int(use_color.lstrip('#'), 16), scheme=scheme + ) + except Exception: + main( + color_scheme, image_path="/dev/null", + use_color=int(use_color.lstrip('#'), 16), scheme=scheme + ) elif restore_palette: with open(join(cache_path, "colors.json")) as f: content = get_cache_object(f.read()) - main(color_scheme, image_path=content.wallpaper, use_color=content.original_color, scheme=scheme) + main( + color_scheme, image_path=content.wallpaper, + use_color=content.original_color, scheme=scheme + ) elif use_last_used_wallpaper: with open(join(cache_path, "colors.json")) as f: content = get_cache_object(f.read()).wallpaper main(color_scheme, image_path=content, scheme=scheme) else: if os.path.isdir(image): - files = [f for f in os.listdir(image) if f.endswith(('.png', '.jpg', '.jpeg'))] + files = [ + f for f in os.listdir(image) + if f.endswith(('.png', '.jpg', '.jpeg')) + ] if files: image = join(image, random.choice(files)) main(color_scheme, image_path=image, scheme=scheme) diff --git a/config/material-colors/hooks/discord.sh b/config/material-colors/hooks/discord.sh new file mode 100755 index 00000000..2ec3a3bb --- /dev/null +++ b/config/material-colors/hooks/discord.sh @@ -0,0 +1,4 @@ +#!/bin/bash +material_cache="$HOME"/.cache/material/ + +sass $material_cache/material-discord.scss $material_cache/material-discord.css diff --git a/config/material-colors/hooks/telegram.sh b/config/material-colors/hooks/telegram.sh new file mode 100755 index 00000000..dc001d71 --- /dev/null +++ b/config/material-colors/hooks/telegram.sh @@ -0,0 +1,13 @@ +#!/bin/bash +cache_folder="$HOME"/.cache/material +telegram_theme_cache="$HOME"/.cache/telegram-theme + +bg_color_file="$cache_folder/bg-color" +bg_color=$(cat "$bg_color_file") +magick -size 256x256 "xc:$bg_color" $telegram_theme_cache/tiled.png + +mkdir -p $telegram_theme_cache + +cp $cache_folder/colors.tdesktop-theme $telegram_theme_cache/colors.tdesktop-theme + +zip -q -j $telegram_theme_cache/pallete.tdesktop-theme $telegram_theme_cache/tiled.png $telegram_theme_cache/colors.tdesktop-theme diff --git a/config/material-colors/templates/bg-color b/config/material-colors/templates/bg-color new file mode 100644 index 00000000..af5dbeff --- /dev/null +++ b/config/material-colors/templates/bg-color @@ -0,0 +1 @@ + diff --git a/config/material-colors/templates/colors-hyprland.conf b/config/material-colors/templates/colors-hyprland.conf new file mode 100644 index 00000000..2766e302 --- /dev/null +++ b/config/material-colors/templates/colors-hyprland.conf @@ -0,0 +1,5 @@ +$background = rgb() +$foreground = rgb() +$border_color_active = rgb() +$border_color_inactive = rgb() +# <\\outline> diff --git a/config/material-colors/templates/colors.tdesktop-theme b/config/material-colors/templates/colors.tdesktop-theme index 05158c5c..1dc6a059 100644 --- a/config/material-colors/templates/colors.tdesktop-theme +++ b/config/material-colors/templates/colors.tdesktop-theme @@ -18,10 +18,10 @@ ON_BACKGROUND_DARKER: ; ACCENT: ; ON_ACCENT: ; -ACCENT_LIGHT: ; -ON_ACCENT_LIGHT: ; -ACCENT_DARK: ; -ON_ACCENT_DARK: ; +ACCENT_LIGHT: ; +ON_ACCENT_LIGHT: ; +ACCENT_DARK: ; +ON_ACCENT_DARK: ; ERROR: ; ERROR_RIPPLE: #ff9180; diff --git a/config/material-colors/templates/hyprlock.conf b/config/material-colors/templates/hyprlock.conf index 0d422bb2..e7a518f5 100644 --- a/config/material-colors/templates/hyprlock.conf +++ b/config/material-colors/templates/hyprlock.conf @@ -71,7 +71,7 @@ label { shadow_color = rgb(0,0,0) shadow_boost = 1.2 font_size = 150 - font_family = Product Sans Semibold + font_family = Product Sans Semibold position = 0, -250 halign = center valign = top