mirror of
https://github.com/jakejarvis/dotfiles.git
synced 2025-04-26 03:45:21 -04:00
257 lines
9.8 KiB
Bash
257 lines
9.8 KiB
Bash
#!/usr/bin/env zsh
|
|
|
|
# check for zinit and clone if not installed
|
|
ZINIT_HOME="$HOME/.local/share/zinit/zinit.git"
|
|
if [[ ! -d "$ZINIT_HOME" ]]; then
|
|
mkdir -p "$(dirname "$ZINIT_HOME")"
|
|
git clone https://github.com/zdharma-continuum/zinit.git "$ZINIT_HOME"
|
|
fi
|
|
|
|
# initialize zinit
|
|
# shellcheck disable=SC1091
|
|
source "$ZINIT_HOME/zinit.zsh"
|
|
|
|
# ensure compinit recognizes zinit's changes
|
|
autoload -Uz _zinit
|
|
# shellcheck disable=SC2154
|
|
(( ${+_comps} )) && _comps[zinit]=_zinit
|
|
|
|
# various zinit add-ons
|
|
zinit light zdharma-continuum/zinit-annex-patch-dl
|
|
|
|
# async support
|
|
zinit ice wait lucid \
|
|
atload"async_init" \
|
|
src"async.zsh"
|
|
zinit light mafredri/zsh-async
|
|
|
|
# z
|
|
zinit ice wait lucid blockf \
|
|
atclone"
|
|
mv -vf z.1 ${ZINIT[MAN_DIR]}/man1
|
|
" \
|
|
atpull"%atclone" \
|
|
atload"_Z_DATA=~/.zdata" \
|
|
src"z.sh"
|
|
zinit light rupa/z
|
|
|
|
# grab exa (better ls) binary
|
|
zinit ice from"gh-r" as"command" \
|
|
mv"bin/exa* -> exa" \
|
|
atclone"
|
|
mv -vf completions/exa.zsh _exa
|
|
mv -vf man/exa.1 ${ZINIT[MAN_DIR]}/man1
|
|
mv -vf man/exa_colors.5 ${ZINIT[MAN_DIR]}/man5
|
|
" \
|
|
atpull"%atclone" \
|
|
atload"
|
|
alias ls='exa --color=auto -GF --icons --group-directories-first'
|
|
alias ll='exa --color=auto -1laF --git --icons --group-directories-first --ignore-glob=\".DS_Store*|~*\"'
|
|
alias lt='ll -T -L=2'
|
|
"
|
|
zinit light ogham/exa
|
|
|
|
# grab bat (better cat) binary
|
|
zinit ice from"gh-r" as"command" \
|
|
mv"bat-*/bat -> bat" \
|
|
atclone"
|
|
mv -vf bat-*/autocomplete/bat.zsh _bat
|
|
mv -vf bat-*/bat.1 ${ZINIT[MAN_DIR]}/man1
|
|
" \
|
|
atpull"%atclone" \
|
|
atload"
|
|
export BAT_THEME='base16'
|
|
export BAT_PAGER='less -R -F -+X --mouse'
|
|
export MANPAGER='sh -c \"col -bx | bat --color=always --style=plain --language=man\"'
|
|
alias cat='bat --paging=never --color=auto --style=numbers,changes'
|
|
alias cats='bat --paging=always --color=always --style=numbers,changes'
|
|
alias catcat='\cat --paging=never --color=auto --style=plain'
|
|
"
|
|
zinit light sharkdp/bat
|
|
|
|
# grab delta binary
|
|
zinit ice from"gh-r" as"command" \
|
|
mv"delta-*/delta -> delta" \
|
|
dl"https://github.com/dandavison/delta/raw/HEAD/etc/completion/completion.zsh -> _delta" \
|
|
atload"
|
|
# https://dandavison.github.io/delta/mouse-scrolling.html
|
|
export DELTA_PAGER='less -R -F -+X --mouse'
|
|
"
|
|
zinit light dandavison/delta
|
|
|
|
# grab fd binary
|
|
# TODO: preview commands are an absolute sh*tshow, maybe use .lessfilter?
|
|
# https://github.com/Aloxaf/fzf-tab/wiki/Preview#show-file-contents
|
|
# shellcheck disable=SC2016
|
|
zinit ice from"gh-r" as"command" \
|
|
mv"fd-*/fd -> fd" \
|
|
atclone"
|
|
mv -vf fd-*/autocomplete/_fd _fd
|
|
mv -vf fd-*/fd.1 ${ZINIT[MAN_DIR]}/man1
|
|
" \
|
|
atpull"%atclone" \
|
|
atload'
|
|
FZF_FD_OPTS="--color always --hidden --follow --exclude .git --exclude node_modules"
|
|
FZF_PREVIEW_FILE_COMMAND="bat --color=always --paging=never --style=plain"
|
|
FZF_PREVIEW_DIR_COMMAND="exa -1a --color=always --icons --group-directories-first"
|
|
FZF_DEFAULT_OPTS="--no-mouse --bind \"tab:accept,ctrl-y:preview-page-up,ctrl-v:preview-page-down,ctrl-e:execute-silent(\${VISUAL:-code} {+} >/dev/null 2>&1)\""
|
|
FZF_DEFAULT_COMMAND="fd --type f $FZF_FD_OPTS"
|
|
FZF_ALT_C_OPTS="--ansi --preview \"$FZF_PREVIEW_DIR_COMMAND {} 2>/dev/null\""
|
|
FZF_ALT_C_COMMAND="fd --type d . $FZF_FD_OPTS"
|
|
FZF_CTRL_T_OPTS="--ansi --bind \"ctrl-w:execute(\${EDITOR:-nano} {1} >/dev/tty </dev/tty)+refresh-preview\" --preview \"$FZF_PREVIEW_FILE_COMMAND {} 2>/dev/null\""
|
|
FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
|
|
'
|
|
zinit light sharkdp/fd
|
|
|
|
# grab fzf binary from release & other files from source
|
|
zinit ice from"gh-r" as"command" \
|
|
dl"https://github.com/junegunn/fzf/raw/HEAD/shell/key-bindings.zsh -> key-bindings.zsh" \
|
|
dl"https://github.com/junegunn/fzf/raw/HEAD/shell/completion.zsh -> _fzf" \
|
|
dl"https://github.com/junegunn/fzf/raw/HEAD/man/man1/fzf.1 -> ${ZINIT[MAN_DIR]}/man1/fzf.1" \
|
|
dl"https://github.com/junegunn/fzf/raw/HEAD/man/man1/fzf-tmux.1 -> ${ZINIT[MAN_DIR]}/man1/fzf-tmux.1" \
|
|
src"key-bindings.zsh"
|
|
zinit light junegunn/fzf
|
|
|
|
# grab vivid binary (for all the colors)
|
|
# https://github.com/sharkdp/vivid/tree/master/themes
|
|
# shellcheck disable=SC2016
|
|
zinit ice from"gh-r" as"command" \
|
|
mv"vivid-*/vivid -> vivid" \
|
|
atload'export LS_COLORS="$(vivid generate snazzy)"'
|
|
zinit load sharkdp/vivid
|
|
|
|
# history substring searching
|
|
# only bind these keys once they're ready
|
|
bindkey -r "^[[A"
|
|
bindkey -r "^[[B"
|
|
zinit ice wait lucid \
|
|
atload"
|
|
zmodload zsh/terminfo
|
|
bindkey '^[[A' history-substring-search-up
|
|
bindkey '^[[B' history-substring-search-down
|
|
"
|
|
zinit light zsh-users/zsh-history-substring-search
|
|
|
|
# tab completions via fzf
|
|
zinit ice wait"1" lucid \
|
|
has"fzf" \
|
|
atload"
|
|
zstyle ':completion:*' verbose yes
|
|
zstyle ':completion:*' list-colors \${(s.:.)LS_COLORS}
|
|
zstyle ':completion:*:descriptions' format '[%d]'
|
|
zstyle ':completion::complete:*:*:files' ignored-patterns '.DS_Store' 'Icon?' '.Trash'
|
|
zstyle ':completion::complete:*:*:globbed-files' ignored-patterns '.DS_Store' 'Icon?' '.Trash'
|
|
zstyle ':completion::complete:rm:*:globbed-files' ignored-patterns
|
|
zstyle ':fzf-tab:*' fzf-command fzf
|
|
zstyle ':fzf-tab:*' fzf-flags '--ansi'
|
|
zstyle ':fzf-tab:*' fzf-bindings \
|
|
'tab:accept' \
|
|
'ctrl-y:preview-page-up' \
|
|
'ctrl-v:preview-page-down' \
|
|
'ctrl-e:execute-silent(\${VISUAL:-code} \$realpath >/dev/null 2>&1)' \
|
|
'ctrl-w:execute(\${EDITOR:-nano} \$realpath >/dev/tty </dev/tty)+refresh-preview'
|
|
zstyle ':fzf-tab:*' fzf-min-height 15
|
|
zstyle ':fzf-tab:complete:git-(add|diff|restore):*' fzf-preview \
|
|
'git diff --no-ext-diff \$word | delta --paging=never --no-gitconfig --line-numbers --file-style=omit --hunk-header-style=omit --theme=base16'
|
|
zstyle ':fzf-tab:complete:git-log:*' fzf-preview \
|
|
'git --no-pager log --color=always --format=oneline --abbrev-commit --follow \$word'
|
|
zstyle ':fzf-tab:complete:man:*' fzf-preview \
|
|
'man -P \"col -bx\" \$word | $FZF_PREVIEW_FILE_COMMAND --language=man'
|
|
zstyle ':fzf-tab:complete:brew-(install|uninstall|search|info):*-argument-rest' fzf-preview \
|
|
'brew info \$word'
|
|
zstyle ':fzf-tab:complete:(-command-|-parameter-|-brace-parameter-|export|unset|expand):*' fzf-preview \
|
|
'echo \${(P)word}'
|
|
zstyle ':fzf-tab:complete:*:options' fzf-preview
|
|
zstyle ':fzf-tab:complete:*:options' fzf-flags '--no-preview'
|
|
zstyle ':fzf-tab:complete:*:argument-1' fzf-preview
|
|
zstyle ':fzf-tab:complete:*:argument-1' fzf-flags '--no-preview'
|
|
zstyle ':fzf-tab:complete:*:*' fzf-preview \
|
|
'($FZF_PREVIEW_FILE_COMMAND \$realpath || $FZF_PREVIEW_DIR_COMMAND \$realpath) 2>/dev/null'
|
|
"
|
|
zinit light Aloxaf/fzf-tab
|
|
|
|
# TODO: fix git-* completions, apparently there's some conflict with brew's git
|
|
# https://github.com/Aloxaf/fzf-tab/wiki/Preview#git
|
|
# shellcheck disable=SC2016
|
|
zinit ice wait lucid as"completions" \
|
|
id-as"git-completions" \
|
|
has"git" \
|
|
dl"https://github.com/git/git/raw/HEAD/contrib/completion/git-completion.zsh -> _git" \
|
|
dl"https://github.com/git/git/raw/HEAD/contrib/completion/git-completion.bash -> git-completion.bash" \
|
|
atpull"zinit creinstall -q ." \
|
|
atload'
|
|
zstyle ":completion:*:*:git:*" script "$PWD/git-completion.bash"
|
|
' \
|
|
nocompile
|
|
zinit light zdharma-continuum/null
|
|
|
|
# use zinit to track completions from non-zinit programs
|
|
zinit ice wait lucid blockf as"completions" \
|
|
id-as"local-completions" \
|
|
dl"https://github.com/docker/cli/raw/HEAD/contrib/completion/zsh/_docker -> _docker" \
|
|
dl"https://github.com/docker/compose/raw/master/contrib/completion/zsh/_docker-compose -> _docker-compose" \
|
|
dl"https://github.com/zsh-users/zsh-completions/raw/HEAD/src/_node -> _node" \
|
|
dl"https://github.com/zsh-users/zsh-completions/raw/HEAD/src/_yarn -> _yarn" \
|
|
dl"https://github.com/zsh-users/zsh-completions/raw/HEAD/src/_bundle -> _bundle" \
|
|
dl"https://github.com/zsh-users/zsh-completions/raw/HEAD/src/_rails -> _rails" \
|
|
dl"https://github.com/zsh-users/zsh-completions/raw/HEAD/src/_golang -> _golang" \
|
|
dl"https://github.com/zsh-users/zsh-completions/raw/HEAD/src/_shellcheck -> _shellcheck" \
|
|
dl"https://github.com/zsh-users/zsh-completions/raw/HEAD/src/_httpie -> _httpie" \
|
|
dl"https://github.com/rbenv/rbenv/raw/HEAD/completions/rbenv.zsh -> _rbenv" \
|
|
dl"https://github.com/pyenv/pyenv/raw/HEAD/completions/pyenv.zsh -> _pyenv" \
|
|
atclone"
|
|
command -v volta &>/dev/null && volta completions zsh > _volta || true
|
|
command -v npm &>/dev/null && npm completion > _npm || true
|
|
command -v gh &>/dev/null && gh completion -s zsh > _gh || true
|
|
command -v op &>/dev/null && op completion zsh > _op || true
|
|
command -v hugo &>/dev/null && hugo completion zsh > _hugo || true
|
|
" \
|
|
atpull"zinit creinstall -q ." \
|
|
nocompile
|
|
zinit light zdharma-continuum/null
|
|
|
|
# additional completions
|
|
# zinit ice wait lucid blockf as"completion" \
|
|
# atpull"zinit creinstall -q ."
|
|
# zinit light zsh-users/zsh-completions
|
|
|
|
# autosuggestions, trigger precmd hook upon load
|
|
zinit ice wait lucid \
|
|
atload"_zsh_autosuggest_start"
|
|
zinit light zsh-users/zsh-autosuggestions
|
|
|
|
# syntax highlighting
|
|
zinit ice wait lucid \
|
|
atinit"ZINIT[COMPINIT_OPTS]=-C; zicompinit; zicdreplay"
|
|
zinit light zsh-users/zsh-syntax-highlighting
|
|
|
|
# 1Password plugins: https://developer.1password.com/docs/cli/shell-plugins/
|
|
zinit ice wait lucid \
|
|
id-as"op-plugins" \
|
|
has"op" \
|
|
if"[[ -f ~/.config/op/plugins.sh ]]"
|
|
zinit snippet ~/.config/op/plugins.sh
|
|
|
|
# oh-my-zsh leftovers
|
|
# https://github.com/ohmyzsh/ohmyzsh/tree/master/lib
|
|
zinit snippet OMZ::lib/clipboard.zsh
|
|
zinit snippet OMZ::lib/termsupport.zsh
|
|
|
|
# iTerm2 integration
|
|
# shellcheck disable=SC2016
|
|
zinit ice lucid \
|
|
if'[[ "$TERM_PROGRAM" = "iTerm.app" ]]' \
|
|
pick"shell_integration/zsh" \
|
|
sbin"utilities/*"
|
|
zinit light gnachman/iTerm2-shell-integration
|
|
|
|
# starship prompt
|
|
zinit ice from"gh-r" as"command" \
|
|
atclone"
|
|
./starship init zsh --print-full-init > init.zsh
|
|
./starship completions zsh > _starship
|
|
" \
|
|
atpull"%atclone" \
|
|
src"init.zsh"
|
|
zinit light starship/starship
|