tokyonight-theme/icons.sh

179 lines
3.9 KiB
Bash
Raw Normal View History

2024-05-24 11:03:00 +02:00
#!/usr/bin/env bash
# https://raw.githubusercontent.com/themix-project/themix-gui/master/plugins/icons_papirus/change_color.sh
set -ueo pipefail
root="$(readlink -f "$(dirname "$0")")"
print_usage() {
local -i exit_code="$1"
echo "
usage:
$0 [-o OUTPUT_THEME_NAME] [-c COLOR] [-d DEST_DIR] PRESET_NAME_OR_PATH
examples:
$0 -o droid_test_3 -c 5e468c
$0 monovedek
$0 -o my-theme-name ./colors/lcars"
exit "${exit_code:-1}"
}
darker_channel() {
local value="0x$1"
local light_delta="0x$2"
local -i result
result=$(( value - light_delta ))
(( result < 0 )) && result=0
(( result > 255 )) && result=255
echo "$result"
}
darker() {
local hexinput="$1"
local light_delta=${2-10}
r=$(darker_channel "${hexinput:0:2}" "$light_delta")
g=$(darker_channel "${hexinput:2:2}" "$light_delta")
b=$(darker_channel "${hexinput:4:2}" "$light_delta")
printf '%02x%02x%02x\n' "$r" "$g" "$b"
}
while [[ $# -gt 0 ]]
do
case "$1" in
-h|--help)
print_usage 0
;;
-o|--output)
OUTPUT_THEME_NAME="$2"
shift
;;
-d|--destdir)
output_dir="$2"
shift
;;
-c|--color)
ICONS_COLOR="${2#\#}" # remove leading hash symbol
shift
;;
-*)
echo "unknown option $1"
print_usage 2
;;
*)
THEME="$1"
;;
esac
shift
done
if [ -z "${THEME:-}" ]; then
[ -n "${OUTPUT_THEME_NAME:-}" ] || print_usage 1
[ -n "${ICONS_COLOR:-}" ] || print_usage 1
THEME="$OUTPUT_THEME_NAME"
else
# shellcheck disable=SC1090
if [ -f "$THEME" ]; then
source "$THEME"
THEME=$(basename "$THEME")
elif [ -f "$root/colors/$THEME" ]; then
source "$root/colors/$THEME"
else
echo "'$THEME' preset not found."
exit 1
fi
fi
tmp_dir="$(mktemp -d)"
function post_clean_up {
rm -r "$tmp_dir" || true
}
trap post_clean_up EXIT SIGHUP SIGINT SIGTERM
: "${ICONS_COLOR:=$SEL_BG}"
: "${OUTPUT_THEME_NAME:=oomox-$THEME}"
output_dir="${output_dir:-$HOME/.icons/$OUTPUT_THEME_NAME}"
light_folder_fallback="$ICONS_COLOR"
medium_base_fallback="$(darker "$ICONS_COLOR" 20)"
dark_stroke_fallback="$(darker "$ICONS_COLOR" 56)"
: "${ICONS_LIGHT_FOLDER:=$light_folder_fallback}"
: "${ICONS_MEDIUM:=$medium_base_fallback}"
: "${ICONS_DARK:=$dark_stroke_fallback}"
: "${ICONS_SYMBOLIC_ACTION:=${MENU_FG:-}}"
: "${ICONS_SYMBOLIC_PANEL:=${HDR_FG:-}}"
echo ":: Copying theme template..."
cp -R "$root/papirus-icon-theme/Papirus" "$tmp_dir/"
echo "== Template was copied to $tmp_dir"
echo ":: Replacing accent colors..."
for size in 22x22 24x24 32x32 48x48 64x64; do
for icon_path in \
"$tmp_dir/Papirus/$size/places/folder-custom"{-*,}.svg \
"$tmp_dir/Papirus/$size/places/user-custom"{-*,}.svg
do
[ -f "$icon_path" ] || continue # it's a file
[ -L "$icon_path" ] && continue # it's not a symlink
new_icon_path="${icon_path/-custom/-oomox}"
icon_name="${new_icon_path##*/}"
symlink_path="${new_icon_path/-oomox/}" # remove color suffix
sed -e "s/value_light/$ICONS_LIGHT_FOLDER/g" \
-e "s/value_dark/$ICONS_MEDIUM/g" \
-e "s/323232/$ICONS_DARK/g" "$icon_path" > "$new_icon_path"
ln -sf "$icon_name" "$symlink_path"
done
done
if [ -n "${ICONS_SYMBOLIC_ACTION:-}" ]; then
echo ":: Replacing symbolic actions colors..."
find "$tmp_dir"/Papirus/{16x16,22x22,24x24}/actions \
"$tmp_dir"/Papirus/16x16/{devices,places} \
"$tmp_dir"/Papirus/symbolic \
-type f -name '*.svg' \
-exec sed -i'' -e "s/444444/$ICONS_SYMBOLIC_ACTION/g" '{}' \;
fi
if [ -n "${ICONS_SYMBOLIC_PANEL:-}" ]; then
echo ":: Replacing symbolic panel colors..."
find "$tmp_dir"/Papirus/{16x16,22x22,24x24}/panel \
"$tmp_dir"/Papirus/{22x22,24x24}/animations \
-type f -name '*.svg' \
-exec sed -i'' -e "s/dfdfdf/$ICONS_SYMBOLIC_PANEL/g" '{}' \;
fi
echo ":: Exporting theme..."
sed -i \
-e "s/Name=Papirus/Name=$OUTPUT_THEME_NAME/g" \
"$tmp_dir/Papirus/index.theme"
if [ -d "$output_dir" ] ; then
rm -r "$output_dir"
fi
mkdir -p "$output_dir"
mv "$tmp_dir"/Papirus/* "$output_dir/"
echo "== Theme was generated in $output_dir"