From 2375cfe8a6355b51f37a0a056a042a8f328a3fc5 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Tue, 22 Dec 2020 11:23:53 +0100 Subject: [PATCH] Make use of alacritty include functionality Alacritty processor will now add the colorscheme via include statement in the original configuration file instead of adding the theme directly to the file. --- theme_alacritty | 72 ++++++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 33 deletions(-) diff --git a/theme_alacritty b/theme_alacritty index c8abc0c..5af4439 100755 --- a/theme_alacritty +++ b/theme_alacritty @@ -25,6 +25,7 @@ theme="$3" permanent="$4" alacritty_conf="$HOME/.config/alacritty/alacritty.yml" +include_conf="$HOME/.config/alacritty/colorscheme.yml" ## Main Entrypoint # @@ -54,6 +55,7 @@ main() { # Makes sure that if any application instance is # currently running, it switches to new theme. theme() { + # TODO also do through include file dbg_msg $app "Setting up live config reload" if grep -qe '^live_config_reload:.*false' "$alacritty_conf"; then sed -e 's/^live_config_reload:.*false/^live_config_reload: true/gm' @@ -61,6 +63,8 @@ theme() { else dbg_msg $app "Live config reload already enabled" fi + dbg_msg $app "Touching alacritty config" + touch "$alacritty_conf" } ## Theme setter @@ -70,45 +74,47 @@ theme() { save() { dbg_msg $app "Saving theme" - # following format: - # '# Base16 [theme name] - alacritty color config' - # from which it will delete everything until it finds a line: - # '# Base16End [theme name] - alacritty color config' - startline="$(grep -ne '^# Base16 .*- alacritty color config$' "$alacritty_conf" | cut -f1 -d:)" - endline="$(grep -ne '^# Base16End .*- alacritty color config$' "$alacritty_conf" | cut -f1 -d:)" + # replace colorscheme.yml content with new one + cp "$tfile" "$include_conf" + dbg_msg $app "Wrote theme file to $include_conf" - tmpfile="$alacritty_conf.tmp" - tmptheme="$alacritty_conf.thm.tmp" + # find import line in alacritty conf + if grep -qe '^import:' "$alacritty_conf"; then - if [[ -n "$startline" && -z "$endline" ]] || [[ -z "$startline" && -n "$endline" ]] || [[ "$startline" -gt "$endline" ]]; then - dbg_msg $app "error" "Base 16 Pattern not correctly recognized in file: $alacritty_conf. Please make sure pattern begins with # Base 16 and ends with # Base 16end and only exists once in the file. No changes to file made." - - elif [[ -z "$startline" && -z "$endline" ]]; then - # TODO on first run automatically replace ^colors: line and any subsequent indented lines with commented versions and create colors: *colorscheme programatically - dbg_msg $app "warn" "No previous Base16 pattern found in file: $alacritty_conf. If this is your first time running the processor, please manually remove any previous colors: settings and replace with 'colors: *colorscheme' instead." - cat "$alacritty_conf" >"$tmpfile" || exit 1 + # find first line containing imports (actual - file.yml line) + local import_first_line + import_first_line=$(grep -ne '^import:' "$alacritty_conf" | cut -f1 -d:) + import_first_line=$((import_first_line + 1)) + # find last line containing imports (actual - file.yml line) + local import_last_line + import_last_line=$(tail -n+"$import_first_line" "$alacritty_conf" | grep -nve '[[:space:]]*-' | head -n1 | cut -f1 -d:) + # extract imports + local imports + imports=$(tail -n+$import_first_line "$alacritty_conf" | head -n $((import_first_line + import_last_line))) + if echo "$imports" | grep -qe "$(basename "$include_conf")$"; then + dbg_msg $app "Already correctly imports theme file" + return + else + dbg_msg $app "Creating config backup file" + tmpfile="$alacritty_conf.tmp" + cp "$alacritty_conf" "$tmpfile" + dbg_msg $app "Including theme file in imports" + ( + head -n $((import_first_line - 1)) "$tmpfile" + echo " - ${include_conf#${HOME}/}" + tail -n +$import_first_line "$tmpfile" + ) >"$alacritty_conf" + dbg_msg $app "Removing config backup file" + rm "$tmpfile" + fi + # no imports yet, append to end of file else - # remove old lines of any base16 theme - sed -e "$startline,$endline d" "$alacritty_conf" >"$tmpfile" || exit 1 - + # we remove the home prefix from the absolute path since alacritty + # can deal with an inclusion in the form of .config/alacritty/colorscheme.yml + printf "\nimport:\n - %s\n" "${include_conf#${HOME}/}" >>"$alacritty_conf" fi - # make sure we're not adding this line twice - sed -e 's/^draw_bold_text_with_bright_colors:/# draw_bold_text_with_bright_colors:/' "$tmpfile" >"$tmpfile.tmp" - mv "$tmpfile.tmp" "$tmpfile" - - # fix template theme name key for easier inclusion - sed -e "s/^colors:/$theme: \&colorscheme/" "$tfile" >"$tmptheme" || exit 1 - echo "# Base16End $theme - alacritty color config" >>"$tmptheme" - - # combine both into final config file - # replace original file with new colorscheme-added version - cat "$tmptheme" "$tmpfile" >"$alacritty_conf" - - rm "$tmptheme" "$tmpfile" - - dbg_msg $app "Saved theme to $alacritty_conf" } # Safe sourcing: https://stackoverflow.com/a/12694189