trapd00r.zsh-theme 4.13 KB
Newer Older
1
# trapd00r.zsh-theme
Magnus Woldrich's avatar
Magnus Woldrich committed
2
#
3
4
5
6
# This theme needs a terminal supporting 256 colors as well as unicode.
# In order to avoid external dependencies, it also embeds a (possibly old)
# copy of the perl script located at https://github.com/trapd00r/utils/blob/master/zsh_path,
# which splits up the current path and makes it fancy.
Magnus Woldrich's avatar
Magnus Woldrich committed
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#
# By default it spans over two lines like so:
#
# scp1@shiva:pts/9-> /home » scp1 (0)
# >
#
# that's  user@host:pts/-> splitted path (return status)
#
# If the current directory is a git repository, we span 3 lines;
#
# git❨ master ❩ DIRTY
# scp1@shiva:pts/4-> /home » scp1 » dev » utils (0)
# >

autoload -U add-zsh-hook
autoload -Uz vcs_info

local c0=$( printf "\e[m")
local c1=$( printf "\e[38;5;245m")
local c2=$( printf "\e[38;5;250m")
local c3=$( printf "\e[38;5;242m")
local c4=$( printf "\e[38;5;197m")
local c5=$( printf "\e[38;5;225m")
local c6=$( printf "\e[38;5;240m")
local c7=$( printf "\e[38;5;242m")
local c8=$( printf "\e[38;5;244m")
local c9=$( printf "\e[38;5;162m")
local c10=$(printf "\e[1m")
local c11=$(printf "\e[38;5;208m\e[1m")
local c12=$(printf "\e[38;5;142m\e[1m")
local c13=$(printf "\e[38;5;196m\e[1m")

39
40

zsh_path() {
41
42
43
  local colors
  colors=$(echoti colors)

44
45
46
47
48
49
50
51
52
53
54
55
56
  local -A yellow
  yellow=(
    1  '%F{228}'   2  '%F{222}'   3  '%F{192}'   4  '%F{186}'
    5  '%F{227}'   6  '%F{221}'   7  '%F{191}'   8  '%F{185}'
    9  '%F{226}'   10  '%F{220}'   11  '%F{190}'   12  '%F{184}'
    13  '%F{214}'   14  '%F{178}'  15  '%F{208}'   16  '%F{172}'
    17  '%F{202}'   18  '%F{166}'
  )

  local c i=1
  for c (${(s::)PWD}); do
    if [[ $c = "/" ]]; then
      if [[ $i -eq 1 ]]; then
57
        if [[ $colors -ge 256 ]]; then
58
          print -Pn "%F{065}%B /%b"
59
        else
60
          print -Pn "\e[31;1m /"
61
62
        fi
      else
63
64
65
66
67
        if [[ $colors -ge 256 ]]; then
          print -Pn "${yellow[$i]:-%f} » "
        else
          print -Pn "%F{yellow} > "
        fi
68
      fi
69
70

      (( i++ ))
71
    else
72
      if [[ $colors -ge 256 ]]; then
73
        print -Pn "%F{065}$c"
74
      else
75
        print -Pn "%F{blue}$c"
76
77
78
      fi
    fi
  done
79
  print -Pn "%f"
80
81
}

Magnus Woldrich's avatar
Magnus Woldrich committed
82

83
# We don't want to use the extended colorset in the TTY / VC.
Magnus Woldrich's avatar
Magnus Woldrich committed
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
if [ "$TERM" = "linux" ]; then
    c1=$( printf "\e[34;1m")
    c2=$( printf "\e[35m")
    c3=$( printf "\e[31m")
    c4=$( printf "\e[31;1m")
    c5=$( printf "\e[32m")
    c6=$( printf "\e[32;1m")
    c7=$( printf "\e[33m")
    c8=$( printf "\e[33;1m")
    c9=$( printf "\e[34m")

    c11=$(printf "\e[35;1m")
    c12=$(printf "\e[36m")
    c13=$(printf "\e[31;1m")
fi

zstyle ':vcs_info:*' actionformats \
    '%{$c8%}(%f%s)%{$c7%}-%F{5}[%F{2}%b%F{3}|%F{1}%a%F{5}]%f '

zstyle ':vcs_info:*' formats \
    "%{$c8%}%s%%{$c7%}❨ %{$c9%}%{$c11%}%b%{$c7%} ❩%{$reset_color%}%f "

zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat '%b%F{1}:%F{3}%r'
zstyle ':vcs_info:*' enable git

add-zsh-hook precmd prompt_jnrowe_precmd

prompt_jnrowe_precmd () {
  vcs_info
  if [ "${vcs_info_msg_0_}" = "" ]; then
114
    dir_status="%{$c1%}%n%{$c4%}@%{$c2%}%m%{$c0%}:%{$c3%}%l%{$c6%}->%{$(zsh_path)%} %{$c0%}(%{$c5%}%?%{$c0%})"
Magnus Woldrich's avatar
Magnus Woldrich committed
115
116
117
    PROMPT='%{$fg_bold[green]%}%p%{$reset_color%}${vcs_info_msg_0_}${dir_status} ${ret_status}%{$reset_color%}
> '

118
# modified, to be committed
Magnus Woldrich's avatar
Magnus Woldrich committed
119
  elif [[ $(git diff --cached --name-status 2>/dev/null ) != "" ]]; then
120
    dir_status="%{$c1%}%n%{$c4%}@%{$c2%}%m%{$c0%}:%{$c3%}%l%{$c6%}->%{$(zsh_path)%} %{$c0%}(%{$c5%}%?%{$c0%})"
Magnus Woldrich's avatar
Magnus Woldrich committed
121
122
123
124
125
    PROMPT='${vcs_info_msg_0_}%{$30%} %{$bg_bold[red]%}%{$fg_bold[cyan]%}C%{$fg_bold[black]%}OMMIT%{$reset_color%}
%{$fg_bold[green]%}%p%{$reset_color%}${dir_status}%{$reset_color%}
> '

  elif [[ $(git diff --name-status 2>/dev/null ) != "" ]]; then
126
    dir_status="%{$c1%}%n%{$c4%}@%{$c2%}%m%{$c0%}:%{$c3%}%l%{$c6%}->%{$(zsh_path)%} %{$c0%}(%{$c5%}%?%{$c0%})"
Magnus Woldrich's avatar
Magnus Woldrich committed
127
128
129
130
    PROMPT='${vcs_info_msg_0_}%{$bg_bold[red]%}%{$fg_bold[blue]%}D%{$fg_bold[black]%}IRTY%{$reset_color%}
%{$fg_bold[green]%}%p%{$reset_color%}${dir_status}%{$reset_color%}
%{$c13%}>%{$c0%} '
  else
131
    dir_status="%{$c1%}%n%{$c4%}@%{$c2%}%m%{$c0%}:%{$c3%}%l%{$c6%}->%{$(zsh_path)%} %{$c0%}(%{$c5%}%?%{$c0%})"
Magnus Woldrich's avatar
Magnus Woldrich committed
132
    PROMPT='${vcs_info_msg_0_}
133
%{$fg_bold[green]%}%p%{$reset_color%}${dir_status}%{$reset_color%}
Magnus Woldrich's avatar
Magnus Woldrich committed
134
135
136
137
> '
fi
}

138

Magnus Woldrich's avatar
Magnus Woldrich committed
139
#  vim: set ft=zsh sw=2 et tw=0: