zshrc 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. eval "$(dircolors -b ~/.dircolors)"
  2. autoload -Uz compinit
  3. compinit
  4. zmodload -a complist
  5. zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
  6. zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
  7. zstyle ':completion:*' use-compctl false
  8. zstyle ':completion:*' use-cache on
  9. zstyle ':completion:*' cache-path ~/.zshcache
  10. __git_files () {
  11. _wanted files expl 'local files' _files
  12. }
  13. zstyle :compinstall filename "$HOME/.zshrc"
  14. HISTFILE=~/.histfile
  15. HISTSIZE=10000
  16. SAVEHIST=10000
  17. setopt no_beep
  18. setopt extendedglob
  19. setopt prompt_subst
  20. setopt complete_in_word
  21. setopt no_auto_menu
  22. setopt no_always_last_prompt
  23. setopt share_history
  24. setopt hist_ignore_all_dups
  25. setopt hist_ignore_space
  26. setopt extended_history
  27. setopt promptsubst
  28. setopt autopushd
  29. setopt pushdignoredups
  30. setopt nomatch
  31. autoload -U edit-command-line
  32. zle -N edit-command-line
  33. bindkey -e
  34. bindkey '^[[3~' delete-char
  35. bindkey '^[[1;5C' forward-word
  36. bindkey '^[[1;5D' backward-word
  37. bindkey '\C-v' edit-command-line
  38. bindkey '\Ea' push-line
  39. local WORDCHARS=${WORDCHARS//\//}\| # remove forward slash, add pipe
  40. autoload -U url-quote-magic
  41. zle -N self-insert url-quote-magic
  42. source $HOME/.zsh_paste
  43. source $HOME/.zsh_fast_syntax_highlighting/fast-syntax-highlighting.plugin.zsh
  44. export EDITOR=vi
  45. if builtin which batcat > /dev/null; then
  46. export MANPAGER='sh -c "col -bx | batcat --language man --paging always --style plain"'
  47. export MANROFFOPT='-c'
  48. elif builtin which nvim > /dev/null; then
  49. export MANPAGER='vim +Man!'
  50. else
  51. export MANPAGER='vim -M +MANPAGER -'
  52. fi
  53. export GREP_COLORS='ms=01;36:mc=01;31:sl=:cx=:fn=35:ln=33:bn=33:se=01;34'
  54. if [ -x ~/bin/eza ]; then
  55. export EZA_COLORS=bu=0:cr=0
  56. alias ls='eza --group-directories-first --mounts --group --hyperlink --icons=auto'
  57. else
  58. alias ls='ls --color=auto -hv --group-directories-first'
  59. fi
  60. if [ $TERM = xterm-kitty ]; then
  61. alias ssh='kitten ssh'
  62. fi
  63. alias ll='ls -l'
  64. alias l.='ls -Ad .*'
  65. alias la='ls -A'
  66. alias llr='lr -1AGl -ov'
  67. alias bat=batcat
  68. alias grep='grep --color -s'
  69. alias df='df -hx tmpfs'
  70. alias du='du --max-depth=1'
  71. alias fd='fdfind'
  72. alias sr='screen -r'
  73. alias gil='git log --graph --abbrev-commit --stat --summary -C --decorate --date=local'
  74. alias giw='git show -C --date=local --decorate'
  75. alias gip='git pull --ff-only'
  76. alias gib='git branch'
  77. alias gis='git status'
  78. alias gid='git diff -C --date=local'
  79. alias gic='git checkout'
  80. alias giu='git reset HEAD\^'
  81. alias hgw='hg diff --change .'
  82. alias class='xprop -notype WM_CLASS'
  83. alias tree='tree -AvL 10'
  84. alias vi='vi -p'
  85. alias vil='vi *(.om[1])'
  86. alias dt='gnome-terminal --hide-menubar'
  87. alias sudovi="sudo vi -N -u $HOME/.vimrc"
  88. alias shrug="echo -n '¯\\(°_o)/¯' | xclip -selection clipboard"
  89. function https() {
  90. openssl s_client -connect $1:443 -servername $1 < /dev/null | \
  91. openssl x509 -noout -text -certopt no_header,no_version,no_serial,no_signame,no_pubkey,no_sigdump
  92. }
  93. function cl() {
  94. if [ $# = 0 ]; then
  95. cd && ls
  96. else
  97. cd "$*" && ls
  98. fi
  99. }
  100. function pdf() {
  101. atril "$*" &> /dev/null &!
  102. }
  103. export PYTHONSTARTUP=$HOME/.pystartup.py
  104. export VIRTUAL_ENV=$HOME/venv
  105. if [ -d $VIRTUAL_ENV ]; then
  106. PATH=$VIRTUAL_ENV/bin:$PATH
  107. fi
  108. if [ -d $HOME/.cargo/bin ]; then
  109. PATH=$HOME/.cargo/bin:$PATH
  110. fi
  111. export BUN_INSTALL=$HOME/.bun
  112. if [ -d $BUN_INSTALL ]; then
  113. source $BUN_INSTALL/_bun
  114. PATH="$BUN_INSTALL/bin:$PATH"
  115. fi
  116. if [ -d $HOME/bin ]; then
  117. PATH=$HOME/bin:$PATH
  118. fi
  119. if builtin which oh-my-posh > /dev/null; then
  120. eval "$(oh-my-posh init zsh -c ~/.config/oh-my-posh.toml)"
  121. elif builtin which starship > /dev/null; then
  122. eval "$(starship init zsh)"
  123. else
  124. autoload colors
  125. colors
  126. bright_cyan='%{%}' # not provided by colors
  127. autoload -Uz vcs_info
  128. zstyle ':vcs_info:*' unstagedstr "%{$fg[red]%}*"
  129. zstyle ':vcs_info:*' stagedstr "%{$fg[red]%}+"
  130. zstyle ':vcs_info:*' formats "$bright_cyan%b%u%c"
  131. zstyle ':vcs_info:*' actionformats "$bright_cyan%b%u%c|%a"
  132. zstyle ':vcs_info:git:*' check-for-changes true
  133. zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat '%b:%r'
  134. zstyle ':vcs_info:bzr:*' use-simple true
  135. zstyle ':vcs_info:*' enable git hg bzr svn cvs
  136. precmd () { vcs_info }
  137. PROMPT="%{$fg_bold[grey]%}%* " # time
  138. PROMPT+="%{${fg_bold[green]}%}%m%{${reset_color}%}:" # host
  139. PROMPT+="%{${fg_bold[blue]}%}%50<...<%~%<<%{${reset_color}%} " # path
  140. PROMPT+='${vcs_info_msg_0_} '
  141. PROMPT+="%(?..%{$fg_bold[red]%}%? %{$reset_color%})" # exit status
  142. PROMPT+="%1(j.%{$fg[green]%}%j .)" # suspended jobs
  143. PROMPT+=$'%{$reset_color%} \n%(!.#.\$) '
  144. fi
  145. if builtin which jj > /dev/null; then
  146. source <(COMPLETE=zsh jj)
  147. fi
  148. if builtin which aws_completer > /dev/null; then
  149. autoload bashcompinit && bashcompinit
  150. complete -C aws_completer aws
  151. fi
  152. if builtin which fzf > /dev/null; then
  153. FZF_DEFAULT_OPTS='--no-mouse'
  154. source "/usr/share/doc/fzf/examples/key-bindings.zsh"
  155. __fzf_git_commit_sha() {
  156. setopt localoptions pipefail no_aliases 2> /dev/null
  157. git log --color=always -n 50 --format='%C(auto)%h%d %s %C(black)%C(bold)%cr' |
  158. FZF_DEFAULT_OPTS="--ansi --no-sort --tiebreak=index --reverse \
  159. --preview 'git show --color=always {1}' ${FZF_DEFAULT_OPTS-}" $(__fzfcmd) -m "$@" |
  160. sed -r -e 's/([0-9a-f]+) .+/\1/' -e 's/.+ ([0-9a-f]+)/\1/'
  161. }
  162. fzf-git-commit-sha-widget() {
  163. LBUFFER="${LBUFFER}$(__fzf_git_commit_sha)"
  164. local ret=$?
  165. zle reset-prompt
  166. return $ret
  167. }
  168. zle -N fzf-git-commit-sha-widget
  169. bindkey '^G' fzf-git-commit-sha-widget
  170. __fzf_git_branch() {
  171. setopt localoptions pipefail no_aliases 2> /dev/null
  172. git branch --all --color=always \
  173. --format='%(if)%(HEAD)%(then)%(color:bold green)%(else)%(if:equals=refs/remotes)%(refname:rstrip=-2)%(then)%(color:red)%(end)%(end)%(refname:short)' |
  174. FZF_DEFAULT_OPTS="--ansi --no-sort --tiebreak=index --reverse ${FZF_DEFAULT_OPTS-}" \
  175. $(__fzfcmd) \
  176. --preview 'git log --color=always --abbrev-commit --stat --summary -C --decorate --date=local {1} --max-count=20' \
  177. --height ${FZF_TMUX_HEIGHT:-40%} "$@"
  178. }
  179. fzf-git-branch-widget() {
  180. LBUFFER="${LBUFFER}$(__fzf_git_branch)"
  181. local ret=$?
  182. zle reset-prompt
  183. return $ret
  184. }
  185. zle -N fzf-git-branch-widget
  186. bindkey '^H' fzf-git-branch-widget
  187. __fzf_pid() {
  188. setopt localoptions pipefail no_aliases 2> /dev/null
  189. ps axo pid,start,user,command |
  190. FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse ${FZF_DEFAULT_OPTS-}" $(__fzfcmd) -m "$@" |
  191. awk '{print $1}'
  192. }
  193. fzf-pid-widget() {
  194. LBUFFER="${LBUFFER}$(__fzf_pid)"
  195. local ret=$?
  196. zle reset-prompt
  197. return $ret
  198. }
  199. zle -N fzf-pid-widget
  200. bindkey '^O' fzf-pid-widget
  201. __fzf_rg() {
  202. setopt localoptions pipefail no_aliases 2> /dev/null
  203. RELOAD='reload:rg --column --color=always --smart-case {q} || :'
  204. $(__fzfcmd) --disabled --ansi --multi \
  205. --bind "start:$RELOAD" --bind "change:$RELOAD" \
  206. --bind 'alt-a:select-all,alt-d:deselect-all,ctrl-/:toggle-preview' \
  207. --delimiter : \
  208. --preview 'bat --style=full --color=always --highlight-line {2} {1}' \
  209. --preview-window '~4,+{2}+4/3,<80(up)' \
  210. --query "$*" |
  211. cut -d: -f1
  212. }
  213. fzf-rg-widget() {
  214. LBUFFER="${LBUFFER}$(__fzf_rg)"
  215. local ret=$?
  216. zle reset-prompt
  217. return $ret
  218. }
  219. zle -N fzf-rg-widget
  220. bindkey '^S' fzf-rg-widget
  221. fi
  222. stty stop undef