feat: add python script for automation

This commit is contained in:
Pranav Santhosh
2022-12-07 20:12:01 +05:30
committed by GitHub
parent ddf996b0a4
commit b0e49b42a6
17720 changed files with 554 additions and 299897 deletions

77
scripts/create_theme.py Normal file
View File

@@ -0,0 +1,77 @@
import os
import shutil
import subprocess
from scripts.ctp_colors import ctp_colors
from scripts.recolor import recolor
from scripts.var import def_color_map, theme_name, tmp_dir, work_dir
def create_theme(type: str, accent: str, dest: str = tmp_dir, link: bool = False, name: str = theme_name, size: str = "compact", tweaks=['rimless']) -> str:
try:
os.makedirs(tmp_dir) # Create our temporary directory
except FileExistsError:
pass
# Recolor colloid wrt our selection like mocha. latte
recolor(ctp_colors[type], accent)
theme_style: str = "light" if type == "latte" else "dark"
install_cmd: str = f"./install.sh -c {theme_style} -s {size} -n {name} -d {dest} -t {def_color_map[accent]}"
if tweaks:
install_cmd += f" --tweaks {' '.join([tweak for tweak in tweaks])}"
os.chdir(work_dir)
# Install the theme globally for you
subprocess.call(install_cmd, shell=True)
# reset colloid repo to original state
subprocess.call("git reset --hard HEAD", shell=True)
try:
# Rename colloid generated files as per catppuccin
new_filename = f"{theme_name}-{type.capitalize()}-{size.capitalize()}-{accent.capitalize()}"
filename = f"{theme_name}"
if def_color_map[accent] != 'default':
filename += f"-{def_color_map[accent].capitalize()}"
filename += f"-{theme_style.capitalize()}"
if size == 'compact':
filename += '-Compact'
try:
shutil.rmtree(dest + "/" + new_filename + '-hdpi')
shutil.rmtree(dest + "/" + new_filename + '-xhdpi')
shutil.rmtree(dest + "/" + new_filename)
except:
pass
os.rename(dest + "/" + filename + '-hdpi',
dest + "/" + new_filename + '-hdpi')
os.rename(dest + "/" + filename + '-xhdpi',
dest + "/" + new_filename + '-xhdpi')
os.rename(dest + "/" + filename, dest + "/" + new_filename)
print("Successfully renamed file")
except Exception as e:
print("Failed to rename the files due to:", e)
return ""
if link:
try:
# Attempte relinking all the libadvaita files
subprocess.call(
'rm -rf "${HOME}/.config/gtk-4.0/"{assets,gtk.css,gtk-dark.css}', shell=True)
HOME = os.path.expanduser('~')
try:
os.makedirs(f"{HOME}/.config/gtk-4.0")
except FileExistsError:
pass
os.symlink(f"{dest + '/' + new_filename}/gtk-4.0/assets",
f"{HOME}/.config/gtk-4.0/assets")
os.symlink(f"{dest + '/' + new_filename}/gtk-4.0/gtk.css",
f"{HOME}/.config/gtk-4.0/gtk.css")
os.symlink(f"{dest + '/' + new_filename}/gtk-4.0/gtk-dark.css",
f"{HOME}/.config/gtk-4.0/gtk-dark.css")
print("Successfully created symlinks for libadvaita")
except Exception as e:
print("Failed to link due to :", e)
return ""
return new_filename

178
scripts/ctp_colors.py Normal file
View File

