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.46 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/_colors.scss'
72
'./src/chrome'
73
'./src/cinnamon'
74
'./src/cinnamon/assets'
75
'./src/gnome-shell'
76
'./src/gtk/assets.svg'
77
'./src/gtk-2.0/assets.svg'
78
'./src/gtk-2.0/assets-dark.svg'
79
'./src/gtk-2.0/gtkrc'
80
'./src/gtk-2.0/gtkrc-dark'
81
'./src/gtk-2.0/gtkrc-light'
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 standard."
172
MATERIA_COLOR_VARIANT="standard"
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/#1a73e8/%SEL_BG%/g' \
189
-e 's/#000000/%FG%/g' \
190
-e 's/#212121/%FG%/g' \
191
-e 's/#f2f2f2/%BG%/g' \
192
-e 's/#ffffff/%MATERIA_SURFACE%/g' \
193
-e 's/#ffffff/%MATERIA_VIEW%/g' \
194
-e 's/#fafafa/%INACTIVE_MATERIA_VIEW%/g' \
195
-e 's/#383838/%HDR_BG%/g' \
196
-e 's/#303030/%HDR_BG2%/g' \
197
-e 's/#ffffff/%HDR_FG%/g' \
198
-e 's/#c1c1c1/%INACTIVE_FG%/g' \
199
-e 's/#e0e0e0/%HDR_BG%/g' \
200
-e 's/#d6d6d6/%HDR_BG2%/g' \
201
-e 's/#1d1d1d/%HDR_FG%/g' \
202
-e 's/#565656/%INACTIVE_FG%/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/#8ab4f8/%SEL_BG%/g' \
208
-e 's/#ffffff/%FG%/g' \
209
-e 's/#eeeeee/%FG%/g' \
210
-e 's/#181818/%BG%/g' \
211
-e 's/#343434/%MATERIA_SURFACE%/g' \
212
-e 's/#242424/%MATERIA_VIEW%/g' \
213
-e 's/#242424/%INACTIVE_MATERIA_VIEW%/g' \
214
-e 's/#2d2d2d/%HDR_BG%/g' \
215
-e 's/#242424/%HDR_BG2%/g' \
216
-e 's/#e4e4e4/%HDR_FG%/g' \
217
-e 's/#a7a7a7/%INACTIVE_FG%/g' \
218
-e 's/Materia/%OUTPUT_THEME_NAME%/g' \
219
{} \; ;
220
fi
221
done
222
223
#Not implemented yet:
224
#-e 's/%SPACING%/'"$SPACING"'/g' \
225
226
# shellcheck disable=SC2016
227
sed -i -e 's/^$corner-radius: .px/$corner-radius: '"$ROUNDNESS"'px/g' ./src/_variables.scss
228
229
if [[ "${DEBUG:-}" ]]; then
230
echo "You can debug TEMP DIR: $tempdir, press [Enter] when finished"; read -r
231
fi
232
233
mv ./src/_colors.scss.template ./src/_colors.scss
234
235
echo "== Filling the template with the new colorscheme..."
236
for FILEPATH in "${PATHLIST[@]}"; do
237
find "$FILEPATH" -type f -exec sed -i'' \
238
-e 's/%BG%/#'"$BG"'/g' \
239
-e 's/%BG2%/#'"$(darker $BG)"'/g' \
240
-e 's/%FG%/#'"$FG"'/g' \
241
-e 's/%SEL_BG%/#'"$SEL_BG"'/g' \
242
-e 's/%SEL_BG2%/#'"$(darker $SEL_BG -20)"'/g' \
243
-e 's/%MATERIA_VIEW%/#'"$MATERIA_VIEW"'/g' \
244
-e 's/%HDR_BG%/#'"$HDR_BG"'/g' \
245
-e 's/%HDR_BG2%/#'"$(darker $HDR_BG 10)"'/g' \
246
-e 's/%HDR_BG3%/#'"$(darker $HDR_BG 20)"'/g' \
247
-e 's/%HDR_FG%/#'"$HDR_FG"'/g' \
248
-e 's/%MATERIA_SURFACE%/#'"$MATERIA_SURFACE"'/g' \
249
-e 's/%SPACING%/'"$SPACING"'/g' \
250
-e 's/%INACTIVE_FG%/#'"$INACTIVE_FG"'/g' \
251
-e 's/%INACTIVE_MATERIA_VIEW%/#'"$INACTIVE_MATERIA_VIEW"'/g' \
252
-e 's/%TERMINAL_COLOR4%/#'"$TERMINAL_COLOR4"'/g' \
253
-e 's/%TERMINAL_COLOR5%/#'"$TERMINAL_COLOR5"'/g' \
254
-e 's/%TERMINAL_COLOR9%/#'"$TERMINAL_COLOR9"'/g' \
255
-e 's/%TERMINAL_COLOR10%/#'"$TERMINAL_COLOR10"'/g' \
256
-e 's/%TERMINAL_COLOR11%/#'"$TERMINAL_COLOR11"'/g' \
257
-e 's/%TERMINAL_COLOR12%/#'"$TERMINAL_COLOR12"'/g' \
258
-e 's/%MATERIA_SELECTION_OPACITY%/'"$MATERIA_SELECTION_OPACITY"'/g' \
259
-e 's/%MATERIA_PANEL_OPACITY%/'"$MATERIA_PANEL_OPACITY"'/g' \
260
-e 's/%OUTPUT_THEME_NAME%/'"$OUTPUT_THEME_NAME"'/g' \
261
{} \; ;
262
done
263
264
if [[ "$MATERIA_COLOR_VARIANT" == "standard" ]]; then
265
COLOR_VARIANTS=","
266
COLOR_VARIANT="standard"
267
fi
268
if [[ "$MATERIA_COLOR_VARIANT" == "light" ]]; then
269
COLOR_VARIANTS="-light"
270
COLOR_VARIANT="light"
271
fi
272
if [[ "$MATERIA_COLOR_VARIANT" == "dark" ]]; then
273
COLOR_VARIANTS="-dark"
274
COLOR_VARIANT="dark"
275
fi
276
if [[ "$OPTION_GTK2_HIDPI" == "true" ]]; then
277
mv ./src/gtk-2.0/main.rc.hidpi ./src/gtk-2.0/main.rc
278
fi
279
if [[ "$EXPORT_QT5CT" = 1 ]]; then
280
config_home=${XDG_CONFIG_HOME:-"$HOME/.config"}
281
qt5ct_colors_dir="$config_home/qt5ct/colors/"
282
test -d "$qt5ct_colors_dir" || mkdir -p "$qt5ct_colors_dir"
283
mv ./src/qt5ct_palette.conf "$qt5ct_colors_dir/$OUTPUT_THEME_NAME.conf"
284
fi
285
286
if [[ "$MATERIA_STYLE_COMPACT" == "true" ]]; then
287
SIZE_VARIANTS="-compact"
288
SIZE_VARIANT="compact"
289
else
290
SIZE_VARIANTS=","
291
SIZE_VARIANT="standard"
292
fi
293
294
# NOTE we use the functions we already have in render-assets.sh
295
echo "== Rendering GTK 2 assets..."
296
if [[ "$MATERIA_COLOR_VARIANT" != "dark" ]]; then
297
FORCE_INKSCAPE="$OPTION_FORCE_INKSCAPE" GTK2_HIDPI="$OPTION_GTK2_HIDPI" ./render-assets.sh gtk2-light
298
else
299
FORCE_INKSCAPE="$OPTION_FORCE_INKSCAPE" GTK2_HIDPI="$OPTION_GTK2_HIDPI" ./render-assets.sh gtk2-dark
300
fi
301
302
echo "== Rendering GTK 3 assets..."
303
FORCE_INKSCAPE="$OPTION_FORCE_INKSCAPE" ./render-assets.sh gtk
304
305
FORCE_INKSCAPE="$OPTION_FORCE_INKSCAPE" ./install.sh --dest "$TARGET_DIR" --name "${OUTPUT_THEME_NAME/\//-}" --color "$COLOR_VARIANT" --size "$SIZE_VARIANT"
306
307
GENERATED_PATH="$DEST_PATH$(tr -d ',' <<< "$COLOR_VARIANTS")$(tr -d ',' <<< "$SIZE_VARIANTS")"
308
if [[ "$GENERATED_PATH" != "$DEST_PATH" ]]; then
309
if [[ -d "$DEST_PATH" ]]; then
310
rm -r "$DEST_PATH"
311
fi
312
mv "$GENERATED_PATH" "$DEST_PATH"
313
fi
314
315
echo
316
echo "== SUCCESS"
317
echo "== The theme was installed to '$DEST_PATH'"
318
exit 0
319