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