From 4a1cee9d297c1c876d1b3c1867fd54d01a129b9f Mon Sep 17 00:00:00 2001 From: Peter van der Meulen Date: Tue, 22 Nov 2022 22:14:47 +0100 Subject: [PATCH] Fix Alacritty configuration script and docs Alacritty looks for its configuration files in a small range of folders on OSX and other unix systems When getting started with this project I noticed that on OSX the user_config_dir defaults to "[/Users/username/Library/Application Support](https://github.com/ActiveState/appdirs#some-example-output)" This location is not among the locations Alacritty looks for according to [their own docs](https://github.com/alacritty/alacritty#configuration), so installing a theme was bit of a pain. I moved some stuff around to make the install script a little bit smarter, I then also created a requirements.txt file to go along with the python file to make sure users know what dependencies work with the script. Installation of a theme also performs destructive/constructive actions on the main configuration file for Alacritty so I also included a little prompt for the user to double check if they really really want to write to the config file. Lastly I updated the installation instructions to help alacritty users get started Unrelated (biased) side-point: Most Unix terminal config lives in ~/.config/your_app_name these days. `src` is bit of a weird name for a pretty specific theme engine on someone's computer. I'm not going to make the change here, but I would deffo reccomend updating documentation and scripts to install Gogh to the config DIR instead. --- README.md | 12 ++++++-- apply-alacritty.py | 74 +++++++++++++++++++++++++++++++++++++++------- requirements.txt | 2 ++ 3 files changed, 76 insertions(+), 12 deletions(-) create mode 100644 requirements.txt diff --git a/README.md b/README.md index 21c1ba8..8afc029 100644 --- a/README.md +++ b/README.md @@ -57,11 +57,18 @@ bash -c "$(curl -sLo- https://git.io/vQgMr)" mkdir -p "$HOME/src" cd "$HOME/src" git clone https://github.com/Gogh-Co/Gogh.git gogh -cd gogh/themes +cd gogh -# necessary on ubuntu +# necessary in the Gnome terminal on ubuntu export TERMINAL=gnome-terminal +# necessary in the Alacritty terminal +pip install -r requirements.txt +export TERMINAL=alacritty + +# Enter themes dir +cd themes + # install themes ./atom.sh ./dracula.sh @@ -69,6 +76,7 @@ export TERMINAL=gnome-terminal ## 💻 Terminals +- Alacritty - [Web](https://github.com/alacritty/alacritty) - Cygwin - [Web](https://www.cygwin.com/) - Foot - [Web](https://codeberg.org/dnkl/foot) - Gnome - [Web](https://help.gnome.org/users/gnome-terminal/stable/) diff --git a/apply-alacritty.py b/apply-alacritty.py index 4ce475d..88173ec 100755 --- a/apply-alacritty.py +++ b/apply-alacritty.py @@ -1,23 +1,77 @@ import io import json import sys -from appdirs import user_config_dir -from ruamel.yaml import YAML # use ruamel.yaml to preserve comments in config +import os +from ruamel.yaml import YAML # use ruamel.yaml to preserve comments in config +def get_conf_path(): + # Determine system + # When we are in some Java world do extra checks + if sys.platform.startswith('java'): + import platform + os_name = platform.java_ver()[3][0] + if os_name.startswith('Windows'): # "Windows XP", "Windows 7", etc. + system = 'win32' + else: # anything that isn't windows ("darwin", "Linux", "SunOS", "FreeBSD", "Arch", etc.) + system = 'linux2' + else: + system = sys.platform + + if system == 'win32': + # In windows alacritty config can only exist in one place + alacritty_path = os.path.expandvars(r'%APPDATA%\alacritty\alacritty.yml') + if os.path.exists(alacritty_path): + return alacritty_path + else: + # If it is not win32 it can exists in only a few other places + xdg_config_home = os.getenv('XDG_CONFIG_HOME') + if xdg_config_home is not None and os.path.exists(xdg_config_home + '/alacritty/alacritty.yml'): + return xdg_config_home + "/alacritty/alacritty.yml" + if xdg_config_home is not None and os.path.exists(xdg_config_home + "/alacritty.yml"): + return xdg_config_home + "/alacritty.yml" + + home = os.getenv('HOME') + if home is not None and os.path.exists(home + '/.config/alacritty/alacritty.yml'): + return home + "/.config/alacritty/alacritty.yml" + if home is not None and os.path.exists(home + '/.config/alacritty.yml'): + return home + "/.config/alacritty.yml" + if home is not None and os.path.exists(home + 'alacritty.yml'): + return home + "/alacritty.yml" + + print("Could not find alacritty config file\nPlease make sure you have a file in one of the paths specified on\nhttps://github.com/alacritty/alacritty#configuration") + sys.exit(1) +# end + + +conf_path = get_conf_path() yaml = YAML() -conf = user_config_dir('alacritty') + "/alacritty.yml" -# Read alacritty config -with open(conf, 'r') as stream: + +# Read & parse alacritty config +with open(conf_path, 'r') as stream: data_loaded = yaml.load(stream) +# parse new colors js = json.loads(sys.argv[1]) -# Use update to not remove existing comments -data_loaded['colors']['primary'].update(js['colors']['primary']) -data_loaded['colors']['normal'].update(js['colors']['normal']) -data_loaded['colors']['bright'].update(js['colors']['bright']) +# Update yaml file +try: + # Use update to not remove existing comments + data_loaded['colors']['primary'].update(js['colors']['primary']) + data_loaded['colors']['normal'].update(js['colors']['normal']) + data_loaded['colors']['bright'].update(js['colors']['bright']) +except KeyError: + print("Could not find existing 'colors' settings in your alacritty.yml file\nplease make sure to uncomment\n'colors', as well as 'primary', 'normal' and 'bright'") + print("Check the example config at\nhttps://github.com/alacritty/alacritty/blob/master/alacritty.yml for more information") + sys.exit(1) + +# make sure the user is okay with having their config changed +answer = input("This script will update your alacritty config at: \n" + + conf_path + "\nIt is reccomended to make a copy of this file before proceeding.\nAre you sure you want to continue? (Y/N)\n") +if not answer.lower() in ['y', 'yes']: + print("Aborted") + sys.exit(1) # Write alacritty config -with io.open(conf, 'w', encoding='utf8') as outfile: +with io.open(conf_path, 'w', encoding='utf8') as outfile: yaml.dump(data_loaded, outfile) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..7843954 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +ruamel.yaml==0.17.21 +