]> arthur.barton.de Git - ax-zsh.git/blob - core/50_prompt/50_prompt.zshrc
b28720b73a60ab14e00f5145bce4a7309d4f5e47
[ax-zsh.git] / core / 50_prompt / 50_prompt.zshrc
1 # AX-ZSH: Alex' Modular ZSH Configuration
2 # 50_prompt.zshrc: Setup default prompts
3
4 # Logname ("user name")
5
6 ZSH_THEME_LOGNAME_PROMPT_PREFIX_SPACING=""
7 if (( $UID == 0 )); then
8         ZSH_THEME_LOGNAME_PROMPT_PREFIX="%{$fg_no_bold[red]%}" \
9         ZSH_THEME_LOGNAME_PROMPT_SUFFIX="%{$reset_color%}"
10 else
11         ZSH_THEME_LOGNAME_PROMPT_PREFIX=""
12         ZSH_THEME_LOGNAME_PROMPT_SUFFIX=""
13 fi
14 ZSH_THEME_LOGNAME_PROMPT_SUFFIX_SPACING="@"
15
16 function ax_logname_prompt_root() {
17         (( $UID == 0 )) || return 1
18         return 0
19 }
20
21 function ax_logname_prompt_yn() {
22         local func
23         for func ($ax_logname_prompt_functions); do
24                 $func || continue
25                 echo "${ZSH_THEME_LOGNAME_PROMPT_PREFIX_SPACING}${ZSH_THEME_LOGNAME_PROMPT_PREFIX}${1:-$LOGNAME}${ZSH_THEME_LOGNAME_PROMPT_SUFFIX}${ZSH_THEME_LOGNAME_PROMPT_SUFFIX_SPACING}"
26                 return
27         done
28 }
29
30 ax_logname_prompt_functions=(ax_logname_prompt_root)
31
32 # Hostname
33
34 ZSH_THEME_HOSTNAME_PROMPT_PREFIX_SPACING=""
35 ZSH_THEME_HOSTNAME_PROMPT_PREFIX=""
36 ZSH_THEME_HOSTNAME_PROMPT_SUFFIX=""
37 ZSH_THEME_HOSTNAME_PROMPT_SUFFIX_SPACING=":"
38
39 function ax_hostname_prompt_root() {
40         (( $UID == 0 )) || return 1
41         return 0
42 }
43
44 function ax_hostname_prompt_yn() {
45         local func
46         for func ($ax_hostname_prompt_functions); do
47                 $func || continue
48                 echo "${ZSH_THEME_HOSTNAME_PROMPT_PREFIX_SPACING}${ZSH_THEME_HOSTNAME_PROMPT_PREFIX}${1:-$SHORT_HOST}${ZSH_THEME_HOSTNAME_PROMPT_SUFFIX}${ZSH_THEME_HOSTNAME_PROMPT_SUFFIX_SPACING}"
49                 return
50         done
51 }
52
53 ax_hostname_prompt_functions=()
54
55 # VCS
56
57 if axzsh_is_utf_terminal; then
58         clean="✔"; dirty="✘"; ahead="→"; behind="←"
59 else
60         clean="+"; dirty="x"; ahead=">"; behind="<"
61 fi
62
63 ZSH_THEME_VCS_PROMPT_PREFIX_SPACING="("
64 ZSH_THEME_VCS_PROMPT_PREFIX="%{$fg_no_bold[yellow]%}"
65 ZSH_THEME_VCS_PROMPT_SUFFIX="%{$reset_color%}"
66 ZSH_THEME_VCS_PROMPT_SUFFIX_SPACING=")"
67
68 ZSH_THEME_VCS_PROMPT_CLEAN=" %{$fg_no_bold[green]%}$clean"
69 ZSH_THEME_VCS_PROMPT_DIRTY=" %{$fg_no_bold[red]%}$dirty"
70 ZSH_THEME_VCS_PROMPT_AHEAD="%{$fg_no_bold[cyan]%}$ahead"
71 ZSH_THEME_VCS_PROMPT_BEHIND="%{$fg_no_bold[blue]%}$behind"
72
73 unset clean dirty ahead behind
74
75 function ax_vcs_prompt() {
76         local func
77         local p
78         for func ($ax_vcs_prompt_functions); do
79                 p=$( $func ) || continue
80                 echo "${ZSH_THEME_VCS_PROMPT_PREFIX_SPACING}${ZSH_THEME_VCS_PROMPT_PREFIX}${p}${ZSH_THEME_VCS_PROMPT_SUFFIX}${ZSH_THEME_VCS_PROMPT_SUFFIX_SPACING}"
81                 return
82         done
83 }
84
85 ax_vcs_prompt_functions=()
86
87 # Prompt
88
89 ZSH_THEME_PROMPT="$"
90 ZSH_THEME_PROMPT_ROOT="#"
91
92 ZSH_THEME_PROMPT_PREFIX_SPACING=""
93 ZSH_THEME_PROMPT_PREFIX=""
94 ZSH_THEME_PROMPT_ROOT_PREFIX=""
95 ZSH_THEME_PROMPT_SUFFIX=""
96 ZSH_THEME_PROMPT_SUFFIX_SPACING=""
97
98 function ax_prompt() {
99         local p
100         (( $UID == 0 )) \
101                 && p="${ZSH_THEME_PROMPT_ROOT_PREFIX}${ZSH_THEME_PROMPT_ROOT}" \
102                 || p="${ZSH_THEME_PROMPT_PREFIX}${ZSH_THEME_PROMPT}"
103         echo "${ZSH_THEME_PROMPT_PREFIX_SPACING}${p}${ZSH_THEME_PROMPT_SUFFIX}${ZSH_THEME_PROMPT_SUFFIX_SPACING}"
104 }
105
106 # Options and defaults
107
108 setopt PROMPT_SUBST