change_color.sh
Bourne-Again shell script, ASCII text executable
1#!/usr/bin/env bash 2# shellcheck disable=SC1090 3#set -x 4set -ueo pipefail 5 6SRC_PATH="$(readlink -f "$(dirname "$0")")" 7 8darker() { 9"$SRC_PATH/scripts/darker.sh" "$@" 10} 11mix() { 12"$SRC_PATH/scripts/mix.sh" "$@" 13} 14is_dark() { 15hexinput="$(tr '[:lower:]' '[:upper:]' <<< "$1")" 16half_darker="$(darker "$hexinput" 88)" 17[[ "$half_darker" == "000000" ]] 18} 19 20 21print_usage() { 22echo "usage: $0 [-t TARGET_DIR] [-o OUTPUT_THEME_NAME] [-p PATH_LIST] PATH_TO_PRESET" 23echo "examples:" 24# shellcheck disable=SC2028 # This is meant to be usage text. 25echo " $0 -o my-theme-name <(echo -e \"ROUNDNESS=0\\nBG=d8d8d8\\nFG=101010\\nHDR_BG=3c3c3c\\nHDR_FG=e6e6e6\\nSEL_BG=ad7fa8\\nMATERIA_VIEW=ffffff\\nMATERIA_SURFACE=f5f5f5\\nMATERIA_STYLE_COMPACT=True\\n\")" 26echo " $0 -t ~/.themes ../colors/retro/twg" 27echo " $0 --hidpi True ../colors/retro/clearlooks" 28exit 1 29} 30 31 32while [[ "$#" -gt 0 ]]; do 33case "$1" in 34-p|--path-list) 35CUSTOM_PATHLIST="$2" 36shift 37;; 38-t|--target) 39TARGET_DIR="$2" 40shift 41;; 42-o|--output) 43OUTPUT_THEME_NAME="$2" 44shift 45;; 46-d|--hidpi) 47OPTION_GTK2_HIDPI="$2" 48shift 49;; 50*) 51if [[ "$1" == -* ]] || [[ "${THEME-}" ]]; then 52echo "unknown option $1" 53print_usage 54exit 2 55fi 56THEME="$1" 57;; 58esac 59shift 60done 61 62if [[ -z "${THEME:-}" ]]; then 63print_usage 64fi 65 66PATHLIST=( 67'./src/_colors.scss' 68'./src/chrome' 69'./src/cinnamon' 70'./src/cinnamon/assets' 71'./src/gnome-shell' 72'./src/gtk/assets.svg' 73'./src/gtk-2.0/assets.svg' 74'./src/gtk-2.0/assets-dark.svg' 75'./src/gtk-2.0/gtkrc' 76'./src/gtk-2.0/gtkrc-dark' 77'./src/gtk-2.0/gtkrc-light' 78'./src/metacity-1' 79'./src/unity' 80'./src/xfwm4' 81) 82if [[ -n "${CUSTOM_PATHLIST:-}" ]]; then 83IFS=', ' read -r -a PATHLIST <<< "${CUSTOM_PATHLIST:-}" 84fi 85 86EXPORT_QT5CT=0 87for FILEPATH in "${PATHLIST[@]}"; do 88if [[ "$FILEPATH" == *qt5ct* ]]; then 89EXPORT_QT5CT=1 90fi 91done 92 93OPTION_GTK2_HIDPI=$(tr '[:upper:]' '[:lower:]' <<< "${OPTION_GTK2_HIDPI-False}") 94 95 96if [[ "$THEME" == */* ]] || [[ "$THEME" == *.* ]]; then 97source "$THEME" 98THEME=$(basename "$THEME") 99else 100if [[ -f "$SRC_PATH/../colors/$THEME" ]]; then 101source "$SRC_PATH/../colors/$THEME" 102else 103echo "Theme '$THEME' not found" 104exit 1 105fi 106fi 107if [[ $(date +"%m%d") = "0401" ]] && grep -q "no-jokes" <<< "$*"; then 108echo -e "\\n\\nError patching uxtheme.dll\\n\\n" 109BG=C0C0C0 MATERIA_SURFACE=C0C0C0 FG=000000 MATERIA_PANEL_OPACITY=1 110HDR_BG=C0C0C0 HDR_FG=000000 SEL_BG=000080 MATERIA_VIEW=FFFFFF 111fi 112 113# Migration: 114HDR_BG=${HDR_BG-$MENU_BG} 115HDR_FG=${HDR_FG-$MENU_FG} 116MATERIA_VIEW=${MATERIA_VIEW-$TXT_BG} 117MATERIA_SURFACE=${MATERIA_SURFACE-$BTN_BG} 118GNOME_SHELL_PANEL_OPACITY=${GNOME_SHELL_PANEL_OPACITY-0.6} 119MATERIA_PANEL_OPACITY=${MATERIA_PANEL_OPACITY-$GNOME_SHELL_PANEL_OPACITY} 120 121MATERIA_STYLE_COMPACT=$(tr '[:upper:]' '[:lower:]' <<< "${MATERIA_STYLE_COMPACT-False}") 122MATERIA_COLOR_VARIANT=$(tr '[:upper:]' '[:lower:]' <<< "${MATERIA_COLOR_VARIANT:-}") 123 124SPACING=${SPACING-3} 125ROUNDNESS=${ROUNDNESS-4} 126# shellcheck disable=SC2034 # will this be used in the future? 127ROUNDNESS_GTK2_HIDPI=$(( ROUNDNESS * 2 )) 128MATERIA_PANEL_OPACITY=${MATERIA_PANEL_OPACITY-0.6} 129MATERIA_SELECTION_OPACITY=${MATERIA_SELECTION_OPACITY-0.32} 130 131INACTIVE_FG=$(mix "$FG" "$BG" 0.75) 132INACTIVE_MATERIA_VIEW=$(mix "$MATERIA_VIEW" "$BG" 0.60) 133 134TERMINAL_COLOR4=${TERMINAL_COLOR4:-1E88E5} 135TERMINAL_COLOR5=${TERMINAL_COLOR5:-E040FB} 136TERMINAL_COLOR9=${TERMINAL_COLOR9:-DD2C00} 137TERMINAL_COLOR10=${TERMINAL_COLOR10:-00C853} 138TERMINAL_COLOR11=${TERMINAL_COLOR11:-FF6D00} 139TERMINAL_COLOR12=${TERMINAL_COLOR12:-66BB6A} 140 141TARGET_DIR=${TARGET_DIR-$HOME/.themes} 142OUTPUT_THEME_NAME=${OUTPUT_THEME_NAME-oomox-$THEME} 143DEST_PATH="$TARGET_DIR/${OUTPUT_THEME_NAME/\//-}" 144 145if [[ "$SRC_PATH" == "$DEST_PATH" ]]; then 146echo "can't do that" 147exit 1 148fi 149 150 151tempdir=$(mktemp -d) 152post_clean_up() { 153rm -r "$tempdir" || : 154} 155trap post_clean_up EXIT SIGHUP SIGINT SIGTERM 156cp -r "$SRC_PATH/"* "$tempdir/" 157cd "$tempdir" 158 159 160# autodetection which color variant to use 161if [[ -z "$MATERIA_COLOR_VARIANT" ]]; then 162if is_dark "$BG"; then 163echo "== Dark background color detected. Setting color variant to dark." 164MATERIA_COLOR_VARIANT="dark" 165elif is_dark "$HDR_BG"; then 166echo "== Dark headerbar background color detected. Setting color variant to standard." 167MATERIA_COLOR_VARIANT="standard" 168else 169echo "== Light background color detected. Setting color variant to light." 170MATERIA_COLOR_VARIANT="light" 171fi 172fi 173 174 175echo "== Converting theme into template..." 176 177for FILEPATH in "${PATHLIST[@]}"; do 178if [[ "$MATERIA_COLOR_VARIANT" != "dark" ]]; then 179find "$FILEPATH" -type f -not -name '_color-palette.scss' -exec sed -i'' \ 180-e '/color-surface/{n;s/#ffffff/%MATERIA_SURFACE%/g}' \ 181-e '/color-base/{n;s/#ffffff/%MATERIA_VIEW%/g}' \ 182-e 's/#8ab4f8/%SEL_BG%/g' \ 183-e 's/#1a73e8/%SEL_BG%/g' \ 184-e 's/#000000/%FG%/g' \ 185-e 's/#212121/%FG%/g' \ 186-e 's/#f2f2f2/%BG%/g' \ 187-e 's/#ffffff/%MATERIA_SURFACE%/g' \ 188-e 's/#ffffff/%MATERIA_VIEW%/g' \ 189-e 's/#fafafa/%INACTIVE_MATERIA_VIEW%/g' \ 190-e 's/#383838/%HDR_BG%/g' \ 191-e 's/#303030/%HDR_BG2%/g' \ 192-e 's/#ffffff/%HDR_FG%/g' \ 193-e 's/#c1c1c1/%INACTIVE_FG%/g' \ 194-e 's/#e0e0e0/%HDR_BG%/g' \ 195-e 's/#d6d6d6/%HDR_BG2%/g' \ 196-e 's/#1d1d1d/%HDR_FG%/g' \ 197-e 's/#565656/%INACTIVE_FG%/g' \ 198-e 's/Materia/%OUTPUT_THEME_NAME%/g' \ 199{} \; ; 200else 201find "$FILEPATH" -type f -not -name '_color-palette.scss' -exec sed -i'' \ 202-e 's/#8ab4f8/%SEL_BG%/g' \ 203-e 's/#ffffff/%FG%/g' \ 204-e 's/#eeeeee/%FG%/g' \ 205-e 's/#181818/%BG%/g' \ 206-e 's/#343434/%MATERIA_SURFACE%/g' \ 207-e 's/#242424/%MATERIA_VIEW%/g' \ 208-e 's/#242424/%INACTIVE_MATERIA_VIEW%/g' \ 209-e 's/#2d2d2d/%HDR_BG%/g' \ 210-e 's/#242424/%HDR_BG2%/g' \ 211-e 's/#e4e4e4/%HDR_FG%/g' \ 212-e 's/#a7a7a7/%INACTIVE_FG%/g' \ 213-e 's/Materia/%OUTPUT_THEME_NAME%/g' \ 214{} \; ; 215fi 216done 217 218#Not implemented yet: 219#-e 's/%SPACING%/'"$SPACING"'/g' \ 220 221# shellcheck disable=SC2016 222sed -i -e 's/^$corner-radius: .px/$corner-radius: '"$ROUNDNESS"'px/g' ./src/_variables.scss 223 224if [[ "${DEBUG:-}" ]]; then 225echo "You can debug TEMP DIR: $tempdir, press [Enter] when finished"; read -r 226fi 227 228mv ./src/_colors.scss.template ./src/_colors.scss 229 230echo "== Filling the template with the new colorscheme..." 231for FILEPATH in "${PATHLIST[@]}"; do 232find "$FILEPATH" -type f -exec sed -i'' \ 233-e 's/%BG%/#'"$BG"'/g' \ 234-e 's/%BG2%/#'"$(darker $BG)"'/g' \ 235-e 's/%FG%/#'"$FG"'/g' \ 236-e 's/%SEL_BG%/#'"$SEL_BG"'/g' \ 237-e 's/%SEL_BG2%/#'"$(darker $SEL_BG -20)"'/g' \ 238-e 's/%MATERIA_VIEW%/#'"$MATERIA_VIEW"'/g' \ 239-e 's/%HDR_BG%/#'"$HDR_BG"'/g' \ 240-e 's/%HDR_BG2%/#'"$(darker $HDR_BG 10)"'/g' \ 241-e 's/%HDR_BG3%/#'"$(darker $HDR_BG 20)"'/g' \ 242-e 's/%HDR_FG%/#'"$HDR_FG"'/g' \ 243-e 's/%MATERIA_SURFACE%/#'"$MATERIA_SURFACE"'/g' \ 244-e 's/%SPACING%/'"$SPACING"'/g' \ 245-e 's/%INACTIVE_FG%/#'"$INACTIVE_FG"'/g' \ 246-e 's/%INACTIVE_MATERIA_VIEW%/#'"$INACTIVE_MATERIA_VIEW"'/g' \ 247-e 's/%TERMINAL_COLOR4%/#'"$TERMINAL_COLOR4"'/g' \ 248-e 's/%TERMINAL_COLOR5%/#'"$TERMINAL_COLOR5"'/g' \ 249-e 's/%TERMINAL_COLOR9%/#'"$TERMINAL_COLOR9"'/g' \ 250-e 's/%TERMINAL_COLOR10%/#'"$TERMINAL_COLOR10"'/g' \ 251-e 's/%TERMINAL_COLOR11%/#'"$TERMINAL_COLOR11"'/g' \ 252-e 's/%TERMINAL_COLOR12%/#'"$TERMINAL_COLOR12"'/g' \ 253-e 's/%MATERIA_SELECTION_OPACITY%/'"$MATERIA_SELECTION_OPACITY"'/g' \ 254-e 's/%MATERIA_PANEL_OPACITY%/'"$MATERIA_PANEL_OPACITY"'/g' \ 255-e 's/%OUTPUT_THEME_NAME%/'"$OUTPUT_THEME_NAME"'/g' \ 256{} \; ; 257done 258 259if [[ "$MATERIA_COLOR_VARIANT" == "standard" ]]; then 260COLOR_VARIANTS="," 261COLOR_VARIANT="standard" 262fi 263if [[ "$MATERIA_COLOR_VARIANT" == "light" ]]; then 264COLOR_VARIANTS="-light" 265COLOR_VARIANT="light" 266fi 267if [[ "$MATERIA_COLOR_VARIANT" == "dark" ]]; then 268COLOR_VARIANTS="-dark" 269COLOR_VARIANT="dark" 270fi 271if [[ "$OPTION_GTK2_HIDPI" == "true" ]]; then 272mv ./src/gtk-2.0/main.rc.hidpi ./src/gtk-2.0/main.rc 273fi 274if [[ "$EXPORT_QT5CT" = 1 ]]; then 275config_home=${XDG_CONFIG_HOME:-"$HOME/.config"} 276qt5ct_colors_dir="$config_home/qt5ct/colors/" 277test -d "$qt5ct_colors_dir" || mkdir -p "$qt5ct_colors_dir" 278mv ./src/qt5ct_palette.conf "$qt5ct_colors_dir/$OUTPUT_THEME_NAME.conf" 279fi 280 281if [[ "$MATERIA_STYLE_COMPACT" == "true" ]]; then 282SIZE_VARIANTS="-compact" 283SIZE_VARIANT="compact" 284else 285SIZE_VARIANTS="," 286SIZE_VARIANT="standard" 287fi 288 289# NOTE we use the functions we already have in render-assets.sh 290echo "== Rendering GTK 2 assets..." 291if [[ "$MATERIA_COLOR_VARIANT" != "dark" ]]; then 292GTK2_HIDPI="$OPTION_GTK2_HIDPI" ./render-assets.sh gtk2-light 293else 294GTK2_HIDPI="$OPTION_GTK2_HIDPI" ./render-assets.sh gtk2-dark 295fi 296 297echo "== Rendering GTK 3 assets..." 298./render-assets.sh gtk 299 300./install.sh --dest "$TARGET_DIR" --name "${OUTPUT_THEME_NAME/\//-}" --color "$COLOR_VARIANT" --size "$SIZE_VARIANT" 301 302GENERATED_PATH="$DEST_PATH$(tr -d ',' <<< "$COLOR_VARIANTS")$(tr -d ',' <<< "$SIZE_VARIANTS")" 303if [[ "$GENERATED_PATH" != "$DEST_PATH" ]]; then 304if [[ -d "$DEST_PATH" ]]; then 305rm -r "$DEST_PATH" 306fi 307mv "$GENERATED_PATH" "$DEST_PATH" 308fi 309 310echo 311echo "== SUCCESS" 312echo "== The theme was installed to '$DEST_PATH'" 313exit 0 314