#!/bin/bash DESTDIR=${DESTDIR:-/} colors=(Brave Dust Human Illustrious Noble Wine Wise) properties=(bg fg base text selected_bg selected_fg tooltip_bg tooltip_fg frame inactive_frame menubar_bg menubar_fg menuitem_fg) common_bg=#d8d8d8 common_fg=#101010 common_base=#ffffff common_text=#1a1a1a common_menubar_bg=#212121 common_menubar_fg=#cecece common_menuitem_fg=#ffffff Dust_menubar_bg=#27241F Brave_selected_bg=#729fcf Dust_selected_bg=#b49372 Human_selected_bg=#f7a145 Illustrious_selected_bg=#f08290 Noble_selected_bg=#ad7fa8 Wine_selected_bg=#de4e4e Wise_selected_bg=#97bf60 common_selected_fg=#ffffff common_tooltip_bg=#f5f5b5 common_tooltip_fg=#000000 common_frame=#333333 common_inactive_frame=#333333 shopt -s globstar dotglob extglob #sed() { # [[ "$debug" == true ]] && echo "sed $@" # command sed "$@" #} debug() { [[ "$debug" ]] && echo "$@" } install_theme() { [[ ! -d "zuki-themes" ]] && update for color in ${colors[@]};do if [[ -d "Zukitwo-$color" ]];then printf "Installing \"Zukitwo-$color\"" if [[ "$user_install" ]];then printf "...\n" cp -r "Zukitwo-$color/" "$HOME/.themes" else echo " system-wide..." mkdir -p "$DESTDIR/usr/share/themes/" cp -r "$PWD/Zukitwo-$color/" "$DESTDIR/usr/share/themes/" fi else generate_theme "$color" fi done if [[ "$user_install" ]];then echo "Installing Xfwm themes..." cp -r Zukitwo-*-Xfwm/ "$HOME/.themes" echo "Installing Openbox themes..." cp -r Zukitwo-*-Openbox/ "$HOME/.themes" else echo "Installing Xfwm themes system-wide..." mkdir -p "$DESTDIR/usr/share/themes/" cp -r "$PWD"/Zukitwo-*-Xfwm/ "$DESTDIR/usr/share/themes/" echo "Installing Openbox themes system-wide..." cp -r "$PWD"/Zukitwo-*-Openbox/ "$DESTDIR/usr/share/themes/" fi printf '\n' } uninstall_theme() { printf "Uninstalling..." for color in ${colors[@]};do printf " \"Zukitwo-$color\"" rm -rf "$HOME/.themes/Zukitwo-$color/" "$DESTDIR/usr/share/themes/Zukitwo-$color/" 2>/dev/null >/dev/null done printf '\n\n\n' } fix_line_endings() { printf "Correcting line endings..." for file in $@;do printf " \"$(basename $file)\"" sed -i.bak 's/\r//' "$file" done printf '\n\n' } patch() { if [[ "$debug" ]];then command patch --verbose "$@" else command patch "$@" fi } patch_theme() { echo "Patching zuki-themes..." echo "If these files were already patched before, you'll see errors. Ignore them." cd zuki-themes echo "Resetting zuki-themes git repo..." git reset --hard HEAD cd "$OLDPWD" fix_line_endings "./zuki-themes/Zukitwo/gtk-2.0/widgets/panel.rc" "./zuki-themes/Zukitwo/gtk-2.0/gtkrc" "./Zukitwo-colors-common/patches/panel.rc.patch" "./Zukitwo-colors-common/patches/enable-dark-menubar.patch" yes | patch ./zuki-themes/Zukitwo/gtk-2.0/widgets/panel.rc <./Zukitwo-colors-common/patches/panel.rc.patch yes | patch ./zuki-themes/Zukitwo/gtk-2.0/gtkrc <./Zukitwo-colors-common/patches/enable-dark-menubar.patch for zuki_theme in ./zuki-themes/*/;do pushd "$zuki_theme/" rm -rf "xfwm4" popd done OLDIFS="$IFS" IFS=$'\n' for file in $(find ./zuki-themes/ -type f);do sed -i 's/gtk_color_scheme = ./gtk_color_scheme = \"menubar_bg_color:#ffffff\\nmenubar_fg_color:#ffffff\\nmenuitem_fg_color:#ffffff\\n/g' "$file" done printf "\n" IFS="$OLDIFS" OLDIFS= } generate_theme() { if [[ ! -d "zuki-themes/" ]];then echo "zuki-themes does not exist. You need to run \`./make-color-themes update\`." exit 1 fi color="$1" cp -r "zuki-themes/Zukitwo" "Zukitwo-$color" cd "Zukitwo-$color" echo "Creating \"Zukitwo-$color\"..." file_list=$(find . -type f | grep -v 'make-colors-themes') for property in ${properties[@]};do property_var_name=\$${color}_$property property_var_contents=$(echo \$${color}_bg) if [[ -z "$(eval echo $property_var_name)" ]];then debug " There is no \"$property_var_name\", so we'll just use \"\$common_$property\"" property_var_contents=$(eval echo \$common_$property) else debug " Using \"$property_var_name\"" property_var_contents="$(eval echo $property_var_name)" fi OLDIFS="$IFS" IFS=$'\n' property_var_contents=$(echo "$property_var_contents" | sed 's/\#/\\\#/g') for file in ${file_list};do sed -i "s/${property}_color:\#[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]/${property}_color:$property_var_contents/g;s/theme_${property}_color \#[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]/theme_${property}_color $property_var_contents/g;s/Zukitwo/Zukitwo-$color/g;s/define-color theme_${property}_color .*\;/define-color theme_${property}_color $property_var_contents\;/g" "$file" 2>/dev/null >/dev/null done IFS="$OLDIFS" done #rm -rf "xfwm4" cp -r ../Zukitwo-colors-common/* ./ cd "$OLDPWD" } update() { if [[ ! -d "zuki-themes/.git" ]];then git submodule init zuki-themes/ git submodule update -f zuki-themes/ fi echo "Resetting zuki-themes tree..." git submodule deinit -f zuki-themes/ git submodule init zuki-themes/ echo "Getting latest revision of zuki-themes..." git submodule update -f -- zuki-themes/ cd "$OLDPWD" printf '\n\n' } clean() { printf "Removing..." for color in ${colors[@]};do printf " \"Zukitwo-$color/\"" rm -rf "Zukitwo-$color/" done printf '\n\n' } help() { echo "make-colors-themes - create Zukitwo-colors themes" echo "usage: make-colors-themes [actions]" echo echo "arguments:" echo " generate - just generate the theme" echo " install - install the theme system-wide" echo " user_install - install the theme in your ~/.themes directory" echo " uninstall - uninstall the theme" echo " clean - delete old generated files" echo " patch - patch zuki-themes file" echo " update - update the local copy of the zuki-themes repo" echo " debug - activate debug messages" echo " help - display this message" echo echo "edit the \$colors variables in the script if you'd like to only generate certain colors" echo exit } command_not_found() { echo "make-colors-themes: \`$command\` is not a valid command" } generate_themes() { generate=true for theme in ${colors[@]};do generate_theme $theme done printf "Now, type \`$0 install\` or \`$0 user_install\` to install.\n" } if [[ "$1" ]];then while [[ "$1" ]];do [[ "$1" == "generate" ]] && generate=true && generate_themes [[ "$1" == "install" ]] && install=true && install_theme [[ "$1" == "user-install" ]] && user_install=1 && install_theme [[ "$1" == "update" ]] && update=true && update [[ "$1" == "uninstall" ]] && uninstall=true && uninstall_theme [[ "$1" == "clean" ]] && clean=true clean [[ "$1" == "patch" ]] && patch=true && patch_theme [[ "$1" == "debug" ]] && debug=true [[ "$1" == "help" ]] && help=true && help [[ ! "$help" && ! "$install" && ! "$user_install" && ! "$update" && ! "$uninstall" && ! "$clean" && ! "$patch" && ! "$debug" && ! "$generate" ]] && command_not_found=1 && command="$1" shift done else help fi