-
Notifications
You must be signed in to change notification settings - Fork 1
/
zshrc
235 lines (197 loc) · 7.93 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
# If you come from bash you might have to change your $PATH.
export PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH
# Path to your oh-my-zsh installation.
export ZSH=$HOME/.oh-my-zsh
# 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/robbyrussell/oh-my-zsh/wiki/Themes
ZSH_THEME="quarter-life"
#
# Set list of themes to pick from when loading at random
# Setting this variable when ZSH_THEME=random will cause zsh to load
# a theme from this variable instead of looking in ~/.oh-my-zsh/themes/
# If set to an empty array, this variable will have no effect.
# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )
# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"
# 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 disable bi-weekly auto-update checks.
# DISABLE_AUTO_UPDATE="true"
# Uncomment the following line to automatically update without prompting.
# DISABLE_UPDATE_PROMPT="true"
# Uncomment the following line to change how often to auto-update (in days).
# export UPDATE_ZSH_DAYS=13
# Uncomment the following line if pasting URLs and other text is messed up.
# DISABLE_MAGIC_FUNCTIONS=true
# Uncomment the following line to disable colors in ls.
# DISABLE_LS_COLORS="true"
# Uncomment the following line to disable auto-setting terminal title.
DISABLE_AUTO_TITLE="true"
# Uncomment the following line to enable command auto-correction.
ENABLE_CORRECTION="false"
unsetopt correct_all
# Uncomment the following line to display red dots whilst waiting for completion.
COMPLETION_WAITING_DOTS="true"
# Uncomment the following line if you want to disable marking untracked files
# under VCS as dirty. This makes repository status check for large repositories
# much, much faster.
DISABLE_UNTRACKED_FILES_DIRTY="true"
# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# You can set one of the optional three formats:
# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# or set a custom format using the strftime function format specifications,
# see 'man strftime' for details.
# HIST_STAMPS="mm/dd/yyyy"
# Would you like to use another custom folder than $ZSH/custom?
# ZSH_CUSTOM=/path/to/new-custom-folder
# Zsh setup
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|=*' 'l:|=* r:|=*'
autoload -U add-zsh-hook # hooks
# Preferred editor for local and remote sessions
if [[ -n $SSH_CONNECTION ]]; then
export EDITOR='vim'
else
export EDITOR='nvim'
fi
# Brew
if [[ -d /opt/homebrew ]]; then
eval "$(/opt/homebrew/bin/brew shellenv)"
# Autocomplete from installed apps
FPATH="$(brew --prefix)/share/zsh/site-functions:$FPATH"
# Let gcc play with brew
export LDFLAGS="-L$(brew --prefix)/opt/zlib/lib -L$(brew --prefix)/opt/bzip2/lib -L$(brew --prefix openssl)/lib"
export CPPFLAGS="-I$(brew --prefix)/opt/zlib/include -I$(brew --prefix)/opt/bzip2/include -I$(brew --prefix openssl)/include"
export CFLAGS="-I$(brew --prefix openssl)/include \
-I$(brew --prefix bzip2)/include \
-I$(brew --prefix readline)/include \
-I$(xcrun --show-sdk-path)/usr/include"
fi
# End Brew
# use `bat` for manpager
if type bat &> /dev/null; then
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
export BAT_THEME="Catppuccin-mocha"
[[ "$THEME_MODE" == "Light" ]] && export BAT_THEME="Catppuccin-latte"
fi
# FZF
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
export FZF_DEFAULT_COMMAND='fd -tf'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
# Basic global opts
export FZF_DEFAULT_OPTS="--height 60% \
--border=none \
--info=inline-right \
--scrollbar=▏▕ \
--reverse \
--multi \
--pointer='' \
--bind 'ctrl-u:preview-half-page-up,ctrl-d:preview-half-page-down' \
--bind 'ctrl-h:toggle-preview'\
--bind 'ctrl-y:jump-accept'"
# Color schemes -- https://github.com/catppuccin/fzf
# "mocha"
export FZF_COLOR_OPTS="--color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc,hl:#f38ba8 \
--color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc \
--color=marker:#f5e0dc,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8 \
--color=preview-border:#45475a,preview-scrollbar:#45475a \
--color=selected-fg:#fab387"
# "latte"
[[ "$THEME_MODE" == "Light" ]] && export FZF_COLOR_OPTS=" \
--color=bg+:#ccd0da,bg:#eff1f5,spinner:#dc8a78,hl:#d20f39 \
--color=fg:#4c4f69,header:#d20f39,info:#8839ef,pointer:#dc8a78 \
--color=marker:#dc8a78,fg+:#4c4f69,prompt:#8839ef,hl+:#d20f39"
export FZF_DEFAULT_OPTS="$FZF_DEFAULT_OPTS $FZF_COLOR_OPTS"
# FZF End
# Python
if [[ -d "$HOME/.pyenv" ]]; then
eval "$(pyenv init -)"
fi
if [[ -d "$HOME/.rye" ]]; then
source "$HOME/.rye/env"
fi
# NVM
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
if [[ -d "$NVM_DIR" ]]; then
nvm_default="$(nvm which default)"
export DEFAULT_NODE_VERSION="$("$nvm_default" --version)"
# Automatically use nvm version specified in .nvmrc (if any)
# Intentionally not very flexible to avoid calling nvm every time we change directory
function load-nvmrc {
local nvmrc_path=".nvmrc"
if [ -f "$nvmrc_path" ]; then
local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
if [ "$nvmrc_node_version" = "N/A" ]; then
nvm install
elif [ "$nvmrc_node_version" != $(nvm version) ]; then
nvm use
fi
fi
}
# Load nvmrc if I'm switching branches
branching=false
function nvm-git-branch {
local cmd="$1"
if [[ $cmd && $cmd =~ "^git (checkout|branch)" && ! $braching ]]; then
branching=true
elif [[ $branching ]]; then
load-nvmrc
branching=false
fi
}
add-zsh-hook preexec nvm-git-branch
add-zsh-hook precmd nvm-git-branch
add-zsh-hook chpwd load-nvmrc
fi
# NVM end
# OMZ config
plugins=(
git
zsh-interactive-cd
zsh-vi-mode
)
# must come *after* FPATH is set by brew to make sure tab complete works
# automatically runs `compinit`
source "$ZSH/oh-my-zsh.sh"
# https://github.com/catppuccin/zsh-syntax-highlighting
syntax_highlights_theme="$HOME/.zsh/catppuccin_mocha-zsh-syntax-highlighting.zsh"
[[ "$THEME_MODE" == "Light" ]] && syntax_highlights_theme="$HOME/.zsh/catppuccin_latte-zsh-syntax-highlighting.zsh"
[ -f "$syntax_highlights_theme" ] && source "$syntax_highlights_theme"
# vi mode
# NOTE: edit command in $EDITOR happens from zsh-vi-mode with `vv`
# make sure fzf keybindings still apply
zvm_after_init() {
source <(fzf --zsh)
[ -f "$HOME/.functions" ] && source "$HOME/.functions"
# syntax highlights, must run last - https://github.com/zsh-users/zsh-syntax-highlighting?tab=readme-ov-file#faq
syntax_highlights="$(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
[ -f "$syntax_highlights" ] && source "$syntax_highlights"
}
# Do vim surround on the command line
export ZVM_VI_SURROUND_BINDKEY='classic'
# OMZ end
# Lua ls
export PATH="$PATH:$HOME/lua-language-server/bin"
alias luamake="$HOME/lua-language-server/3rd/luamake/luamake"
[ -s "$HOME/.aliases" ] && source "$HOME/.aliases"
[ -s "$HOME/.functions" ] && source "$HOME/.functions"
# rust
export PATH="$HOME/.cargo/bin:$PATH"
# pnpm
export PNPM_HOME="$HOME/Library/pnpm"
export PATH="$PNPM_HOME:$PATH"
# pnpm end
# wez
export PATH="$PATH:/Applications/WezTerm.app/Contents/MacOS"
# go
export GOROOT="$(brew --prefix)/Cellar/go/1.20.3/libexec"
export PATH="$PATH:$GOROOT/bin"
# flutter
export PATH="$HOME/devel/flutter/bin:$PATH"
# Machine-specific configs
[ -f "$HOME/.custom" ] && . "$HOME/.custom"