dotfiles/dot_zshrc

171 lines
4 KiB
Bash

# vim:ft=zsh:fenc=utf-8:fdm=marker
# load starship
eval "$(starship init zsh)"
### plugins via antigen {{{
# load antigen
source "$HOME/.antigen/antigen.zsh"
antigen use oh-my-zsh
antigen bundle colored-man-pages
antigen bundle colorize
antigen bundle docker-compose
antigen bundle git
antigen bundle gpg-agent
antigen bundle kubectl
# omz's vi-mode doesn't vibe with starship
antigen bundle jeffreytse/zsh-vi-mode
antigen bundle greymd/docker-zsh-completion
antigen bundle zsh-users/zsh-autosuggestions
antigen bundle zsh-users/zsh-completions
antigen bundle zsh-users/zsh-syntax-highlighting
antigen apply
# }}}
### basics {{{
# history
export HISTFILE="$HOME/.zhistory"
export HISTSIZE=10000
export SAVEHIST=10000
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_IGNORE_DUPS
# fuck if available
[[ -x "$(command -v thefuck)" ]] && eval $(thefuck --alias)
# credit to locotay
function bitch() {
[ "$1" = "you" ] && [ "$2" = "better" ] && sudo "${@:3}"
}
# }}}
### aliases & functions {{{
## basics, from common to peculiar tweaks {{{
# use exa+lsd to list directories, if available, falling back to ls aliases
if [ -x "$(command -v lsd)" ] && [ -x "$(command -v exa)" ]; then
# add a bit more space between the file icon & name
export EXA_ICON_SPACING=1
# lsd is the better drop-in replacement
alias ls='lsd'
# only exa can do this, atm
alias l='exa --icons --group-directories-first'
alias ll='exa --icons --group-directories-first --git -l'
alias la='exa --icons --group-directories-first --git -la'
# only lsd can do this, atm
alias lt='lsd -l --total-size'
alias lat='lsd -lA --total-size'
else
alias l='ls'
alias ll='ls -l'
alias la='ls -lA'
fi
# use neovim as vim, if installed
if [[ -x "$(command -v nvim)" ]]; then
alias vim='nvim'
# open vimwiki
alias wiki='nvim -c VimwikiIndex'
fi
if [[ -x "$(command -v newsboat)" ]]; then
alias nb='newsboat -C ~/.config/newsboat/config -u ~/.config/newsboat/urls'
fi
[[ -x "$(command -v nvim)" ]] && alias tt='taskwarrior-tui'
# switch between yubikeys for the same GPG key
alias switch_yubikeys='gpg-connect-agent "scd serialno" "learn --force" /bye'
# list tty devices on macOS, useful for Arduino & other boards
alias lstty='ls /dev | grep -E "^(tty\.|cu\.)" --color=never'
#}}}
## OS-dependent tweaks {{{
# manage yabai & ecosystem easier
function twm() {
case "$1" in
"start")
brew services start skhd
brew services start yabai
;;
"stop")
brew services stop skhd
brew services stop yabai
;;
"restart")
launchctl kickstart -k "gui/${UID}/homebrew.mxcl.skhd"
launchctl kickstart -k "gui/${UID}/homebrew.mxcl.yabai"
;;
*)
echo "Usage: twm <start|restart|stop>"
return 1
;;
esac
}
alias sbks='launchctl kickstart -k "gui/${UID}/homebrew.mxcl.sketchybar"'
function icat() {
if [ "$TERM_PROGRAM" = "WezTerm" ]; then
wezterm imgcat "$@"
elif [ "$TERM" = "xterm-kitty" ]; then
kitty +kitten imgcat "$@"
else
echo 'No image viewer defined for this terminal'
fi
}
#}}}
## development {{{
# use the combination of colordiff & diff-so-fancy
if [ -x "$(command -v colordiff)" ] && [ -x "$(command -v diff-so-fancy)" ]; then
function diff() {
colordiff -N -u "$@" | diff-so-fancy
}
function kdiff() {
KUBECTL_EXTERNAL_DIFF="colordiff -N -u"
kubectl diff "$@" | diff-so-fancy
}
fi
# }}}
## chezmoi
alias cma='chezmoi add'
alias cmap='chezmoi apply'
alias cmcd='cd $(chezmoi source-path)'
alias cmd='chezmoi diff'
alias cme='chezmoi edit'
alias cmm='chezmoi merge'
alias cmrm='chezmoi remove'
alias cmst='chezmoi status'
alias cmup='chezmoi update'
alias onefetch='onefetch --true-color=never'
### }}}
### languages & frameworks {{{
# python, my old friend
if [ -x "$(command -v pyenv)" ]; then
eval "$(pyenv init -)"
fi
# }}}
### technical BS {{{
# some bs seting the window title, apparently
function set_win_title(){
echo -ne "\033]0;$(basename "$PWD")\007"
}
precmd_functions+=(set_win_title)
# }}}
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion