Files
dotfiles/theme_oomox/change_color.sh
2024-04-01 16:42:51 +02:00

311 lines
9.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# shellcheck disable=SC1090
set -ue
SRC_PATH=$(readlink -f "$(dirname "$0")")
darker () {
"${SRC_PATH}/scripts/darker.sh" "$@"
}
mix () {
"${SRC_PATH}/scripts/mix.sh" "$@"
}
print_usage() {
echo "Usage: $0 PATH_TO_PRESET"
echo " [--output OUTPUT_THEME_NAME] [--hidpi (True|False)]"
echo " [--make-opts (all|gtk3|gtk320)] [--path-list 'PATH PATH...']"
echo
echo "Options:"
echo " PATH_TO_PRESET path to Oomox theme file"
echo " -o NAME, --output NAME output theme name"
echo " -t DESTINATION_PATH, --target-dir DESTINATION_PATH"
echo " where the theme will be built"
echo " -d (true|false), --hidpi (true|false) generate GTK+2 assets with 2x scaling"
echo " -m (all|gtk3|gtk320), --make-opts (all|gtk3|gtk320)"
echo " which variant of GTK+3 theme to build"
echo " -p 'PATH PATH...', --path-list 'PATH PATH'"
echo " custom paths to theme files"
echo
echo "Examples:"
echo " $0 -o my-theme-name ../colors/retro/twg"
echo " $0 -o my-theme-name --hidpi True ../colors/retro/clearlooks"
echo " $0 -o my-theme-name -t ~/my_themes ../colors/retro/clearlooks"
echo " $0 -p \"./gtk-2.0 ./gtk-3.0 ./gtk-3.20 ./Makefile\" ../colors/gnome-colors/shiki-noble"
echo " $0 -p \"./gtk-2.0 ./gtk-3.0 ./gtk-3.20 ./Makefile\" -m gtk320 ../colors/monovedek/monovedek"
exit 1
}
while [[ $# -gt 0 ]]
do
case ${1} in
-p|--path-list)
CUSTOM_PATHLIST="${2}"
shift
;;
-o|--output)
OUTPUT_THEME_NAME="${2}"
shift
;;
-t|--target-dir)
DEST_PATH_ROOT="${2}"
shift
;;
-m|--make-opts)
MAKE_OPTS="${2}"
shift
;;
-d|--hidpi)
OPTION_GTK2_HIDPI="${2}"
shift
;;
*)
if [[ "${1}" == -* ]] || [[ ${THEME-} ]]; then
echo "unknown option ${1}"
print_usage
fi
THEME="${1}"
;;
esac
shift
done
if [[ -z "${THEME:-}" ]] ; then
print_usage
fi
PATHLIST=(
'./src/openbox-3'
'./src/assets'
'./src/gtk-2.0'
'./src/gtk-3.0'
'./src/gtk-3.20'
'./src/xfwm4'
'./src/metacity-1'
'./src/unity'
'Makefile'
'./src/index.theme'
'./src/qt5ct_palette.conf'
'./src/qt6ct_palette.conf'
'./src/cinnamon'
)
if [ -n "${CUSTOM_PATHLIST:-}" ] ; then
IFS=', ' read -r -a PATHLIST <<< "${CUSTOM_PATHLIST:-}"
fi
SVG_PREVIEWS=(
'./gtk-3.0/thumbnail.svg'
'./gtk-3.20/thumbnail.svg'
'./metacity-1/thumbnail.svg'
)
MAKE_GTK3=0
EXPORT_QT5CT=0
for FILEPATH in "${PATHLIST[@]}"; do
if [[ ${FILEPATH} == *Makefile* ]] ;then
MAKE_GTK3=1
elif [[ ${FILEPATH} == *qt5ct* ]] ;then
EXPORT_QT5CT=1
elif [[ ${FILEPATH} == *qt6ct* ]] ;then
EXPORT_QT6CT=1
fi
done
MAKE_OPTS="${MAKE_OPTS-all}"
OPTION_GTK2_HIDPI=$(echo "${OPTION_GTK2_HIDPI-False}" | tr '[:upper:]' '[:lower:]')
if [[ ${THEME} == */* ]] || [[ ${THEME} == *.* ]] ; then
source "$THEME"
THEME=$(basename "${THEME}")
else
if [[ -f "$SRC_PATH/../colors/$THEME" ]] ; then
source "$SRC_PATH/../colors/$THEME"
else
echo "Theme '${THEME}' not found"
exit 1
fi
fi
if [[ $(date +"%m%d") = "0401" ]] && [[ -z "${no_jokes:-}" ]] ; then
echo -e "\n\nError patching uxtheme.dll\n\n"
ACCENT_BG=30a55c BG=ECE9D8 BTN_BG=f8f8f8 BTN_FG=000000
BTN_OUTLINE_OFFSET=-3 BTN_OUTLINE_WIDTH=1 FG=000000 GRADIENT=0.08
GTK3_GENERATE_DARK=False HDR_BTN_BG=f8f8f8 HDR_BTN_FG=000000 HDR_BG=ECE9D8
HDR_FG=000000 OUTLINE_WIDTH=1 ROUNDNESS=3 SEL_BG=3169C6 SEL_FG=FFFFFF
SPACING=3 TXT_BG=FFFFFF TXT_FG=000000 WM_BORDER_FOCUS=3169C6 WM_BORDER_UNFOCUS=ECE9D8
fi
# Migration:
HDR_BG=${HDR_BG-$MENU_BG}
HDR_FG=${HDR_FG-$MENU_FG}
ACCENT_BG=${ACCENT_BG-$SEL_BG}
HDR_BTN_BG=${HDR_BTN_BG-$BTN_BG}
HDR_BTN_FG=${HDR_BTN_FG-$BTN_FG}
WM_BORDER_FOCUS=${WM_BORDER_FOCUS-$SEL_BG}
WM_BORDER_UNFOCUS=${WM_BORDER_UNFOCUS-$HDR_BG}
GTK3_GENERATE_DARK=$(echo "${GTK3_GENERATE_DARK-True}" | tr '[:upper:]' '[:lower:]')
UNITY_DEFAULT_LAUNCHER_STYLE=$(echo "${UNITY_DEFAULT_LAUNCHER_STYLE-False}" | tr '[:upper:]' '[:lower:]')
SPACING=${SPACING-3}
GRADIENT=${GRADIENT-0}
ROUNDNESS=${ROUNDNESS-2}
CINNAMON_OPACITY=${CINNAMON_OPACITY-1}
ROUNDNESS_GTK2_HIDPI=$(( ROUNDNESS * 2 ))
if [ "$(echo "$GRADIENT < 2" | bc)" ]; then
GTK2_GRAD=$(echo "scale=2; $GRADIENT/2" | bc)
else
GTK2_GRAD=1
fi
GTK2_GRAD_1=$(echo "1+$GTK2_GRAD" | bc)
GTK2_GRAD_2=$(echo "1-$GTK2_GRAD" | bc)
if expr "$GTK2_GRAD_1" : '-\?[0-9]\+$' >/dev/null; then
GTK2_GRAD_TOP="$GTK2_GRAD_1".0
GTK2_GRAD_BOTTOM="$GTK2_GRAD_2".0
else
GTK2_GRAD_TOP=$GTK2_GRAD_1
GTK2_GRAD_BOTTOM=$GTK2_GRAD_2
fi
OUTLINE_WIDTH=${OUTLINE_WIDTH-1}
BTN_OUTLINE_WIDTH=${BTN_OUTLINE_WIDTH-1}
BTN_OUTLINE_OFFSET=${BTN_OUTLINE_OFFSET--3}
INACTIVE_FG=$(mix "$FG" "$BG" 0.75)
INACTIVE_HDR_FG=$(mix "$HDR_FG" "$HDR_BG" 0.75)
INACTIVE_TXT_FG=$(mix "$TXT_FG" "$TXT_BG" 0.75)
light_folder_base_fallback="$(darker "$SEL_BG" -10)"
medium_base_fallback="$(darker "$SEL_BG" 37)"
dark_stroke_fallback="$(darker "$SEL_BG" 50)"
ICONS_LIGHT_FOLDER="${ICONS_LIGHT_FOLDER-$light_folder_base_fallback}"
ICONS_LIGHT="${ICONS_LIGHT-$SEL_BG}"
ICONS_MEDIUM="${ICONS_MEDIUM-$medium_base_fallback}"
ICONS_DARK="${ICONS_DARK-$dark_stroke_fallback}"
CARET1_FG="${CARET1_FG-$TXT_FG}"
CARET2_FG="${CARET2_FG-$TXT_FG}"
CARET_SIZE="${CARET_SIZE-0.04}"
TERMINAL_BACKGROUND=${TERMINAL_BACKGROUND:-$SEL_FG}
TERMINAL_COLOR4=${TERMINAL_COLOR4:-3f51b5}
TERMINAL_COLOR9=${TERMINAL_COLOR9:-f44336}
TERMINAL_COLOR10=${TERMINAL_COLOR10:-4caf50}
TERMINAL_COLOR11=${TERMINAL_COLOR11:-ef6c00}
TERMINAL_COLOR12=${TERMINAL_COLOR12:-03a9f4}
OUTPUT_THEME_NAME="${OUTPUT_THEME_NAME-oomox-$THEME}"
DEST_PATH_ROOT="${DEST_PATH_ROOT-$HOME/.themes}"
DEST_PATH="$DEST_PATH_ROOT/${OUTPUT_THEME_NAME/\//-}"
test "$SRC_PATH" = "$DEST_PATH" && echo "can't do that" && exit 1
rm -fr "$DEST_PATH"
mkdir -p "$DEST_PATH"
echo -e "\nBuilding theme at $DEST_PATH\n"
cp -r "$SRC_PATH/src/index.theme" "$DEST_PATH"
for FILEPATH in "${PATHLIST[@]}"; do
cp -r "$SRC_PATH/$FILEPATH" "$DEST_PATH"
done
cd "$DEST_PATH"
for FILEPATH in "${PATHLIST[@]}"; do
find "$(echo "${FILEPATH}" | sed -e 's/src\///g' )" -type f -exec sed -i'' \
-e 's/%BG%/'"$BG"'/g' \
-e 's/%FG%/'"$FG"'/g' \
-e 's/%SEL_BG%/'"$SEL_BG"'/g' \
-e 's/%SEL_FG%/'"$SEL_FG"'/g' \
-e 's/%ACCENT_BG%/'"$ACCENT_BG"'/g' \
-e 's/%TXT_BG%/'"$TXT_BG"'/g' \
-e 's/%TXT_FG%/'"$TXT_FG"'/g' \
-e 's/%HDR_BG%/'"$HDR_BG"'/g' \
-e 's/%HDR_FG%/'"$HDR_FG"'/g' \
-e 's/%BTN_BG%/'"$BTN_BG"'/g' \
-e 's/%BTN_FG%/'"$BTN_FG"'/g' \
-e 's/%HDR_BTN_BG%/'"$HDR_BTN_BG"'/g' \
-e 's/%HDR_BTN_FG%/'"$HDR_BTN_FG"'/g' \
-e 's/%WM_BORDER_FOCUS%/'"$WM_BORDER_FOCUS"'/g' \
-e 's/%WM_BORDER_UNFOCUS%/'"$WM_BORDER_UNFOCUS"'/g' \
-e 's/%ROUNDNESS%/'"$ROUNDNESS"'/g' \
-e 's/%ROUNDNESS_GTK2_HIDPI%/'"$ROUNDNESS_GTK2_HIDPI"'/g' \
-e 's/%OUTLINE_WIDTH%/'"$OUTLINE_WIDTH"'/g' \
-e 's/%BTN_OUTLINE_WIDTH%/'"$BTN_OUTLINE_WIDTH"'/g' \
-e 's/%BTN_OUTLINE_OFFSET%/'"$BTN_OUTLINE_OFFSET"'/g' \
-e 's/%SPACING%/'"$SPACING"'/g' \
-e 's/%GRADIENT%/'"$GRADIENT"'/g' \
-e 's/%GTK2_GRAD_TOP%/'"$GTK2_GRAD_TOP"'/g' \
-e 's/%GTK2_GRAD_BOTTOM%/'"$GTK2_GRAD_BOTTOM"'/g' \
-e 's/%CINNAMON_OPACITY%/'"$CINNAMON_OPACITY"'/g' \
-e 's/%INACTIVE_FG%/'"$INACTIVE_FG"'/g' \
-e 's/%INACTIVE_TXT_FG%/'"$INACTIVE_TXT_FG"'/g' \
-e 's/%INACTIVE_HDR_FG%/'"$INACTIVE_HDR_FG"'/g' \
-e 's/%ICONS_DARK%/'"$ICONS_DARK"'/g' \
-e 's/%ICONS_MEDIUM%/'"$ICONS_MEDIUM"'/g' \
-e 's/%ICONS_LIGHT%/'"$ICONS_LIGHT"'/g' \
-e 's/%ICONS_LIGHT_FOLDER%/'"$ICONS_LIGHT_FOLDER"'/g' \
-e 's/%OUTPUT_THEME_NAME%/'"$OUTPUT_THEME_NAME"'/g' \
-e 's/%CARET1_FG%/'"$CARET1_FG"'/g' \
-e 's/%CARET2_FG%/'"$CARET2_FG"'/g' \
-e 's/%CARET_SIZE%/'"$CARET_SIZE"'/g' \
-e 's/%TERMINAL_BACKGROUND%/'"$TERMINAL_BACKGROUND"'/g' \
-e 's/%TERMINAL_COLOR4%/'"$TERMINAL_COLOR4"'/g' \
-e 's/%TERMINAL_COLOR9%/'"$TERMINAL_COLOR9"'/g' \
-e 's/%TERMINAL_COLOR10%/'"$TERMINAL_COLOR10"'/g' \
-e 's/%TERMINAL_COLOR11%/'"$TERMINAL_COLOR11"'/g' \
-e 's/%TERMINAL_COLOR12%/'"$TERMINAL_COLOR12"'/g' \
{} \; ;
done
if [[ ${GTK3_GENERATE_DARK} != "true" ]] ; then
if [[ -f ./gtk-3.0/scss/gtk-dark.scss ]] ; then
rm ./gtk-3.0/scss/gtk-dark.scss
fi
if [[ -f ./gtk-3.20/scss/gtk-dark.scss ]] ; then
rm ./gtk-3.20/scss/gtk-dark.scss
fi
fi
if [[ ${OPTION_GTK2_HIDPI} == "true" ]] ; then
mv ./gtk-2.0/gtkrc.hidpi ./gtk-2.0/gtkrc
fi
if [[ ${UNITY_DEFAULT_LAUNCHER_STYLE} == "true" ]] ; then
rm ./unity/launcher*.svg
fi
if [[ ${MAKE_GTK3} = 1 ]]; then
# shellcheck disable=SC2086
env MAKEFLAGS= make --jobs="$(nproc)" ${MAKE_OPTS}
fi
config_home=${XDG_CONFIG_HOME:-}
if [[ -z "${config_home}" ]] ; then
config_home="${HOME}/.config"
fi
if [[ ${EXPORT_QT5CT} = 1 ]] ; then
qt5ct_colors_dir="${config_home}/qt5ct/colors/"
test -d "${qt5ct_colors_dir}" || mkdir -p "${qt5ct_colors_dir}"
mv ./qt5ct_palette.conf "${qt5ct_colors_dir}/${OUTPUT_THEME_NAME}.conf"
fi
if [[ ${EXPORT_QT6CT} = 1 ]] ; then
qt6ct_colors_dir="${config_home}/qt6ct/colors/"
test -d "${qt6ct_colors_dir}" || mkdir -p "${qt6ct_colors_dir}"
mv ./qt6ct_palette.conf "${qt6ct_colors_dir}/${OUTPUT_THEME_NAME}.conf"
fi
rm -fr ./Makefile gtk-3.*/scss
for FILEPATH in "${SVG_PREVIEWS[@]}"; do
# shellcheck disable=SC2001
rsvg-convert --format=png -o "$(sed -e 's/svg$/png/' <<< "${FILEPATH}")" "${FILEPATH}"
rm "${FILEPATH}"
done
exit 0