From df80cc3fb370de28f3ef5fcaf4a21632243d49ff Mon Sep 17 00:00:00 2001 From: nullishamy Date: Sun, 19 May 2024 20:34:07 +0100 Subject: [PATCH] refactor: build scripts --- build.py | 120 ++++++++----------- patches/colloid/palette.tera | 16 +-- patches/colloid/sass-palette-frappe.patch | 16 +-- patches/colloid/sass-palette-latte.patch | 16 +-- patches/colloid/sass-palette-macchiato.patch | 16 +-- patches/colloid/sass-palette-mocha.patch | 16 +-- 6 files changed, 93 insertions(+), 107 deletions(-) diff --git a/build.py b/build.py index a0e70085..abe81d2e 100755 --- a/build.py +++ b/build.py @@ -2,7 +2,7 @@ import os, re, shutil, subprocess, argparse, glob, logging, zipfile from dataclasses import dataclass -from typing import Literal, List +from typing import Any, Literal, List from catppuccin import PALETTE from catppuccin.models import Flavor, Color @@ -30,6 +30,20 @@ def id(self) -> str: return ",".join(self.tweaks) +@dataclass +class Suffix: + true_value: str + test: Any # callback function + false_value: str = "" + + +IS_DARK = Suffix(true_value="-Dark", test=lambda ctx: ctx.flavor.dark) +IS_LIGHT = Suffix(true_value="-Light", test=lambda ctx: not ctx.flavor.dark) +IS_WINDOW_NORMAL = Suffix(true_value="-Normal", test=lambda ctx: ctx.tweaks.has('normal')) +DARK_LIGHT = Suffix( + true_value="-Dark", false_value="-Light", test=lambda ctx: ctx.flavor.dark +) + @dataclass class BuildContext: build_root: str @@ -46,26 +60,15 @@ def output_dir(self) -> str: def build_id(self) -> str: return f"{self.theme_name}-{self.flavor.identifier}-{self.accent.identifier}-{self.size}+{self.tweaks.id() or 'default'}" + def apply_suffix(self, suffix: Suffix) -> str: + if suffix.test(self): + return suffix.true_value + else: + return suffix.false_value -def build(ctx: BuildContext): - dark_suffix = "" - light_suffix = "" - window_suffix = "" - scheme_suffix = "-Catppuccin" - - if ctx.tweaks.has("normal"): - window_suffix = "-Normal" - - if ctx.flavor == "latte": - light_suffix = "-Light" - suffix = "-Light" - - if ctx.flavor != "": - dark_suffix = "-Dark" - suffix = "-Dark" +def build(ctx: BuildContext): output_dir = ctx.output_dir() - # [[ -d "${THEME_DIR}" ]] && rm -rf "${THEME_DIR}" logger.info(f"Building into '{output_dir}'...") apply_tweaks(ctx) @@ -81,7 +84,7 @@ def build(ctx: BuildContext): file.write("[X-GNOME-Metatheme]\n") file.write(f"GtkTheme={ctx.build_id()}\n") file.write(f"MetacityTheme={ctx.build_id()}\n") - file.write(f"IconTheme=Tela-circle{dark_suffix}\n") + file.write(f"IconTheme=Tela-circle{ctx.apply_suffix(IS_DARK)}\n") file.write(f"CursorTheme={ctx.flavor.name}-cursors\n") file.write("ButtonLayout=close,minimize,maximize:menu\n") @@ -94,7 +97,7 @@ def build(ctx: BuildContext): [ "sassc", *SASSC_OPT, - f"{SRC_DIR}/main/gnome-shell/gnome-shell{suffix}.scss", + f"{SRC_DIR}/main/gnome-shell/gnome-shell{ctx.apply_suffix(DARK_LIGHT)}.scss", f"{output_dir}/gnome-shell/gnome-shell.css", ] ) @@ -104,7 +107,7 @@ def build(ctx: BuildContext): [ "sassc", *SASSC_OPT, - f"{SRC_DIR}/main/gtk-3.0/gtk{suffix}.scss", + f"{SRC_DIR}/main/gtk-3.0/gtk{ctx.apply_suffix(DARK_LIGHT)}.scss", f"{output_dir}/gtk-3.0/gtk.css", ] ) @@ -123,7 +126,7 @@ def build(ctx: BuildContext): [ "sassc", *SASSC_OPT, - f"{SRC_DIR}/main/gtk-4.0/gtk{suffix}.scss", + f"{SRC_DIR}/main/gtk-4.0/gtk{ctx.apply_suffix(DARK_LIGHT)}.scss", f"{output_dir}/gtk-4.0/gtk.css", ] ) @@ -142,14 +145,14 @@ def build(ctx: BuildContext): [ "sassc", *SASSC_OPT, - f"{SRC_DIR}/main/cinnamon/cinnamon{suffix}.scss", + f"{SRC_DIR}/main/cinnamon/cinnamon{ctx.apply_suffix(DARK_LIGHT)}.scss", f"{output_dir}/cinnamon/cinnamon.css", ] ) os.makedirs(f"{output_dir}/metacity-1", exist_ok=True) shutil.copyfile( - f"{SRC_DIR}/main/metacity-1/metacity-theme-3{window_suffix}.xml", + f"{SRC_DIR}/main/metacity-1/metacity-theme-3{ctx.apply_suffix(IS_WINDOW_NORMAL)}.xml", f"{output_dir}/metacity-1/metacity-theme-3.xml", ) # FIXME: Symlinks aren't working as intended @@ -165,20 +168,20 @@ def build(ctx: BuildContext): os.makedirs(f"{output_dir}/xfwm4", exist_ok=True) shutil.copyfile( - f"{SRC_DIR}/main/xfwm4/themerc{light_suffix}", + f"{SRC_DIR}/main/xfwm4/themerc{ctx.apply_suffix(IS_LIGHT)}", f"{output_dir}/xfwm4/themerc", ) os.makedirs(f"{output_dir}-hdpi/xfwm4", exist_ok=True) shutil.copyfile( - f"{SRC_DIR}/main/xfwm4/themerc{light_suffix}", + f"{SRC_DIR}/main/xfwm4/themerc{ctx.apply_suffix(IS_LIGHT)}", f"{output_dir}-hdpi/xfwm4/themerc", ) subst_text(f"{output_dir}-hdpi/xfwm4/themerc", "button_offset=6", "button_offset=9") os.makedirs(f"{output_dir}-xhdpi/xfwm4", exist_ok=True) shutil.copyfile( - f"{SRC_DIR}/main/xfwm4/themerc{light_suffix or ''}", + f"{SRC_DIR}/main/xfwm4/themerc{ctx.apply_suffix(IS_LIGHT)}", f"{output_dir}-xhdpi/xfwm4/themerc", ) subst_text( @@ -187,11 +190,11 @@ def build(ctx: BuildContext): if not ctx.flavor.dark: shutil.copytree( - f"{SRC_DIR}/main/plank/theme-Light{scheme_suffix}/", f"{output_dir}/plank" + f"{SRC_DIR}/main/plank/theme-Light-Catppuccin/", f"{output_dir}/plank" ) else: shutil.copytree( - f"{SRC_DIR}/main/plank/theme-Dark{scheme_suffix}/", f"{output_dir}/plank" + f"{SRC_DIR}/main/plank/theme-Dark-Catppuccin/", f"{output_dir}/plank" ) @@ -285,31 +288,13 @@ def apply_tweaks(ctx: BuildContext): def make_assets(ctx: BuildContext): - color_suffix = "" - if not ctx.flavor.dark: - color_suffix = "-Light" - else: - color_suffix = "-Dark" - - dark_suffix = "" - if ctx.flavor.dark: - dark_suffix = "-Dark" - - light_suffix = "" - if not ctx.flavor.dark: - light_suffix = "-Light" - - window_suffix = "" - if ctx.tweaks.has("normal"): - window_suffix = "-Normal" - output_dir = ctx.output_dir() os.makedirs(f"{output_dir}/cinnamon/assets", exist_ok=True) for file in glob.glob(f"{SRC_DIR}/assets/cinnamon/theme/*.svg"): shutil.copy(file, f"{output_dir}/cinnamon/assets") shutil.copy( - f"{SRC_DIR}/assets/cinnamon/thumbnail{color_suffix}.svg", + f"{SRC_DIR}/assets/cinnamon/thumbnail{ctx.apply_suffix(DARK_LIGHT)}.svg", f"{output_dir}/cinnamon/thumbnail.png", ) @@ -328,11 +313,11 @@ def make_assets(ctx: BuildContext): dirs_exist_ok=True, ) shutil.copyfile( - f"{SRC_DIR}/assets/gtk/thumbnail{dark_suffix}.svg", + f"{SRC_DIR}/assets/gtk/thumbnail{ctx.apply_suffix(IS_DARK)}.svg", f"{output_dir}/gtk-3.0/thumbnail.png", ) shutil.copyfile( - f"{SRC_DIR}/assets/gtk/thumbnail{dark_suffix}.svg", + f"{SRC_DIR}/assets/gtk/thumbnail{ctx.apply_suffix(IS_DARK)}.svg", f"{output_dir}/gtk-4.0/thumbnail.png", ) @@ -388,23 +373,23 @@ def make_assets(ctx: BuildContext): for file in glob.glob(f"{SRC_DIR}/assets/cinnamon/common-assets/*.svg"): shutil.copy(file, f"{output_dir}/cinnamon/assets") - for file in glob.glob(f"{SRC_DIR}/assets/cinnamon/assets-{dark_suffix}/*.svg"): + for file in glob.glob(f"{SRC_DIR}/assets/cinnamon/assets{ctx.apply_suffix(IS_DARK)}/*.svg"): shutil.copy(file, f"{output_dir}/cinnamon/assets") for file in glob.glob(f"{SRC_DIR}/assets/gnome-shell/common-assets/*.svg"): shutil.copy(file, f"{output_dir}/gnome-shell/assets") - for file in glob.glob(f"{SRC_DIR}/assets/gnome-shell/assets-{dark_suffix}/*.svg"): + for file in glob.glob(f"{SRC_DIR}/assets/gnome-shell/assets{ctx.apply_suffix(IS_DARK)}/*.svg"): shutil.copy(file, f"{output_dir}/gnome-shell/assets") for file in glob.glob(f"{SRC_DIR}/assets/gtk/symbolics/*.svg"): shutil.copy(file, f"{output_dir}/gtk-3.0/assets") shutil.copy(file, f"{output_dir}/gtk-4.0/assets") - for file in glob.glob(f"{SRC_DIR}/assets/metacity-1/assets-{window_suffix}/*.svg"): + for file in glob.glob(f"{SRC_DIR}/assets/metacity-1/assets{ctx.apply_suffix(IS_WINDOW_NORMAL)}/*.svg"): shutil.copy(file, f"{output_dir}/metacity-1/assets") shutil.copy( - f"{SRC_DIR}/assets/metacity-1/thumbnail{dark_suffix}.png", + f"{SRC_DIR}/assets/metacity-1/thumbnail{ctx.apply_suffix(IS_DARK)}.png", f"{output_dir}/metacity-1/thumbnail.png", ) @@ -412,13 +397,13 @@ def make_assets(ctx: BuildContext): # {src_dir}/assets/xfwm4/assets{light_suffix}-Catppuccin/ # where assets-Light-Catppuccin will have latte # nad assets-Catppuccin will have mocha or something - for file in glob.glob(f"{SRC_DIR}/assets/xfwm4/assets{light_suffix}/*.png"): + for file in glob.glob(f"{SRC_DIR}/assets/xfwm4/assets{ctx.apply_suffix(IS_LIGHT)}/*.png"): shutil.copy(file, f"{output_dir}/xfwm4") - for file in glob.glob(f"{SRC_DIR}/assets/xfwm4/assets{light_suffix}-hdpi/*.png"): + for file in glob.glob(f"{SRC_DIR}/assets/xfwm4/assets{ctx.apply_suffix(IS_LIGHT)}-hdpi/*.png"): shutil.copy(file, f"{output_dir}-hdpi/xfwm4") - for file in glob.glob(f"{SRC_DIR}/assets/xfwm4/assets{light_suffix}-xhdpi/*.png"): + for file in glob.glob(f"{SRC_DIR}/assets/xfwm4/assets{ctx.apply_suffix(IS_LIGHT)}-xhdpi/*.png"): shutil.copy(file, f"{output_dir}-xhdpi/xfwm4") @@ -556,7 +541,7 @@ def parse_args(): "sapphire", "blue", "lavender", - "all" + "all", ], help="Accent of the theme.", ) @@ -599,13 +584,14 @@ def parse_args(): return parser.parse_args() + def main(): args = parse_args() if args.patch: apply_colloid_patches() palette = getattr(PALETTE, args.flavor) - accents=[ + accents = [ "rosewater", "flamingo", "pink", @@ -622,16 +608,16 @@ def main(): "lavender", ] - if args.accent == 'all': + if args.accent == "all": for accent in accents: accent = getattr(palette.colors, accent) tweaks = Tweaks(tweaks=args.tweaks) if args.zip: - output_format = 'zip' + output_format = "zip" else: - output_format = 'dir' + output_format = "dir" ctx = BuildContext( build_root=args.dest, @@ -640,7 +626,7 @@ def main(): accent=accent, size=args.size, tweaks=tweaks, - output_format=output_format + output_format=output_format, ) tweaks_temp() @@ -652,9 +638,9 @@ def main(): tweaks = Tweaks(tweaks=args.tweaks) if args.zip: - output_format = 'zip' + output_format = "zip" else: - output_format = 'dir' + output_format = "dir" ctx = BuildContext( build_root=args.dest, @@ -663,7 +649,7 @@ def main(): accent=accent, size=args.size, tweaks=tweaks, - output_format=output_format + output_format=output_format, ) logger.info("Building temp tweaks file") @@ -678,4 +664,4 @@ def main(): try: main() except Exception as e: - logger.error("Something went wrong when building the theme:", exc_info=e) \ No newline at end of file + logger.error("Something went wrong when building the theme:", exc_info=e) diff --git a/patches/colloid/palette.tera b/patches/colloid/palette.tera index 85e024a5..a2e0ee9e 100644 --- a/patches/colloid/palette.tera +++ b/patches/colloid/palette.tera @@ -16,35 +16,35 @@ index 00000000..8a905942 + +// Red +$red-light: #{{ palette.red.hex }}; -+$red-dark: #{{ palette.red | mod(lightness=30) | get(key="hex") }}; ++$red-dark: #{{ palette.red.hex }}; + +// Pink +$pink-light: #{{ palette.pink.hex }}; -+$pink-dark: #{{ palette.pink | mod(lightness=30) | get(key="hex") }}; ++$pink-dark: #{{ palette.pink.hex }}; + +// Purple +$purple-light: #{{ palette.mauve.hex }}; -+$purple-dark: #{{ palette.mauve | mod(lightness=30) | get(key="hex") }}; ++$purple-dark: #{{ palette.mauve.hex }}; + +// Blue +$blue-light: #{{ palette.blue.hex }}; -+$blue-dark: #{{ palette.blue | mod(lightness=30) | get(key="hex") }}; ++$blue-dark: #{{ palette.blue.hex }}; + +// Teal +$teal-light: #{{ palette.teal.hex }}; -+$teal-dark: #{{ palette.teal | mod(lightness=30) | get(key="hex") }}; ++$teal-dark: #{{ palette.teal.hex }}; + +// Green +$green-light: #{{ palette.green.hex }}; -+$green-dark: #{{ palette.green | mod(lightness=30) | get(key="hex") }}; ++$green-dark: #{{ palette.green.hex }}; + +// Yellow +$yellow-light: #{{ palette.yellow.hex }}; -+$yellow-dark: #{{ palette.yellow | mod(lightness=30) | get(key="hex") }}; ++$yellow-dark: #{{ palette.yellow.hex }}; + +// Orange +$orange-light: #{{ palette.peach.hex }}; -+$orange-dark: #{{ palette.peach | mod(lightness=30) | get(key="hex") }}; ++$orange-dark: #{{ palette.peach.hex }}; + +// Grey +$grey-050: #{{ palette.text.hex }}; diff --git a/patches/colloid/sass-palette-frappe.patch b/patches/colloid/sass-palette-frappe.patch index 048fb79e..824f0cc8 100644 --- a/patches/colloid/sass-palette-frappe.patch +++ b/patches/colloid/sass-palette-frappe.patch @@ -8,35 +8,35 @@ index 00000000..8a905942 + +// Red +$red-light: #e78284; -+$red-dark: #81191b; ++$red-dark: #e78284; + +// Pink +$pink-light: #f4b8e4; -+$pink-dark: #851567; ++$pink-dark: #f4b8e4; + +// Purple +$purple-light: #ca9ee6; -+$purple-dark: #58207a; ++$purple-dark: #ca9ee6; + +// Blue +$blue-light: #8caaee; -+$blue-dark: #143686; ++$blue-dark: #8caaee; + +// Teal +$teal-light: #81c8be; -+$teal-dark: #2f6b63; ++$teal-dark: #81c8be; + +// Green +$green-light: #a6d189; -+$green-dark: #466f2b; ++$green-dark: #a6d189; + +// Yellow +$yellow-light: #e5c890; -+$yellow-dark: #7d5d1d; ++$yellow-dark: #e5c890; + +// Orange +$orange-light: #ef9f76; -+$orange-dark: #8a3910; ++$orange-dark: #ef9f76; + +// Grey +$grey-050: #c6d0f5; diff --git a/patches/colloid/sass-palette-latte.patch b/patches/colloid/sass-palette-latte.patch index 40da31be..f8138a52 100644 --- a/patches/colloid/sass-palette-latte.patch +++ b/patches/colloid/sass-palette-latte.patch @@ -8,35 +8,35 @@ index 00000000..8a905942 + +// Red +$red-light: #d20f39; -+$red-dark: #900a27; ++$red-dark: #d20f39; + +// Pink +$pink-light: #ea76cb; -+$pink-dark: #851567; ++$pink-dark: #ea76cb; + +// Purple +$purple-light: #8839ef; -+$purple-dark: #440b8f; ++$purple-dark: #8839ef; + +// Blue +$blue-light: #1e66f5; -+$blue-dark: #073693; ++$blue-dark: #1e66f5; + +// Teal +$teal-light: #179299; -+$teal-dark: #148086; ++$teal-dark: #179299; + +// Green +$green-light: #40a02b; -+$green-dark: #317921; ++$green-dark: #40a02b; + +// Yellow +$yellow-light: #df8e1d; -+$yellow-dark: #885712; ++$yellow-dark: #df8e1d; + +// Orange +$orange-light: #fe640b; -+$orange-dark: #993901; ++$orange-dark: #fe640b; + +// Grey +$grey-050: #4c4f69; diff --git a/patches/colloid/sass-palette-macchiato.patch b/patches/colloid/sass-palette-macchiato.patch index 94e4b064..23bbd2d7 100644 --- a/patches/colloid/sass-palette-macchiato.patch +++ b/patches/colloid/sass-palette-macchiato.patch @@ -8,35 +8,35 @@ index 00000000..8a905942 + +// Red +$red-light: #ed8796; -+$red-dark: #861425; ++$red-dark: #ed8796; + +// Pink +$pink-light: #f5bde6; -+$pink-dark: #861467; ++$pink-dark: #f5bde6; + +// Purple +$purple-light: #c6a0f6; -+$purple-dark: #470d8d; ++$purple-dark: #c6a0f6; + +// Blue +$blue-light: #8aadf4; -+$blue-dark: #0d388d; ++$blue-dark: #8aadf4; + +// Teal +$teal-light: #8bd5ca; -+$teal-dark: #297166; ++$teal-dark: #8bd5ca; + +// Green +$green-light: #a6da95; -+$green-dark: #3a7228; ++$green-dark: #a6da95; + +// Yellow +$yellow-light: #eed49f; -+$yellow-dark: #835f17; ++$yellow-dark: #eed49f; + +// Orange +$orange-light: #f5a97f; -+$orange-dark: #8f390b; ++$orange-dark: #f5a97f; + +// Grey +$grey-050: #cad3f5; diff --git a/patches/colloid/sass-palette-mocha.patch b/patches/colloid/sass-palette-mocha.patch index c9e20740..c7f1ecb7 100644 --- a/patches/colloid/sass-palette-mocha.patch +++ b/patches/colloid/sass-palette-mocha.patch @@ -8,35 +8,35 @@ index 00000000..8a905942 + +// Red +$red-light: #f38ba8; -+$red-dark: #8c0e32; ++$red-dark: #f38ba8; + +// Pink +$pink-light: #f5c2e7; -+$pink-dark: #841667; ++$pink-dark: #f5c2e7; + +// Purple +$purple-light: #cba6f7; -+$purple-dark: #470d8d; ++$purple-dark: #cba6f7; + +// Blue +$blue-light: #89b4fa; -+$blue-dark: #063d94; ++$blue-dark: #89b4fa; + +// Teal +$teal-light: #94e2d5; -+$teal-dark: #21796a; ++$teal-dark: #94e2d5; + +// Green +$green-light: #a6e3a1; -+$green-dark: #2a7723; ++$green-dark: #a6e3a1; + +// Yellow +$yellow-light: #f9e2af; -+$yellow-dark: #8f650b; ++$yellow-dark: #f9e2af; + +// Orange +$orange-light: #fab387; -+$orange-dark: #943c06; ++$orange-dark: #fab387; + +// Grey +$grey-050: #cdd6f4;