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