172 lines
4.5 KiB
Bash
Executable File
172 lines
4.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
LIBRARYS=(
|
|
animation signal cursor colors stat
|
|
)
|
|
|
|
LIBRARY_PATH="${HOME}/.scripts/library"
|
|
|
|
for LIBRARY in ${LIBRARYS[@]}; do
|
|
source ${LIBRARY_PATH}/${LIBRARY}.sh
|
|
done
|
|
|
|
ZSH_CUSTOM_THEME_DIR="${HOME}/.oh-my-zsh/custom/themes"
|
|
GET_ZSH_THEME_USED=$(cat ${HOME}/.zshrc | grep ZSH_THEME | sed 's .\{10\} ' | sed 's/"//g')
|
|
INDEX_LOOP=0
|
|
|
|
THEME_USED_PATH="${HOME}/.config/mytermux/zsh"
|
|
THEME_USED_FILE_NAME="used.log"
|
|
THEME_USED="$(cat ${THEME_USED_PATH}/${THEME_USED_FILE_NAME})"
|
|
|
|
ZSH_CONFIGURATION_PATH="${HOME}/.zshrc"
|
|
ZSH_CONFIGURATION_THEME_USED="$(echo ${THEME_USED} | sed 's/.zsh-theme//g')"
|
|
|
|
function banner() {
|
|
|
|
echo -e "
|
|
\e[3$(( $RANDOM * 6 / 32767 + 1 ))m ____ __ __ ___ _____ _____ __ __
|
|
\e[9$(( $RANDOM * 6 / 32767 + 1 ))m / __ \/ /_ / |/ /_ __ /__ / / ___// / / /
|
|
\e[3$(( $RANDOM * 6 / 32767 + 1 ))m / / / / __ \______/ /|_/ / / / /_____/ / \__ \/ /_/ /
|
|
\e[9$(( $RANDOM * 6 / 32767 + 1 ))m/ /_/ / / / /_____/ / / / /_/ /_____/ /_____/ / __ /
|
|
\e[3$(( $RANDOM * 6 / 32767 + 1 ))m\____/_/ /_/ /_/ /_/\__, / /____/____/_/ /_/
|
|
\e[9$(( $RANDOM * 6 / 32767 + 1 ))m /____/
|
|
${COLOR_BASED}\n"
|
|
|
|
}
|
|
|
|
function listZshTheme() {
|
|
|
|
clear
|
|
setCursor off
|
|
banner
|
|
printf " %3s %10s %4s\n\n" "No." "List Theme" "Status"
|
|
|
|
if [ "${THEME_USED}" == "powerlevel10k/powerlevel10k" ]; then
|
|
THEME_USED="powerlevel10k"
|
|
fi
|
|
|
|
for ZSHTHEME in ${ZSH_CUSTOM_THEME_DIR}/*; do
|
|
|
|
ZSHTHEME_FILE_NAME[INDEX_LOOP]=$( echo ${ZSHTHEME} | awk -F'/' '{print $NF}')
|
|
ZSHTHEME_LIST_NAME[INDEX_LOOP]=$( echo ${ZSHTHEME} | awk -F'/' '{print $NF}' | sed "s/.zsh-theme//g")
|
|
|
|
if [ "${THEME_USED}" == "${ZSHTHEME_FILE_NAME[INDEX_LOOP]}" ]; then
|
|
|
|
printf "[${COLOR_SUCCESS}%2s${COLOR_BASED}] ${COLOR_SUCCESS}%-23s -->${COLOR_BASED} \
|
|
${COLOR_SUCCESS}%-4s${COLOR_BASED}\n" ${INDEX_LOOP} ${ZSHTHEME_LIST_NAME[INDEX_LOOP]} "USED"
|
|
|
|
else
|
|
|
|
printf "[${COLOR_WARNING}%2s${COLOR_BASED}] %-23s\n" ${INDEX_LOOP} ${ZSHTHEME_LIST_NAME[INDEX_LOOP]}
|
|
|
|
fi
|
|
|
|
INDEX_LOOP=$(( ${INDEX_LOOP} + 1 ));
|
|
|
|
done
|
|
|
|
INDEX_LOOP=$(( ${INDEX_LOOP} - 1 ));
|
|
|
|
echo ""
|
|
|
|
}
|
|
|
|
function selectZshTheme() {
|
|
|
|
setCursor on
|
|
|
|
while :; do
|
|
|
|
read -p "Select ZSH theme: " INDEX_THEME
|
|
|
|
if [ -z "${INDEX_THEME}" ]; then
|
|
|
|
break;
|
|
|
|
elif ! [[ ${INDEX_THEME} =~ ^[0-9]+$ ]]; then
|
|
|
|
stat "ERROR" "Danger" "Unknown '${COLOR_DANGER}number${COLOR_BASED}', please enter the right number!\n"
|
|
|
|
elif (( ${INDEX_THEME} >= 0 && ${INDEX_THEME} <= ${INDEX_LOOP} )); then
|
|
|
|
eval CHOICE=${ZSHTHEME_LIST_NAME[INDEX_THEME]}
|
|
|
|
if [ "${CHOICE}" == "powerlevel10k" ]; then
|
|
CHOICE="powerlevel10k\/powerlevel10k"
|
|
fi
|
|
|
|
if [ "${ZSH_CONFIGURATION_THEME_USED}" == "powerlevel10k" ]; then
|
|
ZSH_CONFIGURATION_THEME_USED="powerlevel10k\/powerlevel10k"
|
|
fi
|
|
|
|
start_animation "Applying Theme ..."
|
|
sleep 1s
|
|
|
|
if sed -i "s/ZSH_THEME=\"${ZSH_CONFIGURATION_THEME_USED}\"/ZSH_THEME=\"${CHOICE}\"/g" ${ZSH_CONFIGURATION_PATH}; then
|
|
|
|
if [ ! -f ${THEME_USED_PATH}/${THEME_USED_FILE_NAME} ]; then
|
|
|
|
echo -e "${ZSHTHEME_FILE_NAME[INDEX_THEME]}" >> ${THEME_USED_PATH}/${THEME_USED_FILE_NAME}
|
|
|
|
elif [ -f ${THEME_USED_PATH}/${THEME_USED_FILE_NAME} ]; then
|
|
|
|
sed -i "s/${THEME_USED}/${ZSHTHEME_FILE_NAME[INDEX_THEME]}/g" ${THEME_USED_PATH}/${THEME_USED_FILE_NAME}
|
|
|
|
fi
|
|
|
|
stop_animation $?
|
|
|
|
echo ""
|
|
|
|
stat "INFO" "Success" "Please run '${COLOR_SUCCESS}refresh${COLOR_BASED}' or '${COLOR_SUCCESS}source ~/.zshrc${COLOR_BASED}' to apply theme!\n"
|
|
|
|
# source ${ZSH_CONFIGURATION_PATH}
|
|
|
|
else
|
|
|
|
stop_animation $?
|
|
|
|
fi
|
|
|
|
break
|
|
|
|
else
|
|
|
|
stat "ERROR" "Danger" "Unknown '${COLOR_DANGER}number${COLOR_BASED}', please enter the right number!\n"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
|
|
|
function main() {
|
|
|
|
trap 'handleInterruptByUser "Interrupt by User"' 2
|
|
|
|
if [ "${GET_ZSH_THEME_USED}" == "powerlevel10k/powerlevel10k" ]; then
|
|
THEME_USED+="/powerlevel10k"
|
|
else
|
|
GET_ZSH_THEME_USED+=".zsh-theme"
|
|
fi
|
|
|
|
if [ "${GET_ZSH_THEME_USED}" == "${THEME_USED}" ]; then
|
|
|
|
listZshTheme
|
|
selectZshTheme
|
|
|
|
else
|
|
|
|
stat "ERROR" "Danger" "Configuration ${COLOR_DANGER}Failure${COLOR_BASED}!"
|
|
stat "INFO" "Warning" "Please check file:"
|
|
echo -e " • '${COLOR_WARNING}${THEME_USED_PATH}/${THEME_USED_FILE_NAME}${COLOR_BASED}'"
|
|
echo -e " • '${COLOR_WARNING}${ZSH_CONFIGURATION_PATH}${COLOR_BASED}'"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
main
|