| #!/usr/bin/env python3 |
| |
| import collections |
| import logging |
| import shutil |
| import json |
| import sys |
| import os |
| |
| import yaml |
| |
| log = logging.getLogger(__name__) |
| |
| XDG_CONFIG_HOME = os.environ.get('XDG_CONFIG_HOME', os.path.expanduser('~/.config')) |
| ALACONF_FN = os.path.join(XDG_CONFIG_HOME, 'alacritty', 'alacritty.yml') |
| |
| Palette = collections.namedtuple('Pallete', ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white']) |
| |
| |
| class AttrDict(dict): |
| """ |
| >>> m = AttrDict(omg=True, whoa='yes') |
| """ |
| |
| def __init__(self, *args, **kwargs): |
| super(AttrDict, self).__init__(*args, **kwargs) |
| self.__dict__ = self |
| |
| |
| def slurp_yaml(fn): |
| with open(fn, 'r') as fh: |
| # JSON is a subset of YAML. |
| contents = yaml.load(fh) |
| return contents |
| |
| |
| def fixup_hex_color(*args): |
| for arg in args: |
| val = '0x%s' % arg.strip('#') |
| yield val |
| |
| |
| def convert(tilix_scheme): |
| j = AttrDict(tilix_scheme) |
| palette = list(fixup_hex_color(*j.palette)) |
| |
| pal_normal = Palette(*palette[:8]) |
| pal_bold = Palette(*palette[8:]) |
| |
| colors = { |
| 'primary': dict(zip( |
| ['background', 'foreground'], |
| fixup_hex_color(j['background-color'], j['foreground-color']), |
| )), |
| 'cursor': dict(zip( |
| ['text', 'cursor'], |
| fixup_hex_color(j['cursor-background-color'], j['cursor-foreground-color']), |
| )), |
| 'normal': dict(pal_normal._asdict()), |
| 'bright': dict(pal_bold._asdict()), |
| } |
| |
| return colors |
| |
| |
| def patch_alaconf_colors(colors, alaconf_fn=ALACONF_FN): |
| with open(alaconf_fn, 'r') as fh: |
| ac_raw = fh.read() |
| |
| # Write config file taking care to not remove delicious comments. |
| # Sure, it's janky, but less so than losing comments. |
| skipping = False |
| lines = [] |
| for line in ac_raw.splitlines(): |
| if skipping: |
| if line and line[0].isalpha(): |
| skipping = False |
| |
| elif line.startswith('colors:'): |
| skipping = True |
| |
| if not skipping: |
| if not line and lines and not lines[-1]: |
| continue |
| lines.append(line) |
| |
| temp_fn = '%s.tmp' % alaconf_fn |
| backup_fn = '%s.bak' % alaconf_fn |
| |
| with open(temp_fn, 'w') as fh: |
| fh.write('\n'.join(lines)) |
| fh.write('\n') |
| yaml.safe_dump(dict(colors=colors), fh) |
| |
| shutil.copyfile(alaconf_fn, backup_fn) |
| os.rename(temp_fn, alaconf_fn) |
| |
| |
| def main(argv=sys.argv): |
| if len(argv) != 2: |
| print("Usage: %s TILIX_SCHEME_JSON_FILE" % sys.executable, file=sys.stderr) |
| sys.exit(1) |
| |
| fn = argv[1] |
| |
| tilix_scheme = slurp_yaml(fn) |
| colors = convert(tilix_scheme) |
| patch_alaconf_colors(colors) |
| |
| |
| if __name__ == '__main__': |
| main() |