WhiteSur-gtk-theme/install.sh

899 lines
30 KiB
Bash
Raw Normal View History

2020-12-26 02:23:20 +01:00
#! /usr/bin/env bash
2020-07-14 18:35:03 +02:00
set -ueo pipefail
2020-12-26 02:23:20 +01:00
set -o physical
2020-07-14 18:35:03 +02:00
#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')
2020-12-26 16:56:11 +01:00
# COLORS
2020-07-31 11:30:07 +02:00
CDEF=" \033[0m" # default color
CCIN=" \033[0;36m" # info color
CGSC=" \033[0;32m" # success color
CRER=" \033[0;31m" # error color
2020-12-26 16:56:11 +01:00
CWAR=" \033[0;33m" # warning color
2020-07-31 11:30:07 +02:00
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
2020-12-26 16:56:11 +01:00
# Echo like ... with flag type and display message colors
2020-07-31 11:30:07 +02:00
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
}
2020-12-26 16:56:11 +01:00
# Check command availability
2020-07-31 11:30:07 +02:00
function has_command() {
command -v $1 > /dev/null
}
operation_canceled() {
clear
prompt -i "\n Operation canceled by user, Bye!"
exit 1
}
2020-07-14 18:35:03 +02:00
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})"
2020-12-27 14:08:44 +01:00
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"
2020-07-14 18:35:03 +02:00
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)"
2020-12-26 16:56:11 +01:00
printf " %-25s%s\n" "-a, --alt VARIANTS" "Specify theme titlebutton variant(s) [standard|alt] (Default: All variants)"
2020-12-27 14:08:44 +01:00
printf " %-25s%s\n" "-t, --theme VARIANTS" "Change the theme color [blue|purple|pink|red|orange|yellow|green|grey] (Default: MacOS blue)"
printf " %-25s%s\n" "-p, --panel VARIANTS" "Change the panel transparency [80%|75%|70%|65%|60%|55%|50%|45%|40%|35%] (Default: 85%)"
printf " %-25s%s\n" "-s, --size VARIANTS" "Change the nautilus sidebar width size [220px|240px|260px|280px] (Default: 200px)"
printf " %-25s%s\n" "-i, --icon VARIANTS" "Change gnome-shell activities icon [standard|normal|gnome|ubuntu|arch|manjaro|fedora|debian|void] (Default: standard)"
2020-07-14 18:35:03 +02:00
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}
2020-07-31 11:30:07 +02:00
prompt -i "Installing '${THEME_DIR}'..."
2020-07-14 18:35:03 +02:00
mkdir -p ${THEME_DIR}
2020-07-31 11:30:07 +02:00
cp -r ${REPO_DIR}/COPYING ${THEME_DIR}
2020-07-14 18:35:03 +02:00
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
2020-12-26 16:56:11 +01:00
echo "Comment=A Stylish Gtk+ theme based on Elegant Design" >> ${THEME_DIR}/index.theme
2020-07-14 18:35:03 +02:00
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
2020-12-24 14:00:59 +01:00
cp -r ${SRC_DIR}/assets/gnome-shell/icons ${THEME_DIR}/gnome-shell
2020-12-25 05:53:46 +01:00
cp -r ${SRC_DIR}/main/gnome-shell/pad-osd.css ${THEME_DIR}/gnome-shell
2020-12-27 06:18:29 +01:00
cp -r ${SRC_DIR}/main/gnome-shell/gdm3${color}.css ${THEME_DIR}/gnome-shell/gdm3.css
2020-08-18 15:44:43 +02:00
cp -r ${SRC_DIR}/main/gnome-shell/gnome-shell${color}${opacity}${alt}.css ${THEME_DIR}/gnome-shell/gnome-shell.css
2020-07-31 11:30:07 +02:00
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
2020-08-18 15:44:43 +02:00
2020-12-24 14:00:59 +01:00
cd "${THEME_DIR}/gnome-shell"
2020-12-25 05:29:27 +01:00
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
2020-12-24 14:00:59 +01:00
2020-08-18 15:44:43 +02:00
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
2020-07-14 18:35:03 +02:00
mkdir -p ${THEME_DIR}/gtk-2.0
2020-07-31 11:30:07 +02:00
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
2020-07-14 18:35:03 +02:00
mkdir -p ${THEME_DIR}/gtk-3.0
2020-07-31 11:30:07 +02:00
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
2020-07-14 18:35:03 +02:00
if [[ ${color} == '-light' ]]; then
2020-07-31 11:30:07 +02:00
cp -r ${SRC_DIR}/main/gtk-3.0/gtk-light${opacity}.css ${THEME_DIR}/gtk-3.0/gtk.css
2020-07-14 18:35:03 +02:00
else
2020-07-31 11:30:07 +02:00
cp -r ${SRC_DIR}/main/gtk-3.0/gtk-dark${opacity}.css ${THEME_DIR}/gtk-3.0/gtk.css
2020-07-14 18:35:03 +02:00
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}
2020-07-23 04:11:42 +02:00
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
2020-07-14 18:35:03 +02:00
mkdir -p ${THEME_DIR}/metacity-1
2020-07-31 11:30:07 +02:00
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
2020-07-14 18:35:03 +02:00
cd ${THEME_DIR}/metacity-1 && ln -s metacity-theme-1.xml metacity-theme-2.xml
mkdir -p ${THEME_DIR}/xfwm4
2020-07-31 11:30:07 +02:00
cp -r ${SRC_DIR}/assets/xfwm4/assets${color}/*.png ${THEME_DIR}/xfwm4
cp -r ${SRC_DIR}/main/xfwm4/themerc${color} ${THEME_DIR}/xfwm4/themerc
2020-07-14 18:35:03 +02:00
mkdir -p ${THEME_DIR}/cinnamon
2020-07-31 11:30:07 +02:00
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
2020-07-14 18:35:03 +02:00
mkdir -p ${THEME_DIR}/plank
2020-07-31 11:30:07 +02:00
cp -r ${SRC_DIR}/other/plank/theme${color}/*.theme ${THEME_DIR}/plank
2020-07-14 18:35:03 +02:00
}
2020-12-27 14:08:44 +01:00
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
}
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
}
# Backup and install files related to GDM theme
2020-07-14 18:35:03 +02:00
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"
2020-12-26 17:09:49 +01:00
ETC_NEW_THEME_FILE="/etc/alternatives/gdm3-theme.gresource"
2020-07-14 18:35:03 +02:00
UBUNTU_THEME_FILE="/usr/share/gnome-shell/theme/ubuntu.css"
UBUNTU_NEW_THEME_FILE="/usr/share/gnome-shell/theme/gnome-shell.css"
2020-12-26 17:09:49 +01:00
UBUNTU_YARU_THEME_FILE="/usr/share/gnome-shell/theme/Yaru/gnome-shell-theme.gresource"
2020-12-27 06:18:29 +01:00
UBUNTU_JSON_FILE="/usr/share/gnome-shell/modes/ubuntu.json"
YURA_JSON_FILE="/usr/share/gnome-shell/modes/yaru.json"
UBUNTU_MODES_FOLDER="/usr/share/gnome-shell/modes"
2020-07-14 18:35:03 +02:00
install_gdm() {
local GDM_THEME_DIR="${1}/${2}${3}"
echo
2020-07-31 11:30:07 +02:00
prompt -i "Installing ${2}${3} gdm theme..."
2020-07-14 18:35:03 +02:00
if [[ -f "$GS_THEME_FILE" ]] && command -v glib-compile-resources >/dev/null ; then
2020-07-31 11:30:07 +02:00
prompt -i "Installing '$GS_THEME_FILE'..."
2020-07-14 18:35:03 +02:00
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
2020-07-31 11:30:07 +02:00
prompt -i "Installing '$UBUNTU_THEME_FILE'..."
2020-07-14 18:35:03 +02:00
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
2020-07-31 11:30:07 +02:00
prompt -i "Installing '$UBUNTU_NEW_THEME_FILE'..."
2020-07-14 18:35:03 +02:00
cp -an "$UBUNTU_NEW_THEME_FILE" "$UBUNTU_NEW_THEME_FILE.bak"
cp -af "$GDM_THEME_DIR"/gnome-shell/* "$SHELL_THEME_FOLDER"
fi
2020-12-26 17:09:49 +01:00
# > Ubuntu 18.04
2020-07-14 18:35:03 +02:00
if [[ -f "$ETC_THEME_FILE" && -f "$GS_THEME_FILE.bak" ]]; then
2020-12-26 17:09:49 +01:00
prompt -i "Installing Ubuntu GDM theme..."
2020-07-14 18:35:03 +02:00
cp -an "$ETC_THEME_FILE" "$ETC_THEME_FILE.bak"
2020-12-26 17:09:49 +01:00
[[ -d "$SHELL_THEME_FOLDER/$THEME_NAME" ]] && rm -rf "$SHELL_THEME_FOLDER/$THEME_NAME"
2020-07-31 11:30:07 +02:00
cp -r "$GDM_THEME_DIR/gnome-shell" "$SHELL_THEME_FOLDER/$THEME_NAME"
2020-07-14 18:35:03 +02:00
cd "$ETC_THEME_FOLDER"
2020-12-26 17:09:49 +01:00
[[ -f "$ETC_THEME_FILE.bak" ]] && ln -sf "$SHELL_THEME_FOLDER/$THEME_NAME/gnome-shell.css" gdm3.css
fi
# > Ubuntu 20.04
2020-12-27 06:18:29 +01:00
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"
[[ -d "$UBUNTU_MODES_FOLDER" ]] && cp -an "$UBUNTU_MODES_FOLDER" "$UBUNTU_MODES_FOLDER"-bak
[[ -f "$UBUNTU_JSON_FILE" ]] && sed -i "s|Yaru/gnome-shell.css|gnome-shell.css|" "$UBUNTU_JSON_FILE"
[[ -f "$YURA_JSON_FILE" ]] && sed -i "s|Yaru/gnome-shell.css|gnome-shell.css|" "$YURA_JSON_FILE"
fi
2020-07-14 18:35:03 +02:00
}
revert_gdm() {
if [[ -f "$GS_THEME_FILE.bak" ]]; then
2020-12-26 16:56:11 +01:00
prompt -w "Reverting '$GS_THEME_FILE'..."
2020-07-14 18:35:03 +02:00
rm -rf "$GS_THEME_FILE"
mv "$GS_THEME_FILE.bak" "$GS_THEME_FILE"
fi
if [[ -f "$UBUNTU_THEME_FILE.bak" ]]; then
2020-12-26 16:56:11 +01:00
prompt -w "Reverting '$UBUNTU_THEME_FILE'..."
2020-07-14 18:35:03 +02:00
rm -rf "$UBUNTU_THEME_FILE"
mv "$UBUNTU_THEME_FILE.bak" "$UBUNTU_THEME_FILE"
fi
if [[ -f "$UBUNTU_NEW_THEME_FILE.bak" ]]; then
2020-12-26 16:56:11 +01:00
prompt -w "Reverting '$UBUNTU_NEW_THEME_FILE'..."
2020-07-14 18:35:03 +02:00
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
2020-12-26 17:09:49 +01:00
# > Ubuntu 18.04
2020-07-14 18:35:03 +02:00
if [[ -f "$ETC_THEME_FILE.bak" ]]; then
2020-12-26 17:14:00 +01:00
2020-12-26 17:09:49 +01:00
prompt -w "reverting Ubuntu GDM theme..."
2020-12-26 17:14:00 +01:00
2020-07-14 18:35:03 +02:00
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
2020-12-26 17:09:49 +01:00
# > Ubuntu 20.04
2020-12-27 06:18:29 +01:00
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"
[[ -d "$UBUNTU_MODES_FOLDER"-bak ]] && rm -rf "$UBUNTU_MODES_FOLDER" && mv "$UBUNTU_MODES_FOLDER"-bak "$UBUNTU_MODES_FOLDER"
fi
2020-07-14 18:35:03 +02:00
}
2020-07-31 11:30:07 +02:00
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
}
2020-12-27 13:38:25 +01:00
sidebar_dialog() {
2020-07-31 11:30:07 +02:00
if [[ -x /usr/bin/dialog ]]; then
tui=$(dialog --backtitle "${THEME_NAME} gtk theme installer" \
2020-08-18 15:44:43 +02:00
--radiolist "Choose your nautilus sidebar size (default is 200px width):" 15 40 5 \
2020-12-27 14:08:44 +01:00
1 "220px" on \
2 "240px" off \
3 "260px" off \
2020-12-27 13:38:25 +01:00
4 "280px" off --output-fd 1 )
2020-07-31 11:30:07 +02:00
case "$tui" in
2020-12-27 13:38:25 +01:00
1) sidebar_size="220px" ;;
2) sidebar_size="240px" ;;
3) sidebar_size="260px" ;;
4) sidebar_size="280px" ;;
2020-07-31 11:30:07 +02:00
*) operation_canceled ;;
esac
fi
}
2020-12-27 13:38:25 +01:00
run_sidebar_dialog() {
install_dialog && sidebar_dialog && change_size && parse_sass
}
shell_dialog() {
2020-08-18 15:44:43 +02:00
if [[ -x /usr/bin/dialog ]]; then
tui=$(dialog --backtitle "${THEME_NAME} gtk theme installer" \
--radiolist "Choose your panel transparency
2020-12-26 16:56:11 +01:00
(default is 85%, 100% is fully transparent!):" 20 50 10 \
2020-08-18 15:44:43 +02:00
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
}
2020-12-27 13:38:25 +01:00
run_shell_dialog() {
install_dialog && shell_dialog && change_transparency && parse_sass
}
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 \
2020-12-27 14:08:44 +01:00
1 "Blue" on \
2 "Purple" off \
2020-12-27 14:08:44 +01:00
3 "Pink" off \
4 "Red" off \
5 "Orange" off \
6 "Yellow" off \
2020-12-27 14:08:44 +01:00
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
}
2020-12-27 13:38:25 +01:00
run_theme_dialog() {
install_dialog && theme_dialog && change_theme_color && parse_sass
}
2020-07-31 11:30:07 +02:00
parse_sass() {
cd ${REPO_DIR} && ./parse-sass.sh
}
change_size() {
cd ${SRC_DIR}/sass/gtk
sed -i.bak "/\$nautilus_sidebar_size/s/200px/${sidebar_size}/" _applications.scss
2020-07-31 11:30:07 +02:00
prompt -w "Change nautilus sidebar size ..."
}
2020-12-27 13:38:25 +01:00
change_transparency() {
cd ${SRC_DIR}/sass
sed -i.bak "/\$panel_opacity/s/0.16/${panel_trans}/" _colors.scss
2020-12-27 13:38:25 +01:00
prompt -w "Change panel transparency ..."
}
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
sed -i.bak "/\$selected_bg_color/s/#0860f2/${theme_color}/" _colors.scss
cd ${SRC_DIR}/assets/gtk-3.0
mv thumbnail-dark.png thumbnail-dark.png.bak
mv thumbnail-light.png thumbnail-light.png.bak
sed -i.bak "s/#0860f2/$theme_color/g" thumbnail.svg
./render-thumbnails.sh
cd ${SRC_DIR}/assets/gtk-3.0/common-assets
mv assets assets-bak
sed -i.bak "s/#0860f2/$theme_color/g" assets.svg
./render-assets.sh
cd ${SRC_DIR}/assets/gnome-shell/common-assets
sed -i.bak "s/#0860f2/$theme_color/g" {checkbox.svg,more-results.svg,toggle-on.svg}
cd ${SRC_DIR}/main/gtk-2.0
sed -i.bak "s/#0860f2/$theme_color/g" {gtkrc-dark,gtkrc-light}
cd ${SRC_DIR}/assets/gtk-2.0
mv assets-dark assets-dark-bak
mv assets-light assets-light-bak
sed -i.bak "s/#0860f2/$theme_color/g" {assets-dark.svg,assets-light.svg}
./render-assets.sh
cd ${SRC_DIR}/assets/cinnamon
mv thumbnail-dark.png thumbnail-dark.png.bak
mv thumbnail-light.png thumbnail-light.png.bak
sed -i.bak "s/#0860f2/$theme_color/g" thumbnail.svg
./render-thumbnails.sh
cd ${SRC_DIR}/assets/cinnamon/common-assets
sed -i.bak "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
2020-12-26 16:56:11 +01:00
prompt -w "Restore assets files ..."
}
2020-08-18 15:44:43 +02:00
restore_applications_file() {
2020-07-31 11:30:07 +02:00
cd ${SRC_DIR}/sass/gtk
[[ -f _applications.scss.bak ]] && rm -rf _applications.scss
mv _applications.scss.bak _applications.scss
2020-08-18 15:44:43 +02:00
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 ..."
2020-07-31 11:30:07 +02:00
}
2020-07-14 18:35:03 +02:00
while [[ $# -gt 0 ]]; do
case "${1}" in
-d|--dest)
dest="${2}"
if [[ ! -d "${dest}" ]]; then
2020-07-31 11:30:07 +02:00
prompt -e "Destination directory does not exist. Let's make a new one..."
2020-07-14 18:35:03 +02:00
mkdir -p ${dest}
fi
shift 2
;;
-n|--name)
name="${2}"
shift 2
;;
-g|--gdm)
gdm='true'
shift 1
;;
2020-12-07 07:44:28 +01:00
-r|--remove)
remove='true'
2020-07-14 18:35:03 +02:00
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
;;
*)
2020-07-31 11:30:07 +02:00
prompt -e "ERROR: Unrecognized opacity variant '$1'."
prompt -i "Try '$0 --help' for more information."
2020-07-14 18:35:03 +02:00
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
;;
*)
2020-07-31 11:30:07 +02:00
prompt -e "ERROR: Unrecognized opacity variant '$1'."
prompt -i "Try '$0 --help' for more information."
2020-07-14 18:35:03 +02:00
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
;;
*)
2020-07-31 11:30:07 +02:00
prompt -e "ERROR: Unrecognized color variant '$1'."
prompt -i "Try '$0 --help' for more information."
2020-07-14 18:35:03 +02:00
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
;;
*)
2020-07-31 11:30:07 +02:00
prompt -e "ERROR: Unrecognized icon variant '$1'."
prompt -i "Try '$0 --help' for more information."
2020-07-14 18:35:03 +02:00
exit 1
;;
esac
done
;;
2020-12-27 13:38:25 +01:00
-t|--theme)
theme='true'
tdialog='true'
shift
for theme_color in "${@}"; do
case "${theme_color}" in
blue)
tdialog='false'
theme_color='#2E7CF7'
shift
;;
purple)
tdialog='false'
theme_color='#9A57A3'
shift
;;
pink)
tdialog='false'
theme_color='#E55E9C'
shift
;;
red)
tdialog='false'
theme_color='#ED5F5D'
shift
;;
orange)
tdialog='false'
theme_color='#E9873A'
shift
;;
yellow)
tdialog='false'
theme_color='#F3BA4B'
shift
;;
green)
theme_color='#79B757'
shift
;;
grey)
tdialog='false'
theme_color='#8C8C8C'
shift
;;
dialog)
run_theme_dialog
;;
-*|--*)
break
;;
*)
run_theme_dialog
;;
esac
done
;;
-s|--size)
size='true'
sdialog='true'
shift
for sidebar_size in "${@}"; do
case "${sidebar_size}" in
220px)
sdialog='false'
sidebar_size='220px'
shift
;;
240px)
sdialog='false'
sidebar_size='240px'
shift
;;
260px)
sdialog='false'
sidebar_size='260px'
shift
;;
280px)
sdialog='false'
sidebar_size='280px'
shift
;;
dialog)
run_sidebar_dialog
;;
-*|--*)
break
;;
*)
run_sidebar_dialog
;;
esac
done
;;
-p|--panel)
panel='true'
pdialog='true'
shift
for panel_trans in "${@}"; do
case "${panel_trans}" in
80%)
pdialog='false'
panel_trans='0.20'
shift
;;
75%)
pdialog='false'
panel_trans='0.25'
shift
;;
70%)
pdialog='false'
panel_trans='0.30'
shift
;;
65%)
pdialog='false'
panel_trans='0.35'
shift
;;
60%)
pdialog='false'
panel_trans='0.40'
shift
;;
55%)
pdialog='false'
panel_trans='0.45'
shift
;;
50%)
pdialog='false'
panel_trans='0.50'
shift
;;
45%)
pdialog='false'
panel_trans='0.55'
shift
;;
40%)
pdialog='false'
panel_trans='0.60'
shift
;;
35%)
pdialog='false'
panel_trans='0.65'
shift
;;
dialog)
run_shell_dialog
;;
-*|--*)
break
;;
*)
run_shell_dialog
;;
esac
done
;;
2020-07-14 18:35:03 +02:00
-h|--help)
usage
exit 0
;;
*)
2020-07-31 11:30:07 +02:00
prompt -e "ERROR: Unrecognized installation option '$1'."
prompt -i "Try '$0 --help' for more information."
2020-07-14 18:35:03 +02:00
exit 1
;;
esac
done
2020-12-27 13:38:25 +01:00
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
2020-07-14 18:35:03 +02:00
2020-12-27 13:38:25 +01:00
if [[ "${panel:-}" == 'true' ]]; then
if [[ "${pdialog}" == 'false' ]]; then
change_transparency && parse_sass
else
run_shell_dialog
fi
notify-send "Finished" "Enjoy your new WhiteSur theme!" -i face-smile
fi
2020-12-26 17:09:49 +01:00
2020-07-31 11:30:07 +02:00
if [[ "${size:-}" == 'true' ]]; then
2020-12-27 13:38:25 +01:00
if [[ "${sdialog}" == 'false' ]]; then
2020-07-31 11:30:07 +02:00
change_size && parse_sass
2020-12-27 13:38:25 +01:00
else
run_sidebar_dialog
2020-07-31 11:30:07 +02:00
fi
2020-12-27 13:38:25 +01:00
notify-send "Finished" "Enjoy your new WhiteSur theme!" -i face-smile
2020-07-31 11:30:07 +02:00
fi
if [[ "${theme:-}" == 'true' ]]; then
2020-12-27 13:38:25 +01:00
if [[ "${tdialog}" == 'false' ]]; then
change_theme_color && parse_sass
else
run_theme_dialog
fi
notify-send "Finished" "Enjoy your new WhiteSur theme!" -i face-smile
2020-08-18 15:44:43 +02:00
fi
2020-12-07 07:44:28 +01:00
if [[ "${gdm:-}" != 'true' && "${remove:-}" != 'true' ]]; then
2020-07-14 18:35:03 +02:00
install_theme
fi
2020-12-07 07:44:28 +01:00
if [[ "${gdm:-}" == 'true' && "${remove:-}" != 'true' && "$UID" -eq "$ROOT_UID" ]]; then
2020-07-14 18:35:03 +02:00
install_theme && install_gdm "${dest:-${DEST_DIR}}" "${name:-${THEME_NAME}}" "${color}" "${opacity}"
fi
2020-12-07 07:44:28 +01:00
if [[ "${gdm:-}" != 'true' && "${remove:-}" == 'true' ]]; then
remove_theme
fi
if [[ "${gdm:-}" == 'true' && "${remove:-}" == 'true' && "$UID" -eq "$ROOT_UID" ]]; then
2020-07-14 18:35:03 +02:00
revert_gdm
fi
2020-07-31 11:30:07 +02:00
if [[ -f "${SRC_DIR}"/sass/gtk/_applications.scss.bak ]]; then
2020-08-18 15:44:43 +02:00
restore_applications_file && parse_sass
fi
if [[ -f "${SRC_DIR}"/sass/_colors.scss.bak ]]; then
restore_colors_file && parse_sass
2020-07-31 11:30:07 +02:00
fi
if [[ -f "${SRC_DIR}"/assets/gtk-3.0/thumbnail.svg.bak ]]; then
restore_assets_files
fi
2020-07-14 18:35:03 +02:00
echo
2020-07-31 11:30:07 +02:00
prompt -s Done.