-
Notifications
You must be signed in to change notification settings - Fork 1
/
dot_zshrc.tmpl
221 lines (187 loc) · 4.93 KB
/
dot_zshrc.tmpl
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
# shellcheck disable=SC0-SC9999
# .zshrc
# By Roxy Light
## PROMPT ##
function precmd {
vcs_info
}
# Left prompt:
# exit code 1
#
# user@host:cwd
# vcs_info (line disappears if no VCS is in use
# Z
PROMPT=\
$'%(?..%F{red}exit code %?%f\n)'\
$'\n%F{cyan}%n@%m%f:${vcs_info_msg_0_:-"%F{magenta}%~%f"}\n'\
$'${vcs_info_msg_1_}'\
$'%(!.#.Z) '
setopt promptsubst
autoload -Uz vcs_info
zstyle ':vcs_info:*' enable git hg
zstyle ':vcs_info:*' check-for-changes false
zstyle ':vcs_info:*' get-revision true
zstyle ':vcs_info:*' get-mq false
zstyle ':vcs_info:*' get-bookmarks false
zstyle ':vcs_info:*' use-prompt-escapes true
zstyle ':vcs_info:*' unstagedstr '+'
zstyle ':vcs_info:*' branchformat '%b'
zstyle ':vcs_info:*' hgrevformat '%r'
zstyle ':vcs_info:*' patch-format ' [%p]'
zstyle ':vcs_info:*' nopatch-format ''
zstyle ':vcs_info:*' formats $'%F{magenta}%R%f/%F{magenta}%S%f' $'@ %b%m %u\n'
zstyle ':vcs_info:*' actionformats $'%F{magenta}%R%f/%F{magenta}%S%f' $'@ %b%m [%a]%u\n'
## SHELL VARIABLES ##
umask 022
# Use Vim key bindings
bindkey -v
# Make cd implicit
setopt autocd
# Add warning for redirecting to existing files
setopt noclobber
# Add a couple more interesting globs
setopt extendedglob
# Allow comments on the command line
setopt interactivecomments
# History
HISTFILE=~/.zsh_history
HISTSIZE=1000
SAVEHIST=1000
# Enable "incognito mode" by prepending space
setopt histignorespace
# Makes multiple terminals share history nicely
setopt sharehistory
## ALIASES ##
{{- if eq .chezmoi.os "darwin" }}
alias ls="ls -G"
{{- else }}
alias ls="ls --color"
{{- end }}
alias GRP="grep -Hn --color"
alias ED='export EDITOR=vim && echo "ed is the standard text editor" 1>&2'
alias bzip2="bzip2 -k"
alias bunzip2="bunzip2 -k"
alias -g pgd="|& ${PAGER-less}"
alias -g cdf="| colordiff"
function ll { ls -l -h "$@" }
function pdb { python -m pdb "$@" }
function mkcd { mkdir "$@" && cd "${@[-1]}" }
function gitroot {
case $# in
0)
git rev-parse --show-toplevel
;;
1)
git -C "$1" rev-parse --show-toplevel
;;
*)
echo "usage: gitroot [DIR]" 1>&2
return 64
;;
esac
}
{{- if ne .chezmoi.os "darwin" }}
function open {
for arg in "$@"; do
xdg-open "$arg"
done
}
{{- end }}
{{- if eq .chezmoi.os "darwin" }}
alias tailscale=/Applications/Tailscale.app/Contents/MacOS/Tailscale
{{- end }}
function save-nix-shell {
if [[ $# -gt 1 ]]; then
echo "usage: save-nix-shell [FILE]" 1>&2
return 64
fi
local shellfile="${1:-shell.nix}"
nix-build -o "$(dirname "$shellfile")/.nix-shell" "$shellfile" -A inputDerivation
}
function GOWEB {
GOMAXPROCS=8 nice godoc -http=localhost:6060 "$@"
}
mkruntimedir() {
if [[ -z "${XDG_RUNTIME_DIR:-}" ]]; then
echo '$XDG_RUNTIME_DIR not set' 1>&2
return 1
fi
sudo bash -c \
"mkdir -p '$XDG_RUNTIME_DIR' && chown $(id -u):$(id -g) '$XDG_RUNTIME_DIR' && chmod 700 '$XDG_RUNTIME_DIR'"
}
# tmux
function VS { tmux split-window -h "$*" }
function SP { tmux split-window -v "$*" }
function NEWT { tmux new-window "$*" }
function CLR { clear && tmux clear-history }
# Ruby
alias bx='bundle exec'
function __wrap_bundle_exec {
local dir="$(pwd)"
local found_gemfile=0
while true; do
if [[ -e "$dir/Gemfile" ]]; then
found_gemfile=1
break
fi
local newdir="$(dirname "$dir")"
if [[ "$dir" == "$newdir" ]]; then
break
fi
dir="$newdir"
done
if [[ "$found_gemfile" -eq 1 ]]; then
bundle exec "$@"
else
"$@"
fi
}
for cmdname in rails rake rspec rubocop solargraph webpack webpack-dev-server; do
alias $cmdname="__wrap_bundle_exec $cmdname"
done
unset cmdname
{{- if and (eq .chezmoi.os "linux") (get .chezmoi.kernel "osrelease" | lower | contains "microsoft") }}
## SSH AGENT ##
if [[ -z "$SSH_AUTH_SOCK" ]]; then
auth_socks=( "${TMPDIR:-/tmp}"/ssh-*/agent.*(N) )
for sf in "${auth_socks[@]}"; do
[[ -S "$sf" ]] || continue
SSH_AUTH_SOCK="$sf" ssh-add -l >& /dev/null
if [[ $? -ne 2 ]]; then
export SSH_AUTH_SOCK="$sf"
break
fi
done
unset auth_socks
if [[ -z "$SSH_AUTH_SOCK" ]]; then
eval "$(ssh-agent -s)"
fi
fi
{{- end }}
## EXTENSIONS ##
# Load zmv: The multi-file move
autoload -U zmv
# Load completion
autoload -U compinit
compinit
compdef __tmux_split_complete VS SP NEWT
compdef _precommand __wrap_bundle_exec
if [[ -e "$HOME/google-cloud-sdk/completion.zsh.inc" ]]; then
source "$HOME/google-cloud-sdk/completion.zsh.inc"
fi
if [[ -e /usr/share/google-cloud-sdk/completion.zsh.inc ]]; then
source /usr/share/google-cloud-sdk/completion.zsh.inc
fi
if [[ "$TERM_PROGRAM" == vscode && ! -z "$TERM_PROGRAM_VERSION" ]]; then
vscode_minor_version="$(echo "$TERM_PROGRAM_VERSION" | sed -e 's/^1\.//' | sed -e 's/\.[0-9]\+$//')"
if [[ "$vscode_minor_version" -ge 70 ]]; then
source "$(code --locate-shell-integration-path zsh)"
fi
unset vscode_minor_version
fi
eval "$(direnv hook zsh)"
{{- range .zshrc }}
if [[ -e '{{ . }}' ]]; then
source '{{ . }}'
fi
{{- end }}