mirror of
https://github.com/vinceliuice/Colloid-gtk-theme.git
synced 2024-10-18 05:20:35 -04:00
481 lines
16 KiB
Bash
481 lines
16 KiB
Bash
|
#! /usr/bin/env bash
|
||
|
|
||
|
set -Eeo pipefail
|
||
|
|
||
|
REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||
|
SRC_DIR="${REPO_DIR}/src"
|
||
|
|
||
|
ROOT_UID=0
|
||
|
DEST_DIR=
|
||
|
|
||
|
ctype=
|
||
|
|
||
|
# Destination directory
|
||
|
if [ "$UID" -eq "$ROOT_UID" ]; then
|
||
|
DEST_DIR="/usr/share/themes"
|
||
|
else
|
||
|
DEST_DIR="$HOME/.themes"
|
||
|
fi
|
||
|
|
||
|
SASSC_OPT="-M -t expanded"
|
||
|
|
||
|
THEME_NAME=Colloid
|
||
|
THEME_VARIANTS=('' '-purple' '-pink' '-red' '-orange' '-yellow' '-green' '-teal' '-grey')
|
||
|
COLOR_VARIANTS=('' '-light' '-dark')
|
||
|
SIZE_VARIANTS=('' '-compact')
|
||
|
|
||
|
if [[ "$(command -v gnome-shell)" ]]; then
|
||
|
SHELL_VERSION="$(gnome-shell --version | cut -d ' ' -f 3 | cut -d . -f -1)"
|
||
|
if [[ "${SHELL_VERSION:-}" -ge "40" ]]; then
|
||
|
GS_VERSION="new"
|
||
|
else
|
||
|
GS_VERSION="old"
|
||
|
fi
|
||
|
else
|
||
|
echo "'gnome-shell' not found, using styles for last gnome-shell version available."
|
||
|
GS_VERSION="new"
|
||
|
fi
|
||
|
|
||
|
usage() {
|
||
|
cat << EOF
|
||
|
Usage: $0 [OPTION]...
|
||
|
|
||
|
OPTIONS:
|
||
|
-d, --dest DIR Specify destination directory (Default: $DEST_DIR)
|
||
|
|
||
|
-n, --name NAME Specify theme name (Default: $THEME_NAME)
|
||
|
|
||
|
-t, --theme VARIANT Specify theme color variant(s) [default|purple|pink|red|orange|yellow|green|teal|grey|all] (Default: blue)
|
||
|
|
||
|
-c, --color VARIANT Specify color variant(s) [standard|light|dark] (Default: All variants)s)
|
||
|
|
||
|
-s, --size VARIANT Specify size variant [standard|compact] (Default: standard variants)
|
||
|
|
||
|
--tweaks Specify versions for tweaks [nord|black|rimless] (nord can not mix use with black !)
|
||
|
1. nord: Nord color version
|
||
|
2. black: Blackness color version
|
||
|
3. rimless: Remove the 2px outline about windows and menus
|
||
|
|
||
|
-h, --help Show help
|
||
|
EOF
|
||
|
}
|
||
|
|
||
|
install() {
|
||
|
local dest="${1}"
|
||
|
local name="${2}"
|
||
|
local theme="${3}"
|
||
|
local color="${4}"
|
||
|
local size="${5}"
|
||
|
local ctype="${6}"
|
||
|
|
||
|
[[ "${color}" == '-light' ]] && local ELSE_LIGHT="${color}"
|
||
|
[[ "${color}" == '-dark' ]] && local ELSE_DARK="${color}"
|
||
|
|
||
|
local THEME_DIR="${1}/${2}${3}${4}${5}${6}"
|
||
|
|
||
|
[[ -d "${THEME_DIR}" ]] && rm -rf "${THEME_DIR}"
|
||
|
|
||
|
echo "Installing '${THEME_DIR}'..."
|
||
|
|
||
|
theme_tweaks
|
||
|
|
||
|
mkdir -p "${THEME_DIR}"
|
||
|
|
||
|
echo "[Desktop Entry]" >> "${THEME_DIR}/index.theme"
|
||
|
echo "Type=X-GNOME-Metatheme" >> "${THEME_DIR}/index.theme"
|
||
|
echo "Name=${2}${3}${4}${5}${6}" >> "${THEME_DIR}/index.theme"
|
||
|
echo "Comment=An Flat 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=${2}${3}${4}${5}${6}" >> "${THEME_DIR}/index.theme"
|
||
|
echo "MetacityTheme=${2}${3}${4}${5}${6}" >> "${THEME_DIR}/index.theme"
|
||
|
echo "IconTheme=Tela-circle${ELSE_DARK:-}" >> "${THEME_DIR}/index.theme"
|
||
|
echo "CursorTheme=${2}-cursors" >> "${THEME_DIR}/index.theme"
|
||
|
echo "ButtonLayout=close,minimize,maximize:menu" >> "${THEME_DIR}/index.theme"
|
||
|
|
||
|
mkdir -p "${THEME_DIR}/gnome-shell"
|
||
|
cp -r "${SRC_DIR}/main/gnome-shell/pad-osd.css" "${THEME_DIR}/gnome-shell"
|
||
|
|
||
|
if [[ "$tweaks" == 'true' ]]; then
|
||
|
if [[ "${GS_VERSION:-}" == 'new' ]]; then
|
||
|
sassc $SASSC_OPT "${SRC_DIR}/main/gnome-shell/shell-40-0/gnome-shell${color}.scss" "${THEME_DIR}/gnome-shell/gnome-shell.css"
|
||
|
else
|
||
|
sassc $SASSC_OPT "${SRC_DIR}/main/gnome-shell/shell-3-28/gnome-shell${color}.scss" "${THEME_DIR}/gnome-shell/gnome-shell.css"
|
||
|
fi
|
||
|
else
|
||
|
if [[ "${GS_VERSION:-}" == 'new' ]]; then
|
||
|
cp -r "${SRC_DIR}/main/gnome-shell/shell-40-0/gnome-shell${color}.css" "${THEME_DIR}/gnome-shell/gnome-shell.css"
|
||
|
else
|
||
|
cp -r "${SRC_DIR}/main/gnome-shell/shell-3-28/gnome-shell${color}.css" "${THEME_DIR}/gnome-shell/gnome-shell.css"
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
cp -r "${SRC_DIR}/assets/gnome-shell/common-assets" "${THEME_DIR}/gnome-shell/assets"
|
||
|
cp -r "${SRC_DIR}/assets/gnome-shell/assets${ELSE_DARK:-}/"*.svg "${THEME_DIR}/gnome-shell/assets"
|
||
|
cp -r "${SRC_DIR}/assets/gnome-shell/theme${theme}/"*.svg "${THEME_DIR}/gnome-shell/assets"
|
||
|
|
||
|
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 -r "${SRC_DIR}/main/gtk-2.0/gtkrc${theme}${ELSE_DARK:-}" "${THEME_DIR}/gtk-2.0/gtkrc"
|
||
|
cp -r "${SRC_DIR}/main/gtk-2.0/common/"*'.rc' "${THEME_DIR}/gtk-2.0"
|
||
|
cp -r "${SRC_DIR}/assets/gtk-2.0/assets${theme}${ELSE_DARK:-}" "${THEME_DIR}/gtk-2.0/assets"
|
||
|
|
||
|
mkdir -p "${THEME_DIR}/gtk-3.0"
|
||
|
cp -r "${SRC_DIR}/assets/gtk/assets${theme}${ctype}" "${THEME_DIR}/gtk-3.0/assets"
|
||
|
cp -r "${SRC_DIR}/assets/gtk/scalable" "${THEME_DIR}/gtk-3.0/assets"
|
||
|
cp -r "${SRC_DIR}/assets/gtk/thumbnail${ELSE_DARK:-}.png" "${THEME_DIR}/gtk-3.0/thumbnail.png"
|
||
|
|
||
|
if [[ "$tweaks" == 'true' ]]; then
|
||
|
sassc $SASSC_OPT "${SRC_DIR}/main/gtk-3.0/gtk${color}.scss" "${THEME_DIR}/gtk-3.0/gtk.css"
|
||
|
sassc $SASSC_OPT "${SRC_DIR}/main/gtk-3.0/gtk-dark.scss" "${THEME_DIR}/gtk-3.0/gtk-dark.css"
|
||
|
else
|
||
|
cp -r "${SRC_DIR}/main/gtk-3.0/gtk${color}.css" "${THEME_DIR}/gtk-3.0/gtk.css"
|
||
|
cp -r "${SRC_DIR}/main/gtk-3.0/gtk-dark.css" "${THEME_DIR}/gtk-3.0"
|
||
|
fi
|
||
|
|
||
|
mkdir -p "${THEME_DIR}/gtk-4.0"
|
||
|
cp -r "${SRC_DIR}/assets/gtk/assets${theme}${ctype}" "${THEME_DIR}/gtk-4.0/assets"
|
||
|
cp -r "${SRC_DIR}/assets/gtk/scalable" "${THEME_DIR}/gtk-4.0/assets"
|
||
|
cp -r "${SRC_DIR}/assets/gtk/thumbnail${ELSE_DARK:-}.png" "${THEME_DIR}/gtk-4.0/thumbnail.png"
|
||
|
|
||
|
if [[ "$tweaks" == 'true' ]]; then
|
||
|
sassc $SASSC_OPT "${SRC_DIR}/main/gtk-4.0/gtk${color}.scss" "${THEME_DIR}/gtk-4.0/gtk.css"
|
||
|
sassc $SASSC_OPT "${SRC_DIR}/main/gtk-4.0/gtk-dark.scss" "${THEME_DIR}/gtk-4.0/gtk-dark.css"
|
||
|
else
|
||
|
cp -r "${SRC_DIR}/main/gtk-4.0/gtk${color}.css" "${THEME_DIR}/gtk-4.0/gtk.css"
|
||
|
cp -r "${SRC_DIR}/main/gtk-4.0/gtk-dark.css" "${THEME_DIR}/gtk-4.0"
|
||
|
fi
|
||
|
|
||
|
mkdir -p "${THEME_DIR}/cinnamon"
|
||
|
cp -r "${SRC_DIR}/assets/cinnamon/common-assets" "${THEME_DIR}/cinnamon/assets"
|
||
|
cp -r "${SRC_DIR}/assets/cinnamon/assets${ELSE_DARK:-}/"*'.svg' "${THEME_DIR}/cinnamon/assets"
|
||
|
cp -r "${SRC_DIR}/assets/cinnamon/theme${theme}/"*'.svg' "${THEME_DIR}/cinnamon/assets"
|
||
|
|
||
|
if [[ "$tweaks" == 'true' ]]; then
|
||
|
sassc $SASSC_OPT "${SRC_DIR}/main/cinnamon/cinnamon${color}.scss" "${THEME_DIR}/cinnamon/cinnamon.css"
|
||
|
else
|
||
|
cp -r "${SRC_DIR}/main/cinnamon/cinnamon${color}.css" "${THEME_DIR}/cinnamon/cinnamon.css"
|
||
|
fi
|
||
|
|
||
|
cp -r "${SRC_DIR}/assets/cinnamon/thumbnail${color}.png" "${THEME_DIR}/cinnamon/thumbnail.png"
|
||
|
|
||
|
mkdir -p "${THEME_DIR}/metacity-1"
|
||
|
cp -r "${SRC_DIR}/main/metacity-1/metacity-theme-2${color}.xml" "${THEME_DIR}/metacity-1/metacity-theme-2.xml"
|
||
|
cp -r "${SRC_DIR}/main/metacity-1/metacity-theme-3.xml" "${THEME_DIR}/metacity-1"
|
||
|
cp -r "${SRC_DIR}/assets/metacity-1/assets" "${THEME_DIR}/metacity-1"
|
||
|
cp -r "${SRC_DIR}/assets/metacity-1/thumbnail${ELSE_DARK:-}.png" "${THEME_DIR}/metacity-1/thumbnail.png"
|
||
|
cd "${THEME_DIR}/metacity-1" && ln -s metacity-theme-2.xml metacity-theme-1.xml
|
||
|
|
||
|
mkdir -p "${THEME_DIR}/xfwm4"
|
||
|
cp -r "${SRC_DIR}/assets/xfwm4/assets${ELSE_LIGHT:-}${ctype}/"*.png "${THEME_DIR}/xfwm4"
|
||
|
cp -r "${SRC_DIR}/main/xfwm4/themerc${ELSE_LIGHT:-}" "${THEME_DIR}/xfwm4/themerc"
|
||
|
mkdir -p "${THEME_DIR}-hdpi/xfwm4"
|
||
|
cp -r "${SRC_DIR}/assets/xfwm4/assets${ELSE_LIGHT:-}${ctype}-hdpi/"*.png "${THEME_DIR}-hdpi/xfwm4"
|
||
|
cp -r "${SRC_DIR}/main/xfwm4/themerc${ELSE_LIGHT:-}" "${THEME_DIR}-hdpi/xfwm4/themerc"
|
||
|
mkdir -p "${THEME_DIR}-xhdpi/xfwm4"
|
||
|
cp -r "${SRC_DIR}/assets/xfwm4/assets${ELSE_LIGHT:-}${ctype}-xhdpi/"*.png "${THEME_DIR}-xhdpi/xfwm4"
|
||
|
cp -r "${SRC_DIR}/main/xfwm4/themerc${ELSE_LIGHT:-}" "${THEME_DIR}-xhdpi/xfwm4/themerc"
|
||
|
}
|
||
|
|
||
|
themes=()
|
||
|
colors=()
|
||
|
sizes=()
|
||
|
|
||
|
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
|
||
|
;;
|
||
|
-c|--color)
|
||
|
shift
|
||
|
for color in "${@}"; do
|
||
|
case "${color}" in
|
||
|
standard)
|
||
|
colors+=("${COLOR_VARIANTS[0]}")
|
||
|
shift
|
||
|
;;
|
||
|
light)
|
||
|
colors+=("${COLOR_VARIANTS[1]}")
|
||
|
shift
|
||
|
;;
|
||
|
dark)
|
||
|
colors+=("${COLOR_VARIANTS[2]}")
|
||
|
shift
|
||
|
;;
|
||
|
-*|--*)
|
||
|
break
|
||
|
;;
|
||
|
*)
|
||
|
echo "ERROR: Unrecognized color variant '$1'."
|
||
|
echo "Try '$0 --help' for more information."
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
;;
|
||
|
-t|--theme)
|
||
|
accent='true'
|
||
|
shift
|
||
|
for variant in "$@"; do
|
||
|
case "$variant" in
|
||
|
default)
|
||
|
themes+=("${THEME_VARIANTS[0]}")
|
||
|
shift
|
||
|
;;
|
||
|
purple)
|
||
|
themes+=("${THEME_VARIANTS[1]}")
|
||
|
shift
|
||
|
;;
|
||
|
pink)
|
||
|
themes+=("${THEME_VARIANTS[2]}")
|
||
|
shift
|
||
|
;;
|
||
|
red)
|
||
|
themes+=("${THEME_VARIANTS[3]}")
|
||
|
shift
|
||
|
;;
|
||
|
orange)
|
||
|
themes+=("${THEME_VARIANTS[4]}")
|
||
|
shift
|
||
|
;;
|
||
|
yellow)
|
||
|
themes+=("${THEME_VARIANTS[5]}")
|
||
|
shift
|
||
|
;;
|
||
|
green)
|
||
|
themes+=("${THEME_VARIANTS[6]}")
|
||
|
shift
|
||
|
;;
|
||
|
teal)
|
||
|
themes+=("${THEME_VARIANTS[7]}")
|
||
|
shift
|
||
|
;;
|
||
|
grey)
|
||
|
themes+=("${THEME_VARIANTS[8]}")
|
||
|
shift
|
||
|
;;
|
||
|
all)
|
||
|
themes+=("${THEME_VARIANTS[@]}")
|
||
|
shift
|
||
|
;;
|
||
|
-*)
|
||
|
break
|
||
|
;;
|
||
|
*)
|
||
|
echo "ERROR: Unrecognized theme variant '$1'."
|
||
|
echo "Try '$0 --help' for more information."
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
;;
|
||
|
-s|--size)
|
||
|
shift
|
||
|
for variant in "$@"; do
|
||
|
case "$variant" in
|
||
|
standard)
|
||
|
sizes+=("${SIZE_VARIANTS[0]}")
|
||
|
shift
|
||
|
;;
|
||
|
compact)
|
||
|
sizes+=("${SIZE_VARIANTS[1]}")
|
||
|
compact='true'
|
||
|
shift
|
||
|
;;
|
||
|
-*)
|
||
|
break
|
||
|
;;
|
||
|
*)
|
||
|
echo "ERROR: Unrecognized size variant '${1:-}'."
|
||
|
echo "Try '$0 --help' for more information."
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
;;
|
||
|
--tweaks)
|
||
|
shift
|
||
|
for variant in $@; do
|
||
|
case "$variant" in
|
||
|
nord)
|
||
|
nord="true"
|
||
|
ctype="-nord"
|
||
|
echo -e "Install Nord version! ..."
|
||
|
shift
|
||
|
;;
|
||
|
black)
|
||
|
blackness="true"
|
||
|
echo -e "Install Blackness version! ..."
|
||
|
shift
|
||
|
;;
|
||
|
rimless)
|
||
|
rimless="true"
|
||
|
echo -e "Install Rimless version! ..."
|
||
|
shift
|
||
|
;;
|
||
|
-*)
|
||
|
break
|
||
|
;;
|
||
|
*)
|
||
|
echo "ERROR: Unrecognized tweaks 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
|
||
|
|
||
|
if [[ "${#themes[@]}" -eq 0 ]] ; then
|
||
|
themes=("${THEME_VARIANTS[0]}")
|
||
|
fi
|
||
|
|
||
|
if [[ "${#colors[@]}" -eq 0 ]] ; then
|
||
|
colors=("${COLOR_VARIANTS[@]}")
|
||
|
fi
|
||
|
|
||
|
if [[ "${#sizes[@]}" -eq 0 ]] ; then
|
||
|
sizes=("${SIZE_VARIANTS[0]}")
|
||
|
fi
|
||
|
|
||
|
# Check command avalibility
|
||
|
function has_command() {
|
||
|
command -v $1 > /dev/null
|
||
|
}
|
||
|
|
||
|
# Install needed packages
|
||
|
install_package() {
|
||
|
if [ ! "$(which sassc 2> /dev/null)" ]; then
|
||
|
echo sassc needs to be installed to generate the css.
|
||
|
if has_command zypper; then
|
||
|
sudo zypper in sassc
|
||
|
elif has_command apt-get; then
|
||
|
sudo apt-get install sassc
|
||
|
elif has_command dnf; then
|
||
|
sudo dnf install sassc
|
||
|
elif has_command dnf; then
|
||
|
sudo dnf install sassc
|
||
|
elif has_command pacman; then
|
||
|
sudo pacman -S --noconfirm sassc
|
||
|
fi
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
tweaks_temp() {
|
||
|
cp -rf ${SRC_DIR}/sass/_tweaks.scss ${SRC_DIR}/sass/_tweaks-temp.scss
|
||
|
}
|
||
|
|
||
|
compact_size() {
|
||
|
sed -i "/\$compact:/s/false/true/" ${SRC_DIR}/sass/_tweaks-temp.scss
|
||
|
}
|
||
|
|
||
|
nord_color() {
|
||
|
sed -i "/\$color_type:/s/default/nord/" ${SRC_DIR}/sass/_tweaks-temp.scss
|
||
|
}
|
||
|
|
||
|
blackness_color() {
|
||
|
sed -i "/\$color_type:/s/default/blackness/" ${SRC_DIR}/sass/_tweaks-temp.scss
|
||
|
}
|
||
|
|
||
|
border_rimless() {
|
||
|
sed -i "/\$rimless:/s/false/true/" ${SRC_DIR}/sass/_tweaks-temp.scss
|
||
|
}
|
||
|
|
||
|
theme_color() {
|
||
|
if [[ "$theme" != '' ]]; then
|
||
|
case "$theme" in
|
||
|
-purple)
|
||
|
theme_color='purple'
|
||
|
;;
|
||
|
-pink)
|
||
|
theme_color='pink'
|
||
|
;;
|
||
|
-red)
|
||
|
theme_color='red'
|
||
|
;;
|
||
|
-orange)
|
||
|
theme_color='orange'
|
||
|
;;
|
||
|
-yellow)
|
||
|
theme_color='yellow'
|
||
|
;;
|
||
|
-green)
|
||
|
theme_color='green'
|
||
|
;;
|
||
|
-teal)
|
||
|
theme_color='teal'
|
||
|
;;
|
||
|
-grey)
|
||
|
theme_color='grey'
|
||
|
;;
|
||
|
esac
|
||
|
sed -i "/\$theme:/s/default/${theme_color}/" ${SRC_DIR}/sass/_tweaks-temp.scss
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
theme_tweaks() {
|
||
|
if [[ "$accent" == 'true' || "$compact" == 'true' || "$nord" == 'true' || "$rimless" == 'true' || "$blackness" == 'true' ]]; then
|
||
|
tweaks='true'
|
||
|
install_package; tweaks_temp
|
||
|
fi
|
||
|
|
||
|
if [[ "$accent" = "true" ]] ; then
|
||
|
theme_color
|
||
|
fi
|
||
|
|
||
|
if [[ "$compact" = "true" ]] ; then
|
||
|
compact_size
|
||
|
fi
|
||
|
|
||
|
if [[ "$nord" = "true" ]] ; then
|
||
|
nord_color
|
||
|
fi
|
||
|
|
||
|
if [[ "$blackness" = "true" ]] ; then
|
||
|
blackness_color
|
||
|
fi
|
||
|
|
||
|
if [[ "$rimless" = "true" ]] ; then
|
||
|
border_rimless
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
install_theme() {
|
||
|
for theme in "${themes[@]}"; do
|
||
|
for color in "${colors[@]}"; do
|
||
|
for size in "${sizes[@]}"; do
|
||
|
install "${dest:-$DEST_DIR}" "${_name:-$THEME_NAME}" "$theme" "$color" "$size" "$ctype"
|
||
|
done
|
||
|
done
|
||
|
done
|
||
|
}
|
||
|
|
||
|
install_theme
|
||
|
|
||
|
echo
|
||
|
echo Done.
|