WhiteSur-gtk-theme/install.sh

381 lines
15 KiB
Bash
Raw Normal View History

2020-07-14 18:35:03 +02:00
#!/bin/bash
set -ueo pipefail
#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')
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" "-a, --alt VARIANTS" "Specify theme titilebutton variant(s) [standard|alt] (Default: All variants)"
printf " %-25s%s\n" "-s, --small VARIANTS" "Specify titilebutton size variant(s) [standard|small] (Default: standard variant)"
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 need root user authority! please run this with sudo"
printf " %-25s%s\n" "-r, --revert" "revert GDM theme, this option need root user authority! please run this with sudo"
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}
echo "Installing '${THEME_DIR}'..."
mkdir -p ${THEME_DIR}
cp -ur ${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=An 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
2020-07-17 06:59:41 +02:00
cp -ur ${SRC_DIR}/assets/gnome-shell/source-assets/* ${THEME_DIR}/gnome-shell
2020-07-14 18:35:03 +02:00
cp -ur ${SRC_DIR}/main/gnome-shell/gnome-shell${color}${opacity}.css ${THEME_DIR}/gnome-shell/gnome-shell.css
cp -ur ${SRC_DIR}/assets/gnome-shell/common-assets ${THEME_DIR}/gnome-shell/assets
cp -ur ${SRC_DIR}/assets/gnome-shell/assets${color}/*.svg ${THEME_DIR}/gnome-shell/assets
2020-07-16 07:54:23 +02:00
cp -ur ${SRC_DIR}/assets/gnome-shell/activities/activities${icon}.svg ${THEME_DIR}/gnome-shell/assets/activities.svg
2020-07-14 18:35:03 +02:00
cd ${THEME_DIR}/gnome-shell
mkdir -p ${THEME_DIR}/gtk-2.0
cp -ur ${SRC_DIR}/main/gtk-2.0/gtkrc${color} ${THEME_DIR}/gtk-2.0/gtkrc
cp -ur ${SRC_DIR}/main/gtk-2.0/menubar-toolbar${color}.rc ${THEME_DIR}/gtk-2.0/menubar-toolbar.rc
cp -ur ${SRC_DIR}/main/gtk-2.0/common/*.rc ${THEME_DIR}/gtk-2.0
cp -ur ${SRC_DIR}/assets/gtk-2.0/assets${color} ${THEME_DIR}/gtk-2.0/assets
mkdir -p ${THEME_DIR}/gtk-3.0
cp -ur ${SRC_DIR}/assets/gtk-3.0/common-assets/assets ${THEME_DIR}/gtk-3.0
cp -ur ${SRC_DIR}/assets/gtk-3.0/windows-assets/titlebutton${alt} ${THEME_DIR}/gtk-3.0/windows-assets
cp -ur ${SRC_DIR}/assets/gtk-3.0/thumbnail${color}.png ${THEME_DIR}/gtk-3.0/thumbnail.png
cp -ur ${SRC_DIR}/main/gtk-3.0/gtk-dark${opacity}.css ${THEME_DIR}/gtk-3.0/gtk-dark.css
if [[ ${color} == '-light' ]]; then
cp -ur ${SRC_DIR}/main/gtk-3.0/gtk-light${opacity}.css ${THEME_DIR}/gtk-3.0/gtk.css
else
cp -ur ${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}
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
cp -ur ${SRC_DIR}/main/metacity-1/metacity-theme${color}.xml ${THEME_DIR}/metacity-1/metacity-theme-1.xml
cp -ur ${SRC_DIR}/main/metacity-1/metacity-theme-3.xml ${THEME_DIR}/metacity-1
cp -ur ${SRC_DIR}/assets/metacity-1/assets/*.png ${THEME_DIR}/metacity-1
cp -ur ${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 -ur ${SRC_DIR}/assets/xfwm4/assets${color}/*.png ${THEME_DIR}/xfwm4
cp -ur ${SRC_DIR}/main/xfwm4/themerc${color} ${THEME_DIR}/xfwm4/themerc
mkdir -p ${THEME_DIR}/cinnamon
cp -ur ${SRC_DIR}/main/cinnamon/cinnamon${color}${opacity}.css ${THEME_DIR}/cinnamon/cinnamon.css
cp -ur ${SRC_DIR}/assets/cinnamon/common-assets ${THEME_DIR}/cinnamon/assets
cp -ur ${SRC_DIR}/assets/cinnamon/assets${color}/*.svg ${THEME_DIR}/cinnamon/assets
cp -ur ${SRC_DIR}/assets/cinnamon/thumbnail${color}.png ${THEME_DIR}/cinnamon/thumbnail.png
mkdir -p ${THEME_DIR}/plank
cp -ur ${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"
UBUNTU_THEME_FILE="/usr/share/gnome-shell/theme/ubuntu.css"
UBUNTU_NEW_THEME_FILE="/usr/share/gnome-shell/theme/gnome-shell.css"
install_gdm() {
local GDM_THEME_DIR="${1}/${2}${3}"
echo
echo "Installing ${2}${3} gdm theme..."
if [[ -f "$GS_THEME_FILE" ]] && command -v glib-compile-resources >/dev/null ; then
echo "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
echo "Installing '$UBUNTU_THEME_FILE'..."
cp -an "$UBUNTU_THEME_FILE" "$UBUNTU_THEME_FILE.bak"
# rm -rf "$GS_THEME_FILE"
# mv "$GS_THEME_FILE.bak" "$GS_THEME_FILE"
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
echo "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
if [[ -f "$ETC_THEME_FILE" && -f "$GS_THEME_FILE.bak" ]]; then
echo "Installing Ubuntu gnome-shell theme..."
cp -an "$ETC_THEME_FILE" "$ETC_THEME_FILE.bak"
# rm -rf "$ETC_THEME_FILE" "$GS_THEME_FILE"
# mv "$GS_THEME_FILE.bak" "$GS_THEME_FILE"
[[ -d $SHELL_THEME_FOLDER/$THEME_NAME ]] && rm -rf $SHELL_THEME_FOLDER/$THEME_NAME
cp -ur "$GDM_THEME_DIR/gnome-shell" "$SHELL_THEME_FOLDER/$THEME_NAME"
cd "$ETC_THEME_FOLDER"
ln -s "$SHELL_THEME_FOLDER/$THEME_NAME/gnome-shell.css" gdm3.css
fi
}
revert_gdm() {
if [[ -f "$GS_THEME_FILE.bak" ]]; then
echo "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
echo "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
echo "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
if [[ -f "$ETC_THEME_FILE.bak" ]]; then
echo "reverting Ubuntu gnome-shell 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
}
while [[ $# -gt 0 ]]; do
case "${1}" in
-d|--dest)
dest="${2}"
if [[ ! -d "${dest}" ]]; then
echo "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
;;
-r|--revert)
revert='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
;;
*)
echo "ERROR: Unrecognized opacity variant '$1'."
echo "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
;;
*)
echo "ERROR: Unrecognized opacity variant '$1'."
echo "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
;;
*)
echo "ERROR: Unrecognized color variant '$1'."
echo "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
;;
*)
echo "ERROR: Unrecognized icon variant '$1'."
echo "Try '$0 --help' for more information."
exit 1
;;
esac
done
;;
-h|--help)
usage
exit 0
;;
*)
echo "ERROR: Unrecognized installation option '$1'."
echo "Try '$0 --help' for more information."
exit 1
;;
esac
done
install_theme() {
for opacity in "${opacities[@]-${OPACITY_VARIANTS[@]}}"; do
for color in "${colors[@]-${COLOR_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
}
if [[ "${gdm:-}" != 'true' && "${revert:-}" != 'true' ]]; then
install_theme
fi
if [[ "${gdm:-}" == 'true' && "${revert:-}" != 'true' && "$UID" -eq "$ROOT_UID" ]]; then
install_theme && install_gdm "${dest:-${DEST_DIR}}" "${name:-${THEME_NAME}}" "${color}" "${opacity}"
fi
if [[ "${gdm:-}" != 'true' && "${revert:-}" == 'true' && "$UID" -eq "$ROOT_UID" ]]; then
revert_gdm
fi
echo
echo Done.