92 lines
1.8 KiB
Python
92 lines
1.8 KiB
Python
#!/usr/bin/env python
|
|
import os
|
|
import sys
|
|
|
|
import yaml
|
|
|
|
|
|
ALACRITTY_CONFIG = os.path.expanduser("~/.config/alacritty/alacritty.yml")
|
|
|
|
|
|
class Action:
|
|
mutating = False
|
|
def __init__(self, path):
|
|
self.path = path
|
|
|
|
def traverse(self, yml):
|
|
for p in self.path:
|
|
yml = yml[p]
|
|
return yml
|
|
|
|
|
|
class ShowAction(Action):
|
|
def act_on(self, yml):
|
|
yml = self.traverse(yml)
|
|
if type(yml) is dict:
|
|
print(yaml.dump(yml))
|
|
else:
|
|
print(yml)
|
|
|
|
|
|
class EditAction(Action):
|
|
mutating = True
|
|
def __init__(self, path):
|
|
self.path = path[:-1]
|
|
self.prop = path[-1]
|
|
|
|
|
|
class AddAction(EditAction):
|
|
def __init__(self, path, val):
|
|
super().__init__(path)
|
|
self.val = yaml.safe_load(val)
|
|
|
|
def act_on(self, yml):
|
|
yml = self.traverse(yml)
|
|
yml[self.prop] = self.val
|
|
|
|
|
|
class DeleteAction(EditAction):
|
|
def act_on(self, yml):
|
|
yml = self.traverse(yml)
|
|
del yml[self.prop]
|
|
|
|
|
|
def parse_path(p):
|
|
if p.isdigit():
|
|
return int(p)
|
|
return p
|
|
|
|
|
|
def parse_action():
|
|
args = sys.argv
|
|
|
|
if len(args) == 1:
|
|
return ShowAction([])
|
|
|
|
path = [parse_path(a) for a in args[1].split('.')]
|
|
if len(args) == 2:
|
|
return ShowAction(path)
|
|
|
|
if len(args) == 3 and args[2] == '--delete':
|
|
return DeleteAction(path)
|
|
|
|
return AddAction(path, args[2])
|
|
|
|
|
|
def main():
|
|
action = parse_action()
|
|
|
|
try:
|
|
with open(ALACRITTY_CONFIG) as f:
|
|
y = yaml.safe_load(f.read())
|
|
action.act_on(y)
|
|
if action.mutating:
|
|
with open(ALACRITTY_CONFIG, "w+") as f:
|
|
f.write(yaml.dump(y))
|
|
except KeyError as e:
|
|
print('Key "{}" was not found in alacritty config!'.format(e))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|