cinaeco.zsh-theme 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. ## Set tab title to hostname
  2. print -Pn "\e]1;`hostname | cut -d. -f1`\a"
  3. ## multi line prompt
  4. PROMPT='
  5. %{$fg[cyan]%}[%m] %{$fg[yellow]%}%3~ $(git_prompt_info)
  6. %{$fg[magenta]%}%n → %{$reset_color%}'
  7. RPROMPT='$(vi_mode_prompt_info) %{$reset_color%}%T %{$fg[white]%}%h%{$reset_color%}'
  8. MODE_INDICATOR="%{$fg[green]%}vi-mode%{$reset_color%}"
  9. ZSH_THEME_GIT_PROMPT_PREFIX="[git:"
  10. ZSH_THEME_GIT_PROMPT_SUFFIX="]%{$reset_color%}"
  11. ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[green]%}"
  12. ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}"
  13. ZSH_THEME_GIT_PROMPT_ADDED="%{$FG[082]%}+%{$reset_color%}"
  14. ZSH_THEME_GIT_PROMPT_MODIFIED="%{$FG[160]%}+%{$reset_color%}"
  15. ZSH_THEME_GIT_PROMPT_DELETED="%{$FG[160]%}x%{$reset_color%}"
  16. ZSH_THEME_GIT_PROMPT_RENAMED="%{$FG[220]%}>%{$reset_color%}"
  17. ZSH_THEME_GIT_PROMPT_UNMERGED="%{$FG[082]%}u%{$reset_color%}"
  18. ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$FG[160]%}?%{$reset_color%}"
  19. ##############################
  20. # FUNCTIONS
  21. ##############################
  22. ## Override the default `git_prompt_info` function
  23. ## We decide if we show nothing, status with no branch (like in submodules) or
  24. ## with a branch using regex comparisons. Is there a better way?
  25. function git_prompt_info() {
  26. ref=$(git symbolic-ref HEAD 2>&1)
  27. [[ $ref =~ "Not a git" ]] && return
  28. [[ $ref =~ "not a symbolic" ]] && echo "$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_PREFIX$(current_repository):%{$fg[red]%}no branch$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_SUFFIX $(git_prompt_status)" && return
  29. echo "$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_PREFIX$(current_repository):$(current_branch)$ZSH_THEME_GIT_PROMPT_SUFFIX $(git_prompt_status)"
  30. }
  31. ## Override the default `git_prompt_status` function
  32. ## This one will try to print a symbol for each change listed in git status.
  33. ## The old version only listed if each type existed or not.
  34. git_prompt_status() {
  35. INDEX=$(git status -s 2> /dev/null)
  36. STATUS=""
  37. echo $INDEX | while IFS= read line; do
  38. if $(echo "$line" | grep '^?? ' &> /dev/null); then
  39. STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_UNTRACKED"
  40. fi
  41. if $(echo "$line" | grep '^A ' &> /dev/null); then
  42. STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_ADDED"
  43. elif $(echo "$line" | grep '^M. ' &> /dev/null); then
  44. STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_ADDED"
  45. fi
  46. if $(echo "$line" | grep '^.M ' &> /dev/null); then
  47. STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_MODIFIED"
  48. elif $(echo "$line" | grep '^AM ' &> /dev/null); then
  49. STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_MODIFIED"
  50. elif $(echo "$line" | grep '^ T ' &> /dev/null); then
  51. STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_MODIFIED"
  52. fi
  53. if $(echo "$line" | grep '^R ' &> /dev/null); then
  54. STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_RENAMED"
  55. fi
  56. if $(echo "$line" | grep '^ D ' &> /dev/null); then
  57. STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_DELETED"
  58. elif $(echo "$line" | grep '^AD ' &> /dev/null); then
  59. STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_DELETED"
  60. fi
  61. if $(echo "$line" | grep '^UU ' &> /dev/null); then
  62. STATUS="$STATUS$ZSH_THEME_GIT_PROMPT_UNMERGED"
  63. fi
  64. done
  65. echo $STATUS
  66. }
  67. ## Override the default `current_repository` function
  68. ## We don't need to test if HEAD is a symbolic ref - that gets controlled in
  69. ## git_prompt_info(). Unlike `current_branch` there are no oh-my-zsh shortcuts
  70. ## that will be broken if we don't test for this.
  71. ##
  72. ## also, the built-in function cannot cope with non-ssh repos because it relies
  73. ## on there being a ':' before the repo name
  74. function current_repository() {
  75. echo $(git remote -v | head -1 | grep -o '[^/]*\.git' | sed 's/\.git//')
  76. }