forked from yous/dotfiles
-
Notifications
You must be signed in to change notification settings - Fork 0
/
zshrc
281 lines (248 loc) · 7.7 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
# Make the $path array have unique values.
typeset -U path
function add_to_path_once() {
path=("$1" $path)
}
function bundle_install() {
local bundler_version bundler_1_4_0
bundler_version=($(bundle version))
[ -z "${bundler_version}" ] && return
bundler_version=(${(s/./)bundler_version[3]})
bundler_1_4_0=(1 4 0)
local jobs_available=1
for i in {1..3}; do
if [ ${bundler_version[$i]} -gt ${bundler_1_4_0[$i]} ]; then
break
fi
if [ ${bundler_version[$i]} -lt ${bundler_1_4_0[$i]} ]; then
jobs_available=0
break
fi
done
if [ $jobs_available -eq 1 ]; then
if [[ "$(uname)" == 'Darwin' ]]; then
local cores_num="$(sysctl -n hw.ncpu)"
else
local cores_num="$(nproc)"
fi
bundle install --jobs=$cores_num $@
else
bundle install $@
fi
}
# Add /usr/local/bin to PATH for Mac OS X
if [[ "$(uname)" == 'Darwin' ]]; then
add_to_path_once "/usr/local/bin:/usr/local/sbin"
fi
# Load Linuxbrew
if [[ -d "$HOME/.linuxbrew" ]]; then
add_to_path_once "$HOME/.linuxbrew/bin"
export MANPATH="$HOME/.linuxbrew/share/man:$MANPATH"
export INFOPATH="$HOME/.linuxbrew/share/info:$INFOPATH"
fi
# Check if zplug is installed
if [[ ! -d "$HOME/.zplug" ]]; then
git clone https://github.com/zplug/zplug "$HOME/.zplug/repos/zplug/zplug"
fi
# Load zplug
source $HOME/.zplug/repos/zplug/zplug/init.zsh
# Let zplug manage zplug
zplug "zplug/zplug"
# Vanilla shell
zplug "yous/vanilli.sh"
# Additional completion definitions for Zsh
zplug "zsh-users/zsh-completions"
# Load the theme.
zplug "yous/lime"
# Syntax highlighting bundle. zsh-syntax-highlighting must be loaded after
# excuting compinit command and sourcing other plugins.
zplug "zsh-users/zsh-syntax-highlighting", nice:9
# ZSH port of Fish shell's history search feature
zplug "zsh-users/zsh-history-substring-search", nice:10
# Install plugins if there are plugins that have not been installed
if ! zplug check; then
zplug install
fi
# Then, source plugins and add commands to $PATH
zplug load
# zsh-users/zsh-completions
zmodload zsh/terminfo
[ -n "${terminfo[kcuu1]}" ] && bindkey "${terminfo[kcuu1]}" history-substring-search-up
[ -n "${terminfo[kcud1]}" ] && bindkey "${terminfo[kcud1]}" history-substring-search-down
bindkey -M emacs '^P' history-substring-search-up
bindkey -M emacs '^N' history-substring-search-down
bindkey -M vicmd 'k' history-substring-search-up
bindkey -M vicmd 'j' history-substring-search-down
# Set PATH to include user's bin if it exists
if [ -d "$HOME/bin" ]; then
add_to_path_once "$HOME/bin"
fi
# Load autojump
if command -v autojump &> /dev/null; then
if [ -f "$HOME/.autojump/etc/profile.d/autojump.sh" ]; then
source "$HOME/.autojump/etc/profile.d/autojump.sh"
elif [ -f /etc/profile.d/autojump.zsh ]; then
source /etc/profile.d/autojump.zsh
elif [ -f /usr/share/autojump/autojump.zsh ]; then
source /usr/share/autojump/autojump.zsh
elif command -v brew &> /dev/null && [ -f `brew --prefix`/etc/autojump.sh ]; then
source `brew --prefix`/etc/autojump.sh
fi
elif [ -f "$HOME/.autojump/etc/profile.d/autojump.sh" ]; then
source "$HOME/.autojump/etc/profile.d/autojump.sh"
fi
# Load fzf
if [ -f ~/.fzf.zsh ]; then
source ~/.fzf.zsh
# fshow - git commit browser
fshow() {
git log --graph --color=always \
--format="%C(auto)%h%d %s %C(green)%cr%C(reset)" "$@" |
fzf --ansi --no-sort --reverse --tiebreak=index --bind=ctrl-s:toggle-sort \
--bind "ctrl-m:execute:
(grep -o '[a-f0-9]\{7\}' | head -1 |
xargs -I % sh -c 'git show --color=always % | less -R') << 'FZF-EOF'
{}
FZF-EOF"
}
fi
# Load chruby
if [ -e /usr/local/share/chruby/chruby.sh ]; then
source /usr/local/share/chruby/chruby.sh
source /usr/local/share/chruby/auto.sh
fi
# Load rbenv
if [ -e "$HOME/.rbenv" ]; then
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init - zsh)"
fi
# Load pyenv
if command -v pyenv &> /dev/null; then
eval "$(pyenv init - zsh)"
if command -v pyenv-virtualenv-init &> /dev/null; then
eval "$(pyenv virtualenv-init - zsh)"
fi
elif [ -e "$HOME/.pyenv" ]; then
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init - zsh)"
eval "$(pyenv virtualenv-init - zsh)"
fi
# Load RVM into a shell session *as a function*
if [[ -s "$HOME/.rvm/scripts/rvm" ]]; then
source "$HOME/.rvm/scripts/rvm"
if [[ "$(type rvm | head -n 1)" == "rvm is a shell function" ]]; then
# Add RVM to PATH for scripting
PATH=$PATH:$HOME/.rvm/bin
export rvmsudo_secure_path=1
# Use right RVM gemset when using tmux
if [[ "$TMUX" != "" ]]; then
rvm use default
cd ..;cd -
fi
fi
fi
# Set GOPATH for Go
if command -v go &> /dev/null; then
[ -d "$HOME/.go" ] || mkdir "$HOME/.go"
export GOPATH="$HOME/.go"
export PATH="$PATH:$GOPATH/bin"
fi
# Oh My Zsh sets custom LSCOLORS from lib/theme-and-appearance.zsh
# This is default LSCOLORS from the man page of ls
[[ "$(uname)" == 'Darwin' ]] && export LSCOLORS=exfxcxdxbxegedabagacad
# Check if reboot is required for Ubuntu
if [ -f /usr/lib/update-notifier/update-motd-reboot-required ]; then
function reboot-required() {
/usr/lib/update-notifier/update-motd-reboot-required
}
fi
# Enable keychain
if command -v keychain &> /dev/null; then
if [ -f "$HOME/.ssh/id_rsa" ]; then
eval `keychain --eval --quiet --agents ssh id_rsa`
elif [ -f "$HOME/.ssh/id_ed25519" ]; then
eval `keychain --eval --quiet --agents ssh id_ed25519`
fi
fi
# Unset local functions
unset -f add_to_path_once
# Define aliases
# Enable color support
ls --color -d . &> /dev/null && alias ls='ls --color=auto' || alias ls='ls -G'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
# Some more basic aliases
alias ll='ls -lh'
alias la='ls -lAh'
alias l='ls -lah'
alias md='mkdir -p'
alias rd='rmdir'
alias cd..='cd ..'
alias cd...='cd ../..'
alias cd....='cd ../../..'
alias cd.....='cd ../../../..'
alias cd......='cd ../../../../..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias ......='cd ../../../../..'
# Bundler
alias be='bundle exec'
alias bi='bundle_install'
alias bu='bundle update'
# Git
alias git='noglob git'
alias g='git'
alias ga='git add'
alias gapa='git add --patch'
alias gb='git branch'
alias gc='git commit -v'
alias gc!='git commit -v --amend'
alias gca='git commit -v -a'
alias gca!='git commit -v -a --amend'
alias gcb='git checkout -b'
alias gcm='git checkout master'
alias gco='git checkout'
alias gcp='git cherry-pick'
alias gd='git diff'
alias gdca='git diff --cached'
alias gf='git fetch'
alias ggpush='git push origin HEAD'
alias gl='git pull'
alias glg='git log --graph --pretty=format:"%C(yellow)%h %C(blue)%ar %C(green)%an%C(reset) %s%C(auto)%d"'
alias glga='git log --graph --pretty=format:"%C(yellow)%h %C(blue)%ar %C(green)%an%C(reset) %s%C(auto)%d" --all'
alias glgg='git log --graph --decorate'
alias glgga='git log --graph --decorate --all'
alias gp='git push'
alias gr='git remote'
alias gra='git remote add'
alias grb='git rebase'
alias grba='git rebase --abort'
alias grbc='git rebase --continue'
alias grbi='git rebase -i'
alias grup='git remote update'
alias gst='git status'
alias gsta='git stash'
alias gstd='git stash drop'
alias gstp='git stash pop'
# Vim
alias v='vim'
alias vi='vim'
alias ruby-server='ruby -run -ehttpd . -p8000 --bind-address=localhost'
# http://boredzo.org/blog/archives/2016-08-15/colorized-man-pages-understood-and-customized
function man() {
env \
LESS_TERMCAP_mb=$'\e[1;31m' \
LESS_TERMCAP_md=$'\e[1;31m' \
LESS_TERMCAP_me=$'\e[0m' \
LESS_TERMCAP_se=$'\e[0m' \
LESS_TERMCAP_so=$'\e[1;44;33m' \
LESS_TERMCAP_ue=$'\e[0m' \
LESS_TERMCAP_us=$'\e[1;32m' \
man "$@"
}
# Source local zshrc
if [ -f "$HOME/.zshrc.local" ]; then
source "$HOME/.zshrc.local"
fi