A fork of the Materia GTK theme.

Important information: Google announced that, from September 2026, Android devices will require ALL apps to be signed by Google, effectively leading to an iOS situation. Value your right to a computer that does what you want; do not tolerate this monopolistic practice! Contact me if you don't understand why it is bad. Click to learn more.

 install.sh

View raw Download
text/x-shellscript • 9.51 kiB
Bourne-Again shell script, ASCII text executable
        
            
1
#!/bin/bash
2
set -ueo pipefail
3
#set -x
4
5
REPO_DIR=$(cd "$(dirname "$0")" && pwd)
6
SRC_DIR=$REPO_DIR/src
7
8
DEST_DIR=/usr/share/themes
9
THEME_NAME=Materia
10
COLOR_VARIANTS=('' '-dark' '-light')
11
SIZE_VARIANTS=('' '-compact')
12
13
GTK_VERSIONS=('3.18' '3.20' '3.22')
14
GS_VERSIONS=('3.18' '3.24' '3.26' '3.28')
15
LATEST_GS_VERSION=${GS_VERSIONS[-1]}
16
17
# Set a proper gnome-shell theme version
18
if [[ $(which gnome-shell 2> /dev/null) ]]; then
19
CURRENT_GS_VERSION=$(gnome-shell --version | cut -d ' ' -f 3 | cut -d . -f -2)
20
for version in "${GS_VERSIONS[@]}"; do
21
if (( $(bc <<< "$CURRENT_GS_VERSION <= $version") )); then
22
GS_VERSION=$version
23
break
24
elif (( $(bc <<< "$CURRENT_GS_VERSION > $LATEST_GS_VERSION") )); then
25
GS_VERSION=$LATEST_GS_VERSION
26
break
27
fi
28
done
29
else
30
GS_VERSION=$LATEST_GS_VERSION
31
fi
32
33
usage() {
34
printf "%s\\n" "Usage: $0 [OPTIONS...]"
35
printf "\\n%s\\n" "OPTIONS:"
36
printf " %-25s%s\\n" "-d, --dest DIR" "Specify theme destination directory (Default: $DEST_DIR)"
37
printf " %-25s%s\\n" "-n, --name NAME" "Specify theme name (Default: $THEME_NAME)"
38
printf " %-25s%s\\n" "-c, --color VARIANTS..." "Specify theme color variant(s) [standard|dark|light] (Default: All variants)"
39
printf " %-25s%s\\n" "-s, --size VARIANT" "Specify theme size variant [standard|compact] (Default: All variants)"
40
printf " %-25s%s\\n" "-g, --gdm" "Install GDM theme"
41
printf " %-25s%s\\n" "-h, --help" "Show this help"
42
printf "\\n%s\\n" "INSTALLATION EXAMPLES:"
43
printf "%s\\n" "Install all theme variants into ~/.themes"
44
printf " %s\\n" "$0 --dest ~/.themes"
45
printf "%s\\n" "Install all theme variants into ~/.themes including GDM theme"
46
printf " %s\\n" "$0 --dest ~/.themes --gdm"
47
printf "%s\\n" "Install standard theme variant only"
48
printf " %s\\n" "$0 --color standard --size standard"
49
printf "%s\\n" "Install specific theme variants with different name into ~/.themes"
50
printf " %s\\n" "$0 --dest ~/.themes --name MyTheme --color light dark --size compact"
51
}
52
53
install() {
54
local dest=$1
55
local name=$2
56
local color=$3
57
local size=$4
58
59
[[ $color == '-dark' ]] && local ELSE_DARK=$color
60
[[ $color == '-light' ]] && local ELSE_LIGHT=$color
61
62
local THEME_DIR=$dest/$name$color$size
63
64
# SC2115: Protect /.
65
[[ -d "$THEME_DIR" ]] && rm -rf "${THEME_DIR:?}"
66
67
echo "Installing '$THEME_DIR'..."
68
69
mkdir -p "$THEME_DIR"
70
cp -r "$REPO_DIR/COPYING" "$THEME_DIR"
71
cp -r "$SRC_DIR/index$color$size.theme" "$THEME_DIR/index.theme"
72
73
mkdir -p "$THEME_DIR/chrome"
74
cp -r "$SRC_DIR/chrome/chrome-theme$color.crx" "$THEME_DIR/chrome/chrome-theme.crx"
75
cp -r "$SRC_DIR/chrome/chrome-scrollbar${ELSE_DARK:-}.crx" "$THEME_DIR/chrome/chrome-scrollbar.crx"
76
77
mkdir -p "$THEME_DIR/cinnamon"
78
cp -r "$SRC_DIR/cinnamon/cinnamon$color$size.css" "$THEME_DIR/cinnamon/cinnamon.css"
79
cp -r "$SRC_DIR/cinnamon/thumbnail.png" "$THEME_DIR/cinnamon/thumbnail.png"
80
cp -r "$SRC_DIR/cinnamon/assets" "$THEME_DIR/cinnamon/assets"
81
82
mkdir -p "$THEME_DIR/gnome-shell"
83
cp -r "$SRC_DIR/gnome-shell/"{*.svg,extensions,noise-texture.png,pad-osd.css} "$THEME_DIR/gnome-shell"
84
cp -r "$SRC_DIR/gnome-shell/gnome-shell-theme.gresource.xml" "$THEME_DIR/gnome-shell"
85
cp -r "$SRC_DIR/gnome-shell/assets${ELSE_DARK:-}" "$THEME_DIR/gnome-shell/assets"
86
cp -r "$SRC_DIR/gnome-shell/$GS_VERSION/gnome-shell$color$size.css" "$THEME_DIR/gnome-shell/gnome-shell.css"
87
88
mkdir -p "$THEME_DIR/gtk-2.0"
89
cp -r "$SRC_DIR/gtk-2.0/"{apps.rc,hacks.rc,main.rc} "$THEME_DIR/gtk-2.0"
90
cp -r "$SRC_DIR/gtk-2.0/assets${ELSE_DARK:-}" "$THEME_DIR/gtk-2.0/assets"
91
cp -r "$SRC_DIR/gtk-2.0/gtkrc$color" "$THEME_DIR/gtk-2.0/gtkrc"
92
93
cp -r "$SRC_DIR/gtk/assets" "$THEME_DIR/gtk-assets"
94
95
for version in "${GTK_VERSIONS[@]}"; do
96
if [[ $version == '3.18' ]]; then
97
mkdir -p "$THEME_DIR/gtk-3.0"
98
ln -s ../gtk-assets "$THEME_DIR/gtk-3.0/assets"
99
cp -r "$SRC_DIR/gtk/$version/gtk$color.css" "$THEME_DIR/gtk-3.0/gtk.css"
100
[[ "$color" != '-dark' ]] && \
101
cp -r "$SRC_DIR/gtk/$version/gtk-dark.css" "$THEME_DIR/gtk-3.0/gtk-dark.css"
102
else
103
mkdir -p "$THEME_DIR/gtk-$version"
104
ln -s ../gtk-assets "$THEME_DIR/gtk-$version/assets"
105
cp -r "$SRC_DIR/gtk/$version/gtk$color$size.css" "$THEME_DIR/gtk-$version/gtk.css"
106
[[ "$color" != '-dark' ]] && \
107
cp -r "$SRC_DIR/gtk/$version/gtk-dark$size.css" "$THEME_DIR/gtk-$version/gtk-dark.css"
108
fi
109
done
110
111
mkdir -p "$THEME_DIR/metacity-1"
112
cp -r "$SRC_DIR/metacity-1/assets" "$THEME_DIR/metacity-1"
113
cp -r "$SRC_DIR/metacity-1/metacity-theme-2${ELSE_LIGHT:-}.xml" "$THEME_DIR/metacity-1/metacity-theme-2.xml"
114
cp -r "$SRC_DIR/metacity-1/metacity-theme-3${ELSE_LIGHT:-}.xml" "$THEME_DIR/metacity-1/metacity-theme-3.xml"
115
116
mkdir -p "$THEME_DIR/unity"
117
cp -r "$SRC_DIR/unity/"{*.svg,*.png,dash-widgets.json} "$THEME_DIR/unity"
118
cp -r "$SRC_DIR/unity/assets${ELSE_LIGHT:-}" "$THEME_DIR/unity/assets"
119
120
mkdir -p "$THEME_DIR/xfwm4"
121
cp -r "$SRC_DIR/xfwm4/"{*.svg,themerc} "$THEME_DIR/xfwm4"
122
cp -r "$SRC_DIR/xfwm4/assets${ELSE_LIGHT:-}" "$THEME_DIR/xfwm4/assets"
123
}
124
install_gdm() {
125
local THEME_DIR=$1/$2$3$4
126
# bakup and install files related to gdm theme
127
if [[ ! -f /usr/share/gnome-shell/gnome-shell-theme.gresource.bak ]]; then
128
mv -f /usr/share/gnome-shell/gnome-shell-theme.gresource \
129
/usr/share/gnome-shell/gnome-shell-theme.gresource.bak
130
fi
131
if [[ -f /usr/share/gnome-shell/theme/ubuntu.css ]]; then
132
if [[ ! -f /usr/share/gnome-shell/theme/ubuntu.css.bak ]]; then
133
mv -f /usr/share/gnome-shell/theme/ubuntu.css \
134
/usr/share/gnome-shell/theme/ubuntu.css.bak
135
fi
136
cp -af "$THEME_DIR/gnome-shell/gnome-shell.css" \
137
/usr/share/gnome-shell/theme/ubuntu.css
138
fi
139
glib-compile-resources \
140
--sourcedir="$THEME_DIR/gnome-shell" \
141
--target=/usr/share/gnome-shell/gnome-shell-theme.gresource \
142
"$THEME_DIR/gnome-shell/gnome-shell-theme.gresource.xml"
143
echo "Installing 'gnome-shell-theme.gresource'..."
144
}
145
while [[ "$#" -gt 0 ]]; do
146
case "${1:-}" in
147
-d|--dest)
148
dest="$2"
149
if [[ ! -d "$dest" ]]; then
150
echo "ERROR: Destination directory does not exist."
151
exit 1
152
fi
153
shift 2
154
;;
155
-n|--name)
156
_name="$2"
157
shift 2
158
;;
159
-g|--gdm)
160
gdm=true
161
shift 1
162
;;
163
-c|--color)
164
shift
165
for variant in "$@"; do
166
case "$variant" in
167
standard)
168
colors+=("${COLOR_VARIANTS[0]}")
169
shift
170
;;
171
dark)
172
colors+=("${COLOR_VARIANTS[1]}")
173
shift
174
;;
175
light)
176
colors+=("${COLOR_VARIANTS[2]}")
177
shift
178
;;
179
-*)
180
break
181
;;
182
*)
183
echo "ERROR: Unrecognized color variant '$1'."
184
echo "Try '$0 --help' for more information."
185
exit 1
186
;;
187
esac
188
done
189
;;
190
-s|--size)
191
shift
192
for variant in "$@"; do
193
case "$variant" in
194
standard)
195
sizes+=("${SIZE_VARIANTS[0]}")
196
shift
197
;;
198
compact)
199
sizes+=("${SIZE_VARIANTS[1]}")
200
shift
201
;;
202
-*)
203
break
204
;;
205
*)
206
echo "ERROR: Unrecognized size variant '${1:-}'."
207
echo "Try '$0 --help' for more information."
208
exit 1
209
;;
210
esac
211
done
212
;;
213
-h|--help)
214
usage
215
exit 0
216
;;
217
*)
218
echo "ERROR: Unrecognized installation option '${1:-}'."
219
echo "Try '$0 --help' for more information."
220
exit 1
221
;;
222
esac
223
done
224
225
if [[ ! -w "${dest:-$DEST_DIR}" ]]; then
226
echo "Please run as root."
227
exit 1
228
fi
229
230
for color in "${colors[@]:-${COLOR_VARIANTS[@]}}"; do
231
for size in "${sizes[@]:-${SIZE_VARIANTS[@]}}"; do
232
install "${dest:-$DEST_DIR}" "${_name:-$THEME_NAME}" "$color" "$size"
233
done
234
done
235
if [[ "${gdm:-}" == true ]]; then
236
install_gdm "${dest:-$DEST_DIR}" "${_name:-$THEME_NAME}" "$color" "$size"
237
fi
238
239
echo
240
echo Done.
241