@@ -0,0 +1,178 @@
class Color:
def __init__(self, rosewater, flamingo, pink, mauve, red, maroon, peach,
yellow, green, teal, sky, sapphire, blue, lavender,
text, subtext0, subtext1, overlay0, overlay1, overlay2,
surface0, surface1, surface2, base, mantle, crust):
self.rosewater = rosewater # All accent colours
self.flamingo = flamingo
self.pink = pink
self.mauve = mauve
self.red = red
self.maroon = maroon
self.peach = peach
self.yellow = yellow
self.green = green
self.teal = teal
self.sky = sky
self.sapphire = sapphire
self.blue = blue
self.lavender = lavender
self.white = text
self.black = base
self.text = text # All remaining colors
self.subtext0 = subtext0
self.subtext1 = subtext1
self.overlay0 = overlay0
self.overlay1 = overlay1
self.overlay2 = overlay2
self.surface0 = surface0
self.surface1 = surface1
self.surface2 = surface2
self.base = base
self.mantle = mantle
self.crust = crust
self.color_map = {}
self.__create_color_map__()
# Function to create a map of colors to their names
def __create_color_map__(self):
for key, value in self.__dict__.items():
if key != "color_map":
self.color_map[key] = value
def get_accent(self):
accent = {}
for key, value in self.color_map.items():
if key not in ['white', 'black', 'text', 'subtext0', 'subtext1', 'overlay0', 'overlay1', 'overlay2', 'surface0', 'surface1', 'surface2', 'base', 'mantle', 'crust']:
accent[key] = value
return accent
# Light =
latte = Color(
rosewater="#dc8a78",
flamingo="#dd7878",
pink="#ea76cb",
mauve="#8839ef",
red="#d20f39",
maroon="#e64553",
peach="#fe640b",
yellow="#df8e1d",
green="#40a02b",
teal="#179299",
sky="#04a5e5",
sapphire="#209fb5",
blue="#1e66f5",
lavender="#7287fd",
text="#4c4f69",
subtext0="#6c6f85",
subtext1="#5c5f77",
overlay0="#9ca0b0",
overlay1="#8c8fa1",
overlay2="#7c7f93",
surface0="#ccd0da",
surface1="#bcc0cc",
surface2="#acb0be",
base="#eff1f5",
mantle="#e6e9ef",
crust="#dce0e8",
)
# Dark
mocha = Color(
rosewater="#f5e0dc",
flamingo="#f2cdcd",
pink="#f5c2e7",
mauve="#cba6f7",
red="#f38ba8",
maroon="#eba0ac",
peach="#fab387",
yellow="#f9e2af",
green="#a6e3a1",
teal="#94e2d5",
sky="#89dceb",
sapphire="#74c7ec",
blue="#89b4fa",
lavender="#b4befe",
text="#cdd6f4",
subtext0="#a6adc8",
subtext1="#bac2de",
overlay0="#6c7086",
overlay1="#7f849c",
overlay2="#9399b2",
surface0="#313244",
surface1="#45475a",
surface2="#585b70",
base="#1e1e2e",
mantle="#181825",
crust="#11111b",
)
frappe = Color(
rosewater="#f2d5cf",
flamingo="#eebebe",
pink="#f4b8e4",
mauve="#ca9ee6",
red="#e78284",
maroon="#ea999c",
peach="#ef9f76",
yellow="#e5c890",
green="#a6d189",
teal="#81c8be",
sky="#99d1db",
sapphire="#85c1dc",
blue="#8caaee",
lavender="#babbf1",
text="#c6d0f5",
subtext0="#a5adce",
subtext1="#b5bfe2",
overlay0="#a5adce",
overlay1="#838ba7",
overlay2="#949cbb",
surface0="#414559",
surface1="#51576d",
surface2="#626880",
base="#303446",
mantle="#292c3c",
crust="#232634"
)
macchiato = Color(
rosewater="#f4dbd6",
flamingo="#f0c6c6",
pink="#f5bde6",
mauve="#c6a0f6",
red="#ed8796",
maroon="#ee99a0",
peach="#f5a97f",
yellow="#eed49f",
green="#a6da95",
teal="#8bd5ca",
sky="#91d7e3",
sapphire="#7dc4e4",
blue="#8aadf4",
lavender="#b7bdf8",
text="#cad3f5",
subtext0="#a5adcb",
subtext1="#b8c0e0",
overlay0="#6e738d",
overlay1="#8087a2",
overlay2="#939ab7",
surface0="#363a4f",
surface1="#494d64",
surface2="#5b6078",
base="#24273a",
mantle="#1e2030",
crust="#181926"
)
ctp_colors = {
"latte": latte,
"mocha": mocha,
"frappe": frappe,
"macchiato": macchiato
}

138
scripts/recolor.py Normal file
View File

