mirror of
https://github.com/Mayccoll/Gogh.git
synced 2023-08-10 21:12:46 +03:00
Add tools to build themes
This commit is contained in:
parent
7111b3520e
commit
0e15f9930a
40
tools/generatJson.py
Normal file
40
tools/generatJson.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
import os
|
||||||
|
import json
|
||||||
|
import yaml
|
||||||
|
import hashlib
|
||||||
|
|
||||||
|
source_path = "../themes-yml"
|
||||||
|
dest_path = "../data/themes.json"
|
||||||
|
themes = []
|
||||||
|
|
||||||
|
os.remove(dest_path)
|
||||||
|
|
||||||
|
for filename in os.listdir(source_path):
|
||||||
|
if filename.endswith(".yml"):
|
||||||
|
with open(os.path.join(source_path, filename), "r") as f:
|
||||||
|
data = yaml.safe_load(f)
|
||||||
|
# Concatenate values of each key
|
||||||
|
values = ''
|
||||||
|
for key in data:
|
||||||
|
values += str(data[key])
|
||||||
|
|
||||||
|
# Generate SHA-256 hash
|
||||||
|
hash_object = hashlib.sha256(values.encode())
|
||||||
|
hash_hex = hash_object.hexdigest()
|
||||||
|
|
||||||
|
theme = {f"{key}": data[key] for key in data if key.startswith("color")}
|
||||||
|
theme.update({
|
||||||
|
"name": data["name"],
|
||||||
|
"foreground": data["foreground"],
|
||||||
|
"background": data["background"],
|
||||||
|
"cursorColor": data["cursor"],
|
||||||
|
"hash": hash_hex
|
||||||
|
})
|
||||||
|
themes.append(theme)
|
||||||
|
|
||||||
|
themes = sorted(themes, key=lambda x: x["name"])
|
||||||
|
|
||||||
|
json_data = {"themes": themes}
|
||||||
|
|
||||||
|
with open(dest_path, "w") as f:
|
||||||
|
json.dump(json_data, f)
|
106
tools/generateShFiles.py
Normal file
106
tools/generateShFiles.py
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
from unidecode import unidecode
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
folder_path = "../themes-yml"
|
||||||
|
dest_path = '../themes'
|
||||||
|
themes = []
|
||||||
|
|
||||||
|
# List files and directories in the folder
|
||||||
|
folder_contents = os.listdir(dest_path)
|
||||||
|
|
||||||
|
# Delete each file in the folder
|
||||||
|
for item in folder_contents:
|
||||||
|
item_path = os.path.join(dest_path, item)
|
||||||
|
if os.path.isfile(item_path):
|
||||||
|
os.remove(item_path)
|
||||||
|
|
||||||
|
for filename in os.listdir(folder_path):
|
||||||
|
if filename.endswith(".yml"):
|
||||||
|
with open(os.path.join(folder_path, filename), "r") as f:
|
||||||
|
data = yaml.safe_load(f)
|
||||||
|
theme = {f"{key}": data[key] for key in data if key.startswith("color")}
|
||||||
|
theme.update({
|
||||||
|
"name": data["name"],
|
||||||
|
"foreground": data["foreground"],
|
||||||
|
"background": data["background"],
|
||||||
|
"cursorColor": data["cursor"]
|
||||||
|
})
|
||||||
|
themes.append(theme)
|
||||||
|
|
||||||
|
themes = sorted(themes, key=lambda x: x["name"])
|
||||||
|
|
||||||
|
colors_data = {"themes": themes}
|
||||||
|
|
||||||
|
|
||||||
|
# create a template string for the shell script
|
||||||
|
template = """\
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
export PROFILE_NAME="{name}"
|
||||||
|
|
||||||
|
export COLOR_01="{color_01}" # Black (Host)
|
||||||
|
export COLOR_02="{color_02}" # Red (Syntax string)
|
||||||
|
export COLOR_03="{color_03}" # Green (Command)
|
||||||
|
export COLOR_04="{color_04}" # Yellow (Command second)
|
||||||
|
export COLOR_05="{color_05}" # Blue (Path)
|
||||||
|
export COLOR_06="{color_06}" # Magenta (Syntax var)
|
||||||
|
export COLOR_07="{color_07}" # Cyan (Prompt)
|
||||||
|
export COLOR_08="{color_08}" # White
|
||||||
|
|
||||||
|
export COLOR_09="{color_09}" # Bright Black
|
||||||
|
export COLOR_10="{color_10}" # Bright Red (Command error)
|
||||||
|
export COLOR_11="{color_11}" # Bright Green (Exec)
|
||||||
|
export COLOR_12="{color_12}" # Bright Yellow
|
||||||
|
export COLOR_13="{color_13}" # Bright Blue (Folder)
|
||||||
|
export COLOR_14="{color_14}" # Bright Magenta
|
||||||
|
export COLOR_15="{color_15}" # Bright Cyan
|
||||||
|
export COLOR_16="{color_16}" # Bright White
|
||||||
|
|
||||||
|
export BACKGROUND_COLOR="{background}" # Background
|
||||||
|
export FOREGROUND_COLOR="{foreground}" # Foreground (Text)
|
||||||
|
|
||||||
|
export CURSOR_COLOR="{cursorColor}" # Cursor
|
||||||
|
|
||||||
|
# | ===========================================================================
|
||||||
|
# | Apply Colors
|
||||||
|
# | ===========================================================================
|
||||||
|
SCRIPT_PATH="${{SCRIPT_PATH:-$(cd "$(dirname "${{BASH_SOURCE[0]}}")" && pwd)}}"
|
||||||
|
PARENT_PATH="$(dirname "${{SCRIPT_PATH}}")"
|
||||||
|
|
||||||
|
# Allow developer to change url to forked url for easier testing
|
||||||
|
# IMPORTANT: Make sure you export this variable if your main shell is not bash
|
||||||
|
BASE_URL=${{BASE_URL:-"https://raw.githubusercontent.com/Gogh-Co/Gogh/master"}}
|
||||||
|
|
||||||
|
|
||||||
|
if [[ -e "${{PARENT_PATH}}/apply-colors.sh" ]]; then
|
||||||
|
bash "${{PARENT_PATH}}/apply-colors.sh"
|
||||||
|
else
|
||||||
|
if [[ "$(uname)" = "Darwin" ]]; then
|
||||||
|
# OSX ships with curl and ancient bash
|
||||||
|
bash -c "$(curl -so- "${{BASE_URL}}/apply-colors.sh")"
|
||||||
|
else
|
||||||
|
# Linux ships with wget
|
||||||
|
bash -c "$(wget -qO- "${{BASE_URL}}/apply-colors.sh")"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
"""
|
||||||
|
|
||||||
|
# loop over the color schemes and create a new shell script for each one
|
||||||
|
for scheme in colors_data['themes']:
|
||||||
|
# convert the scheme name to lowercase, replace spaces with dashes, remove accents, and replace non-alphanumeric characters with underscores
|
||||||
|
filename = re.sub(r'[^a-zA-Z0-9]+', '-', unidecode(scheme['name']).lower().replace(' ', '-'))
|
||||||
|
filename = re.sub(r'[-]+', '-', filename).strip('-')
|
||||||
|
filename = f"{dest_path}/{filename}.sh"
|
||||||
|
with open(filename, 'w') as f:
|
||||||
|
f.write(template.format(**scheme))
|
||||||
|
|
||||||
|
# Find all files with ".sh" extension in the folder
|
||||||
|
files = [f for f in os.listdir(dest_path) if os.path.isfile(os.path.join(dest_path, f)) and f.endswith('.sh')]
|
||||||
|
|
||||||
|
# Change permissions on each file
|
||||||
|
for f in files:
|
||||||
|
subprocess.run(['chmod', '775', os.path.join(dest_path, f)])
|
Loading…
Reference in New Issue
Block a user