WhiteSur-gtk-theme/install.sh
Peter Wu a84bf16117
change size, theme and transparency locally
Using global search/replace is dangerous and could lead to unwanted changes. Such practice should be avoided.
This patch surgically makes the change to the very lines where the corresponding values should be updated.
2020-12-26 14:06:23 -05:00

755 lines
27 KiB
Bash
Executable File

#! /usr/bin/env bash
set -ueo pipefail
set -o physical
#set -x
REPO_DIR=$(cd $(dirname $0) && pwd)
SRC_DIR=${REPO_DIR}/src
ROOT_UID=0
DEST_DIR=
# Destination directory
if [ "$UID" -eq "$ROOT_UID" ]; then
DEST_DIR="/usr/share/themes"
else
DEST_DIR="$HOME/.themes"
fi
THEME_NAME=WhiteSur
COLOR_VARIANTS=('-light' '-dark')
OPACITY_VARIANTS=('' '-solid')
ALT_VARIANTS=('' '-alt')
ICON_VARIANTS=('' '-normal' '-gnome' '-ubuntu' '-arch' '-manjaro' '-fedora' '-debian' '-void')
# COLORS
CDEF=" \033[0m" # default color
CCIN=" \033[0;36m" # info color
CGSC=" \033[0;32m" # success color
CRER=" \033[0;31m" # error color
CWAR=" \033[0;33m" # warning color
b_CDEF=" \033[1;37m" # bold default color
b_CCIN=" \033[1;36m" # bold info color
b_CGSC=" \033[1;32m" # bold success color
b_CRER=" \033[1;31m" # bold error color
b_CWAR=" \033[1;33m" # bold warning color
# Echo like ... with flag type and display message colors
prompt () {
case ${1} in
"-s"|"--success")
echo -e "${b_CGSC}${@/-s/}${CDEF}";; # print success message
"-e"|"--error")
echo -e "${b_CRER}${@/-e/}${CDEF}";; # print error message
"-w"|"--warning")
echo -e "${b_CWAR}${@/-w/}${CDEF}";; # print warning message
"-i"|"--info")
echo -e "${b_CCIN}${@/-i/}${CDEF}";; # print info message
*)
echo -e "$@"
;;
esac
}
# Check command availability
function has_command() {
command -v $1 > /dev/null
}
operation_canceled() {
clear
prompt -i "\n Operation canceled by user, Bye!"
exit 1
}
usage() {
printf "%s\n" "Usage: $0 [OPTIONS...]"
printf "\n%s\n" "OPTIONS:"
printf " %-25s%s\n" "-d, --dest DIR" "Specify theme destination directory (Default: ${DEST_DIR})"
printf " %-25s%s\n" "-n, --name NAME" "Specify theme name (Default: ${THEME_NAME})"
printf " %-25s%s\n" "-o, --opacity VARIANTS" "Specify theme opacity variant(s) [standard|solid] (Default: All variants)"
printf " %-25s%s\n" "-c, --color VARIANTS" "Specify theme color variant(s) [light|dark] (Default: All variants)"
printf " %-25s%s\n" "-t, --theme VARIANTS" "Run a dialog to change the theme color (Default: blue)"
printf " %-25s%s\n" "-a, --alt VARIANTS" "Specify theme titlebutton variant(s) [standard|alt] (Default: All variants)"
printf " %-25s%s\n" "-p, --panel VARIANTS" "Run a dialog to change the panel transparency (Default: 85%)"
printf " %-25s%s\n" "-s, --size VARIANTS" "Run a dialog to change the nautilus sidebar width size (Default: 200px)"
printf " %-25s%s\n" "-i, --icon VARIANTS" "Specify activities icon variant(s) for gnome-shell [standard|normal|gnome|ubuntu|arch|manjaro|fedora|debian|void] (Default: standard variant)"
printf " %-25s%s\n" "-g, --gdm" "Install GDM theme, this option needs root user authority! Please run this with sudo"
printf " %-25s%s\n" "-r, --remove" "Remove theme, remove all installed themes"
printf " %-25s%s\n" "-h, --help" "Show this help"
}
install() {
local dest=${1}
local name=${2}
local color=${3}
local opacity=${4}
local alt=${5}
local icon=${6}
[[ ${color} == '-light' ]] && local ELSE_LIGHT=${color}
[[ ${color} == '-dark' ]] && local ELSE_DARK=${color}
local THEME_DIR=${1}/${2}${3}${4}${5}
[[ -d ${THEME_DIR} ]] && rm -rf ${THEME_DIR}
prompt -i "Installing '${THEME_DIR}'..."
mkdir -p ${THEME_DIR}
cp -r ${REPO_DIR}/COPYING ${THEME_DIR}
echo "[Desktop Entry]" >> ${THEME_DIR}/index.theme
echo "Type=X-GNOME-Metatheme" >> ${THEME_DIR}/index.theme
echo "Name=${name}${color}${opacity}" >> ${THEME_DIR}/index.theme
echo "Comment=A Stylish Gtk+ theme based on Elegant Design" >> ${THEME_DIR}/index.theme
echo "Encoding=UTF-8" >> ${THEME_DIR}/index.theme
echo "" >> ${THEME_DIR}/index.theme
echo "[X-GNOME-Metatheme]" >> ${THEME_DIR}/index.theme
echo "GtkTheme=${name}${color}${opacity}" >> ${THEME_DIR}/index.theme
echo "MetacityTheme=${name}${color}${opacity}" >> ${THEME_DIR}/index.theme
echo "IconTheme=McMojave-circle" >> ${THEME_DIR}/index.theme
echo "CursorTheme=McMojave-circle" >> ${THEME_DIR}/index.theme
echo "ButtonLayout=close,minimize,maximize:menu" >> ${THEME_DIR}/index.theme
mkdir -p ${THEME_DIR}/gnome-shell
cp -r ${SRC_DIR}/assets/gnome-shell/icons ${THEME_DIR}/gnome-shell
cp -r ${SRC_DIR}/main/gnome-shell/pad-osd.css ${THEME_DIR}/gnome-shell
cp -r ${SRC_DIR}/main/gnome-shell/gnome-shell${color}${opacity}${alt}.css ${THEME_DIR}/gnome-shell/gnome-shell.css
cp -r ${SRC_DIR}/assets/gnome-shell/common-assets ${THEME_DIR}/gnome-shell/assets
cp -r ${SRC_DIR}/assets/gnome-shell/assets${color}/*.svg ${THEME_DIR}/gnome-shell/assets
cp -r ${SRC_DIR}/assets/gnome-shell/activities/activities${icon}.svg ${THEME_DIR}/gnome-shell/assets/activities.svg
cd "${THEME_DIR}/gnome-shell"
mv -f assets/no-events.svg no-events.svg
mv -f assets/process-working.svg process-working.svg
mv -f assets/no-notifications.svg no-notifications.svg
if [[ ${alt} == '-alt' || ${opacity} == '-solid' ]] && [[ ${color} == '-light' ]]; then
cp -r ${SRC_DIR}/assets/gnome-shell/activities-black/activities${icon}.svg ${THEME_DIR}/gnome-shell/assets/activities.svg
fi
mkdir -p ${THEME_DIR}/gtk-2.0
cp -r ${SRC_DIR}/main/gtk-2.0/gtkrc${color} ${THEME_DIR}/gtk-2.0/gtkrc
cp -r ${SRC_DIR}/main/gtk-2.0/menubar-toolbar${color}.rc ${THEME_DIR}/gtk-2.0/menubar-toolbar.rc
cp -r ${SRC_DIR}/main/gtk-2.0/common/*.rc ${THEME_DIR}/gtk-2.0
cp -r ${SRC_DIR}/assets/gtk-2.0/assets${color} ${THEME_DIR}/gtk-2.0/assets
mkdir -p ${THEME_DIR}/gtk-3.0
cp -r ${SRC_DIR}/assets/gtk-3.0/common-assets/assets ${THEME_DIR}/gtk-3.0
cp -r ${SRC_DIR}/assets/gtk-3.0/common-assets/sidebar-assets/*.png ${THEME_DIR}/gtk-3.0/assets
cp -r ${SRC_DIR}/assets/gtk-3.0/windows-assets/titlebutton${alt} ${THEME_DIR}/gtk-3.0/windows-assets
cp -r ${SRC_DIR}/assets/gtk-3.0/thumbnail${color}.png ${THEME_DIR}/gtk-3.0/thumbnail.png
cp -r ${SRC_DIR}/main/gtk-3.0/gtk-dark${opacity}.css ${THEME_DIR}/gtk-3.0/gtk-dark.css
if [[ ${color} == '-light' ]]; then
cp -r ${SRC_DIR}/main/gtk-3.0/gtk-light${opacity}.css ${THEME_DIR}/gtk-3.0/gtk.css
else
cp -r ${SRC_DIR}/main/gtk-3.0/gtk-dark${opacity}.css ${THEME_DIR}/gtk-3.0/gtk.css
fi
glib-compile-resources --sourcedir=${THEME_DIR}/gtk-3.0 --target=${THEME_DIR}/gtk-3.0/gtk.gresource ${SRC_DIR}/main/gtk-3.0/gtk.gresource.xml
rm -rf ${THEME_DIR}/gtk-3.0/{assets,windows-assets,gtk.css,gtk-dark.css}
echo '@import url("resource:///org/gnome/theme/gtk.css");' >> ${THEME_DIR}/gtk-3.0/gtk.css
echo '@import url("resource:///org/gnome/theme/gtk-dark.css");' >> ${THEME_DIR}/gtk-3.0/gtk-dark.css
mkdir -p ${THEME_DIR}/metacity-1
cp -r ${SRC_DIR}/main/metacity-1/metacity-theme${color}.xml ${THEME_DIR}/metacity-1/metacity-theme-1.xml
cp -r ${SRC_DIR}/main/metacity-1/metacity-theme-3.xml ${THEME_DIR}/metacity-1
cp -r ${SRC_DIR}/assets/metacity-1/assets/*.png ${THEME_DIR}/metacity-1
cp -r ${SRC_DIR}/assets/metacity-1/thumbnail${color}.png ${THEME_DIR}/metacity-1/thumbnail.png
cd ${THEME_DIR}/metacity-1 && ln -s metacity-theme-1.xml metacity-theme-2.xml
mkdir -p ${THEME_DIR}/xfwm4
cp -r ${SRC_DIR}/assets/xfwm4/assets${color}/*.png ${THEME_DIR}/xfwm4
cp -r ${SRC_DIR}/main/xfwm4/themerc${color} ${THEME_DIR}/xfwm4/themerc
mkdir -p ${THEME_DIR}/cinnamon
cp -r ${SRC_DIR}/main/cinnamon/cinnamon${color}${opacity}.css ${THEME_DIR}/cinnamon/cinnamon.css
cp -r ${SRC_DIR}/assets/cinnamon/common-assets ${THEME_DIR}/cinnamon/assets
cp -r ${SRC_DIR}/assets/cinnamon/assets${color}/*.svg ${THEME_DIR}/cinnamon/assets
cp -r ${SRC_DIR}/assets/cinnamon/thumbnail${color}.png ${THEME_DIR}/cinnamon/thumbnail.png
mkdir -p ${THEME_DIR}/plank
cp -r ${SRC_DIR}/other/plank/theme${color}/*.theme ${THEME_DIR}/plank
}
# Backup and install files related to GDM theme
GS_THEME_FILE="/usr/share/gnome-shell/gnome-shell-theme.gresource"
SHELL_THEME_FOLDER="/usr/share/gnome-shell/theme"
ETC_THEME_FOLDER="/etc/alternatives"
ETC_THEME_FILE="/etc/alternatives/gdm3.css"
ETC_NEW_THEME_FILE="/etc/alternatives/gdm3-theme.gresource"
UBUNTU_THEME_FILE="/usr/share/gnome-shell/theme/ubuntu.css"
UBUNTU_NEW_THEME_FILE="/usr/share/gnome-shell/theme/gnome-shell.css"
UBUNTU_YARU_THEME_FILE="/usr/share/gnome-shell/theme/Yaru/gnome-shell-theme.gresource"
install_gdm() {
local GDM_THEME_DIR="${1}/${2}${3}"
echo
prompt -i "Installing ${2}${3} gdm theme..."
if [[ -f "$GS_THEME_FILE" ]] && command -v glib-compile-resources >/dev/null ; then
prompt -i "Installing '$GS_THEME_FILE'..."
cp -an "$GS_THEME_FILE" "$GS_THEME_FILE.bak"
glib-compile-resources \
--sourcedir="$GDM_THEME_DIR/gnome-shell" \
--target="$GS_THEME_FILE" \
"${SRC_DIR}/main/gnome-shell/gnome-shell-theme.gresource.xml"
fi
if [[ -f "$UBUNTU_THEME_FILE" && -f "$GS_THEME_FILE.bak" ]]; then
prompt -i "Installing '$UBUNTU_THEME_FILE'..."
cp -an "$UBUNTU_THEME_FILE" "$UBUNTU_THEME_FILE.bak"
cp -af "$GDM_THEME_DIR/gnome-shell/gnome-shell.css" "$UBUNTU_THEME_FILE"
fi
if [[ -f "$UBUNTU_NEW_THEME_FILE" && -f "$GS_THEME_FILE.bak" ]]; then
prompt -i "Installing '$UBUNTU_NEW_THEME_FILE'..."
cp -an "$UBUNTU_NEW_THEME_FILE" "$UBUNTU_NEW_THEME_FILE.bak"
cp -af "$GDM_THEME_DIR"/gnome-shell/* "$SHELL_THEME_FOLDER"
fi
# > Ubuntu 18.04
if [[ -f "$ETC_THEME_FILE" && -f "$GS_THEME_FILE.bak" ]]; then
prompt -i "Installing Ubuntu GDM theme..."
cp -an "$ETC_THEME_FILE" "$ETC_THEME_FILE.bak"
[[ -d "$SHELL_THEME_FOLDER/$THEME_NAME" ]] && rm -rf "$SHELL_THEME_FOLDER/$THEME_NAME"
cp -r "$GDM_THEME_DIR/gnome-shell" "$SHELL_THEME_FOLDER/$THEME_NAME"
cd "$ETC_THEME_FOLDER"
[[ -f "$ETC_THEME_FILE.bak" ]] && ln -sf "$SHELL_THEME_FOLDER/$THEME_NAME/gnome-shell.css" gdm3.css
fi
# > Ubuntu 20.04
if [[ -f "$UBUNTU_YARU_THEME_FILE" && -f "$GS_THEME_FILE.bak" ]]; then
prompt -i "Installing Ubuntu GDM theme..."
cp -an "$UBUNTU_YARU_THEME_FILE" "$UBUNTU_YARU_THEME_FILE.bak"
cp -af "$GS_THEME_FILE" "$UBUNTU_YARU_THEME_FILE"
# cp -an "$ETC_NEW_THEME_FILE" "$ETC_NEW_THEME_FILE.bak"
# [[ -d "$SHELL_THEME_FOLDER/$THEME_NAME" ]] && rm -rf "$SHELL_THEME_FOLDER/$THEME_NAME" && mkdir -p "$SHELL_THEME_FOLDER/$THEME_NAME"
# cp -r "$GS_THEME_FILE" "$SHELL_THEME_FOLDER/$THEME_NAME"
# cd "$ETC_THEME_FOLDER"
# [[ -f "$ETC_NEW_THEME_FILE.bak" ]] && ln -sf "$SHELL_THEME_FOLDER/$THEME_NAME/gnome-shell-theme.gresource" gdm3-theme.gresource
fi
}
remove_theme() {
for color in "${colors[@]-${COLOR_VARIANTS[@]}}"; do
for opacity in "${opacities[@]-${OPACITY_VARIANTS[@]}}"; do
for alt in "${alts[@]-${ALT_VARIANTS[@]}}"; do
[[ -d "${DEST_DIR}/${THEME_NAME}${color}${opacity}${alt}" ]] && rm -rf "${DEST_DIR}/${THEME_NAME}${color}${opacity}${alt}"
done
done
done
}
revert_gdm() {
if [[ -f "$GS_THEME_FILE.bak" ]]; then
prompt -w "Reverting '$GS_THEME_FILE'..."
rm -rf "$GS_THEME_FILE"
mv "$GS_THEME_FILE.bak" "$GS_THEME_FILE"
fi
if [[ -f "$UBUNTU_THEME_FILE.bak" ]]; then
prompt -w "Reverting '$UBUNTU_THEME_FILE'..."
rm -rf "$UBUNTU_THEME_FILE"
mv "$UBUNTU_THEME_FILE.bak" "$UBUNTU_THEME_FILE"
fi
if [[ -f "$UBUNTU_NEW_THEME_FILE.bak" ]]; then
prompt -w "Reverting '$UBUNTU_NEW_THEME_FILE'..."
rm -rf "$UBUNTU_NEW_THEME_FILE" "$SHELL_THEME_FOLDER"/{assets,no-events.svg,process-working.svg,no-notifications.svg}
mv "$UBUNTU_NEW_THEME_FILE.bak" "$UBUNTU_NEW_THEME_FILE"
fi
# > Ubuntu 18.04
if [[ -f "$ETC_THEME_FILE.bak" ]]; then
prompt -w "reverting Ubuntu GDM theme..."
rm -rf "$ETC_THEME_FILE"
mv "$ETC_THEME_FILE.bak" "$ETC_THEME_FILE"
[[ -d $SHELL_THEME_FOLDER/$THEME_NAME ]] && rm -rf $SHELL_THEME_FOLDER/$THEME_NAME
fi
# > Ubuntu 20.04
# if [[ -f "$ETC_NEW_THEME_FILE.bak" ]]; then
# prompt -w "reverting Ubuntu GDM theme..."
# rm -rf "$ETC_NEW_THEME_FILE"
# mv "$ETC_NEW_THEME_FILE.bak" "$ETC_NEW_THEME_FILE"
# [[ -d $SHELL_THEME_FOLDER/$THEME_NAME ]] && rm -rf $SHELL_THEME_FOLDER/$THEME_NAME
# fi
if [[ -f "$UBUNTU_YARU_THEME_FILE.bak" ]]; then
prompt -w "reverting Ubuntu GDM theme..."
rm -rf "$UBUNTU_YARU_THEME_FILE"
mv "$UBUNTU_YARU_THEME_FILE.bak" "$UBUNTU_YARU_THEME_FILE"
fi
}
install_dialog() {
if [ ! "$(which dialog 2> /dev/null)" ]; then
prompt -w "\n 'dialog' needs to be installed for this shell"
if has_command zypper; then
sudo zypper in dialog
elif has_command apt-get; then
sudo apt-get install dialog
elif has_command dnf; then
sudo dnf install -y dialog
elif has_command yum; then
sudo yum install dialog
elif has_command pacman; then
sudo pacman -S --noconfirm dialog
fi
fi
}
install_depends() {
if [ ! "$(which glib-compile-resources 2> /dev/null)" ]; then
prompt -w "\n 'glib2.0' needs to be installed for this shell"
if has_command apt; then
sudo apt install libglib2.0-dev-bin
elif has_command dnf; then
sudo dnf install -y glib2-devel
fi
fi
}
run_sidebar_dialog() {
if [[ -x /usr/bin/dialog ]]; then
tui=$(dialog --backtitle "${THEME_NAME} gtk theme installer" \
--radiolist "Choose your nautilus sidebar size (default is 200px width):" 15 40 5 \
1 "200px" on \
2 "220px" off \
3 "240px" off \
4 "260px" off \
5 "280px" off --output-fd 1 )
case "$tui" in
1) sidebar_size="200px" ;;
2) sidebar_size="220px" ;;
3) sidebar_size="240px" ;;
4) sidebar_size="260px" ;;
5) sidebar_size="280px" ;;
*) operation_canceled ;;
esac
fi
}
run_shell_dialog() {
if [[ -x /usr/bin/dialog ]]; then
tui=$(dialog --backtitle "${THEME_NAME} gtk theme installer" \
--radiolist "Choose your panel transparency
(default is 85%, 100% is fully transparent!):" 20 50 10 \
1 "80%" on \
2 "75%" off \
3 "70%" off \
4 "65%" off \
5 "60%" off \
6 "55%" off \
7 "50%" off \
8 "45%" off \
9 "40%" off \
0 "35%" off --output-fd 1 )
case "$tui" in
1) panel_trans="0.20" ;;
2) panel_trans="0.25" ;;
3) panel_trans="0.30" ;;
4) panel_trans="0.35" ;;
5) panel_trans="0.40" ;;
6) panel_trans="0.45" ;;
7) panel_trans="0.50" ;;
8) panel_trans="0.55" ;;
9) panel_trans="0.60" ;;
0) panel_trans="0.65" ;;
*) operation_canceled ;;
esac
fi
}
run_theme_dialog() {
if [[ -x /usr/bin/dialog ]]; then
tui=$(dialog --backtitle "${THEME_NAME} gtk theme installer" \
--radiolist "Choose your theme color (default is Mac Blue):" 20 50 10 \
1 "Blue" on \
2 "Purple" off \
3 "Pink" off \
4 "Red" off \
5 "Orange" off \
6 "Yellow" off \
7 "Green" off \
8 "Grey" off --output-fd 1 )
case "$tui" in
1) theme_color="#2E7CF7" ;;
2) theme_color="#9A57A3" ;;
3) theme_color="#E55E9C" ;;
4) theme_color="#ED5F5D" ;;
5) theme_color="#E9873A" ;;
6) theme_color="#F3BA4B" ;;
7) theme_color="#79B757" ;;
8) theme_color="#8C8C8C" ;;
*) operation_canceled ;;
esac
fi
}
parse_sass() {
cd ${REPO_DIR} && ./parse-sass.sh
}
change_size() {
cd ${SRC_DIR}/sass/gtk
cp -an _applications.scss _applications.scss.bak
sed -i "/\$nautilus_sidebar_size/s/200px/${sidebar_size}/" _applications.scss
prompt -w "Change nautilus sidebar size ..."
}
change_theme_color() {
notify-send "Notice" "It will take a few minutes to regenerate the assets files, please be patient!" -i face-wink
cd ${SRC_DIR}/sass
cp -an _colors.scss _colors.scss.bak
sed -i "/\$selected_bg_color/s/#0860f2/${theme_color}/" _colors.scss
cd ${SRC_DIR}/assets/gtk-3.0
cp -an thumbnail.svg thumbnail.svg.bak
mv thumbnail-dark.png thumbnail-dark.png.bak
mv thumbnail-light.png thumbnail-light.png.bak
sed -i "s/#0860f2/$theme_color/g" thumbnail.svg
./render-thumbnails.sh
cd ${SRC_DIR}/assets/gtk-3.0/common-assets
cp -an assets.svg assets.svg.bak
mv assets assets-bak
sed -i "s/#0860f2/$theme_color/g" assets.svg
./render-assets.sh
cd ${SRC_DIR}/assets/gnome-shell/common-assets
cp -an checkbox.svg checkbox.svg.bak
cp -an more-results.svg more-results.svg.bak
cp -an toggle-on.svg toggle-on.svg.bak
sed -i "s/#0860f2/$theme_color/g" {checkbox.svg,more-results.svg,toggle-on.svg}
cd ${SRC_DIR}/main/gtk-2.0
cp -an gtkrc-dark gtkrc-dark.bak
cp -an gtkrc-light gtkrc-light.bak
sed -i "s/#0860f2/$theme_color/g" {gtkrc-dark,gtkrc-light}
cd ${SRC_DIR}/assets/gtk-2.0
cp -an assets-dark.svg assets-dark.svg.bak
cp -an assets-light.svg assets-light.svg.bak
mv assets-dark assets-dark-bak
mv assets-light assets-light-bak
sed -i "s/#0860f2/$theme_color/g" {assets-dark.svg,assets-light.svg}
./render-assets.sh
cd ${SRC_DIR}/assets/cinnamon
cp -an thumbnail.svg thumbnail.svg.bak
mv thumbnail-dark.png thumbnail-dark.png.bak
mv thumbnail-light.png thumbnail-light.png.bak
sed -i "s/#0860f2/$theme_color/g" thumbnail.svg
./render-thumbnails.sh
cd ${SRC_DIR}/assets/cinnamon/common-assets
cp -an checkbox.svg checkbox.svg.bak
cp -an radiobutton.svg radiobutton.svg.bak
cp -an add-workspace-active.svg add-workspace-active.svg.bak
cp -an menu-hover.svg menu-hover.svg.bak
cp -an toggle-on.svg toggle-on.svg.bak
cp -an corner-ripple.svg corner-ripple.svg.bak
sed -i "s/#0860f2/$theme_color/g" {checkbox.svg,radiobutton.svg,menu-hover.svg,add-workspace-active.svg,corner-ripple.svg,toggle-on.svg}
prompt -w "Change theme color ..."
}
restore_assets_files() {
cd ${SRC_DIR}/assets/gtk-3.0
mv -f thumbnail.svg.bak thumbnail.svg
mv -f thumbnail-dark.png.bak thumbnail-dark.png
mv -f thumbnail-light.png.bak thumbnail-light.png
cd ${SRC_DIR}/assets/gtk-3.0/common-assets
mv -f assets.svg.bak assets.svg
[[ -d assets-bak ]] && rm -rf assets && mv assets-bak assets
cd ${SRC_DIR}/assets/gnome-shell/common-assets
mv -f checkbox.svg.bak checkbox.svg
mv -f more-results.svg.bak more-results.svg
mv -f toggle-on.svg.bak toggle-on.svg
cd ${SRC_DIR}/main/gtk-2.0
mv -f gtkrc-dark.bak gtkrc-dark
mv -f gtkrc-light.bak gtkrc-light
cd ${SRC_DIR}/assets/gtk-2.0
mv -f assets-dark.svg.bak assets-dark.svg
mv -f assets-light.svg.bak assets-light.svg
[[ -d assets-dark-bak ]] && rm -rf assets-dark && mv assets-dark-bak assets-dark
[[ -d assets-light-bak ]] && rm -rf assets-light && mv assets-light-bak assets-light
cd ${SRC_DIR}/assets/cinnamon
mv -f thumbnail.svg.bak thumbnail.svg
mv -f thumbnail-dark.png.bak thumbnail-dark.png
mv -f thumbnail-light.png.bak thumbnail-light.png
cd ${SRC_DIR}/assets/cinnamon/common-assets
mv -f checkbox.svg.bak checkbox.svg
mv -f radiobutton.svg.bak radiobutton.svg
mv -f add-workspace-active.svg.bak add-workspace-active.svg
mv -f menu-hover.svg.bak menu-hover.svg
mv -f toggle-on.svg.bak toggle-on.svg
mv -f corner-ripple.svg.bak corner-ripple.svg
prompt -w "Restore assets files ..."
}
change_transparency() {
cd ${SRC_DIR}/sass
cp -an _colors.scss _colors.scss.bak
sed -i "/\$panel_opacity/s/0.16/${panel_trans}/" _colors.scss
prompt -w "Change panel transparency ..."
}
restore_applications_file() {
cd ${SRC_DIR}/sass/gtk
[[ -f _applications.scss.bak ]] && rm -rf _applications.scss
mv _applications.scss.bak _applications.scss
prompt -w "Restore _applications.scss file ..."
}
restore_colors_file() {
cd ${SRC_DIR}/sass
[[ -f _colors.scss.bak ]] && rm -rf _colors.scss
mv _colors.scss.bak _colors.scss
prompt -w "Restore _colors.scss file ..."
}
while [[ $# -gt 0 ]]; do
case "${1}" in
-d|--dest)
dest="${2}"
if [[ ! -d "${dest}" ]]; then
prompt -e "Destination directory does not exist. Let's make a new one..."
mkdir -p ${dest}
fi
shift 2
;;
-n|--name)
name="${2}"
shift 2
;;
-g|--gdm)
gdm='true'
shift 1
;;
-s|--size)
size='true'
shift 1
;;
-t|--theme)
theme='true'
shift 1
;;
-p|--panel)
panel='true'
shift 1
;;
-r|--remove)
remove='true'
shift 1
;;
-a|--alt)
shift
for alt in "${@}"; do
case "${alt}" in
standard)
alts+=("${ALT_VARIANTS[0]}")
shift
;;
alt)
alts+=("${ALT_VARIANTS[1]}")
shift
;;
-*|--*)
break
;;
*)
prompt -e "ERROR: Unrecognized opacity variant '$1'."
prompt -i "Try '$0 --help' for more information."
exit 1
;;
esac
done
;;
-o|--opacity)
shift
for opacity in "${@}"; do
case "${opacity}" in
standard)
opacities+=("${OPACITY_VARIANTS[0]}")
shift
;;
solid)
opacities+=("${OPACITY_VARIANTS[1]}")
shift
;;
-*|--*)
break
;;
*)
prompt -e "ERROR: Unrecognized opacity variant '$1'."
prompt -i "Try '$0 --help' for more information."
exit 1
;;
esac
done
;;
-c|--color)
shift
for color in "${@}"; do
case "${color}" in
light)
colors+=("${COLOR_VARIANTS[0]}")
shift
;;
dark)
colors+=("${COLOR_VARIANTS[1]}")
shift
;;
-*|--*)
break
;;
*)
prompt -e "ERROR: Unrecognized color variant '$1'."
prompt -i "Try '$0 --help' for more information."
exit 1
;;
esac
done
;;
-i|--icon)
shift
for icon in "${@}"; do
case "${icon}" in
standard)
icons+=("${ICON_VARIANTS[0]}")
shift
;;
normal)
icons+=("${ICON_VARIANTS[1]}")
shift
;;
gnome)
icons+=("${ICON_VARIANTS[2]}")
shift
;;
ubuntu)
icons+=("${ICON_VARIANTS[3]}")
shift
;;
arch)
icons+=("${ICON_VARIANTS[4]}")
shift
;;
manjaro)
icons+=("${ICON_VARIANTS[5]}")
shift
;;
fedora)
icons+=("${ICON_VARIANTS[6]}")
shift
;;
debian)
icons+=("${ICON_VARIANTS[7]}")
shift
;;
void)
icons+=("${ICON_VARIANTS[8]}")
shift
;;
-*|--*)
break
;;
*)
prompt -e "ERROR: Unrecognized icon variant '$1'."
prompt -i "Try '$0 --help' for more information."
exit 1
;;
esac
done
;;
-h|--help)
usage
exit 0
;;
*)
prompt -e "ERROR: Unrecognized installation option '$1'."
prompt -i "Try '$0 --help' for more information."
exit 1
;;
esac
done
install_theme() {
for color in "${colors[@]-${COLOR_VARIANTS[@]}}"; do
for opacity in "${opacities[@]-${OPACITY_VARIANTS[@]}}"; do
for alt in "${alts[@]-${ALT_VARIANTS[@]}}"; do
for icon in "${icons[@]-${ICON_VARIANTS[0]}}"; do
install "${dest:-${DEST_DIR}}" "${name:-${THEME_NAME}}" "${color}" "${opacity}" "${alt}" "${icon}"
done
done
done
done
}
install_depends
if [[ "${size:-}" == 'true' ]]; then
install_dialog && run_sidebar_dialog
if [[ "$sidebar_size" != '200px' ]]; then
change_size && parse_sass
fi
fi
if [[ "${theme:-}" == 'true' ]]; then
install_dialog && run_theme_dialog && change_theme_color && parse_sass
fi
if [[ "${panel:-}" == 'true' ]]; then
install_dialog && run_shell_dialog && change_transparency && parse_sass
fi
if [[ "${gdm:-}" != 'true' && "${remove:-}" != 'true' ]]; then
install_theme
fi
if [[ "${gdm:-}" == 'true' && "${remove:-}" != 'true' && "$UID" -eq "$ROOT_UID" ]]; then
install_theme && install_gdm "${dest:-${DEST_DIR}}" "${name:-${THEME_NAME}}" "${color}" "${opacity}"
fi
if [[ "${gdm:-}" != 'true' && "${remove:-}" == 'true' ]]; then
remove_theme
fi
if [[ "${gdm:-}" == 'true' && "${remove:-}" == 'true' && "$UID" -eq "$ROOT_UID" ]]; then
revert_gdm
fi
if [[ -f "${SRC_DIR}"/sass/gtk/_applications.scss.bak ]]; then
restore_applications_file && parse_sass
fi
if [[ -f "${SRC_DIR}"/sass/_colors.scss.bak ]]; then
restore_colors_file && parse_sass
fi
if [[ -f "${SRC_DIR}"/assets/gtk-3.0/thumbnail.svg.bak ]]; then
restore_assets_files
fi
notify-send "Finished" "Enjoy your new WhiteSur theme!" -i face-smile
echo
prompt -s Done.