A fork of the Materia GTK theme.

By using this site, you agree to have cookies stored on your device, strictly for functional purposes, such as storing your session and preferences.

Dismiss

 change_color.sh

View raw Download
text/x-shellscript • 9.33 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 [-t TARGET_DIR] [-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\\nMATERIA_VIEW=ffffff\\nMATERIA_SURFACE=f5f5f5\\nMATERIA_STYLE_COMPACT=True\\n\")"
26
echo " $0 -t ~/.themes ../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
-t|--target)
39
TARGET_DIR="$2"
40
shift
41
;;
42
-o|--output)
43
OUTPUT_THEME_NAME="$2"
44
shift
45
;;
46
-d|--hidpi)
47
OPTION_GTK2_HIDPI="$2"
48
shift
49
;;
50
-i|--inkscape)
51
OPTION_FORCE_INKSCAPE="$2"
52
shift
53
;;
54
*)
55
if [[ "$1" == -* ]] || [[ "${THEME-}" ]]; then
56
echo "unknown option $1"
57
print_usage
58
exit 2
59
fi
60
THEME="$1"
61
;;
62
esac
63
shift
64
done
65
66
if [[ -z "${THEME:-}" ]]; then
67
print_usage
68
fi
69
70
PATHLIST=(
71
'./src/_theme-color.scss'
72
'./src/chrome'
73
'./src/cinnamon'
74
'./src/cinnamon/assets'
75
'./src/gnome-shell'
76
'./src/gtk-2.0/assets.svg'
77
'./src/gtk-2.0/assets-dark.svg'
78
'./src/gtk-2.0/gtkrc'
79
'./src/gtk-2.0/gtkrc-dark'
80
'./src/gtk-2.0/gtkrc-light'
81
'./src/gtk-3.0/assets.svg'
82
'./src/metacity-1'
83
'./src/unity'
84
'./src/xfwm4'
85
)
86
if [[ -n "${CUSTOM_PATHLIST:-}" ]]; then
87
IFS=', ' read -r -a PATHLIST <<< "${CUSTOM_PATHLIST:-}"
88
fi
89
90
EXPORT_QT5CT=0
91
for FILEPATH in "${PATHLIST[@]}"; do
92
if [[ "$FILEPATH" == *qt5ct* ]]; then
93
EXPORT_QT5CT=1
94
fi
95
done
96
97
OPTION_GTK2_HIDPI=$(tr '[:upper:]' '[:lower:]' <<< "${OPTION_GTK2_HIDPI-False}")
98
OPTION_FORCE_INKSCAPE=$(tr '[:upper:]' '[:lower:]' <<< "${OPTION_FORCE_INKSCAPE-True}")
99
100
101
if [[ "$THEME" == */* ]] || [[ "$THEME" == *.* ]]; then
102
source "$THEME"
103
THEME=$(basename "$THEME")
104
else
105
if [[ -f "$SRC_PATH/../colors/$THEME" ]]; then
106
source "$SRC_PATH/../colors/$THEME"
107
else
108
echo "Theme '$THEME' not found"
109
exit 1
110
fi
111
fi
112
if [[ $(date +"%m%d") = "0401" ]] && grep -q "no-jokes" <<< "$*"; then
113
echo -e "\\n\\nError patching uxtheme.dll\\n\\n"
114
BG=C0C0C0 MATERIA_SURFACE=C0C0C0 FG=000000 MATERIA_PANEL_OPACITY=1
115
HDR_BG=C0C0C0 HDR_FG=000000 SEL_BG=000080 MATERIA_VIEW=FFFFFF
116
fi
117
118
# Migration:
119
HDR_BG=${HDR_BG-$MENU_BG}
120
HDR_FG=${HDR_FG-$MENU_FG}
121
MATERIA_VIEW=${MATERIA_VIEW-$TXT_BG}
122
MATERIA_SURFACE=${MATERIA_SURFACE-$BTN_BG}
123
GNOME_SHELL_PANEL_OPACITY=${GNOME_SHELL_PANEL_OPACITY-0.6}
124
MATERIA_PANEL_OPACITY=${MATERIA_PANEL_OPACITY-$GNOME_SHELL_PANEL_OPACITY}
125
126
MATERIA_STYLE_COMPACT=$(tr '[:upper:]' '[:lower:]' <<< "${MATERIA_STYLE_COMPACT-False}")
127
MATERIA_COLOR_VARIANT=$(tr '[:upper:]' '[:lower:]' <<< "${MATERIA_COLOR_VARIANT:-}")
128
129
SPACING=${SPACING-3}
130
ROUNDNESS=${ROUNDNESS-4}
131
# shellcheck disable=SC2034 # will this be used in the future?
132
ROUNDNESS_GTK2_HIDPI=$(( ROUNDNESS * 2 ))
133
MATERIA_PANEL_OPACITY=${MATERIA_PANEL_OPACITY-0.6}
134
MATERIA_SELECTION_OPACITY=${MATERIA_SELECTION_OPACITY-0.32}
135
136
INACTIVE_FG=$(mix "$FG" "$BG" 0.75)
137
INACTIVE_MATERIA_VIEW=$(mix "$MATERIA_VIEW" "$BG" 0.60)
138
139
TERMINAL_COLOR4=${TERMINAL_COLOR4:-1E88E5}
140
TERMINAL_COLOR5=${TERMINAL_COLOR5:-E040FB}
141
TERMINAL_COLOR9=${TERMINAL_COLOR9:-DD2C00}
142
TERMINAL_COLOR10=${TERMINAL_COLOR10:-00C853}
143
TERMINAL_COLOR11=${TERMINAL_COLOR11:-FF6D00}
144
TERMINAL_COLOR12=${TERMINAL_COLOR12:-66BB6A}
145
146
TARGET_DIR=${TARGET_DIR-$HOME/.themes}
147
OUTPUT_THEME_NAME=${OUTPUT_THEME_NAME-oomox-$THEME}
148
DEST_PATH="$TARGET_DIR/${OUTPUT_THEME_NAME/\//-}"
149
150
if [[ "$SRC_PATH" == "$DEST_PATH" ]]; then
151
echo "can't do that"
152
exit 1
153
fi
154
155
156
tempdir=$(mktemp -d)
157
post_clean_up() {
158
rm -r "$tempdir" || :
159
}
160
trap post_clean_up EXIT SIGHUP SIGINT SIGTERM
161
cp -r "$SRC_PATH/"* "$tempdir/"
162
cd "$tempdir"
163
164
165
# autodetection which color variant to use
166
if [[ -z "$MATERIA_COLOR_VARIANT" ]]; then
167
if is_dark "$BG"; then
168
echo "== Dark background color detected. Setting color variant to dark."
169
MATERIA_COLOR_VARIANT="dark"
170
elif is_dark "$HDR_BG"; then
171
echo "== Dark headerbar background color detected. Setting color variant to default."
172
MATERIA_COLOR_VARIANT="default"
173
else
174
echo "== Light background color detected. Setting color variant to light."
175
MATERIA_COLOR_VARIANT="light"
176
fi
177
fi
178
179
180
echo "== Converting theme into template..."
181
182
for FILEPATH in "${PATHLIST[@]}"; do
183
if [[ "$MATERIA_COLOR_VARIANT" != "dark" ]]; then
184
find "$FILEPATH" -type f -not -name '_color-palette.scss' -exec sed -i'' \
185
-e '/color-surface/{n;s/#ffffff/%MATERIA_SURFACE%/g}' \
186
-e '/color-base/{n;s/#ffffff/%MATERIA_VIEW%/g}' \
187
-e 's/#8ab4f8/%SEL_BG%/g' \
188
-e 's/#1967d2/%SEL_BG%/g' \
189
-e 's/#000000/%FG%/g' \
190
-e 's/#212121/%FG%/g' \
191
-e 's/#f9f9f9/%BG%/g' \
192
-e 's/#ffffff/%MATERIA_SURFACE%/g' \
193
-e 's/#ffffff/%MATERIA_VIEW%/g' \
194
-e 's/#424242/%HDR_BG%/g' \
195
-e 's/#303030/%HDR_BG2%/g' \
196
-e 's/#ffffff/%HDR_FG%/g' \
197
-e 's/#c1c1c1/%INACTIVE_FG%/g' \
198
-e 's/#f0f0f0/%HDR_BG%/g' \
199
-e 's/#ebebeb/%HDR_BG2%/g' \
200
-e 's/#1d1d1d/%HDR_FG%/g' \
201
-e 's/#565656/%INACTIVE_FG%/g' \
202
-e 's/Materia/%OUTPUT_THEME_NAME%/g' \
203
{} \; ;
204
else
205
find "$FILEPATH" -type f -not -name '_color-palette.scss' -exec sed -i'' \
206
-e 's/#8ab4f8/%SEL_BG%/g' \
207
-e 's/#ffffff/%FG%/g' \
208
-e 's/#eeeeee/%FG%/g' \
209
-e 's/#121212/%BG%/g' \
210
-e 's/#2e2e2e/%MATERIA_SURFACE%/g' \
211
-e 's/#1e1e1e/%MATERIA_VIEW%/g' \
212
-e 's/#272727/%HDR_BG%/g' \
213
-e 's/#1e1e1e/%HDR_BG2%/g' \
214
-e 's/#e4e4e4/%HDR_FG%/g' \
215
-e 's/#a7a7a7/%INACTIVE_FG%/g' \
216
-e 's/Materia/%OUTPUT_THEME_NAME%/g' \
217
{} \; ;
218
fi
219
done
220
221
#Not implemented yet:
222
#-e 's/%SPACING%/'"$SPACING"'/g' \
223
224
# shellcheck disable=SC2016
225
sed -i -e 's/^$corner-radius: .px/$corner-radius: '"$ROUNDNESS"'px/g' ./src/_theme.scss
226
227
if [[ "${DEBUG:-}" ]]; then
228
echo "You can debug TEMP DIR: $tempdir, press [Enter] when finished"; read -r
229
fi
230
231
mv ./src/_theme-color.template.scss ./src/_theme-color.scss
232
233
echo "== Filling the template with the new colorscheme..."
234
for FILEPATH in "${PATHLIST[@]}"; do
235
find "$FILEPATH" -type f -exec sed -i'' \
236
-e 's/%BG%/#'"$BG"'/g' \
237
-e 's/%BG2%/#'"$(darker $BG)"'/g' \
238
-e 's/%FG%/#'"$FG"'/g' \
239
-e 's/%SEL_BG%/#'"$SEL_BG"'/g' \
240
-e 's/%SEL_BG2%/#'"$(darker $SEL_BG -20)"'/g' \
241
-e 's/%MATERIA_VIEW%/#'"$MATERIA_VIEW"'/g' \
242
-e 's/%HDR_BG%/#'"$HDR_BG"'/g' \
243
-e 's/%HDR_BG2%/#'"$(darker $HDR_BG 10)"'/g' \
244
-e 's/%HDR_BG3%/#'"$(darker $HDR_BG 20)"'/g' \
245
-e 's/%HDR_FG%/#'"$HDR_FG"'/g' \
246
-e 's/%MATERIA_SURFACE%/#'"$MATERIA_SURFACE"'/g' \
247
-e 's/%SPACING%/'"$SPACING"'/g' \
248
-e 's/%INACTIVE_FG%/#'"$INACTIVE_FG"'/g' \
249
-e 's/%INACTIVE_MATERIA_VIEW%/#'"$INACTIVE_MATERIA_VIEW"'/g' \
250
-e 's/%TERMINAL_COLOR4%/#'"$TERMINAL_COLOR4"'/g' \
251
-e 's/%TERMINAL_COLOR5%/#'"$TERMINAL_COLOR5"'/g' \
252
-e 's/%TERMINAL_COLOR9%/#'"$TERMINAL_COLOR9"'/g' \
253
-e 's/%TERMINAL_COLOR10%/#'"$TERMINAL_COLOR10"'/g' \
254
-e 's/%TERMINAL_COLOR11%/#'"$TERMINAL_COLOR11"'/g' \
255
-e 's/%TERMINAL_COLOR12%/#'"$TERMINAL_COLOR12"'/g' \
256
-e 's/%MATERIA_SELECTION_OPACITY%/'"$MATERIA_SELECTION_OPACITY"'/g' \
257
-e 's/%MATERIA_PANEL_OPACITY%/'"$MATERIA_PANEL_OPACITY"'/g' \
258
-e 's/%OUTPUT_THEME_NAME%/'"$OUTPUT_THEME_NAME"'/g' \
259
{} \; ;
260
done
261
262
if [[ "$MATERIA_COLOR_VARIANT" == "default" ]]; then
263
COLOR_VARIANT="default"
264
COLOR_SUFFIX=""
265
fi
266
if [[ "$MATERIA_COLOR_VARIANT" == "light" ]]; then
267
COLOR_VARIANT="light"
268
COLOR_SUFFIX="-light"
269
fi
270
if [[ "$MATERIA_COLOR_VARIANT" == "dark" ]]; then
271
COLOR_VARIANT="dark"
272
COLOR_SUFFIX="-dark"
273
fi
274
if [[ "$OPTION_GTK2_HIDPI" == "true" ]]; then
275
mv ./src/gtk-2.0/main.rc.hidpi ./src/gtk-2.0/main.rc
276
fi
277
if [[ "$EXPORT_QT5CT" = 1 ]]; then
278
config_home=${XDG_CONFIG_HOME:-"$HOME/.config"}
279
qt5ct_colors_dir="$config_home/qt5ct/colors/"
280
test -d "$qt5ct_colors_dir" || mkdir -p "$qt5ct_colors_dir"
281
mv ./src/qt5ct_palette.conf "$qt5ct_colors_dir/$OUTPUT_THEME_NAME.conf"
282
fi
283
284
if [[ "$MATERIA_STYLE_COMPACT" == "true" ]]; then
285
SIZE_VARIANT="compact"
286
SIZE_SUFFIX="-compact"
287
else
288
SIZE_VARIANT="default"
289
SIZE_SUFFIX=""
290
fi
291
292
# NOTE we use the functions we already have in render-assets.sh
293
echo "== Rendering GTK 2 assets..."
294
if [[ "$MATERIA_COLOR_VARIANT" != "dark" ]]; then
295
FORCE_INKSCAPE="$OPTION_FORCE_INKSCAPE" GTK2_HIDPI="$OPTION_GTK2_HIDPI" ./render-assets.sh gtk2-light
296
else
297
FORCE_INKSCAPE="$OPTION_FORCE_INKSCAPE" GTK2_HIDPI="$OPTION_GTK2_HIDPI" ./render-assets.sh gtk2-dark
298
fi
299
300
echo "== Rendering GTK 3 assets..."
301
FORCE_INKSCAPE="$OPTION_FORCE_INKSCAPE" ./render-assets.sh gtk
302
303
meson _build -Dprefix="$tempdir" -Dcolors="$COLOR_VARIANT" -Dsizes="$SIZE_VARIANT"
304
meson install -C _build
305
GENERATED_PATH="$tempdir/share/themes/Materia$COLOR_SUFFIX$SIZE_SUFFIX"
306
if [[ -d "$DEST_PATH" ]]; then
307
rm -r "$DEST_PATH"
308
elif [[ ! -d "$(dirname "$DEST_PATH")" ]]; then
309
mkdir -p "$(readlink -f "$(dirname "$DEST_PATH")")"
310
fi
311
mv "$GENERATED_PATH" "$DEST_PATH"
312
313
314
echo
315
echo "== SUCCESS"
316
echo "== The theme was installed to '$DEST_PATH'"
317
exit 0
318