# Print user@host into title so terminal tabs are correct # Despite being called precmd() this executes after process exits, before prompt precmd() { echo -ne "\033]0;${USER}@${HOST}\007" } # Generic navigation keybinds bindkey "^[[H" beginning-of-line # HOME bindkey "^[[F" end-of-line # END bindkey "^[[3~" delete-char # DEL bindkey '^R' history-incremental-search-backward # Global aliases alias ct="clear && task" alias grep='grep -EIs --color=auto --exclude-dir=.git' # Use exa if we have it # I don't want this in .profile because it's not completely backward compatible with ls if [ -e /usr/bin/exa ]; then alias ls=exa fi setopt appendhistory # Case-insensetive tab completion autoload -Uz compinit && compinit zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}' # Edit long command lines in vim with ^x^e autoload -U edit-command-line zle -N edit-command-line bindkey '^x^e' edit-command-line # Load any kind of system-local stuff [[ ! -f ~/.zshrc.local ]] || source ~/.zshrc.local # Transient prompt _prompt () { local retval=$? # Echo compact prompt if (( $_vbe_prompt_compact )); then echo '\e[32m\e[0m ' return fi # Echo main prompt starship prompt } setopt prompt_subst _zle-line-init() { [[ $CONTEXT == start ]] || return 0 # Start regular line editor (( $+zle_bracketed_paste )) && print -r -n - $zle_bracketed_paste[1] zle .recursive-edit local -i ret=$? (( $+zle_bracketed_paste )) && print -r -n - $zle_bracketed_paste[2] # If we received EOT, we exit the shell if [[ $ret == 0 && $KEYS == $'\4' ]]; then _vbe_prompt_compact=1 zle .reset-prompt exit fi # Line edition is over. Shorten the current prompt. _vbe_prompt_compact=1 zle .reset-prompt unset _vbe_prompt_compact if (( ret )); then # Ctrl-C zle .send-break else # Enter zle .accept-line fi return ret } zle -N zle-line-init _zle-line-init # Init starship eval "$(starship init zsh)" # Pull back to our transient prompt # We call starship within the prompt function when warranted PS1='$(_prompt)'