62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
"""Convert themes from convert-themes/registry.json into src/tui/themes/*.json"""
|
|
import json
|
|
import re
|
|
from pathlib import Path
|
|
|
|
REGISTRY_PATH = Path("convert-themes/registry.json")
|
|
OUTPUT_DIR = Path("src/tui/themes")
|
|
|
|
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
|
|
|
|
if not REGISTRY_PATH.exists():
|
|
print(f"Error: {REGISTRY_PATH} not found.")
|
|
exit(1)
|
|
|
|
with open(REGISTRY_PATH, "r", encoding="utf-8") as f:
|
|
data = json.load(f)
|
|
|
|
themes_list = data.get("themes", [])
|
|
converted_count = 0
|
|
|
|
for item in themes_list:
|
|
name = item.get("name")
|
|
if not name:
|
|
continue
|
|
|
|
dark = item.get("dark") or item.get("light") or {}
|
|
if not dark:
|
|
continue
|
|
|
|
theme_id = re.sub(r'[^a-z0-9\-]', '', name.lower().replace(' ', '-'))
|
|
if not theme_id:
|
|
continue
|
|
|
|
background = dark.get("mSurfaceVariant") or dark.get("mSurface") or "#1e1e1e"
|
|
surface = dark.get("mSurface") or "#252526"
|
|
primary = dark.get("mPrimary") or "#3b82f6"
|
|
primary_text = dark.get("mOnPrimary") or "#ffffff"
|
|
secondary = dark.get("mSecondary") or "#64748b"
|
|
accent = dark.get("mTertiary") or dark.get("mHover") or primary
|
|
folder_header = accent
|
|
folder_text = dark.get("mOnTertiary") or dark.get("mOnHover") or "#ffffff"
|
|
|
|
theme_dict = {
|
|
"id": theme_id,
|
|
"name": name,
|
|
"background": background,
|
|
"surface": surface,
|
|
"primary": primary,
|
|
"primary_text": primary_text,
|
|
"secondary": secondary,
|
|
"accent": accent,
|
|
"folder_header": folder_header,
|
|
"folder_text": folder_text
|
|
}
|
|
|
|
out_file = OUTPUT_DIR / f"{theme_id}.json"
|
|
with open(out_file, "w", encoding="utf-8") as f_out:
|
|
json.dump(theme_dict, f_out, indent=2)
|
|
converted_count += 1
|
|
|
|
print(f"Successfully converted {converted_count} themes to {OUTPUT_DIR}/!")
|