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.

 change_color.sh

View raw Download
text/x-shellscript • 10.45 kiB
Bourne-Again shell script, ASCII text executable
        
            
1
#!/usr/bin/env bash
2
# shellcheck disable=SC1090
3
#set -x
4
set -ueo pipefail
5
6
SRC_PATH="$(readlink -f "$(dirname "$0")")"
7
8
darker() {
9
"$SRC_PATH/scripts/darker.sh" "$@"
10
}
11
mix() {
12
"$SRC_PATH/scripts/mix.sh" "$@"
13
}
14
is_dark() {
15
hexinput="$(tr '[:lower:]' '[:upper:]' <<< "$1")"
16
half_darker="$(darker "$hexinput" 88)"
17
[[ "$half_darker" == "000000" ]]
18
}
19
20
21
print_usage() {
22
echo "usage: $0 [-o OUTPUT_THEME_NAME] [-p PATH_LIST] PATH_TO_PRESET"
23
echo "examples:"
24
# shellcheck disable=SC2028 # This is meant to be usage text.
25
echo " $0 -o my-theme-name <(echo -e \"ROUNDNESS=0\\nBG=d8d8d8\\nFG=101010\\nHDR_BG=3c3c3c\\nHDR_FG=e6e6e6\\nSEL_BG=ad7fa8\\nSEL_FG=ffffff\\nTXT_BG=ffffff\\nTXT_FG=1a1a1a\\nBTN_BG=f5f5f5\\nBTN_FG=111111\\n\")"
26
echo " $0 ../colors/retro/twg"
27
echo " $0 --hidpi True ../colors/retro/clearlooks"
28
exit 1
29
}
30
31
32
while [[ "$#" -gt 0 ]]; do
33
case "$1" in
34
-p|--path-list)
35
CUSTOM_PATHLIST="$2"
36
shift
37
;;
38
-o|--output)
39
OUTPUT_THEME_NAME="$2"
40
shift
41
;;
42
-d|--hidpi)
43
OPTION_GTK2_HIDPI="$2"
44
shift
45
;;
46
*)
47
if [[ "$1" == -* ]] || [[ "${THEME-}" ]]; then
48
echo "unknown option $1"
49
print_usage
50
exit 2
51
fi
52
THEME="$1"
53
;;
54
esac
55
shift
56
done
57
58
if [[ -z "${THEME:-}" ]]; then
59
print_usage
60
fi
61
62
PATHLIST=(
63
'./src/chrome'
64
'./src/cinnamon'
65
'./src/cinnamon/assets'
66
'./src/gnome-shell'
67
'./src/gtk-2.0/gtkrc'
68
'./src/gtk-2.0/gtkrc-dark'
69
'./src/gtk-2.0/gtkrc-light'
70
'./src/_sass/_colors.scss'
71
'./src/gtk-2.0/assets.svg'
72
'./src/gtk-2.0/assets-dark.svg'
73
'./src/gtk/assets.svg'
74
'./src/metacity-1'
75
'./src/unity'
76
'./src/xfwm4'
77
)
78
if [[ ! -z "${CUSTOM_PATHLIST:-}" ]]; then
79
IFS=', ' read -r -a PATHLIST <<< "${CUSTOM_PATHLIST:-}"
80
fi
81
82
EXPORT_QT5CT=0
83
for FILEPATH in "${PATHLIST[@]}"; do
84
if [[ "$FILEPATH" == *qt5ct* ]]; then
85
EXPORT_QT5CT=1
86
fi
87
done
88
89
OPTION_GTK2_HIDPI=$(tr '[:upper:]' '[:lower:]' <<< "${OPTION_GTK2_HIDPI-False}")
90
91
92
if [[ "$THEME" == */* ]] || [[ "$THEME" == *.* ]]; then
93
source "$THEME"
94
THEME=$(basename "$THEME")
95
else
96
if [[ -f "$SRC_PATH/../colors/$THEME" ]]; then
97
source "$SRC_PATH/../colors/$THEME"
98
else
99
echo "Theme '$THEME' not found"
100
exit 1
101
fi
102
fi
103
if [[ $(date +"%m%d") = "0401" ]] && grep -q "no-jokes" <<< "$*"; then
104
echo -e "\\n\\nError patching uxtheme.dll\\n\\n"
105
ACCENT_BG=000000 BG=C0C0C0 BTN_BG=C0C0C0 BTN_FG=000000 FG=000000
106
GNOME_SHELL_PANEL_OPACITY=1 HDR_BTN_BG=C0C0C0 HDR_BTN_FG=000000 HDR_BG=C0C0C0
107
HDR_FG=000000 SEL_BG=000080 SEL_FG=FFFFFF TXT_BG=FFFFFF TXT_FG=000000
108
fi
109
110
# Migration:
111
HDR_BG=${HDR_BG-$MENU_BG}
112
HDR_FG=${HDR_FG-$MENU_FG}
113
114
ACCENT_BG=${ACCENT_BG-$SEL_BG}
115
HDR_BTN_BG=${HDR_BTN_BG-$BTN_BG}
116
HDR_BTN_FG=${HDR_BTN_FG-$BTN_FG}
117
WM_BORDER_FOCUS=${WM_BORDER_FOCUS-$SEL_BG}
118
WM_BORDER_UNFOCUS=${WM_BORDER_UNFOCUS-$HDR_BG}
119
120
MATERIA_STYLE_COMPACT=$(tr '[:upper:]' '[:lower:]' <<< "${MATERIA_STYLE_COMPACT-True}")
121
MATERIA_COLOR_VARIANT=$(tr '[:upper:]' '[:lower:]' <<< "${MATERIA_COLOR_VARIANT:-}")
122
UNITY_DEFAULT_LAUNCHER_STYLE=$(tr '[:upper:]' '[:lower:]' <<< "${UNITY_DEFAULT_LAUNCHER_STYLE-False}")
123
124
SPACING=${SPACING-3}
125
GRADIENT=${GRADIENT-0}
126
ROUNDNESS=${ROUNDNESS-2}
127
# shellcheck disable=SC2034 # will this be used in the future?
128
ROUNDNESS_GTK2_HIDPI=$(( ROUNDNESS * 2 ))
129
GNOME_SHELL_PANEL_OPACITY=${GNOME_SHELL_PANEL_OPACITY-0.6}
130
131
INACTIVE_FG=$(mix "$FG" "$BG" 0.75)
132
INACTIVE_HDR_FG=$(mix "$HDR_FG" "$HDR_BG" 0.75)
133
INACTIVE_HDR_BG=$(mix "$HDR_BG" "$HDR_FG" 0.75)
134
INACTIVE_TXT_FG=$(mix "$TXT_FG" "$TXT_BG" 0.75)
135
INACTIVE_TXT_BG=$(mix "$TXT_BG" "$BG" 0.60)
136
137
TERMINAL_COLOR4=${TERMINAL_COLOR4:-1E88E5}
138
TERMINAL_COLOR5=${TERMINAL_COLOR5:-E040FB}
139
TERMINAL_COLOR9=${TERMINAL_COLOR9:-DD2C00}
140
TERMINAL_COLOR10=${TERMINAL_COLOR10:-00C853}
141
TERMINAL_COLOR11=${TERMINAL_COLOR11:-FF6D00}
142
TERMINAL_COLOR12=${TERMINAL_COLOR12:-66BB6A}
143
144
# Are these intended to be used in the future?
145
# shellcheck disable=SC2034
146
light_folder_base_fallback=$(darker "$SEL_BG" -10)
147
# shellcheck disable=SC2034
148
medium_base_fallback=$(darker "$SEL_BG" 37)
149
# shellcheck disable=SC2034
150
dark_stroke_fallback=$(darker "$SEL_BG" 50)
151
152
OUTPUT_THEME_NAME=${OUTPUT_THEME_NAME-oomox-$THEME}
153
DEST_PATH="$HOME/.themes/${OUTPUT_THEME_NAME/\//-}"
154
155
if [[ "$SRC_PATH" == "$DEST_PATH" ]]; then
156
echo "can't do that"
157
exit 1
158
fi
159
160
161
tempdir=$(mktemp -d)
162
post_clean_up() {
163
rm -r "$tempdir" || :
164
}
165
trap post_clean_up EXIT SIGHUP SIGINT SIGTERM
166
cp -r "$SRC_PATH/"* "$tempdir/"
167
cd "$tempdir"
168
169
170
# autodetection which color variant to use
171
if [[ -z "$MATERIA_COLOR_VARIANT" ]]; then
172
if is_dark "$BG"; then
173
echo "== Dark background color detected. Setting color variant to dark."
174
MATERIA_COLOR_VARIANT="dark"
175
elif is_dark "$HDR_BG"; then
176
echo "== Dark headerbar background color detected. Setting color variant to standard."
177
MATERIA_COLOR_VARIANT="standard"
178
else
179
echo "== Light background color detected. Setting color variant to light."
180
MATERIA_COLOR_VARIANT="light"
181
fi
182
fi
183
184
185
echo "== Converting theme into template..."
186
187
for FILEPATH in "${PATHLIST[@]}"; do
188
if [[ "$MATERIA_COLOR_VARIANT" != "dark" ]]; then
189
find "$FILEPATH" -type f -not -name '_color-palette.scss' -exec sed -i'' \
190
-e 's/#000000/%FG%/g' \
191
-e 's/#212121/%FG%/g' \
192
-e 's/#757575/%INACTIVE_FG%/g' \
193
-e 's/#BDBDBD/%INACTIVE_FG%/g' \
194
-e 's/#FAFAFA/%INACTIVE_TXT_BG%/g' \
195
-e 's/#F2F2F2/%BG%/g' \
196
-e 's/#FAFAFA/%BTN_BG%/g' \
197
-e 's/#01A299/%ACCENT_BG%/g' \
198
-e 's/#4285F4/%SEL_BG%/g' \
199
-e 's/#FFFFFF/%TXT_BG%/g' \
200
-e 's/#383838/%HDR_BG%/g' \
201
-e 's/#E0E0E0/%HDR_BG%/g' \
202
-e 's/#212121/%HDR_BG2%/g' \
203
-e 's/Materia/%OUTPUT_THEME_NAME%/g' \
204
{} \; ;
205
else
206
find "$FILEPATH" -type f -not -name '_color-palette.scss' -exec sed -i'' \
207
-e 's/#000000/%BG%/g' \
208
-e 's/#282828/%BG%/g' \
209
-e 's/#757575/%INACTIVE_FG%/g' \
210
-e 's/#BDBDBD/%INACTIVE_FG%/g' \
211
-e 's/#2C2C2C/%INACTIVE_TXT_BG%/g' \
212
-e 's/#FFFFFF/%FG%/g' \
213
-e 's/#FAFAFA/%BTN_FG%/g' \
214
-e 's/#424242/%BTN_BG%/g' \
215
-e 's/#01A299/%ACCENT_BG%/g' \
216
-e 's/#4285F4/%SEL_BG%/g' \
217
-e 's/#FFFFFF/%TXT_FG%/g' \
218
-e 's/#303030/%TXT_BG%/g' \
219
-e 's/#383838/%HDR_BG%/g' \
220
-e 's/#212121/%HDR_BG2%/g' \
221
-e 's/Materia/%OUTPUT_THEME_NAME%/g' \
222
{} \; ;
223
fi
224
done
225
226
#Not implemented yet:
227
#-e 's/%HDR_BTN_BG%/'"$HDR_BTN_BG"'/g' \
228
#-e 's/%HDR_BTN_FG%/'"$HDR_BTN_FG"'/g' \
229
#-e 's/%WM_BORDER_FOCUS%/'"$WM_BORDER_FOCUS"'/g' \
230
#-e 's/%WM_BORDER_UNFOCUS%/'"$WM_BORDER_UNFOCUS"'/g' \
231
#-e 's/%SPACING%/'"$SPACING"'/g' \
232
#-e 's/%INACTIVE_FG%/'"$INACTIVE_FG"'/g' \
233
#-e 's/%INACTIVE_TXT_FG%/'"$INACTIVE_TXT_FG"'/g' \
234
#-e 's/%INACTIVE_HDR_FG%/'"$INACTIVE_HDR_FG"'/g' \
235
236
sed -i -e 's/^$material_radius: .px/$material_radius: '"$ROUNDNESS"'px/g' ./src/_sass/_variables.scss
237
238
if [[ "${DEBUG:-}" ]]; then
239
echo "You can debug TEMP DIR: $tempdir, press [Enter] when finished"; read -r
240
fi
241
242
mv ./src/_sass/_colors.scss.template ./src/_sass/_colors.scss
243
244
echo "== Filling the template with the new colorscheme..."
245
for FILEPATH in "${PATHLIST[@]}"; do
246
find "$FILEPATH" -type f -exec sed -i'' \
247
-e 's/%BG%/#'"$BG"'/g' \
248
-e 's/%BG2%/#'"$(darker $BG)"'/g' \
249
-e 's/%FG%/#'"$FG"'/g' \
250
-e 's/%ACCENT_BG%/#'"$ACCENT_BG"'/g' \
251
-e 's/%SEL_BG%/#'"$SEL_BG"'/g' \
252
-e 's/%SEL_BG2%/#'"$(darker $SEL_BG -20)"'/g' \
253
-e 's/%SEL_FG%/#'"$SEL_FG"'/g' \
254
-e 's/%TXT_BG%/#'"$TXT_BG"'/g' \
255
-e 's/%TXT_FG%/#'"$TXT_FG"'/g' \
256
-e 's/%HDR_BG%/#'"$HDR_BG"'/g' \
257
-e 's/%HDR_BG2%/#'"$(darker $HDR_BG 10)"'/g' \
258
-e 's/%HDR_BG3%/#'"$(darker $HDR_BG 20)"'/g' \
259
-e 's/%HDR_FG%/#'"$HDR_FG"'/g' \
260
-e 's/%BTN_BG%/#'"$BTN_BG"'/g' \
261
-e 's/%BTN_FG%/#'"$BTN_FG"'/g' \
262
-e 's/%HDR_BTN_BG%/#'"$HDR_BTN_BG"'/g' \
263
-e 's/%HDR_BTN_FG%/#'"$HDR_BTN_FG"'/g' \
264
-e 's/%WM_BORDER_FOCUS%/#'"$WM_BORDER_FOCUS"'/g' \
265
-e 's/%WM_BORDER_UNFOCUS%/#'"$WM_BORDER_UNFOCUS"'/g' \
266
-e 's/%SPACING%/'"$SPACING"'/g' \
267
-e 's/%INACTIVE_FG%/#'"$INACTIVE_FG"'/g' \
268
-e 's/%INACTIVE_TXT_FG%/#'"$INACTIVE_TXT_FG"'/g' \
269
-e 's/%INACTIVE_TXT_BG%/#'"$INACTIVE_TXT_BG"'/g' \
270
-e 's/%INACTIVE_HDR_FG%/#'"$INACTIVE_HDR_FG"'/g' \
271
-e 's/%INACTIVE_HDR_BG%/#'"$INACTIVE_HDR_BG"'/g' \
272
-e 's/%TERMINAL_COLOR4%/#'"$TERMINAL_COLOR4"'/g' \
273
-e 's/%TERMINAL_COLOR5%/#'"$TERMINAL_COLOR5"'/g' \
274
-e 's/%TERMINAL_COLOR9%/#'"$TERMINAL_COLOR9"'/g' \
275
-e 's/%TERMINAL_COLOR10%/#'"$TERMINAL_COLOR10"'/g' \
276
-e 's/%TERMINAL_COLOR11%/#'"$TERMINAL_COLOR11"'/g' \
277
-e 's/%TERMINAL_COLOR12%/#'"$TERMINAL_COLOR12"'/g' \
278
-e 's/%MATERIA_SELECTION_OPACITY%/'"$MATERIA_SELECTION_OPACITY"'/g' \
279
-e 's/%GNOME_SHELL_PANEL_OPACITY%/'"$GNOME_SHELL_PANEL_OPACITY"'/g' \
280
-e 's/%OUTPUT_THEME_NAME%/'"$OUTPUT_THEME_NAME"'/g' \
281
{} \; ;
282
done
283
284
if [[ "$MATERIA_COLOR_VARIANT" == "standard" ]]; then
285
COLOR_VARIANTS=","
286
COLOR_VARIANT="standard"
287
fi
288
if [[ "$MATERIA_COLOR_VARIANT" == "light" ]]; then
289
COLOR_VARIANTS="-light"
290
COLOR_VARIANT="light"
291
fi
292
if [[ "$MATERIA_COLOR_VARIANT" == "dark" ]]; then
293
COLOR_VARIANTS="-dark"
294
COLOR_VARIANT="dark"
295
fi
296
if [[ "$OPTION_GTK2_HIDPI" == "true" ]]; then
297
mv ./src/gtk-2.0/main.rc.hidpi ./src/gtk-2.0/main.rc
298
fi
299
if [[ "$EXPORT_QT5CT" = 1 ]]; then
300
config_home=${XDG_CONFIG_HOME:-"$HOME/.config"}
301
qt5ct_colors_dir="$config_home/qt5ct/colors/"
302
test -d "$qt5ct_colors_dir" || mkdir -p "$qt5ct_colors_dir"
303
mv ./src/qt5ct_palette.conf "$qt5ct_colors_dir/$OUTPUT_THEME_NAME.conf"
304
fi
305
if [[ "$UNITY_DEFAULT_LAUNCHER_STYLE" == "true" ]]; then
306
rm ./src/unity/launcher*.svg
307
fi
308
309
if [[ "$MATERIA_STYLE_COMPACT" == "true" ]]; then
310
SIZE_VARIANTS="-compact"
311
SIZE_VARIANT="compact"
312
else
313
SIZE_VARIANTS=","
314
SIZE_VARIANT="standard"
315
fi
316
317
SIZE_VARIANTS="$SIZE_VARIANTS" COLOR_VARIANTS="$COLOR_VARIANTS" THEME_DIR_BASE="$DEST_PATH" ./parse-sass.sh
318
319
# NOTE we use the functions we already have in render-assets.sh
320
echo "== Rendering GTK+2 assets..."
321
if [[ "$MATERIA_COLOR_VARIANT" != "dark" ]]; then
322
GTK2_HIDPI="$OPTION_GTK2_HIDPI" ./render-assets.sh gtk2-light
323
else
324
GTK2_HIDPI="$OPTION_GTK2_HIDPI" ./render-assets.sh gtk2-dark
325
fi
326
327
echo "== Rendering GTK+3 assets..."
328
./render-assets.sh gtk
329
330
./install.sh --dest "$HOME/.themes" --name "${OUTPUT_THEME_NAME/\//-}" --color "$COLOR_VARIANT" --size "$SIZE_VARIANT"
331
332
GENERATED_PATH="$DEST_PATH$(tr -d ',' <<< "$COLOR_VARIANTS")$(tr -d ',' <<< "$SIZE_VARIANTS")"
333
if [[ "$GENERATED_PATH" != "$DEST_PATH" ]]; then
334
if [[ -d "$DEST_PATH" ]]; then
335
rm -r "$DEST_PATH"
336
fi
337
mv "$GENERATED_PATH" "$DEST_PATH"
338
fi
339
340
echo
341
echo "== SUCCESS"
342
echo "== The theme was installed to '$DEST_PATH'"
343
exit 0
344