179 lines
3.9 KiB
Bash
179 lines
3.9 KiB
Bash
|
#!/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"
|