-
Notifications
You must be signed in to change notification settings - Fork 0
/
dot_zshrc
220 lines (173 loc) · 5.97 KB
/
dot_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
# -*-mode:bash-*- vim:ft=sh
# shellcheck shell=sh disable=SC1090,SC1091
# ~/.zshrc
# =============================================================================
# Executed by Z shell for interactive shells and holds Z shell specific
# configurations.
#
# This file will be read by Z shell instead of any existing `~/.profile`. For
# complete compatibility this file also includes the `~/.profile` script to set
# non Z shell specfic variables.
#
# See https://zsh.sourceforge.net/
# Load configurations common across shell environments.
for file in "${HOME}/.profile" "${HOME}/.aliases" "${HOME}/.functions"; do
if [[ -f "${file}" ]]; then
source "${file}"
fi
done
# ================
# === Commands ===
# ================
# Set fpath to include custom functions and completions.
if [ -d "${HOME}/.local/share" ]; then
# cannot use globbing here because the value of fpath is an array of strings.
# shellcheck disable=SC2206
fpath=("${HOME}/.local/share/functions" "${HOME}/.local/share/zsh-completions" $fpath)
fi
# Allow long commands to be editied with ctrl+x+e
autoload -U edit-command-line
zle -N edit-command-line
bindkey '^xe' edit-command-line
bindkey '^x^e' edit-command-line
# this would normally be done by oh-my-zsh but even if was installed, some apps
# still need it again
autoload -Uz compinit && compinit -i
# highlight current completion option
zstyle ':completion:*' menu select
# use the same colors for completion as ls
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
# use emacs-style zsh bindings.
# a full list of bindings can be found with the command: `bindkey -M emacs`
bindkey -e
# emacs-style zsh bindings
bindkey "^A" beginning-of-line
bindkey "^E" end-of-line
bindkey "^U" backward-kill-line
bindkey "^H" backward-delete-word
# for rxvt
bindkey "\e[8~" end-of-line
bindkey "\e[7~" beginning-of-line
# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
bindkey "\eOH" beginning-of-line
bindkey "\eOF" end-of-line
# for freebsd console
bindkey "\e[H" beginning-of-line
bindkey "\e[F" end-of-line
# completion in the middle of a line
bindkey '^i' expand-or-complete-prefix
# other bindings
bindkey "^[[1~" beginning-of-line
bindkey "^[[4~" end-of-line
bindkey "^[[5~" beginning-of-history
bindkey "^[[6~" end-of-history
bindkey "^[[3~" delete-char
bindkey "^[[1;2C" forward-word
bindkey "^[[1;2D" backward-word
bindkey "^[[H" beginning-of-line
bindkey "^[[F" end-of-line
# ===================
# === Corrections ===
# ===================
setopt correct # enable command auto-correction
# setopt correct_all # enable argument auto-correction
# =================
# === Directory ===
# =================
setopt auto_pushd
setopt pushd_ignore_dups
setopt pushdminus
setopt auto_cd
# ====================
# === Flow control ===
# ====================
stty -ixon
unsetopt flow_control # Allow commands to be parked with ctrl+q
# ========================
# === Google Cloud SDK ===
# ========================
if [ -f "${HOME}/.local/share/google-cloud-sdk/path.zsh.inc" ]; then
source "${HOME}/.local/share/google-cloud-sdk/path.zsh.inc"
source "${HOME}/.local/share/google-cloud-sdk/completion.zsh.inc"
fi
# ===========
# === GPG ===
# ===========
# This create-socketdir command is only required if a non default home
# directory is used and the /run based sockets shall be used. For the default
# home directory GnUPG creates a directory on the fly.
if [[ ! -d "${HOME}/.gnupg" && ( -d /run/user || -d /var/run/user ) ]]; then
gpgconf --create-socketdir
fi
# ===============
# === History ===
# ===============
[ -z "${HISTFILE}" ] && HISTFILE="${HOME}/.zsh_history"
[ "${HISTSIZE}" -lt 50000 ] && HISTSIZE=50000
[ "${SAVEHIST}" -lt 10000 ] && SAVEHIST=10000
setopt extended_history # Record timestamp of command in HISTFILE
setopt hist_expire_dups_first # Delete duplicates first when HISTFILE size exceeds HISTSIZE
setopt hist_ignore_dups # Ignore duplicated commands history list
setopt hist_ignore_space # Ignore commands that start with space
setopt hist_find_no_dups # Ignore duplicated commands when searching
setopt hist_reduce_blanks # Remove whitespace from commands before adding to history
setopt hist_verify # Show command with history expansion to user before running it
setopt append_history # Append to history
setopt inc_append_history # Adds commands as they are typed, not at shell exit
# setopt share_history # Share command history data
# Cycle through history with the up and down arrow keys.
autoload -U history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
# macOS
bindkey "^[[A" history-beginning-search-backward-end
bindkey "^[[B" history-beginning-search-forward-end
# Linux
bindkey "^[OA" history-beginning-search-backward-end
bindkey "^[OB" history-beginning-search-forward-end
# ==============
# === zoxide ===
# ==============
if [[ -n "$(command -v zoxide)" ]]; then
eval "$(zoxide init zsh)"
fi
# =============
# === mcfly ===
# =============
if [[ -n "$(command -v mcfly)" ]]; then
eval "$(mcfly init zsh)"
fi
# ==============
# === Prompt ===
# ==============
git_prompt() {
ref=$(git symbolic-ref HEAD | cut -d'/' -f3)
echo "${ref}"
}
setopt prompt_subst
autoload -Uz vcs_info
precmd() {
vcs_info
}
# Format the vcs_info_msg_0_ variable
zstyle ':vcs_info:*' enable git cvs svn
zstyle ':vcs_info:git:*' formats ' (%b)'
vcs_info
# shellcheck disable=SC2016 disable=SC2034
PROMPT='%B%n@%m%b:%~${vcs_info_msg_0_}$ '
# ===========
# === SSH ===
# ===========
update_auth_sock
# ==============
# === direnv ===
# ==============
# For the environment to be configured correctly direnv must be placed last in
# this file so not to conflict with other environemnt variables.
if [[ -n "$(command -v direnv)" ]]; then
eval "$(direnv hook zsh)"
fi
# Load additional configurations.
if [ -f "${HOME}/.zshrc.after" ]; then
source "${HOME}/.zshrc.after"
fi