mirror of
https://github.com/alacritty/alacritty.git
synced 2024-11-18 13:55:23 -05:00
113 lines
2.7 KiB
Python
113 lines
2.7 KiB
Python
|
#!/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()
|