change_color.sh
Bourne-Again shell script, ASCII text executable
1
#!/usr/bin/env bash
2
#set -x
3
set -ue
4
SRC_PATH=$(readlink -f $(dirname $0))
5
6
darker () {
7
"${SRC_PATH}/scripts/darker.sh" $@
8
}
9
mix () {
10
"${SRC_PATH}/scripts/mix.sh" $@
11
}
12
13
14
print_usage() {
15
echo "usage: $0 [-o OUTPUT_THEME_NAME] [-p PATH_LIST] PATH_TO_PRESET"
16
echo "examples:"
17
echo " $0 -o my-theme-name <(echo -e "BG=d8d8d8\\nFG=101010\\nMENU_BG=3c3c3c\\nMENU_FG=e6e6e6\\nSEL_BG=ad7fa8\\nSEL_FG=ffffff\\nTXT_BG=ffffff\\nTXT_FG=1a1a1a\\nBTN_BG=f5f5f5\\nBTN_FG=111111\\n")"
18
echo " $0 ../colors/retro/twg"
19
echo " $0 --hidpi True ../colors/retro/clearlooks"
20
exit 1
21
}
22
23
24
while [[ $# > 0 ]]
25
do
26
case ${1} in
27
-p|--path-list)
28
CUSTOM_PATHLIST="${2}"
29
shift
30
;;
31
-o|--output)
32
OUTPUT_THEME_NAME="${2}"
33
shift
34
;;
35
-d|--hidpi)
36
OPTION_GTK2_HIDPI="${2}"
37
shift
38
;;
39
*)
40
if [[ "${1}" == -* ]] || [[ ${THEME-} ]]; then
41
echo "unknown option ${1}"
42
print_usage
43
exit 2
44
fi
45
THEME="${1}"
46
;;
47
esac
48
shift
49
done
50
51
if [[ -z "${THEME:-}" ]] ; then
52
print_usage
53
fi
54
55
PATHLIST=(
56
'./src/chrome'
57
'./src/gnome-shell'
58
'./src/gtk-2.0/gtkrc'
59
'./src/gtk-2.0/gtkrc-dark'
60
'./src/gtk-2.0/gtkrc-light'
61
'./src/_sass/_colors.scss'
62
'./src/gtk-2.0/assets.svg'
63
'./src/gtk-2.0/assets-dark.svg'
64
'./src/gtk/assets.svg'
65
'./src/metacity-1'
66
'./src/unity'
67
'./src/xfwm4'
68
)
69
if [ ! -z "${CUSTOM_PATHLIST:-}" ] ; then
70
IFS=', ' read -r -a PATHLIST <<< "${CUSTOM_PATHLIST:-}"
71
fi
72
73
EXPORT_QT5CT=0
74
for FILEPATH in "${PATHLIST[@]}"; do
75
if [[ ${FILEPATH} == *qt5ct* ]] ;then
76
EXPORT_QT5CT=1
77
fi
78
done
79
80
OPTION_GTK2_HIDPI=$(echo ${OPTION_GTK2_HIDPI-False} | tr '[:upper:]' '[:lower:]')
81
82
83
if [[ ${THEME} == */* ]] || [[ ${THEME} == *.* ]] ; then
84
source "$THEME"
85
THEME=$(basename ${THEME})
86
else
87
if [[ -f "$SRC_PATH/../colors/$THEME" ]] ; then
88
source "$SRC_PATH/../colors/$THEME"
89
else
90
echo "Theme '${THEME}' not found"
91
exit 1
92
fi
93
fi
94
ACCENT_BG=${ACCENT_BG-$SEL_BG}
95
HDR_BTN_BG=${HDR_BTN_BG-$BTN_BG}
96
HDR_BTN_FG=${HDR_BTN_FG-$BTN_FG}
97
WM_BORDER_FOCUS=${WM_BORDER_FOCUS-$SEL_BG}
98
WM_BORDER_UNFOCUS=${WM_BORDER_UNFOCUS-$MENU_BG}
99
100
MATERIA_STYLE_COMPACT=$(echo ${MATERIA_STYLE_COMPACT-True} | tr '[:upper:]' '[:lower:]')
101
MATERIA_MENUBAR_STYLE=$(echo ${MATERIA_MENUBAR_STYLE-same} | tr '[:upper:]' '[:lower:]')
102
GTK3_GENERATE_DARK=$(echo ${GTK3_GENERATE_DARK-True} | tr '[:upper:]' '[:lower:]')
103
UNITY_DEFAULT_LAUNCHER_STYLE=$(echo ${UNITY_DEFAULT_LAUNCHER_STYLE-False} | tr '[:upper:]' '[:lower:]')
104
105
SPACING=${SPACING-3}
106
GRADIENT=${GRADIENT-0}
107
ROUNDNESS=${ROUNDNESS-2}
108
ROUNDNESS_GTK2_HIDPI=$(( ${ROUNDNESS} * 2 ))
109
GNOME_SHELL_PANEL_OPACITY=${GNOME_SHELL_PANEL_OPACITY-0.6}
110
111
INACTIVE_FG=$(mix ${FG} ${BG} 0.75)
112
INACTIVE_MENU_FG=$(mix ${MENU_FG} ${MENU_BG} 0.75)
113
INACTIVE_MENU_BG=$(mix ${MENU_BG} ${MENU_FG} 0.75)
114
INACTIVE_TXT_FG=$(mix ${TXT_FG} ${TXT_BG} 0.75)
115
INACTIVE_TXT_BG=$(mix ${TXT_BG} ${BG} 0.60)
116
117
light_folder_base_fallback="$(darker ${SEL_BG} -10)"
118
medium_base_fallback="$(darker ${SEL_BG} 37)"
119
dark_stroke_fallback="$(darker ${SEL_BG} 50)"
120
121
OUTPUT_THEME_NAME="${OUTPUT_THEME_NAME-oomox-$THEME}"
122
DEST_PATH="$HOME/.themes/${OUTPUT_THEME_NAME/\//-}"
123
124
test "$SRC_PATH" = "$DEST_PATH" && echo "can't do that" && exit 1
125
126
127
tempdir=$(mktemp -d)
128
function post_clean_up {
129
rm -r "${tempdir}" || true
130
}
131
trap post_clean_up EXIT SIGHUP SIGINT SIGTERM
132
cp -r ${SRC_PATH}/* ${tempdir}/
133
cd ${tempdir}
134
135
136
echo "== Converting theme into template..."
137
138
for FILEPATH in "${PATHLIST[@]}"; do
139
find "${FILEPATH}" -type f -not -name '_color-palette.scss' -exec sed -i'' \
140
-e 's/#000000/%FG%/g' \
141
-e 's/#212121/%FG%/g' \
142
-e 's/#757575/%INACTIVE_FG%/g' \
143
-e 's/#BDBDBD/%INACTIVE_FG%/g' \
144
-e 's/#EEEEEE/%BG%/g' \
145
-e 's/#FAFAFA/%BTN_BG%/g' \
146
-e 's/#009688/%ACCENT_BG%/g' \
147
-e 's/#338DD6/%SEL_BG%/g' \
148
-e 's/#FFFFFF/%TXT_BG%/g' \
149
-e 's/#303030/%MENU_BG%/g' \
150
-e 's/#E0E0E0/%MENU_BG%/g' \
151
-e 's/#212121/%MENU_BG2%/g' \
152
-e 's/#303030/%MENU_BG3%/g' \
153
-e 's/Materia/%OUTPUT_THEME_NAME%/g' \
154
{} \; ;
155
done
156
157
#Not implemented yet:
158
#-e 's/%HDR_BTN_BG%/'"$HDR_BTN_BG"'/g' \
159
#-e 's/%HDR_BTN_FG%/'"$HDR_BTN_FG"'/g' \
160
#-e 's/%WM_BORDER_FOCUS%/'"$WM_BORDER_FOCUS"'/g' \
161
#-e 's/%WM_BORDER_UNFOCUS%/'"$WM_BORDER_UNFOCUS"'/g' \
162
#-e 's/%ROUNDNESS%/'"$ROUNDNESS"'/g' \
163
#-e 's/%SPACING%/'"$SPACING"'/g' \
164
#-e 's/%INACTIVE_FG%/'"$INACTIVE_FG"'/g' \
165
#-e 's/%INACTIVE_TXT_FG%/'"$INACTIVE_TXT_FG"'/g' \
166
#-e 's/%INACTIVE_MENU_FG%/'"$INACTIVE_MENU_FG"'/g' \
167
168
if [[ ! -z "${DEBUG:-}" ]] ; then
169
echo "You can debug TEMP DIR: ${tempdir}, press [Enter] when finish" && read
170
fi
171
172
mv ./src/_sass/_colors.scss.template ./src/_sass/_colors.scss
173
174
echo "== Filling the template with the new colorscheme..."
175
for FILEPATH in "${PATHLIST[@]}"; do
176
find "${FILEPATH}" -type f -exec sed -i'' \
177
-e 's/%BG%/#'"$BG"'/g' \
178
-e 's/%BG2%/#'"$(darker $BG)"'/g' \
179
-e 's/%FG%/#'"$FG"'/g' \
180
-e 's/%ACCENT_BG%/#'"$ACCENT_BG"'/g' \
181
-e 's/%SEL_BG%/#'"$SEL_BG"'/g' \
182
-e 's/%SEL_BG2%/#'"$(darker $SEL_BG -20)"'/g' \
183
-e 's/%SEL_FG%/#'"$SEL_FG"'/g' \
184
-e 's/%TXT_BG%/#'"$TXT_BG"'/g' \
185
-e 's/%TXT_FG%/#'"$TXT_FG"'/g' \
186
-e 's/%MENU_BG%/#'"$MENU_BG"'/g' \
187
-e 's/%MENU_BG2%/#'"$(darker $MENU_BG 10)"'/g' \
188
-e 's/%MENU_BG3%/#'"$(darker $MENU_BG 20)"'/g' \
189
-e 's/%MENU_FG%/#'"$MENU_FG"'/g' \
190
-e 's/%BTN_BG%/#'"$BTN_BG"'/g' \
191
-e 's/%BTN_FG%/#'"$BTN_FG"'/g' \
192
-e 's/%HDR_BTN_BG%/#'"$HDR_BTN_BG"'/g' \
193
-e 's/%HDR_BTN_FG%/#'"$HDR_BTN_FG"'/g' \
194
-e 's/%WM_BORDER_FOCUS%/#'"$WM_BORDER_FOCUS"'/g' \
195
-e 's/%WM_BORDER_UNFOCUS%/#'"$WM_BORDER_UNFOCUS"'/g' \
196
-e 's/%ROUNDNESS%/'"$ROUNDNESS"'/g' \
197
-e 's/%SPACING%/'"$SPACING"'/g' \
198
-e 's/%INACTIVE_FG%/#'"$INACTIVE_FG"'/g' \
199
-e 's/%INACTIVE_TXT_FG%/#'"$INACTIVE_TXT_FG"'/g' \
200
-e 's/%INACTIVE_TXT_BG%/#'"$INACTIVE_TXT_BG"'/g' \
201
-e 's/%INACTIVE_MENU_FG%/#'"$INACTIVE_MENU_FG"'/g' \
202
-e 's/%INACTIVE_MENU_BG%/#'"$INACTIVE_MENU_BG"'/g' \
203
-e 's/%GNOME_SHELL_PANEL_OPACITY%/'"$GNOME_SHELL_PANEL_OPACITY"'/g' \
204
-e 's/%OUTPUT_THEME_NAME%/'"$OUTPUT_THEME_NAME"'/g' \
205
{} \; ;
206
done
207
208
rm ./src/gtk/3.{18,20,22}/*.css
209
if [[ ${MATERIA_MENUBAR_STYLE} == "contrast" ]] ; then
210
rm ./src/gtk/3.{18,20,22}/gtk-light*.scss
211
else
212
rm ./src/gtk/3.{18,20,22}/gtk{,-compact}.scss || true
213
fi
214
if [[ ${GTK3_GENERATE_DARK} != "true" ]] ; then
215
grep -v "\-dark" ./src/gtk/assets.txt > ./new_assets.txt
216
mv ./new_assets.txt ./src/gtk/assets.txt
217
rm ./src/gtk/3.{20,22}/gtk-dark-compact.scss
218
rm ./src/gtk/3.{18,20,22}/gtk-dark.scss
219
fi
220
if [[ ${OPTION_GTK2_HIDPI} == "true" ]] ; then
221
mv ./src/gtk-2.0/main.rc.hidpi ./src/gtk-2.0/main.rc
222
fi
223
if [[ ${EXPORT_QT5CT} = 1 ]] ; then
224
config_home=${XDG_CONFIG_HOME:-}
225
if [[ -z "${config_home}" ]] ; then
226
config_home="${HOME}/.config"
227
fi
228
qt5ct_colors_dir="${config_home}/qt5ct/colors/"
229
test -d ${qt5ct_colors_dir} || mkdir -p ${qt5ct_colors_dir}
230
mv ./src/qt5ct_palette.conf "${qt5ct_colors_dir}/${OUTPUT_THEME_NAME}.conf"
231
fi
232
if [[ ${UNITY_DEFAULT_LAUNCHER_STYLE} == "true" ]] ; then
233
rm ./src/unity/launcher*.svg
234
fi
235
236
if [[ ${MATERIA_STYLE_COMPACT} == "true" ]] ; then
237
SIZE_VARIANTS="-compact"
238
SIZE_VARIANT="compact"
239
else
240
SIZE_VARIANTS=","
241
SIZE_VARIANT="standard"
242
fi
243
if [[ ${MATERIA_MENUBAR_STYLE} == "contrast" ]] ; then
244
COLOR_VARIANTS=","
245
COLOR_VARIANT="standard"
246
else
247
COLOR_VARIANTS="-light"
248
COLOR_VARIANT="light"
249
fi
250
251
SIZE_VARIANTS="${SIZE_VARIANTS}" COLOR_VARIANTS="${COLOR_VARIANTS}" THEME_DIR_BASE=${DEST_PATH} ./parse-sass.sh
252
253
rm ./src/gtk-2.0/assets/*.png || true
254
rm ./src/gtk-2.0/assets-dark/*.png || true
255
rm ./src/gtk/assets/*.png || true
256
257
echo "== Rendering GTK+2 assets..."
258
cd ./src/gtk-2.0
259
GTK2_HIDPI=${OPTION_GTK2_HIDPI} ./render-assets.sh
260
cd ../../
261
262
echo "== Rendering GTK+3 assets..."
263
cd ./src/gtk
264
./render-assets.sh
265
cd ../../
266
267
./install.sh --dest "$HOME/.themes" --name "${OUTPUT_THEME_NAME/\//-}" --color "${COLOR_VARIANT}" --size "${SIZE_VARIANT}"
268
269
GENERATED_PATH="${DEST_PATH}$(tr -d ',' <<<${COLOR_VARIANTS})$(tr -d ',' <<<${SIZE_VARIANTS})"
270
if [[ ! "${GENERATED_PATH}" = "${DEST_PATH}" ]] ; then
271
if [[ -d "${DEST_PATH}" ]] ; then
272
rm -r "${DEST_PATH}"
273
fi
274
mv "${GENERATED_PATH}" "${DEST_PATH}"
275
fi
276
277
echo
278
echo "== SUCCESS"
279
echo "== The theme was installed to '${DEST_PATH}'"
280
exit 0
281