mirror of
https://github.com/alacritty/alacritty.git
synced 2024-11-18 13:55:23 -05:00
Add script to apply a tilix colorscheme file. (#524)
This commit is contained in:
parent
7223d44cb2
commit
8c2305844c
1 changed files with 112 additions and 0 deletions
112
scripts/apply-tilix-colorscheme.py
Executable file
112
scripts/apply-tilix-colorscheme.py
Executable file
|
@ -0,0 +1,112 @@
|
|||
#!/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()
|
Loading…
Reference in a new issue