-
Notifications
You must be signed in to change notification settings - Fork 0
/
dot_zshrc
166 lines (137 loc) · 5.72 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
# Load zgen.
source "${HOME}/.zgen/zgen.zsh"
# If the init script doesn't exist.
if ! zgen saved; then
# Specify plugins and themes here.
zgen load romkatv/powerlevel10k powerlevel10k
zgen load zsh-users/zsh-autosuggestions
zgen load zsh-users/zsh-syntax-highlighting
zgen load zsh-users/zsh-history-substring-search
# Generate the init script from plugins above
zgen save
fi
# If you come from bash you might have to change your $PATH.
export PATH=$HOME/bin:/usr/local/bin:$PATH
# Make Rust binaries discoverable.
export PATH=$HOME/.cargo/bin:$PATH
# Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="powerlevel10k/powerlevel10k"
# Uncomment the following line to use hyphen-insensitive completion.
# Case-sensitive completion must be off. _ and - will be interchangeable.
HYPHEN_INSENSITIVE="true"
# Uncomment the following line to display red dots whilst waiting for completion.
# You can also set it to another string to have that shown instead of the default red dots.
# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f"
# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765)
COMPLETION_WAITING_DOTS="true"
# Which plugins would you like to load?
# Standard plugins can be found in $ZSH/plugins/
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(
zsh-autosuggestions # Suggestions from partial input. Like fish shell.
zsh-syntax-highlighting
zsh-history-substring-search
)
# This behaviour seems to exist out-of-the-box elsewhere, but not on
# M1 MacBook Pros with Alacritty 0.10.1 and Monterey 12.2.1.
# https://github.com/zsh-users/zsh-history-substring-search#usage
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down
# This is required to stop "Alt + Left" and "Alt + Right" from misbehaving
# in a chezmoi-started shell.
# Seems to only happen on an M1 MacBook Pro with Alacritty 0.10.1 and Monterey 12.2.1.
bindkey "^[b" backward-word
bindkey "^[f" forward-word
# This is required for "Alt + ." behaviour to work properly on M1 MacBook Pros
# with Alacritty 0.10.1 and Monterey 12.2.1.
bindkey "^[." insert-last-word
# This is required for "Alt + Backspace" behaviour to work properly on M1 MacBook Pros
# with Alacritty 0.10.1 and Monterey 12.2.1.
bindkey "^[^?" backward-delete-word
# User configuration
# export MANPATH="/usr/local/man:$MANPATH"
# Preferred editor for local and remote sessions
export EDITOR='nvim'
# HISTFILE seems to already be set by some ZSH plugin.
export SAVEHIST=1000000000 # How many records are saved to file.
export HISTSIZE=1000000000 # How many records are loaded into memory. Should be at least $SAVEHIST.
# Add commands to history immediately, so we can share it between shell sessions.
# https://zsh.sourceforge.io/Doc/Release/Options.html#index-SHARE_005fHISTORY
setopt share_history
# Add timestamp to command history.
# https://zsh.sourceforge.io/Doc/Release/Options.html#index-EXTENDED_005fHISTORY
export HISTTIMEFORMAT="[%F %T] "
setopt extended_history
# More history configuration.
# Taken from the ohmyzsh plugin: https://github.com/ohmyzsh/ohmyzsh/blob/28ed2880c766eb5a360354fb71d597dbc07abaa0/lib/history.zsh#L36-L39
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_verify # show command with history expansion to user before running it
alias g="git"
alias cz="chezmoi"
alias vim="nvim"
alias less="bat"
alias ls="lsd"
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
# Load fzf config.
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
# Handy alias from @jdavidson for automating the fixup and rebase workflow.
# Requires autostash=true.
function gitfixr() {
git commit --fixup=$1 && git rebase -i --autosquash $1^
}
alias fixr="gitfixr"
# Integrate atuin with fzf.
# https://github.com/atuinsh/atuin/issues/68#issuecomment-1567410629
CUR_SHELL=zsh
atuin-setup() {
if ! which atuin &> /dev/null; then return 1; fi
bindkey '^E' _atuin_search_widget
export ATUIN_NOBIND="true"
eval "$(atuin init "$CUR_SHELL")"
fzf-atuin-history-widget() {
local selected num
setopt localoptions noglobsubst noposixbuiltins pipefail no_aliases 2>/dev/null
local atuin_opts="--cmd-only --limit ${ATUIN_LIMIT:-5000}"
local fzf_opts=(
--height=${FZF_TMUX_HEIGHT:-40%}
--tac
"-n2..,.."
--tiebreak=index
"--query=${LBUFFER}"
"+m"
"--bind=ctrl-d:reload(atuin search $atuin_opts -c $PWD),ctrl-r:reload(atuin search $atuin_opts)"
)
selected=$(
eval "atuin search ${atuin_opts}" |
fzf "${fzf_opts[@]}"
)
local ret=$?
if [ -n "$selected" ]; then
# the += lets it insert at current pos instead of replacing
LBUFFER+="${selected}"
fi
zle reset-prompt
return $ret
}
zle -N fzf-atuin-history-widget
bindkey '^R' fzf-atuin-history-widget
}
atuin-setup
# Opt out of default Homebrew analytics.
# https://docs.brew.sh/Analytics
export HOMEBREW_NO_ANALYTICS=1
# Init pyenv and pyenv-virtualenv.
# https://github.com/pyenv/pyenv?tab=readme-ov-file#set-up-your-shell-environment-for-pyenv
# https://github.com/pyenv/pyenv-virtualenv?tab=readme-ov-file#installing-with-homebrew-for-macos-users
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"