Blueno_Termux/myTermux/.scripts/zsh/changetheme.sh
2022-04-01 08:36:29 -04:00

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