115 lines
3.2 KiB
Bash
Executable file
115 lines
3.2 KiB
Bash
Executable file
#!/bin/sh
|
|
# Alacritty Color Export
|
|
# Version 0.1.1
|
|
# github.com/egeesin
|
|
#
|
|
# Exports generated Wal colors to Alacritty config
|
|
# WARNING: Don't forget to backup your Alacritty config
|
|
# before execute this script!
|
|
#
|
|
# Dependencies: grep, sed
|
|
# Usage: ./script.sh
|
|
# ./script.sh <config yml>
|
|
|
|
# Function to display error and quit
|
|
die() {
|
|
printf "ERR: %s\n" "$1" >&2
|
|
exit 1
|
|
}
|
|
|
|
DEFAULT_MACOS_CONFIG="$HOME"/.config/alacritty/alacritty.yml
|
|
|
|
# Wal generates a shell script that defines color0..color15
|
|
SRC="$HOME"/.cache/wal/colors.sh
|
|
|
|
[ -e "$SRC" ] || die "Wal colors not found, exiting script. Have you executed Wal before?"
|
|
printf "Colors found, source ready.\n"
|
|
|
|
READLINK=$( command -v greadlink || command -v readlink )
|
|
|
|
# Get config file
|
|
if [ -n "$1" ]; then
|
|
[ -e "$1" ] || die "Selected config doesn't exist, exiting script."
|
|
printf "Config found, destination ready.\n"
|
|
CFG=$1
|
|
[ -L "$1" ] && {
|
|
printf "Following symlink to config...\n"
|
|
CFG=$($READLINK -f "$1")
|
|
}
|
|
else
|
|
# Default config path in Mac systems
|
|
[ -e "$DEFAULT_MACOS_CONFIG" ] || die "Alacritty config not found, exiting script."
|
|
|
|
CFG="$DEFAULT_MACOS_CONFIG"
|
|
[ -L "$DEFAULT_MACOS_CONFIG" ] && {
|
|
printf "Following symlink to config...\n"
|
|
CFG=$($READLINK -f "$DEFAULT_MACOS_CONFIG")
|
|
}
|
|
fi
|
|
|
|
# Get hex colors from Wal cache
|
|
# No need for shellcheck to check this, it comes from pywal
|
|
# shellcheck disable=SC1090
|
|
. "$SRC"
|
|
|
|
# Create temp file for sed results
|
|
tempfile=$(mktemp)
|
|
trap 'rm $tempfile' INT TERM EXIT
|
|
|
|
# Delete existing color declarations generated by this script
|
|
# If begin comment exists
|
|
if rg -q '^# BEGIN ACE' "$CFG"; then
|
|
# And if end comment exists
|
|
if rg -q '^# END ACE' "$CFG"; then
|
|
# Delete contents of the block
|
|
printf "Existing generated colors found, replacing new colors...\n"
|
|
sed '/^# BEGIN ACE/,/^# END ACE/ {
|
|
/^# BEGIN ACE/! { /^# END ACE/!d; }
|
|
}' "$CFG" > "$tempfile" \
|
|
&& cat "$tempfile" > "$CFG"
|
|
# If no end comment, don't do anything
|
|
else
|
|
die "No '# END ACE' comment found, please ensure it is present."
|
|
fi
|
|
# If no begin comment found
|
|
else
|
|
# Don't do anything and notify user if there's an end comment in the file
|
|
! rg -q '^# END ACE' "$CFG" || die "Found '# END ACE' comment, but no '# BEGIN ACE' comment found. Please ensure it is present."
|
|
printf "There's no existing 'generated' colors, adding comments...\n";
|
|
printf '# BEGIN ACE\n# END ACE' >> "$CFG";
|
|
fi
|
|
|
|
# Write new color definitions
|
|
# We know $colorX is unset, we set it by sourcing above
|
|
# shellcheck disable=SC2154
|
|
{ sed "/^# BEGIN ACE/ r /dev/stdin" "$CFG" > "$tempfile" <<EOF
|
|
colors:
|
|
primary:
|
|
background: '$color0'
|
|
foreground: '$color15'
|
|
cursor:
|
|
text: '$color0'
|
|
cursor: '$color15'
|
|
normal:
|
|
black: '$color0'
|
|
red: '$color1'
|
|
green: '$color2'
|
|
yellow: '$color3'
|
|
blue: '$color4'
|
|
magenta: '$color5'
|
|
cyan: '$color6'
|
|
white: '$color7'
|
|
bright:
|
|
black: '$color8'
|
|
red: '$color9'
|
|
green: '$color10'
|
|
yellow: '$color11'
|
|
blue: '$color12'
|
|
magenta: '$color13'
|
|
cyan: '$color14'
|
|
white: '$color15'
|
|
EOF
|
|
} && cat "$tempfile" > "$CFG" \
|
|
&& rm "$tempfile"
|
|
trap - INT TERM EXIT
|
|
printf "'%s' exported to '%s'\n" "$SRC" "$CFG"
|