blob: 1474ab3a2e99590e90dc77725071900d810a3a60 [file] [log] [blame]
#!/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()