-
Notifications
You must be signed in to change notification settings - Fork 2
/
.zshrc
180 lines (161 loc) · 5.54 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
# --------------------------------------------------------------------------------------------------
# - * File: .zshrc
# - * Author: itchyny
# - * Last Change: 2024/06/14 09:51:11.
# --------------------------------------------------------------------------------------------------
# XDG Base Directory Specification
export XDG_CONFIG_HOME=~/.config
export XDG_CACHE_HOME=~/.cache
export XDG_DATA_HOME=~/.share
export XDG_STATE_HOME=~/.share/state
# data directory
ZDOTDIR=$XDG_DATA_HOME/zsh
# zinit
declare -A ZINIT
ZINIT[HOME_DIR]=$XDG_DATA_HOME/zinit
ZINIT[BIN_DIR]=${ZINIT[HOME_DIR]}/bin
ZINIT[PLUGINS_DIR]=${ZINIT[HOME_DIR]}/plugins
ZINIT[COMPLETIONS_DIR]=${ZINIT[HOME_DIR]}/completions
ZINIT[SNIPPETS_DIR]=${ZINIT[HOME_DIR]}/snippets
ZINIT[ZCOMPDUMP_PATH]=${ZINIT[HOME_DIR]}/zcompdump
source ${ZINIT[BIN_DIR]}/zinit.zsh
# plugins
zinit light itchyny/zsh-git-alias
zinit light zdharma-continuum/fast-syntax-highlighting
zinit light zsh-users/zsh-autosuggestions
zinit light popstas/zsh-command-time
ZSH_COMMAND_TIME_COLOR=yellow
zinit ice pick"async.zsh" src"pure.zsh"
zinit light sindresorhus/pure
zstyle :prompt:pure:path color 14
zstyle :prompt:pure:prompt:success color 39
zstyle :prompt:pure:execution_time color 243
PURE_GIT_PULL=0
# history
HISTFILE=$ZDOTDIR/histfile
HISTSIZE=100000
SAVEHIST=10000000
setopt append_history extended_history hist_ignore_dups hist_no_store hist_reduce_blanks hist_verify hist_ignore_space inc_append_history_time
# quote URL
autoload -Uz url-quote-magic bracketed-paste-magic
zle -N self-insert url-quote-magic
zle -N bracketed-paste bracketed-paste-magic
# completion
autoload -Uz compinit; compinit -C
LISTMAX=500
setopt auto_list auto_menu list_packed auto_param_keys auto_param_slash mark_dirs
zstyle ':completion:*' menu select
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=*' 'r:|=*' 'l:|=*'
zstyle ':completion:*:descriptions' format '%F{magenta}Completing %B%d%b%f'
bindkey '^[[Z' reverse-menu-complete
# options
setopt no_beep nolistbeep auto_cd auto_pushd no_flow_control no_check_jobs print_eight_bit correct nonomatch
WORDCHARS=${WORDCHARS//[\/=]}\'\"\|
# integrate vim mode
bindkey -v
bindkey '^K' kill-whole-line
bindkey '^A' beginning-of-line
bindkey '^E' end-of-line
bindkey '^D' delete-char
bindkey '^F' forward-char
bindkey '^B' backward-char
bindkey '^W' backward-kill-word
bindkey '\e\e[D' backward-word
bindkey '\e\e[C' forward-word
autoload edit-command-line
zle -N edit-command-line
# search history
bindkey '^R' history-incremental-pattern-search-backward
bindkey '^P' up-line-or-search
bindkey '^N' down-line-or-search
# fuzzy history search
select-history() {
BUFFER=$(history -n -r 1 | awk '!x[$0]++' | gof)
CURSOR=$#BUFFER
}
zle -N select-history
bindkey '^Z' select-history
# git switch to recent branches
git-switch-branch() {
BUFFER=$(git reflog --since 1month --pretty=format:%gs |
sed -n '/^checkout: /s/.* to //p' | awk '!x[$0]++' | gof)
test -n "$BUFFER" && BUFFER="git switch $BUFFER"
CURSOR=$#BUFFER
}
zle -N git-switch-branch
bindkey '^S' git-switch-branch
# export variables
export LANG=en_US.UTF-8
export LC_CTYPE=en_US.UTF-8
export EDITOR=vim
export GIT_EDITOR=vim
export GORE_PAGER=less
export GIT_MERGE_AUTOEDIT=no
# path settings
export MANPATH=/usr/local/share/man:/usr/local/man:/usr/share/man
export GOPATH=$XDG_DATA_HOME/go
export GORE_HOME=$XDG_DATA_HOME/gore
export CARGO_HOME=$XDG_CACHE_HOME/cargo
export RUSTUP_HOME=$XDG_CACHE_HOME/rustup
export STACK_ROOT=$XDG_CACHE_HOME/stack
export PERL_CPANM_HOME=$XDG_CACHE_HOME/cpanm
export BUNDLE_USER_HOME=$XDG_CACHE_HOME/bundle
export NPM_CONFIG_USERCONFIG=$XDG_CONFIG_HOME/npm/npmrc
export NPM_CONFIG_CACHE=$XDG_CACHE_HOME/npm
export GEM_HOME=$XDG_CACHE_HOME/gem
export GEM_SPEC_CACHE=$GEM_HOME/specs
export IRBRC=$XDG_CONFIG_HOME/irb/irbrc
export SOLARGRAPH_CACHE=$XDG_CACHE_HOME/solargraph
export IPYTHONDIR=$XDG_CACHE_HOME/ipython
export MPLCONFIGDIR=$XDG_CACHE_HOME/matplotlib
export GRADLE_USER_HOME=$XDG_DATA_HOME/gradle
export HUB_CONFIG=$XDG_CONFIG_HOME/hub/hub
export DOCKER_CONFIG=$XDG_CONFIG_HOME/docker
export FURO_LOGS_DIR=$XDG_CACHE_HOME/furoshiki2
export AWS_CONFIG_FILE=$XDG_CONFIG_HOME/aws/config
export AWS_SHARED_CREDENTIALS_FILE=$XDG_CONFIG_HOME/aws/credentials
export CDK_HOME=$XDG_DATA_HOME/cdk
export MINIKUBE_HOME=$XDG_DATA_HOME/minikube
export MYSQL_HISTFILE=$XDG_DATA_HOME/mysql/histfile
export PSQL_HISTORY=$XDG_DATA_HOME/psql/histfile
export NODE_REPL_HISTORY=$XDG_DATA_HOME/node/histfile
typeset -U path PATH
export PATH=$XDG_DATA_HOME/bin:$PATH
if (( $+commands[plenv] )); then
export PLENV_ROOT=$XDG_CACHE_HOME/plenv
eval "$(plenv init -)"
fi
if (( $+commands[pyenv] )); then
export PYENV_ROOT=$XDG_CACHE_HOME/pyenv
eval "$(pyenv init --path)"
alias brew="env PATH=${PATH//$(pyenv root)\/shims:/} brew"
fi
if (( $+commands[rbenv] )); then
export RBENV_ROOT=$XDG_CACHE_HOME/rbenv
eval "$(rbenv init -)"
fi
if (( $+commands[nodenv] )); then
export NODENV_ROOT=$XDG_CACHE_HOME/nodenv
eval "$(nodenv init -)"
fi
# start editor shortcut key
start-editor() {
exec < /dev/tty
$=EDITOR
zle && zle reset-prompt
}
zle -N start-editor
bindkey '^@' start-editor
# alias
alias c='clear'
alias d='download'
alias ls='eza --classify --time-style=long-iso'
alias tree='eza --tree -I .git --classify --time-style=long-iso'
alias git='hub'
alias top='htop'
# suffix alias
alias -s {txt,md,json}='less'
alias -s html='open -a Google\ Chrome'
alias -s {pdf,png,jpg,bmp,gif,svg,tiff}='open -a Preview'
alias -s {mp3,mp4,wav,mkv,m4v,m4a,wmv,avi,mpeg,mpg,vob,mov,rm}='mplayer'
alias -s {gz,tgz,bz2,tbz,xz,Z,br,tbr,zst,tar,zip,lzh,arj}='extract'