#!/usr/bin/env python3 import re import json from pathlib import Path INDENT = 2 SPACE = " " NEWLINE = "\n" def to_json(o, level=0): ret = "" if isinstance(o, dict): ret += "{" + NEWLINE comma = "" for k, v in o.items(): ret += comma comma = ",\n" ret += SPACE * INDENT * (level+1) ret += '"' + str(k) + '":' + SPACE ret += to_json(v, level + 1) ret += NEWLINE + SPACE * INDENT * level + "}" elif isinstance(o, str): ret += '"' + o + '"' elif isinstance(o, list): ret += "[" + ",".join([to_json(e, level+1) for e in o]) + "]" elif isinstance(o, bool): ret += "true" if o else "false" elif isinstance(o, int): ret += str(o) elif isinstance(o, float): ret += '%.7g' % o elif o is None: ret += 'null' else: raise TypeError("Unknown type '%s' for json serialization" % str(type(o))) return ret def cterm(cname: str) -> int: if cname == "background": return 0 if cname == "foreground": return 15 if cname == "selection_background": return 2 if cname == "selection_foreground": return 15 if cname == "cursor": return 2 if "color" in cname: return int(cname.strip("color")) def parse_kitty_theme(name: str, theme: str) -> dict: d = {} for line in theme.splitlines(): colorname, colorhex = line.split() d[f"kitty:{colorname}"] = [cterm(colorname), colorhex[1:]] return d def get_kitty_theme() -> Path: kitty_conf = Path.home() / ".config" / "kitty" / "kitty.conf" txt = kitty_conf.read_text() match = re.search(r"include (\./themes/.*.conf)", txt) theme_name = match.groups()[0] print("theme_name: ", theme_name) theme_path = kitty_conf.parent / theme_name print("theme_path: ", theme_path) return theme_path if __name__ == "__main__": f = get_kitty_theme() colors_file = Path(__file__).parent / "colors.json" powerline_colors = json.loads(colors_file.read_text()) kitty_colors = parse_kitty_theme(f.stem, f.read_text()) powerline_colors["colors"].update(kitty_colors) colors_file.write_text(to_json(powerline_colors))