zsh: Install pm
[wynter-salt-workstation.git] / roles / core / shell / files / dot.zshrc
blob31bb2f932a6d9ed5e09dd17200b21f44f7875f4c
1 #   -------------------------------------------------------------
2 #   Zsh configuration
3 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
4 #   Project:        Wynter
5 #   Created:        2017-10-26
6 #   License:        Trivial work, not eligible to copyright
7 #   -------------------------------------------------------------
9 #   -------------------------------------------------------------
10 #   Table of contents
11 #   -------------------------------------------------------------
13 #   :: Completions
14 #   :: History
15 #   :: Prompt
16 #   :: Background jobs
17 #   :: Compatibility with csh
18 #   :: SSH
19 #   :: Keys bindings
20 #   :: External modules
21 #   :: VCS
22 #   :: Aliases for salt-wrapper
24 #   -------------------------------------------------------------
26 #   -------------------------------------------------------------
27 #   Completions
29 #   This section has been prepared with compinstall
30 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
32 zstyle ':completion:*' completer _expand _complete _ignored _correct _approximate
33 zstyle ':completion:*' completions 1
34 zstyle ':completion:*' glob 1
35 zstyle ':completion:*' matcher-list ''
36 zstyle ':completion:*' max-errors 4
37 zstyle ':completion:*' substitute 1
39 autoload -Uz compinit
40 compinit
42 setopt extendedglob
44 #   -------------------------------------------------------------
45 #   History
46 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
48 HISTFILE=~/.histfile
49 HISTSIZE=10000
50 SAVEHIST=10000
51 setopt appendhistory
53 #   -------------------------------------------------------------
54 #   Prompt
55 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
57 prompt='%B%/%b ] '
59 #   -------------------------------------------------------------
60 #   Background jobs
61 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
63 setopt notify
65 #   -------------------------------------------------------------
66 #   Compatibility with csh
68 #   makecheck / https://news.ycombinator.com/item?id=4201636
69 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
71 setenv () {
72     if [ "x$1" = "x" ] ; then
73         echo "$0: environment variable name required" >&2
74     elif [ "x$2" = "x" ] ; then
75         echo "$0: environment variable value required" >&2
76     else
77         export $1=$2
78     fi
81 unsetenv () {
82     if [ "x$1" = "x" ] ; then
83         echo "$0: environment variable name required" >&2
84     else
85         unset $1
86     fi
89 #   -------------------------------------------------------------
90 #   SSH
91 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
93 source $HOME/bin/ssh-agent-session
95 #   -------------------------------------------------------------
96 #   Keys bindings
98 #   http://zshwiki.org/home/zle/bindkeys
99 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
101 bindkey -e
103 [[ $TERM == screen ]] && TERM=screen-256color
105 autoload zkbd
106 function zkbd_file() {
107     [[ -f ~/.zkbd/${TERM}-${VENDOR}-${OSTYPE} ]] && printf '%s' ~/".zkbd/${TERM}-${VENDOR}-${OSTYPE}" && return 0
108     [[ -f ~/.zkbd/${TERM}-${DISPLAY}          ]] && printf '%s' ~/".zkbd/${TERM}-${DISPLAY}"          && return 0
109     return 1
112 [[ ! -d ~/.zkbd ]] && mkdir ~/.zkbd
113 keyfile=$(zkbd_file)
114 ret=$?
115 if [[ ${ret} -ne 0 ]]; then
116     zkbd
117     keyfile=$(zkbd_file)
118     ret=$?
120 if [[ ${ret} -eq 0 ]] ; then
121     source "${keyfile}"
122 else
123     printf 'Failed to setup keys using zkbd.\n'
125 unfunction zkbd_file; unset keyfile ret
127 autoload -U up-line-or-beginning-search
128 autoload -U down-line-or-beginning-search
129 zle -N up-line-or-beginning-search
130 zle -N down-line-or-beginning-search
132 export WORDCHARS='*?_[]~=&;!#$%^(){}'
134 [[ -n "$key[Home]"      ]] && bindkey -- "$key[Home]"      beginning-of-line
135 [[ -n "$key[End]"       ]] && bindkey -- "$key[End]"       end-of-line
136 [[ -n "$key[Insert]"    ]] && bindkey -- "$key[Insert]"    overwrite-mode
137 [[ -n "$key[Backspace]" ]] && bindkey -- "$key[Backspace]" backward-delete-char
138 [[ -n "$key[Delete]"    ]] && bindkey -- "$key[Delete]"    delete-char
139 [[ -n "$key[Up]"        ]] && bindkey -- "$key[Up]"        up-line-or-beginning-search
140 [[ -n "$key[Down]"      ]] && bindkey -- "$key[Down]"      down-line-or-beginning-search
141 [[ -n "$key[Left]"      ]] && bindkey -- "$key[Left]"      backward-char
142 [[ -n "$key[Right]"     ]] && bindkey -- "$key[Right]"     forward-char
144 #   -------------------------------------------------------------
145 #   External modules
147 #   :: pm
148 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
150 source ~/.pm/pm.zsh
152 #   -------------------------------------------------------------
153 #   VCS
155 #   :: alias to git-achievements
156 #   :: vcs_info prompt
158 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
160 alias git=git-achievements
161 compdef git-achievements=git
163 setopt prompt_subst
164 autoload -Uz vcs_info
166 zstyle ':vcs_info:*' actionformats \
167     '%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{3}|%F{1}%a%F{5}]%f '
168 zstyle ':vcs_info:*' formats       \
169     '%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{5}]%f '
170 zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat '%b%F{1}:%F{3}%r'
172 zstyle ':vcs_info:*' enable git cvs svn
174 vcs_info_wrapper() {
175     vcs_info
176     if [ -n "$vcs_info_msg_0_" ]; then
177         echo "%{$fg[grey]%}${vcs_info_msg_0_}%{$reset_color%}$del"
178     fi
180 RPROMPT=$'$(vcs_info_wrapper)'
182 #   -------------------------------------------------------------
183 #   Salt wrapper
185 #   https://docs.nasqueron.org/salt-wrapper/admin.html#shell-aliases
186 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
188 alias salt='salt-wrapper salt'
189 alias salt-call='salt-wrapper salt-call'
190 alias salt-cloud='salt-wrapper salt-cloud'
191 alias salt-key='salt-wrapper salt-key'
192 alias salt-run='salt-wrapper salt-run'
193 alias salt-ssh='salt-wrapper salt-ssh'