diff --git a/demo/demo.mov b/demo/demo.mov deleted file mode 100644 index 2def1e5..0000000 Binary files a/demo/demo.mov and /dev/null differ diff --git a/icon.png b/icon.png deleted file mode 100644 index 69e67bb..0000000 Binary files a/icon.png and /dev/null differ diff --git a/image/image.sketch b/image/image.sketch deleted file mode 100644 index 805da48..0000000 Binary files a/image/image.sketch and /dev/null differ diff --git a/passion.zsh-theme b/passion.zsh-theme deleted file mode 100644 index cb8aac2..0000000 --- a/passion.zsh-theme +++ /dev/null @@ -1,213 +0,0 @@ - -# gdate for macOS -# REF: https://apple.stackexchange.com/questions/135742/time-in-milliseconds-since-epoch-in-the-terminal -if [[ "$OSTYPE" == "darwin"* ]]; then - { - gdate - } || { - echo "\n$fg_bold[yellow]passion.zsh-theme depends on cmd [gdate] to get current time in milliseconds$reset_color" - echo "$fg_bold[yellow][gdate] is not installed by default in macOS$reset_color" - echo "$fg_bold[yellow]to get [gdate] by running:$reset_color" - echo "$fg_bold[green]brew install coreutils;$reset_color"; - echo "$fg_bold[yellow]\nREF: https://github.com/ChesterYue/ohmyzsh-theme-passion#macos\n$reset_color" - } -fi - - -# time -function real_time() { - local color="%{$fg_no_bold[cyan]%}"; # color in PROMPT need format in %{XXX%} which is not same with echo - local time="[$(date +%H:%M:%S)]"; - local color_reset="%{$reset_color%}"; - echo "${color}${time}${color_reset}"; -} - -# login_info -function login_info() { - local color="%{$fg_no_bold[cyan]%}"; # color in PROMPT need format in %{XXX%} which is not same with echo - local ip - if [[ "$OSTYPE" == "linux-gnu" ]]; then - # Linux - ip="$(ifconfig | grep ^eth1 -A 1 | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | head -1)"; - elif [[ "$OSTYPE" == "darwin"* ]]; then - # macOS - ip="$(ifconfig | grep ^en1 -A 4 | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | head -1)"; - elif [[ "$OSTYPE" == "cygwin" ]]; then - # POSIX compatibility layer and Linux environment emulation for Windows - elif [[ "$OSTYPE" == "msys" ]]; then - # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) - elif [[ "$OSTYPE" == "win32" ]]; then - # I'm not sure this can happen. - elif [[ "$OSTYPE" == "freebsd"* ]]; then - # ... - else - # Unknown. - fi - local color_reset="%{$reset_color%}"; - echo "${color}[%n@${ip}]${color_reset}"; -} - - -# directory -function directory() { - local color="%{$fg_no_bold[cyan]%}"; - # REF: https://stackoverflow.com/questions/25944006/bash-current-working-directory-with-replacing-path-to-home-folder - local directory="${PWD/#$HOME/~}"; - local color_reset="%{$reset_color%}"; - echo "${color}[${directory}]${color_reset}"; -} - - -# git -ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_no_bold[cyan]%}["; -ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "; -ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg_no_bold[red]%}✖%{$fg_no_bold[cyan]%}]"; -ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg_no_bold[cyan]%}]"; - -function update_git_status() { - GIT_STATUS=$(git_prompt_info); -} - -function git_status() { - echo "${GIT_STATUS}" -} - - -# command -function update_command_status() { - local arrow=""; - local color_reset="%{$reset_color%}"; - local reset_font="%{$fg_no_bold[white]%}"; - COMMAND_RESULT=$1; - export COMMAND_RESULT=$COMMAND_RESULT - if $COMMAND_RESULT; - then - arrow="%{$fg_bold[red]%}❱%{$fg_bold[yellow]%}❱%{$fg_bold[green]%}❱"; - else - arrow="%{$fg_bold[red]%}❱❱❱"; - fi - COMMAND_STATUS="${arrow}${reset_font}${color_reset}"; -} -update_command_status true; - -function command_status() { - echo "${COMMAND_STATUS}" -} - - -# output command execute after -output_command_execute_after() { - if [ "$COMMAND_TIME_BEGIN" = "-20200325" ] || [ "$COMMAND_TIME_BEGIN" = "" ]; - then - return 1; - fi - - # cmd - local cmd="$(fc -ln -1)"; - local color_cmd=""; - if $1; - then - color_cmd="$fg_no_bold[green]"; - else - color_cmd="$fg_bold[red]"; - fi - local color_reset="$reset_color"; - cmd="${color_cmd}${cmd}${color_reset}" - - # time - local time="[$(date +%H:%M:%S)]" - local color_time="$fg_no_bold[cyan]"; - time="${color_time}${time}${color_reset}"; - - # cost - local time_end="$(current_time_millis)"; - local cost=$(bc -l <<<"${time_end}-${COMMAND_TIME_BEGIN}"); - COMMAND_TIME_BEGIN="-20200325" - local length_cost=${#cost}; - if [ "$length_cost" = "4" ]; - then - cost="0${cost}" - fi - cost="[cost ${cost}s]" - local color_cost="$fg_no_bold[cyan]"; - cost="${color_cost}${cost}${color_reset}"; - - echo -e "${time} ${cost} ${cmd}"; - echo -e ""; -} - - -# command execute before -# REF: http://zsh.sourceforge.net/Doc/Release/Functions.html -preexec() { # cspell:disable-line - COMMAND_TIME_BEGIN="$(current_time_millis)"; -} - -current_time_millis() { - local time_millis; - if [[ "$OSTYPE" == "linux-gnu" ]]; then - # Linux - time_millis="$(date +%s.%3N)"; - elif [[ "$OSTYPE" == "darwin"* ]]; then - # macOS - time_millis="$(gdate +%s.%3N)"; - elif [[ "$OSTYPE" == "cygwin" ]]; then - # POSIX compatibility layer and Linux environment emulation for Windows - elif [[ "$OSTYPE" == "msys" ]]; then - # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) - elif [[ "$OSTYPE" == "win32" ]]; then - # I'm not sure this can happen. - elif [[ "$OSTYPE" == "freebsd"* ]]; then - # ... - else - # Unknown. - fi - echo $time_millis; -} - - -# command execute after -# REF: http://zsh.sourceforge.net/Doc/Release/Functions.html -precmd() { # cspell:disable-line - # last_cmd - local last_cmd_return_code=$?; - local last_cmd_result=true; - if [ "$last_cmd_return_code" = "0" ]; - then - last_cmd_result=true; - else - last_cmd_result=false; - fi - - # update_git_status - update_git_status; - - # update_command_status - update_command_status $last_cmd_result; - - # output command execute after - output_command_execute_after $last_cmd_result; -} - - -# set option -setopt PROMPT_SUBST; # cspell:disable-line - - -# timer -#REF: https://stackoverflow.com/questions/26526175/zsh-menu-completion-causes-problems-after-zle-reset-prompt -TMOUT=1; -TRAPALRM() { # cspell:disable-line - # $(git_prompt_info) cost too much time which will raise stutters when inputting. so we need to disable it in this occurrence. - # if [ "$WIDGET" != "expand-or-complete" ] && [ "$WIDGET" != "self-insert" ] && [ "$WIDGET" != "backward-delete-char" ]; then - # black list will not enum it completely. even some pipe broken will appear. - # so we just put a white list here. - if [ "$WIDGET" = "" ] || [ "$WIDGET" = "accept-line" ] ; then - zle reset-prompt; - fi -} - - -# prompt -# PROMPT='$(real_time) $(login_info) $(directory) $(git_status)$(command_status) '; -PROMPT='$(real_time) $(directory) $(git_status)$(command_status) '; diff --git a/simplerich.zsh-theme b/simplerich.zsh-theme new file mode 100644 index 0000000..29bfa7e --- /dev/null +++ b/simplerich.zsh-theme @@ -0,0 +1,235 @@ +# gdate for macOS +# REF: https://apple.stackexchange.com/questions/135742/time-in-milliseconds-since-epoch-in-the-terminal +if [[ "$OSTYPE" == "darwin"* ]]; then + { + gdate + } || { + echo "\n$fg_bold[yellow]simplerich.zsh-theme depends on cmd [gdate] to get current time in milliseconds$reset_color" + echo "$fg_bold[yellow][gdate] is not installed by default in macOS$reset_color" + echo "$fg_bold[yellow]to get [gdate] by running:$reset_color" + echo "$fg_bold[green]brew install coreutils;$reset_color" + echo "$fg_bold[yellow]\nREF: https://github.com/ChesterYue/ohmyzsh-theme-passion#macos\n$reset_color" + } +fi + +_simplerich_current_time_millis() { + local time_millis + if [[ "$OSTYPE" == "linux-gnu" ]]; then + # Linux + time_millis="$(date +%s.%3N)" + elif [[ "$OSTYPE" == "darwin"* ]]; then + # macOS + time_millis="$(gdate +%s.%3N)" + elif [[ "$OSTYPE" == "cygwin" ]]; then + # POSIX compatibility layer and Linux environment emulation for Windows + elif [[ "$OSTYPE" == "msys" ]]; then + # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) + elif [[ "$OSTYPE" == "win32" ]]; then + # I'm not sure this can happen. + elif [[ "$OSTYPE" == "freebsd"* ]]; then + # ... + else + # Unknown. + fi + + echo $time_millis +} + +_simplerich_update_git_info() { + if [ -n "$__CURRENT_GIT_STATUS" ]; then + _SIMPLERICH_GIT_INFO=$(git_super_status) + else + _SIMPLERICH_GIT_INFO=$(git_prompt_info) + fi +} + +# command execute before +# REF: http://zsh.sourceforge.net/Doc/Release/Functions.html +preexec() { # cspell:disable-line + _SIMPLERICH_COMMAND_TIME_BEGIN="$(_simplerich_current_time_millis)" +} + +# command execute after +# REF: http://zsh.sourceforge.net/Doc/Release/Functions.html +precmd() { # cspell:disable-line + local last_cmd_return_code=$? + + update_command_status() { + local color="" + local command_result=$1 + if $command_result; then + color="" + else + color="%{$fg[red]%}" + fi + + _SIMPLERICH_COMMAND_STATUS="${color}%(!.#.$)%{$reset_color%}" + } + + output_command_execute_after() { + if [ "$_SIMPLERICH_COMMAND_TIME_BEGIN" = "-20200325" ] || [ "$_SIMPLERICH_COMMAND_TIME_BEGIN" = "" ]; then + return 1 + fi + + # cmd + local cmd="$(fc -ln -1)" + local color_cmd="" + local command_result=$1 + if $command_result; then + color_cmd="$fg[green]" + else + color_cmd="$fg[red]" + fi + local color_reset="$reset_color" + cmd="${color_cmd}${cmd}${color_reset}" + + # time + local time="[$(date +%H:%M:%S)]" + + # cost + local time_end="$(_simplerich_current_time_millis)" + local cost=$(bc -l <<<"${time_end}-${_SIMPLERICH_COMMAND_TIME_BEGIN}") + _SIMPLERICH_COMMAND_TIME_BEGIN="-20200325" + local length_cost=${#cost} + if [ "$length_cost" = "4" ]; then + cost="0${cost}" + fi + cost="[cost ${cost}s]" + + echo "${time} $fg[cyan]${cost}${color_reset} ${cmd}\n\n" + } + + # last_cmd + local last_cmd_result=true + if [ "$last_cmd_return_code" = "0" ]; then + last_cmd_result=true + else + last_cmd_result=false + fi + + _simplerich_update_git_info + + update_command_status $last_cmd_result + + output_command_execute_after $last_cmd_result +} + +# set option +setopt PROMPT_SUBST # cspell:disable-line + +# timer +#REF: https://stackoverflow.com/questions/26526175/zsh-menu-completion-causes-problems-after-zle-reset-prompt +TMOUT=1 +TRAPALRM() { # cspell:disable-line + # $(git_prompt_info) cost too much time which will raise stutters when inputting. so we need to disable it in this occurrence. + # if [ "$WIDGET" != "expand-or-complete" ] && [ "$WIDGET" != "self-insert" ] && [ "$WIDGET" != "backward-delete-char" ]; then + # black list will not enum it completely. even some pipe broken will appear. + # so we just put a white list here. + if [ "$WIDGET" = "" ] || [ "$WIDGET" = "accept-line" ]; then + zle reset-prompt + fi + + if [ "$_SIMPLERICH_PROMPT_CALLED_COUNT" -eq 0 ]; then + _simplerich_update_git_info + fi + + _SIMPLERICH_PROMPT_CALLED_COUNT="$((_SIMPLERICH_PROMPT_CALLED_COUNT + 1))" + if [ "$_SIMPLERICH_PROMPT_CALLED_COUNT" -ge 10 ]; then + _SIMPLERICH_PROMPT_CALLED_COUNT=0 + fi +} + +# git +ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[green]%}[" +ZSH_THEME_GIT_PROMPT_SUFFIX="%{$fg[green]%}]%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg[yellow]%}*" + +# zsh-git-prompt +ZSH_THEME_GIT_PROMPT_SEPARATOR=" " +ZSH_THEME_GIT_PROMPT_BRANCH="%{$fg[green]%}" +ZSH_THEME_GIT_PROMPT_STAGED="%{$fg[yellow]%}%{+%G%}" +ZSH_THEME_GIT_PROMPT_CONFLICTS="%{$fg[red]%}%{x%G%}" +ZSH_THEME_GIT_PROMPT_CHANGED="%{$fg[yellow]%}%{●%G%}" +ZSH_THEME_GIT_PROMPT_BEHIND=" %{$fg[blue]%}" +ZSH_THEME_GIT_PROMPT_AHEAD="%{$fg[blue]%}|" +ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[yellow]%}%{…%G%}" +ZSH_THEME_GIT_PROMPT_CLEAN="" + +git_super_status() { + precmd_update_git_vars + + if [ -z "$__CURRENT_GIT_STATUS" ]; then + return + fi + + if [ "$GIT_BRANCH" = ":" ]; then + echo "" + return + fi + + local git_status="$ZSH_THEME_GIT_PROMPT_PREFIX$ZSH_THEME_GIT_PROMPT_BRANCH$GIT_BRANCH%{${reset_color}%}" + if [ "$GIT_BEHIND" -ne "0" ] || [ "$GIT_AHEAD" -ne "0" ]; then + git_status="$git_status$ZSH_THEME_GIT_PROMPT_BEHIND$GIT_BEHIND%{${reset_color}%}$ZSH_THEME_GIT_PROMPT_AHEAD$GIT_AHEAD%{${reset_color}%}" + fi + + if [ "$GIT_CHANGED" -ne "0" ] || [ "$GIT_CONFLICTS" -ne "0" ] || [ "$GIT_STAGED" -ne "0" ] || [ "$GIT_UNTRACKED" -ne "0" ]; then + git_status="$git_status$ZSH_THEME_GIT_PROMPT_SEPARATOR" + fi + + if [ "$GIT_STAGED" -ne "0" ]; then + git_status="$git_status$ZSH_THEME_GIT_PROMPT_STAGED$GIT_STAGED%{${reset_color}%}" + fi + if [ "$GIT_CONFLICTS" -ne "0" ]; then + git_status="$git_status$ZSH_THEME_GIT_PROMPT_CONFLICTS$GIT_CONFLICTS%{${reset_color}%}" + fi + if [ "$GIT_CHANGED" -ne "0" ]; then + git_status="$git_status$ZSH_THEME_GIT_PROMPT_CHANGED$GIT_CHANGED%{${reset_color}%}" + fi + if [ "$GIT_UNTRACKED" -ne "0" ]; then + git_status="$git_status$ZSH_THEME_GIT_PROMPT_UNTRACKED$GIT_UNTRACKED%{${reset_color}%}" + fi + if [ "$GIT_CHANGED" -eq "0" ] && [ "$GIT_CONFLICTS" -eq "0" ] && [ "$GIT_STAGED" -eq "0" ] && [ "$GIT_UNTRACKED" -eq "0" ]; then + git_status="$git_status$ZSH_THEME_GIT_PROMPT_CLEAN" + fi + git_status="$git_status%{${reset_color}%}$ZSH_THEME_GIT_PROMPT_SUFFIX" + + echo $git_status +} + +_simplerich_prompt() { + real_time() { + # echo "[%*]"; + echo "[$(date +%H:%M:%S)]" + } + + user_info() { + echo "%n" + } + + anaconda_info() { + echo "%{$fg[magenta]%}(${CONDA_DEFAULT_ENV})%{$reset_color%}" + } + + directory_info() { + # echo "%c"; + echo "%{$fg[cyan]%}${PWD/#$HOME/~}%{$reset_color%}" + } + + git_info() { + echo "${_SIMPLERICH_GIT_INFO}" + } + + command_status() { + echo "${_SIMPLERICH_COMMAND_STATUS}" + } + + if [ -v CONDA_DEFAULT_ENV ]; then + echo "$(real_time) $(user_info) $(anaconda_info) $(directory_info) $(git_info) +$(command_status) " + else + echo "$(real_time) $(user_info) $(directory_info) $(git_info) +$(command_status) " + fi +} + +PROMPT='$(_simplerich_prompt)'