75 lines
2.3 KiB
Python
75 lines
2.3 KiB
Python
import argparse
|
|
import inspect
|
|
import json
|
|
import tomllib as toml
|
|
from pathlib import Path
|
|
|
|
|
|
# separation sequences to use base on app
|
|
app_sep_map = {
|
|
'kitty': ' ',
|
|
}
|
|
|
|
def generate_theme_files():
|
|
basepath = get_running_path()
|
|
|
|
# set arg conditional variables
|
|
palette_path = Path(basepath, 'themes', args.palette)
|
|
colors_path = Path(palette_path, 'colors.json')
|
|
theme_app = args.app
|
|
|
|
template_path = None
|
|
output_path = None
|
|
|
|
if args.template is None:
|
|
template_path = Path(palette_path, 'apps', theme_app, 'templates')
|
|
else:
|
|
template_path = Path(args.template).resolve()
|
|
|
|
if args.output is None:
|
|
output_path = Path(palette_path, 'apps', theme_app, 'generated')
|
|
else:
|
|
output_path = Path(args.output).resolve()
|
|
|
|
# check paths
|
|
if not colors_path.exists():
|
|
print(f'Resolved colors path [{colors_path}] doesn\'t exist, exiting')
|
|
return
|
|
|
|
if not template_path.exists():
|
|
print(f'Template path [{template_path}] doesn\'t exist, exiting')
|
|
return
|
|
|
|
if not output_path.exists() or not output_path.is_dir():
|
|
print(f'Output path [{output_path}] doesn\'t exist or not a directory, exiting')
|
|
return
|
|
|
|
print(f'Using palette colors [{colors_path}]')
|
|
print(f'-> with templates in [{template_path}]')
|
|
print(f'-> to output path [{output_path}]\n')
|
|
|
|
# load external files (JSON, TOML)
|
|
colors_json = json.load(colors_path.open())
|
|
|
|
# get all matching TOML files
|
|
template_list = [template_path]
|
|
if template_path.is_dir():
|
|
template_list = template_path.rglob('*.toml')
|
|
|
|
for template_path in template_list:
|
|
template_toml = toml.load(template_path.open('rb'))
|
|
|
|
# lookup app-specific config separator
|
|
config_sep = app_sep_map.get(theme_app, ' ')
|
|
output_lines = []
|
|
for config_key, color_key in template_toml.items():
|
|
color_value = colors_json
|
|
for _key in color_key.split('.'):
|
|
color_value = color_value.get(_key, {})
|
|
output_lines.append(f'{config_key}{config_sep}{color_value}')
|
|
|
|
output_file = Path(output_path, template_path.stem).with_suffix('.conf')
|
|
output_file.write_text('\n'.join(output_lines))
|
|
print(f'[{len(output_lines)}] lines written to [{output_file}] for app [{theme_app}]')
|
|
|