-
Notifications
You must be signed in to change notification settings - Fork 0
/
.zshrc
328 lines (271 loc) · 9.57 KB
/
.zshrc
1
2
3
4
5
6
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
#
# Teh H4xx
#
if [ "$(uname)" = "Darwin" ]; then
# Suppress unwanted Homebrew-installed stuff.
if [ -e /usr/local/share/zsh/site-functions/_git ]; then
mv -f /usr/local/share/zsh/site-functions/{,disabled.}_git
fi
fi
#
# Completion
#
autoload -U compinit
compinit -u
# Make completion:
# - Case-insensitive.
# - Accept abbreviations after . or _ or - (ie. f.b -> foo.bar).
# - Substring complete (ie. bar -> foobar).
zstyle ':completion:*' matcher-list 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
# Colorize completions using default `ls` colors.
zstyle ':completion:*' list-colors ''
#
# Correction
#
# exceptions to auto-correction
alias bundle='nocorrect bundle'
alias cabal='nocorrect cabal'
alias man='nocorrect man'
alias mkdir='nocorrect mkdir'
alias mv='nocorrect mv'
alias stack='nocorrect stack'
alias sudo='nocorrect sudo'
#
# Prompt
#
autoload -U colors
colors
# http://zsh.sourceforge.net/Doc/Release/User-Contributions.html
autoload -Uz vcs_info
zstyle ':vcs_info:*' enable git hg
zstyle ':vcs_info:*' check-for-changes true
zstyle ':vcs_info:*' stagedstr "%F{green}●%f" # default 'S'
zstyle ':vcs_info:*' unstagedstr "%F{red}●%f" # default 'U'
zstyle ':vcs_info:*' use-simple true
zstyle ':vcs_info:git+set-message:*' hooks git-untracked
zstyle ':vcs_info:git*:*' formats '[%b%m%c%u] ' # default ' (%s)-[%b]%c%u-'
zstyle ':vcs_info:git*:*' actionformats '[%b|%a%m%c%u] ' # default ' (%s)-[%b|%a]%c%u-'
zstyle ':vcs_info:hg*:*' formats '[%m%b] '
zstyle ':vcs_info:hg*:*' actionformats '[%b|%a%m] '
zstyle ':vcs_info:hg*:*' branchformat '%b'
zstyle ':vcs_info:hg*:*' get-bookmarks true
zstyle ':vcs_info:hg*:*' get-revision true
zstyle ':vcs_info:hg*:*' get-mq false
zstyle ':vcs_info:hg*+gen-hg-bookmark-string:*' hooks hg-bookmarks
zstyle ':vcs_info:hg*+set-message:*' hooks hg-message
function +vi-hg-bookmarks() {
emulate -L zsh
if [[ -n "${hook_com[hg-active-bookmark]}" ]]; then
hook_com[hg-bookmark-string]="${(Mj:,:)@}"
ret=1
fi
}
function +vi-hg-message() {
emulate -L zsh
# Suppress hg branch display if we can display a bookmark instead.
if [[ -n "${hook_com[misc]}" ]]; then
hook_com[branch]=''
fi
return 0
}
function +vi-git-untracked() {
emulate -L zsh
if [[ -n $(git ls-files --exclude-standard --others 2> /dev/null) ]]; then
hook_com[unstaged]+="%F{blue}●%f"
fi
}
RPROMPT_BASE="\${vcs_info_msg_0_}%F{blue}%~%f"
setopt PROMPT_SUBST
export PS1="%F{green}${SSH_TTY:+%n@%m}%f%B${SSH_TTY:+:}%b%F{blue}%1~%(?..%F{yellow}%B!%b%f)%F{red}%B%(!.#.$)%b%f "
export RPROMPT=$RPROMPT_BASE
export SPROMPT="zsh: correct %F{red}'%R'%f to %F{red}'%r'%f [%B%Uy%u%bes, %B%Un%u%bo, %B%Ue%u%bdit, %B%Ua%u%bbort]? "
#
# History
#
export HISTSIZE=100000
export HISTFILE="$HOME/.history"
export SAVEHIST=$HISTSIZE
#
# Options
#
setopt autocd # .. is shortcut for cd .. (etc)
setopt autoparamslash # tab completing directory appends a slash
setopt autopushd # cd automatically pushes old dir onto dir stack
setopt clobber # allow clobbering with >, no need to use >!
setopt correct # command auto-correction
setopt correctall # argument auto-correction
setopt noflowcontrol # disable start (C-s) and stop (C-q) characters
setopt nonomatch # unmatched patterns are left unchanged
setopt histignorealldups # filter duplicates from history
setopt histignorespace # don't record commands starting with a space
setopt histverify # confirm history expansion (!$, !!, !foo)
setopt ignoreeof # prevent accidental C-d from exiting shell
setopt interactivecomments # allow comments, even in interactive shells
setopt printexitvalue # for non-zero exit status
setopt pushdignoredups # don't push multiple copies of same dir onto stack
setopt pushdsilent # don't print dir stack after pushing/popping
setopt sharehistory # share history across shells
#
# Bindings
#
bindkey -e # emacs bindings, set to -v for vi bindings
autoload history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "\e[A" history-beginning-search-backward-end # cursor up
bindkey "\e[B" history-beginning-search-forward-end # cursor down
autoload -U select-word-style
select-word-style bash # only alphanumeric chars are considered WORDCHARS
autoload -U edit-command-line
zle -N edit-command-line
bindkey '^x^e' edit-command-line
bindkey ' ' magic-space # do history expansion on space
# Replace standard history-incremental-search-{backward,forward} bindings.
# These are the same but permit patterns (eg. a*b) to be used.
bindkey "^r" history-incremental-pattern-search-backward
bindkey "^s" history-incremental-pattern-search-forward
#
# Other
#
source $HOME/.zsh/aliases
source $HOME/.zsh/common
source $HOME/.zsh/colors
source $HOME/.zsh/exports
source $HOME/.zsh/functions
source $HOME/.zsh/path
source $HOME/.zsh/vars
test -e $HOME/.zsh/common.private && source $HOME/.zsh/common.private
test -e $HOME/.zsh/functions.private && source $HOME/.zsh/functions.private
#
# Third-party
#
CHRUBY=/usr/local/share/chruby
test -e "$CHRUBY/chruby.sh" && . "$CHRUBY/chruby.sh"
test -e "$CHRUBY/auto.sh" && . "$CHRUBY/auto.sh"
#
# Hooks
#
autoload -U add-zsh-hook
function set-tab-and-window-title() {
emulate -L zsh
local CMD="${1:gs/$/\\$}"
print -Pn "\e]0;$CMD:q\a"
}
function update-window-title-precmd() {
emulate -L zsh
set-tab-and-window-title `history | tail -1 | cut -b8-`
}
add-zsh-hook precmd update-window-title-precmd
function update-window-title-preexec() {
emulate -L zsh
setopt extended_glob
# skip ENV=settings, sudo, ssh; show first distinctive word of command;
# mostly stolen from:
# https://github.com/robbyrussell/oh-my-zsh/blob/master/lib/termsupport.zsh
set-tab-and-window-title ${2[(wr)^(*=*|mosh|ssh|sudo)]}
}
add-zsh-hook preexec update-window-title-preexec
typeset -F SECONDS
function record-start-time() {
emulate -L zsh
ZSH_START_TIME=${ZSH_START_TIME:-$SECONDS}
}
add-zsh-hook preexec record-start-time
function report-start-time() {
emulate -L zsh
if [ $ZSH_START_TIME ]; then
local DELTA=$(($SECONDS - $ZSH_START_TIME))
local DAYS=$((~~($DELTA / 86400)))
local HOURS=$((~~(($DELTA - $DAYS * 86400) / 3600)))
local MINUTES=$((~~(($DELTA - $DAYS * 86400 - $HOURS * 3600) / 60)))
local SECS=$(($DELTA - $DAYS * 86400 - $HOURS * 3600 - $MINUTES * 60))
local ELAPSED=''
test "$DAYS" != '0' && ELAPSED="${DAYS}d"
test "$HOURS" != '0' && ELAPSED="${ELAPSED}${HOURS}h"
test "$MINUTES" != '0' && ELAPSED="${ELAPSED}${MINUTES}m"
if [ "$ELAPSED" = '' ]; then
SECS="$(print -f "%.2f" $SECS)s"
elif [ "$DAYS" != '0' ]; then
SECS=''
else
SECS="$((~~$SECS))s"
fi
ELAPSED="${ELAPSED}${SECS}"
local ITALIC_ON=$'\e[3m'
local ITALIC_OFF=$'\e[23m'
export RPROMPT="%F{cyan}%{$ITALIC_ON%}${ELAPSED}%{$ITALIC_OFF%}%f $RPROMPT_BASE"
unset ZSH_START_TIME
else
export RPROMPT="$RPROMPT_BASE"
fi
}
add-zsh-hook precmd report-start-time
function auto-ls-after-cd() {
emulate -L zsh
# Only in response to a user-initiated `cd`, not indirectly (eg. via another
# function).
if [ "$ZSH_EVAL_CONTEXT" = "toplevel:shfunc" ]; then
ls -a
fi
}
# add-zsh-hook chpwd auto-ls-after-cd
# for prompt
add-zsh-hook precmd vcs_info
# adds `cdr` command for navigating to recent directories
autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
add-zsh-hook chpwd chpwd_recent_dirs
# enable menu-style completion for cdr
zstyle ':completion:*:*:cdr:*:*' menu selection
# fall through to cd if cdr is passed a non-recent dir as an argument
zstyle ':chpwd:*' recent-dirs-default true
# local and host-specific overrides
HOST_RC=$HOME/.zsh/host/$(hostname -s)
test -f $HOST_RC && source $HOST_RC
LOCAL_RC=$HOME/.zshrc.local
test -f $LOCAL_RC && source $LOCAL_RC
#
# /etc/motd
#
if [ -e /etc/motd ]; then
if ! cmp -s $HOME/.hushlogin /etc/motd; then
tee $HOME/.hushlogin < /etc/motd
fi
fi
ZSH_THEME="pygmalion"
export ZSH=$HOME/.oh-my-zsh
plugins=(git grunt npm nvm vagrant kitchen node rsync tmux man brew)
source $ZSH/oh-my-zsh.sh
source $HOME/.antigen/antigen.zsh
export NVM_DIR="$HOME/.nvm"
export PKG_CONFIG_PATH=$(brew --prefix pkgconfig)
source $(brew --prefix nvm)/nvm.sh
antigen bundle zsh-users/zsh-syntax-highlighting
antigen bundle Seinh/git-prune
# antigen bundle supercrabtree/k
antigen-bundle Tarrasch/zsh-bd
antigen bundle unixorn/autoupdate-antigen.zshplugin
antigen bundle elstgav/branch-manager
# antigen bundle unixorn/bitbucket-git-helpers.plugin.zsh
antigen bundle davidafsilva/vert.x-omz-plugin
antigen bundle akoenig/npm-run.plugin.zsh
antigen bundle lukechilds/zsh-better-npm-completion
# antigen bundle marzocchi/zsh-notify
antigen bundle zsh-users/zsh-history-substring-search
antigen bundle sharat87/zsh-vim-mode
antigen bundle rupa/z
antigen apply
# alias k=sandbox
# zstyle ':notify:*' error-icon "https://media3.giphy.com/media/10ECejNtM1GyRy/200_s.gif"
# zstyle ':notify:*' error-title "wow such #fail"
# zstyle ':notify:*' success-icon "https://s-media-cache-ak0.pinimg.com/564x/b5/5a/18/b55a1805f5650495a74202279036ecd2.jpg"
# zstyle ':notify:*' success-title "very #success. wow"
source /Users/williamsoares/.gulp.plugin.zsh/gulp.plugin.zsh
function zle-line-init zle-keymap-select {
RPS1="${${KEYMAP/vicmd/-- NORMAL --}/(main|viins)/-- INSERT --}"
RPS2=$RPS1
zle reset-prompt
}
zle -N zle-line-init
zle -N zle-keymap-select
export PATH=/Users/williamsoares/bin/Sencha/Cmd/:$PATH
export PPSDS_BOX_PROJECT_SRC_PATH="/Users/williamsoares/IdeaProjects/ppsds-static-client/"