@@ -0,0 +1,138 @@
from .ctp_colors import Color, latte, mocha
from .utils import replacetext
from .var import src_dir, theme_name, work_dir, def_accent_dark, def_accent_light, def_color_map
def recolor_accent(color: Color, file: str, accent: str = "blue"):
"""
Recolors the accent color in a file.
color:
The color scheme to recolor to. Like mocha, frappe, latte, etc.
file:
The file to modify
accent:
The accent color to replace. Defaults to Blue
"""
print(f"Recoloring accent for {file}...")
# Recolor as per accent for light. Hard code it as latte
replacetext(file, def_accent_light[def_color_map[accent]], latte.color_map[accent])
# Recolor as per base for dark theme.
replacetext(file, def_accent_dark[def_color_map[accent]], color.color_map[accent])
def recolor(color: Color, accent: str):
"""
Recolor the theme. currently hard code it frappe
"""
global latte
print("Recoloring to suit catppuccin theme")
replacetext(f"{work_dir}/install.sh", "Colloid", theme_name)
print("MOD: Gtkrc.sh")
# Recolor as per accent for dark
recolor_accent(color, f"{work_dir}/gtkrc.sh", accent)
replacetext(f"{work_dir}/gtkrc.sh", "background_light='#FFFFFF'",
f"background_light='{latte.base}'") # use latte_base for background_light
replacetext(f"{work_dir}/gtkrc.sh", "background_dark='#0F0F0F'",
f"background_dark='{color.base}'")
replacetext(f"{work_dir}/gtkrc.sh", "background_darker='#121212'",
f"background_darker='{color.mantle}'")
replacetext(f"{work_dir}/gtkrc.sh",
"background_alt='#212121'", f"background_alt='{color.crust}'")
replacetext(f"{work_dir}/gtkrc.sh", "titlebar_light='#F2F2F2'",
f"titlebar_light='{latte.crust}'") # use latte_crust for titlebar_light
replacetext(f"{work_dir}/gtkrc.sh", "titlebar_dark='#030303'",
f"titlebar_dark='{color.crust}'")
replacetext(f"{work_dir}/gtkrc.sh", "background_dark='#2C2C2C'",
f"background_dark='{color.base}'")
replacetext(f"{work_dir}/gtkrc.sh", "background_darker='#3C3C3C'",
f"background_darker='{color.mantle}'")
replacetext(f"{work_dir}/gtkrc.sh",
"background_alt='#464646'", f"background_alt='{color.crust}'")
replacetext(f"{work_dir}/gtkrc.sh",
"titlebar_light='#F2F2F2'", f"titlebar_light='{latte.crust}'")
replacetext(f"{work_dir}/gtkrc.sh",
"titlebar_dark='#242424'", f"titlebar_dark='{color.crust}'")
print("Mod SASS Color_Palette_default")
recolor_accent(
color, f"{src_dir}/sass/_color-palette-default.scss", accent)
# Greys
if color == latte: # Hardcode till someone smarter than me comes along
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-050: #FAFAFA", f"grey-050: {color.crust}")
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-100: #F2F2F2", f"grey-100: {color.mantle}")
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-150: #EEEEEE", f"grey-150: {color.base}")
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-200: #DDDDDD", f"grey-200: {color.surface0}") # Surface 0 Late
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-250: #CCCCCC", f"grey-250: {color.surface1}") # D = Surface 1 Late
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-650: #3C3C3C", f"grey-650: {mocha.surface0}") # H $surface $tooltip
replacetext(f"{src_dir}/sass/_color-palette-default.scss", "grey-700: #2C2C2C",
f"grey-700: {mocha.base}") # G $background; $base; titlebar-backdrop; $popover
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-750: #242424", f"grey-750: {mocha.crust}") # F $base-alt
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-800: #212121", f"grey-800: {mocha.crust}") # E $panel-solid;p
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-850: #121212", f"grey-850: {mocha.surface1}") # H Darknes
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-900: #0F0F0F", f"grey-900: {mocha.base}") # G Darknes
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-950: #030303", f"grey-950: {mocha.crust}") # F Darknes
else:
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-050: #FAFAFA", f"grey-050: {color.overlay2}")
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-100: #F2F2F2", f"grey-100: {color.overlay1}")
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-150: #EEEEEE", f"grey-150: {color.overlay0}")
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-200: #DDDDDD", f"grey-200: {color.surface2}") # Surface 0 Late
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-250: #CCCCCC", f"grey-250: {color.surface1}") # D = Surface 1 Late
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-650: #3C3C3C", f"grey-650: {color.surface0}") # H $surface $tooltip
replacetext(f"{src_dir}/sass/_color-palette-default.scss", "grey-700: #2C2C2C",
f"grey-700: {color.base}") # G $background; $base; titlebar-backdrop; $popover
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-750: #242424", f"grey-750: {color.crust}") # F $base-alt
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-800: #212121", f"grey-800: {color.crust}") # E $panel-solid;p
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-850: #121212", f"grey-850: {color.surface1}") # H Darknes
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-900: #0F0F0F", f"grey-900: {color.base}") # G Darknes
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"grey-950: #030303", f"grey-950: {color.crust}") # F Darknes
# I personally do not like this but this seems more accurate
replacetext(f"{src_dir}/sass/_color-palette-default.scss", "white: #FFFFFF", f"white: {color.white}")
replacetext(f"{src_dir}/sass/_color-palette-default.scss", "black: #FFFFFF", f"black: {color.black}")
# Buttons
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"button-close: #fd5f51", f"button-close: {color.red}")
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"button-max: #38c76a", f"button-max: {color.green}")
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
"button-min: #fdbe04", f"button-min: {color.yellow}")
print("Mod Accent Cinnamon")
recolor_accent(color, f"{src_dir}/assets/cinnamon/make-assets.sh", accent)
print("Mod Accent Gnome shell")
recolor_accent(
color, f"{src_dir}/assets/gnome-shell/make-assets.sh", accent)
print("Mod Accent GTK")
recolor_accent(color, f"{src_dir}/assets/gtk/make-assets.sh", accent)
print("Mod Accent GTK 2.0")
recolor_accent(color, f"{src_dir}/assets/gtk-2.0/make-assets.sh", accent)

