Drop support for install.sh
Meson will be the only supported build system.
Closes https://github.com/nana-4/materia-theme/issues/554
By using this site, you agree to have cookies stored on your device, strictly for functional purposes, such as storing your session and preferences.
Meson will be the only supported build system.
Closes https://github.com/nana-4/materia-theme/issues/554
roundabout,
created on Tuesday, 23 March 2021, 16:38:00 (1616517480),
received on Sunday, 11 May 2025, 13:23:02 (1746969782)
Author identity: nana-4 <hnmaigo@gmail.com>
822e77e607c77f46ddae4e3f5f24f766e6df8a32
meson _build -Dprefix="$HOME/.local" -Dcolors=default,dark -Dsizes=compact
```
## Installation for older distributions
If you can't use Meson `>= 0.47.0`, you can use `./install.sh` instead:
```sh
sudo ./install.sh
```
For installation options, run: `./install.sh --help`
## Uninstallation
Delete the installed directories:
- The included symbolic icons are based on [Material Design icons](https://github.com/google/material-design-icons) by Google.
- The Chrome scrollbar extension was forked from [Adwaita-chrome-scrollbar](https://github.com/gnome-integration-team/chrome-gnome-scrollbar) by GNOME Integration Team.
- Yauhen Kirylau (@actionless) who is oomox author polished scripts and supported Materia with [oomox](https://github.com/themix-project/oomox).
- @n3oxmind who helped improve the installation script.
- @n3oxmind who helped improve the installation script we had.
- @smurphos who made and provided the Cinnamon theme for Materia.
- Our Meson code is heavily influenced by @monday15's [lounge-gtk-theme](https://github.com/monday15/lounge-gtk-theme).
#!/bin/bash
set -ueo pipefail
#set -x
REPO_DIR="$(cd "$(dirname "$0")" && pwd)"
SRC_DIR="$REPO_DIR/src"
DEST_DIR="/usr/share/themes"
THEME_NAME="Materia"
COLOR_VARIANTS=('' '-dark' '-light')
SIZE_VARIANTS=('' '-compact')
# Set a proper gtk4 theme version
if [[ -z "${GTK4_VERSION:-}" ]]; then
if [[ "$(command -v gtk4-launch)" ]]; then
GTK4_FULL_VERSION="$(gtk4-launch --version)"
GTK4_MAJOR_VERSION="$(echo "$GTK4_FULL_VERSION" | cut -d . -f 1)"
GTK4_MINOR_VERSION="$(echo "$GTK4_FULL_VERSION" | cut -d . -f 2)"
if (( "$GTK4_MINOR_VERSION" % 2 == 0 )); then
GTK4_VERSION="$GTK4_MAJOR_VERSION.$GTK4_MINOR_VERSION"
else
GTK4_VERSION="$GTK4_MAJOR_VERSION.$((GTK4_MINOR_VERSION + 1))"
fi
else
echo "'gtk4-launch' not found, using styles for last gtk4 version available."
GTK4_VERSION="4.0"
fi
fi
# Set a proper gnome-shell theme version
if [[ -z "${GS_VERSION:-}" ]]; then
if [[ "$(command -v gnome-shell)" ]]; then
GS_FULL_VERSION="$(gnome-shell --version | rev | cut -d ' ' -f 1 | rev)"
GS_MAJOR_VERSION="$(echo "$GS_FULL_VERSION" | cut -d . -f 1)"
GS_MINOR_VERSION="$(echo "$GS_FULL_VERSION" | cut -d . -f 2)"
if (( "$GS_MAJOR_VERSION" >= 40 )); then
GS_VERSION="$GS_MAJOR_VERSION"
elif (( "$GS_MINOR_VERSION" % 2 == 0 )); then
GS_VERSION="$GS_MAJOR_VERSION.$GS_MINOR_VERSION"
else
GS_VERSION="$GS_MAJOR_VERSION.$((GS_MINOR_VERSION + 1))"
fi
else
echo "'gnome-shell' not found, using styles for last gnome-shell version available."
GS_VERSION="3.36"
fi
fi
if [[ ! "$(command -v sassc)" ]]; then
echo "'sassc' needs to be installed to generate the CSS."
exit 1
fi
SASSC_OPT=('-M' '-t' 'expanded')
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)
-c, --color VARIANT... Specify color variant(s) [standard|dark|light] (Default: All variants)
-s, --size VARIANT Specify size variant [standard|compact] (Default: All variants)
-g, --gdm Install and apply GDM theme (for advanced users)
See also: src/gnome-shell/README.md
-h, --help Show help
INSTALLATION EXAMPLES:
Install all theme variants into ~/.themes
$0 --dest ~/.themes
Install all theme variants including GDM theme
$0 --gdm
Install standard theme variant only
$0 --color standard --size standard
Install specific theme variants with different name into ~/.themes
$0 --dest ~/.themes --name MyTheme --color light dark --size compact
EOF
}
install_theme() {
local dest="$1"
local name="$2$3$4"
local color="$3"
local size="$4"
if [[ "$color" == '' ]]; then
local scss_dark_theme="false"
local scss_light_topbar="false"
elif [[ "$color" == '-light' ]]; then
local scss_dark_theme="false"
local scss_light_topbar="true"
elif [[ "$color" == '-dark' ]]; then
local scss_dark_theme="true"
local scss_light_topbar="false"
fi
if [[ "$size" == '' ]]; then
local scss_compact="false"
elif [[ "$size" == '-compact' ]]; then
local scss_compact="true"
fi
[[ "$color" == '-dark' ]] && local ELSE_DARK="$color"
[[ "$color" == '-light' ]] && local ELSE_LIGHT="$color"
local THEME_DIR="$dest/$name"
# SC2115: Protect /.
[[ -d "$THEME_DIR" ]] && rm -rf "${THEME_DIR:?}"
echo "Installing '$THEME_DIR'..."
#
# COPYING, INSTALL_GDM_THEME.md & index.theme
#
mkdir -p "$THEME_DIR"
cp \
"$REPO_DIR/COPYING" \
"$REPO_DIR/INSTALL_GDM_THEME.md" \
"$THEME_DIR"
sed \
-e "s|@theme_name@|$name|g" \
"$SRC_DIR/index.theme.in" > \
"$THEME_DIR/index.theme"
#
# Chrome extensions
#
mkdir -p "$THEME_DIR/chrome"
cp -T \
"$SRC_DIR/chrome/chrome-scrollbar${ELSE_DARK:-}.crx" \
"$THEME_DIR/chrome/chrome-scrollbar.crx"
cp -T \
"$SRC_DIR/chrome/chrome-theme$color.crx" \
"$THEME_DIR/chrome/chrome-theme.crx"
#
# Cinnamon
#
mkdir -p "$THEME_DIR/cinnamon"
cp -r \
"$SRC_DIR/cinnamon/assets" \
"$THEME_DIR/cinnamon"
cp \
"$SRC_DIR/cinnamon/thumbnail.png" \
"$THEME_DIR/cinnamon"
sed \
-e "s|@dark_theme@|$scss_dark_theme|g" \
-e "s|@light_topbar@|$scss_light_topbar|g" \
-e "s|@compact@|$scss_compact|g" \
-e "s|@current_source_dir@|$SRC_DIR/cinnamon|g" \
"$SRC_DIR/cinnamon/cinnamon.scss.in" | \
sassc --stdin "${SASSC_OPT[@]}" \
"$THEME_DIR/cinnamon/cinnamon.css"
#
# GNOME Shell
#
mkdir -p "$THEME_DIR/gnome-shell"
cp -r -T \
"$SRC_DIR/gnome-shell/assets${ELSE_DARK:-}" \
"$THEME_DIR/gnome-shell/assets"
cp -r \
"$SRC_DIR/gnome-shell/extensions" \
"$SRC_DIR/gnome-shell/icons" \
"$THEME_DIR/gnome-shell"
cp \
"$SRC_DIR/gnome-shell/gnome-shell-start.svg" \
"$SRC_DIR/gnome-shell/gnome-shell-theme.gresource.xml" \
"$SRC_DIR/gnome-shell/noise-texture.png" \
"$SRC_DIR/gnome-shell/pad-osd.css" \
"$SRC_DIR/gnome-shell/process-working.svg" \
"$THEME_DIR/gnome-shell"
sed \
-e "s|@dark_theme@|$scss_dark_theme|g" \
-e "s|@light_topbar@|$scss_light_topbar|g" \
-e "s|@compact@|$scss_compact|g" \
-e "s|@version@|$GS_VERSION|g" \
-e "s|@current_source_dir@|$SRC_DIR/gnome-shell|g" \
"$SRC_DIR/gnome-shell/gnome-shell.scss.in" | \
sassc --stdin "${SASSC_OPT[@]}" \
"$THEME_DIR/gnome-shell/gnome-shell.css"
#
# GTK 2
#
mkdir -p "$THEME_DIR/gtk-2.0"
cp -r -T \
"$SRC_DIR/gtk-2.0/assets${ELSE_DARK:-}" \
"$THEME_DIR/gtk-2.0/assets"
cp -T \
"$SRC_DIR/gtk-2.0/gtkrc$color" \
"$THEME_DIR/gtk-2.0/gtkrc"
cp \
"$SRC_DIR/gtk-2.0/apps.rc" \
"$SRC_DIR/gtk-2.0/hacks.rc" \
"$SRC_DIR/gtk-2.0/main.rc" \
"$THEME_DIR/gtk-2.0"
#
# GTK 3 & 4
#
local GTK_VARIANTS=('')
[[ "$color" != '-dark' ]] && local GTK_VARIANTS+=('-dark')
for version in "3.0" "4.0"; do
mkdir -p "$THEME_DIR/gtk-$version"
cp -r \
"$SRC_DIR/gtk-3.0/assets" \
"$SRC_DIR/gtk-3.0/icons" \
"$THEME_DIR/gtk-$version"
for variant in "${GTK_VARIANTS[@]}"; do
sed \
-e "s|@dark_theme@|$scss_dark_theme|g" \
-e "s|@light_topbar@|$scss_light_topbar|g" \
-e "s|@compact@|$scss_compact|g" \
-e "s|@version@|$GTK4_VERSION|g" \
-e "s|@current_source_dir@|$SRC_DIR/gtk-$version|g" \
"$SRC_DIR/gtk-$version/gtk$variant.scss.in" | \
sassc --stdin "${SASSC_OPT[@]}" \
"$THEME_DIR/gtk-$version/gtk$variant.css"
done
done
#
# Metacity
#
mkdir -p "$THEME_DIR/metacity-1"
cp -r \
"$SRC_DIR/metacity-1/assets" \
"$THEME_DIR/metacity-1"
cp -T \
"$SRC_DIR/metacity-1/metacity-theme-2$color.xml" \
"$THEME_DIR/metacity-1/metacity-theme-2.xml"
cp \
"$SRC_DIR/metacity-1/metacity-theme-3.xml" \
"$THEME_DIR/metacity-1"
#
# Plank
#
mkdir -p "$THEME_DIR/plank"
cp \
"$SRC_DIR/plank/dock.theme" \
"$THEME_DIR/plank"
#
# Unity
#
mkdir -p "$THEME_DIR/unity"
cp -r -T \
"$SRC_DIR/unity/dash-buttons" \
"$THEME_DIR/unity"
cp -r -T \
"$SRC_DIR/unity/launcher" \
"$THEME_DIR/unity"
cp -r -T \
"$SRC_DIR/unity/window-buttons${ELSE_LIGHT:-}" \
"$THEME_DIR/unity"
cp \
"$SRC_DIR/unity/dash-widgets.json" \
"$THEME_DIR/unity"
#
# Xfwm4
#
mkdir -p "$THEME_DIR/xfwm4"
cp -r -T \
"$SRC_DIR/xfwm4/xfwm4$color" \
"$THEME_DIR/xfwm4"
}
# Bakup and install files related to GDM theme
install_gdm_theme() {
local THEME_DIR="$1/$2$3$4"
local GS_THEME_FILE="/usr/share/gnome-shell/gnome-shell-theme.gresource"
local UBUNTU_THEME_FILE="/usr/share/gnome-shell/theme/ubuntu.css"
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="$THEME_DIR/gnome-shell" \
--target="$GS_THEME_FILE" \
"$THEME_DIR/gnome-shell/gnome-shell-theme.gresource.xml"
else
echo
echo "ERROR: Failed to install '$GS_THEME_FILE'"
exit 1
fi
if [[ -f "$UBUNTU_THEME_FILE" ]]; then
echo "Installing '$UBUNTU_THEME_FILE'..."
cp -an "$UBUNTU_THEME_FILE" "$UBUNTU_THEME_FILE.bak"
cp -af "$THEME_DIR/gnome-shell/gnome-shell.css" "$UBUNTU_THEME_FILE"
fi
}
colors=()
sizes=()
while [[ "$#" -gt 0 ]]; do
case "${1:-}" in
-d|--dest)
dest="$2"
mkdir -p "$dest"
shift 2
;;
-n|--name)
_name="$2"
shift 2
;;
-g|--gdm)
gdm='true'
shift 1
;;
-c|--color)
shift
for variant in "$@"; do
case "$variant" in
standard)
colors+=("${COLOR_VARIANTS[0]}")
shift
;;
dark)
colors+=("${COLOR_VARIANTS[1]}")
shift
;;
light)
colors+=("${COLOR_VARIANTS[2]}")
shift
;;
-*)
break
;;
*)
echo "ERROR: Unrecognized color 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]}")
shift
;;
-*)
break
;;
*)
echo "ERROR: Unrecognized size 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 [[ ! -w "${dest:-$DEST_DIR}" ]]; then
echo "Please run as root."
exit 1
fi
if [[ "${#colors[@]}" -eq 0 ]] ; then
colors=("${COLOR_VARIANTS[@]}")
fi
if [[ "${#sizes[@]}" -eq 0 ]] ; then
sizes=("${SIZE_VARIANTS[@]}")
fi
for color in "${colors[@]}"; do
for size in "${sizes[@]}"; do
install_theme "${dest:-$DEST_DIR}" "${_name:-$THEME_NAME}" "$color" "$size"
done
done
if [[ "${gdm:-}" == 'true' ]]; then
install_gdm_theme "${dest:-$DEST_DIR}" "${_name:-$THEME_NAME}" "$color" "$size"
fi
echo
echo "Done."