.zsh-pure-power 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. # This theme is vanilla-cake version of purepower(powerlevel10k)
  2. # Upstream: https://github.com/romkatv/dotfiles-public/blob/master/.purepower
  3. # PURE_POWER_MODE=modern use nerdfont characters in the prompt
  4. # PURE_POWER_MODE=fancy use unicode characters in the prompt
  5. # PURE_POWER_MODE=portable use only ascii characters in the prompt
  6. PURE_POWER_MODE=fancy
  7. if autoload -U is-at-least && is-at-least 5.7 && [[ $COLORTERM == (24bit|truecolor) || ${terminfo[colors]} -eq 16777216 ]]; then
  8. ICE_AGE_PURE_POWER_TRUE_COLOR=true
  9. else
  10. ICE_AGE_PURE_POWER_TRUE_COLOR=false
  11. fi
  12. if test -z "${ZSH_VERSION}"; then
  13. echo "purepower: unsupported shell; try zsh instead" >&2
  14. return 1
  15. exit 1
  16. fi
  17. () {
  18. emulate -L zsh && setopt no_unset pipe_fail
  19. # `$(_pp_c x y`) evaluates to `y` if the terminal supports >= 256 colors and to `x` otherwise.
  20. zmodload zsh/terminfo
  21. if (( terminfo[colors] >= 256 )); then
  22. function _pp_c() { print -nr -- $2 }
  23. else
  24. function _pp_c() { print -nr -- $1 }
  25. typeset -g POWERLEVEL9K_IGNORE_TERM_COLORS=true
  26. fi
  27. # `$(_pp_s x y`) evaluates to `x` in portable mode and to `y` in fancy mode.
  28. if [[ ${PURE_POWER_MODE:-fancy} == fancy || $PURE_POWER_MODE == modern ]]; then
  29. function _pp_s() { print -nr -- $2 }
  30. else
  31. if [[ $PURE_POWER_MODE != portable ]]; then
  32. echo -En "purepower: invalid mode: ${(qq)PURE_POWER_MODE}; " >&2
  33. echo -E "valid options are 'modern', 'fancy' and 'portable'; falling back to 'portable'" >&2
  34. fi
  35. function _pp_s() { print -nr -- $1 }
  36. fi
  37. typeset -ga POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
  38. dir vcs)
  39. typeset -ga POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
  40. status command_execution_time background_jobs custom_rprompt context)
  41. local ins=$(_pp_s '>' '❯')
  42. local cmd=$(_pp_s '<' '❮')
  43. if (( ${PURE_POWER_USE_P10K_EXTENSIONS:-1} )); then
  44. local p="\${\${\${KEYMAP:-0}:#vicmd}:+${${ins//\\/\\\\}//\}/\\\}}}"
  45. p+="\${\${\$((!\${#\${KEYMAP:-0}:#vicmd})):#0}:+${${cmd//\\/\\\\}//\}/\\\}}}"
  46. else
  47. p=$ins
  48. fi
  49. if [[ "$ICE_AGE_PURE_POWER_TRUE_COLOR" == "true" ]]; then
  50. local ok="%F{#758b00}${p}%f"
  51. local err="%F{#d85d75}${p}%f"
  52. else
  53. local ok="%F{$(_pp_s 010 64)}${p}%f"
  54. local err="%F{$(_pp_s 001 131)}${p}%f"
  55. fi
  56. if (( ${PURE_POWER_USE_P10K_EXTENSIONS:-1} )); then
  57. typeset -g POWERLEVEL9K_SHOW_RULER=true
  58. typeset -g POWERLEVEL9K_RULER_CHAR=$(_pp_s '-' '─')
  59. typeset -g POWERLEVEL9K_RULER_BACKGROUND=none
  60. if [[ "$ICE_AGE_PURE_POWER_TRUE_COLOR" == "true" ]]; then
  61. typeset -g POWERLEVEL9K_RULER_FOREGROUND='#f6e2ba'
  62. else
  63. typeset -g POWERLEVEL9K_RULER_FOREGROUND=$(_pp_c 0 241)
  64. fi
  65. else
  66. typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
  67. function custom_rprompt() { }
  68. fi
  69. typeset -g POWERLEVEL9K_LEFT_SEGMENT_END_SEPARATOR=
  70. typeset -g POWERLEVEL9K_PROMPT_ON_NEWLINE=true
  71. typeset -g POWERLEVEL9K_RPROMPT_ON_NEWLINE=false
  72. typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX=
  73. typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX="%(?.$ok.$err) "
  74. typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR=
  75. typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' '
  76. typeset -g POWERLEVEL9K_WHITESPACE_BETWEEN_{LEFT,RIGHT}_SEGMENTS=
  77. typeset -g POWERLEVEL9K_DIR_{ETC,HOME,HOME_SUBFOLDER,DEFAULT,NOT_WRITABLE}_BACKGROUND=none
  78. typeset -g POWERLEVEL9K_{ETC,FOLDER,HOME,HOME_SUB}_ICON=
  79. if [[ "$ICE_AGE_PURE_POWER_TRUE_COLOR" == "true" ]]; then
  80. typeset -g POWERLEVEL9K_DIR_WRITABLE_FORBIDDEN_VISUAL_IDENTIFIER_COLOR='#d87345'
  81. else
  82. typeset -g POWERLEVEL9K_DIR_WRITABLE_FORBIDDEN_VISUAL_IDENTIFIER_COLOR=$(_pp_c 003 130)
  83. fi
  84. if [[ "$PURE_POWER_MODE" == "modern" ]]; then
  85. typeset -g POWERLEVEL9K_LOCK_ICON=''
  86. else
  87. typeset -g POWERLEVEL9K_LOCK_ICON=
  88. fi
  89. if [[ "$ICE_AGE_PURE_POWER_TRUE_COLOR" == "true" ]]; then
  90. typeset -g POWERLEVEL9K_DIR_{ETC,DEFAULT}_FOREGROUND='#d87345'
  91. typeset -g POWERLEVEL9K_DIR_{HOME,HOME_SUBFOLDER}_FOREGROUND='#4e8961'
  92. typeset -g POWERLEVEL9K_DIR_NOT_WRITABLE_FOREGROUND='#c96794'
  93. else
  94. typeset -g POWERLEVEL9K_DIR_{ETC,DEFAULT}_FOREGROUND=$(_pp_c 005 95)
  95. typeset -g POWERLEVEL9K_DIR_{HOME,HOME_SUBFOLDER}_FOREGROUND=$(_pp_c 002 65)
  96. typeset -g POWERLEVEL9K_DIR_NOT_WRITABLE_FOREGROUND=$(_pp_c 001 131)
  97. fi
  98. typeset -g POWERLEVEL9K_VCS_{CLEAN,UNTRACKED,MODIFIED,LOADING}_BACKGROUND=none
  99. typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED}_MAX_NUM=99
  100. if [[ "$ICE_AGE_PURE_POWER_TRUE_COLOR" == "true" ]]; then
  101. typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND='#5e7cab'
  102. typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND='#758b00'
  103. typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND='#d08800'
  104. typeset -g POWERLEVEL9K_VCS_LOADING_FOREGROUND='#778b81'
  105. else
  106. typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=$(_pp_c 004 67)
  107. typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=$(_pp_c 003 130)
  108. typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=$(_pp_c 011 172)
  109. typeset -g POWERLEVEL9K_VCS_LOADING_FOREGROUND=$(_pp_c 006 37)
  110. fi
  111. typeset -g POWERLEVEL9K_VCS_{CLEAN,UNTRACKED,MODIFIED}_UNTRACKEDFORMAT_FOREGROUND=$POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND
  112. typeset -g POWERLEVEL9K_VCS_{CLEAN,UNTRACKED,MODIFIED}_UNSTAGEDFORMAT_FOREGROUND=$POWERLEVEL9K_VCS_MODIFIED_FOREGROUND
  113. typeset -g POWERLEVEL9K_VCS_{CLEAN,UNTRACKED,MODIFIED}_STAGEDFORMAT_FOREGROUND=$POWERLEVEL9K_VCS_MODIFIED_FOREGROUND
  114. typeset -g POWERLEVEL9K_VCS_{CLEAN,UNTRACKED,MODIFIED}_INCOMING_CHANGESFORMAT_FOREGROUND=$POWERLEVEL9K_VCS_CLEAN_FOREGROUND
  115. typeset -g POWERLEVEL9K_VCS_{CLEAN,UNTRACKED,MODIFIED}_OUTGOING_CHANGESFORMAT_FOREGROUND=$POWERLEVEL9K_VCS_CLEAN_FOREGROUND
  116. typeset -g POWERLEVEL9K_VCS_{CLEAN,UNTRACKED,MODIFIED}_STASHFORMAT_FOREGROUND=$POWERLEVEL9K_VCS_CLEAN_FOREGROUND
  117. typeset -g POWERLEVEL9K_VCS_{CLEAN,UNTRACKED,MODIFIED}_ACTIONFORMAT_FOREGROUND=001
  118. typeset -g POWERLEVEL9K_VCS_LOADING_ACTIONFORMAT_FOREGROUND=$POWERLEVEL9K_VCS_LOADING_FOREGROUND
  119. if [[ "$PURE_POWER_MODE" == "modern" ]]; then
  120. typeset -g POWERLEVEL9K_VCS_GIT_ICON=''
  121. typeset -g POWERLEVEL9K_VCS_GIT_GITHUB_ICON=''
  122. typeset -g POWERLEVEL9K_VCS_GIT_GITLAB_ICON=''
  123. typeset -g POWERLEVEL9K_VCS_GIT_BITBUCKET_ICON=''
  124. typeset -g POWERLEVEL9K_VCS_BRANCH_ICON=' '
  125. typeset -g POWERLEVEL9K_VCS_REMOTE_BRANCH_ICON=' '
  126. typeset -g POWERLEVEL9K_VCS_COMMIT_ICON=' '
  127. typeset -g POWERLEVEL9K_VCS_STAGED_ICON=' '
  128. typeset -g POWERLEVEL9K_VCS_UNSTAGED_ICON=' '
  129. typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='✩'
  130. typeset -g POWERLEVEL9K_VCS_INCOMING_CHANGES_ICON='⇣'
  131. typeset -g POWERLEVEL9K_VCS_OUTGOING_CHANGES_ICON='⇡'
  132. typeset -g POWERLEVEL9K_VCS_STASH_ICON='*'
  133. typeset -g POWERLEVEL9K_VCS_TAG_ICON=' '
  134. else
  135. typeset -g POWERLEVEL9K_VCS_{GIT,GIT_GITHUB,GIT_BITBUCKET,GIT_GITLAB,BRANCH}_ICON=
  136. typeset -g POWERLEVEL9K_VCS_REMOTE_BRANCH_ICON=$'%{\b|%}'
  137. typeset -g POWERLEVEL9K_VCS_COMMIT_ICON='@'
  138. typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?'
  139. typeset -g POWERLEVEL9K_VCS_UNSTAGED_ICON='!'
  140. typeset -g POWERLEVEL9K_VCS_STAGED_ICON='+'
  141. typeset -g POWERLEVEL9K_VCS_INCOMING_CHANGES_ICON=$(_pp_s '<' '⇣')
  142. typeset -g POWERLEVEL9K_VCS_OUTGOING_CHANGES_ICON=$(_pp_s '>' '⇡')
  143. typeset -g POWERLEVEL9K_VCS_STASH_ICON='*'
  144. typeset -g POWERLEVEL9K_VCS_TAG_ICON=$'%{\b#%}'
  145. fi
  146. typeset -g POWERLEVEL9K_STATUS_OK=false
  147. typeset -g POWERLEVEL9K_STATUS_ERROR_BACKGROUND=none
  148. if [[ "$ICE_AGE_PURE_POWER_TRUE_COLOR" == "true" ]]; then
  149. typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND='#d85d75'
  150. else
  151. typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=$(_pp_c 001 131)
  152. fi
  153. typeset -g POWERLEVEL9K_CARRIAGE_RETURN_ICON=
  154. typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=0
  155. typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_BACKGROUND=none
  156. if [[ "$ICE_AGE_PURE_POWER_TRUE_COLOR" == "true" ]]; then
  157. typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND='#778b81'
  158. else
  159. typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=$(_pp_c 000 241)
  160. fi
  161. typeset -g POWERLEVEL9K_EXECUTION_TIME_ICON=
  162. typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,ROOT,REMOTE_SUDO,REMOTE,SUDO}_BACKGROUND=none
  163. if [[ "$ICE_AGE_PURE_POWER_TRUE_COLOR" == "true" ]]; then
  164. typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,REMOTE_SUDO,REMOTE,SUDO}_FOREGROUND='#758b00'
  165. typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND='#c96794'
  166. else
  167. typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,REMOTE_SUDO,REMOTE,SUDO}_FOREGROUND=$(_pp_c 007 246)
  168. typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=$(_pp_c 001 131)
  169. fi
  170. typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false
  171. typeset -g POWERLEVEL9K_BACKGROUND_JOBS_BACKGROUND=none
  172. typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_COLOR=2
  173. typeset -g POWERLEVEL9K_BACKGROUND_JOBS_ICON=$(_pp_s '%%' '⇶')
  174. # typeset -g POWERLEVEL9K_CUSTOM_RPROMPT=custom_rprompt
  175. # typeset -g POWERLEVEL9K_CUSTOM_RPROMPT_BACKGROUND=none
  176. # typeset -g POWERLEVEL9K_CUSTOM_RPROMPT_FOREGROUND=$(_pp_c 4 12)
  177. unfunction _pp_c _pp_s
  178. } "$@"