289 lines
11 KiB
Bash
Executable File
289 lines
11 KiB
Bash
Executable File
#!/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=Sierra
|
|
FLAT_VARIANTS=('' '-compact')
|
|
COLOR_VARIANTS=('-light' '-dark')
|
|
OPACITY_VARIANTS=('' '-solid')
|
|
ALT_VARIANTS=('' '-alt')
|
|
|
|
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" "-f, --flat VARIANT" "Specify theme flat compact variant [standard|compact] (Default: All variants)"
|
|
printf " %-25s%s\n" "-na, --noapple VARIANT" "Specify gnome-shell to not display apple logo (Default: Display apple logo)"
|
|
printf " %-25s%s\n" "-g, --gdm" "Install GDM theme"
|
|
printf " %-25s%s\n" "-h, --help" "Show this help"
|
|
}
|
|
|
|
install() {
|
|
local dest=${1}
|
|
local name=${2}
|
|
local flat=${3}
|
|
local color=${4}
|
|
local opacity=${5}
|
|
local alt=${6}
|
|
local noapple=${7}
|
|
|
|
[[ ${color} == '-light' ]] && local ELSE_LIGHT=${color}
|
|
[[ ${color} == '-dark' ]] && local ELSE_DARK=${color}
|
|
|
|
local THEME_DIR=${dest}/${name}${flat}${color}${opacity}${alt}
|
|
|
|
[[ -d ${THEME_DIR} ]] && rm -rf ${THEME_DIR}
|
|
|
|
echo "Installing '${THEME_DIR}'..."
|
|
|
|
mkdir -p ${THEME_DIR}
|
|
cp -ur ${REPO_DIR}/COPYING ${THEME_DIR}
|
|
|
|
# Install index.theme
|
|
echo "[Desktop Entry]" >> ${THEME_DIR}/index.theme
|
|
echo "Type=X-GNOME-Metatheme" >> ${THEME_DIR}/index.theme
|
|
echo "Name=${name}${flat}${color}${opacity}${alt}" >> ${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}${flat}${color}${opacity}${alt}" >> ${THEME_DIR}/index.theme
|
|
echo "MetacityTheme=${name}${flat}${color}${opacity}${alt}" >> ${THEME_DIR}/index.theme
|
|
echo "IconTheme=Adwaita" >> ${THEME_DIR}/index.theme
|
|
echo "CursorTheme=Adwaita" >> ${THEME_DIR}/index.theme
|
|
echo "ButtonLayout=close,minimize,maximize:menu" >> ${THEME_DIR}/index.theme
|
|
# Install index.theme
|
|
|
|
mkdir -p ${THEME_DIR}/gnome-shell
|
|
cp -ur ${SRC_DIR}/gnome-shell/{extensions,message-indicator-symbolic.svg,pad-osd.css} ${THEME_DIR}/gnome-shell
|
|
cp -ur ${SRC_DIR}/gnome-shell/gnome-shell${color}${opacity}.css ${THEME_DIR}/gnome-shell/gnome-shell.css
|
|
cp -ur ${SRC_DIR}/gnome-shell/common-assets ${THEME_DIR}/gnome-shell/assets
|
|
cp -ur ${SRC_DIR}/gnome-shell/assets${ELSE_DARK}/*.svg ${THEME_DIR}/gnome-shell/assets
|
|
|
|
if [ "${noapple}" = true ] ; then
|
|
cp -r ${SRC_DIR}/gnome-shell/assets${ELSE_DARK}/no-apple/*.svg ${THEME_DIR}/gnome-shell/assets
|
|
fi
|
|
|
|
cd ${THEME_DIR}/gnome-shell
|
|
ln -s assets/no-events.svg no-events.svg
|
|
ln -s assets/process-working.svg process-working.svg
|
|
ln -s assets/no-notifications.svg no-notifications.svg
|
|
|
|
mkdir -p ${THEME_DIR}/gtk-2.0
|
|
cp -ur ${SRC_DIR}/gtk-2.0/gtkrc${color} ${THEME_DIR}/gtk-2.0/gtkrc
|
|
cp -ur ${SRC_DIR}/gtk-2.0/assets${color} ${THEME_DIR}/gtk-2.0/assets
|
|
cp -ur ${SRC_DIR}/gtk-2.0/common/*.rc ${THEME_DIR}/gtk-2.0
|
|
cp -ur ${SRC_DIR}/gtk-2.0/menubar-toolbar${color}.rc ${THEME_DIR}/gtk-2.0/menubar-toolbar.rc
|
|
|
|
mkdir -p ${THEME_DIR}/gtk-3.0
|
|
cp -ur ${SRC_DIR}/gtk-3.0/assets ${THEME_DIR}/gtk-3.0
|
|
cp -ur ${SRC_DIR}/gtk-3.0/thumbnail${flat}${color}.png ${THEME_DIR}/gtk-3.0/thumbnail.png
|
|
cp -ur ${SRC_DIR}/gtk-3.0/gtk${flat}${color}${opacity}${alt}.css ${THEME_DIR}/gtk-3.0/gtk.css
|
|
[[ ${color} != '-dark' ]] && \
|
|
cp -ur ${SRC_DIR}/gtk-3.0/gtk${flat}-dark${opacity}${alt}.css ${THEME_DIR}/gtk-3.0/gtk-dark.css
|
|
|
|
mkdir -p ${THEME_DIR}/metacity-1
|
|
cp -ur ${SRC_DIR}/metacity-1/metacity-theme${color}.xml ${THEME_DIR}/metacity-1/metacity-theme-1.xml
|
|
cp -ur ${SRC_DIR}/metacity-1/metacity-theme-2.xml ${THEME_DIR}/metacity-1
|
|
cp -ur ${SRC_DIR}/metacity-1/metacity-theme-3.xml ${THEME_DIR}/metacity-1
|
|
cp -ur ${SRC_DIR}/metacity-1/assets/*.png ${THEME_DIR}/metacity-1
|
|
|
|
mkdir -p ${THEME_DIR}/unity
|
|
cp -ur ${SRC_DIR}/unity ${THEME_DIR}
|
|
|
|
mkdir -p ${THEME_DIR}/xfwm4
|
|
cp -ur ${SRC_DIR}/xfwm4/assets${color}/*.png ${THEME_DIR}/xfwm4
|
|
cp -ur ${SRC_DIR}/xfwm4/themerc${color} ${THEME_DIR}/xfwm4/themerc
|
|
|
|
mkdir -p ${THEME_DIR}/cinnamon
|
|
cp -ur ${SRC_DIR}/cinnamon/cinnamon${color}.css ${THEME_DIR}/cinnamon/cinnamon.css
|
|
cp -ur ${SRC_DIR}/cinnamon/common-assets ${THEME_DIR}/cinnamon/assets
|
|
cp -ur ${SRC_DIR}/cinnamon/assets${color}/*.svg ${THEME_DIR}/cinnamon/assets
|
|
cp -ur ${SRC_DIR}/cinnamon/thumbnail${color}.png ${THEME_DIR}/cinnamon/thumbnail.png
|
|
|
|
mkdir -p ${THEME_DIR}/plank
|
|
cp -ur ${SRC_DIR}/plank/${name}${color}/*.theme ${THEME_DIR}/plank
|
|
}
|
|
|
|
install_gdm() {
|
|
local THEME_DIR=${1}/${2}${3}${4}${5}${6}
|
|
# bakup and install files related to gdm theme
|
|
if [[ ! -f /usr/share/gnome-shell/gnome-shell-theme.gresource.bak ]]; then
|
|
mv -f /usr/share/gnome-shell/gnome-shell-theme.gresource \
|
|
/usr/share/gnome-shell/gnome-shell-theme.gresource.bak
|
|
fi
|
|
if [[ -f /usr/share/gnome-shell/theme/ubuntu.css ]]; then
|
|
if [[ ! -f /usr/share/gnome-shell/theme/ubuntu.css.bak ]]; then
|
|
mv -f /usr/share/gnome-shell/theme/ubuntu.css \
|
|
/usr/share/gnome-shell/theme/ubuntu.css.bak
|
|
fi
|
|
cp -af ${THEME_DIR}/gnome-shell/gnome-shell.css \
|
|
/usr/share/gnome-shell/theme/ubuntu.css
|
|
fi
|
|
glib-compile-resources \
|
|
--sourcedir=${THEME_DIR}/gnome-shell \
|
|
--target=/usr/share/gnome-shell/gnome-shell-theme.gresource \
|
|
${SRC_DIR}/gnome-shell/gnome-shell-theme.gresource.xml
|
|
echo "Installing 'gnome-shell-theme.gresource'..."
|
|
}
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "${1}" in
|
|
-d|--dest)
|
|
dest="${2}"
|
|
if [[ ! -d "${dest}" ]]; then
|
|
echo "ERROR: Destination directory does not exist."
|
|
exit 1
|
|
fi
|
|
shift 2
|
|
;;
|
|
-n|--name)
|
|
name="${2}"
|
|
shift 2
|
|
;;
|
|
-g|--gdm)
|
|
gdm='true'
|
|
shift 1
|
|
;;
|
|
-na|--no-apple)
|
|
noapple=true
|
|
shift 1
|
|
;;
|
|
-o|--opacity)
|
|
shift
|
|
for opacity in "${@}"; do
|
|
case "${opacity}" in
|
|
standard)
|
|
opacitys+=("${OPACITY_VARIANTS[0]}")
|
|
shift
|
|
;;
|
|
solid)
|
|
opacitys+=("${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
|
|
;;
|
|
-f|--flat)
|
|
shift
|
|
for flat in "${@}"; do
|
|
case "${flat}" in
|
|
standard)
|
|
flats+=("${FLAT_VARIANTS[0]}")
|
|
shift
|
|
;;
|
|
compact)
|
|
flats+=("${FLAT_VARIANTS[1]}")
|
|
shift
|
|
;;
|
|
-*|--*)
|
|
break
|
|
;;
|
|
*)
|
|
echo "ERROR: Unrecognized color variant '$1'."
|
|
echo "Try '$0 --help' for more information."
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
;;
|
|
-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 alt 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
|
|
|
|
for flat in "${flats[@]:-${FLAT_VARIANTS[@]}}"; do
|
|
for opacity in "${opacitys[@]:-${OPACITY_VARIANTS[@]}}"; do
|
|
for color in "${colors[@]:-${COLOR_VARIANTS[@]}}"; do
|
|
for alt in "${alts[@]:-${ALT_VARIANTS[@]}}"; do
|
|
install "${dest:-${DEST_DIR}}" "${name:-${THEME_NAME}}" "${flat}" "${color}" "${opacity}" "${alt}" ${noapple}
|
|
done
|
|
done
|
|
done
|
|
done
|
|
|
|
if [[ "${gdm:-}" == 'true' ]]; then
|
|
install_gdm "${dest:-${DEST_DIR}}" "${name:-${THEME_NAME}}" "${flat}" "${color}" "${opacity}" "${alt}"
|
|
fi
|
|
|
|
echo
|
|
echo Done.
|