22
scripts/utils.py Normal file
View File

@@ -0,0 +1,22 @@
import re
def replacetext(file_name: str, search_text: str, replace_text: str) -> None:
"""
Helper function to replace the color in the file.
Can be used to replace any text in the file.
Args:
file_name (str): The file to replace the text in.
search_text (str): The text to be replaced.
replace_text (str): The text to replace with.
Returns:
None
"""
with open(file_name, 'r+') as f:
file = f.read()
file = re.sub(search_text, replace_text, file)
f.seek(0)
f.write(file)
f.truncate()

50
scripts/var.py Normal file
View File

@@ -0,0 +1,50 @@
import os
repo_dir = os.getcwd()
work_dir = f"{repo_dir}/colloid"
src_dir = f"{work_dir}/src"
tmp_dir = f"{repo_dir}/releases"
theme_name = "Catppuccin"
# Map catppuccin colors to colloid ones
# These are mostly unused except for resources for lower gtk versions.
# These assets are in png format and I am not really interested right now to recolor them using opencv
# Maybe someone more motivated can follow through
def_color_map = {
'rosewater': 'pink',
'flamingo': 'pink',
'pink': 'pink',
'mauve': 'purple',
'red': 'red',
'maroon': 'red',
'peach': 'orange',
'yellow': 'yellow',
'green': 'green',
'teal': 'teal',
'sky': 'teal',
'sapphire': 'default',
'blue': 'default',
'lavender': 'default'}
def_accent_light = {
'default': '#3c84f7',
'purple': '#AB47BC',
'pink': '#EC407A',
'red': '#E53935',
'orange': '#F57C00',
'yellow': '#FBC02D',
'green': '#4CAF50',
'teal': '#009688'
}
def_accent_dark = {
'default': '#5b9bf8',
'purple': '#BA68C8',
'pink': '#F06292',
'red': '#F44336',
'orange': '#FB8C00',
'yellow': '#FFD600',
'green': '#66BB6A',
'teal': '#4DB6AC'
}