zsh-config/init.zsh

181 lines
4.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Main zsh config file
# Some utility stuff
autoload -U compinit && compinit
fpath+=("${ZSH_CONFIG_DIR}/functions")
ZSH_PLUGIN_DIR="${ZSH_CONFIG_DIR}/plugins"
# load_plugin <name>
function load_plugin {
source "${ZSH_PLUGIN_DIR}/${1}/${1}.plugin.zsh"
}
__ZSH_EARLY_LOCAL_FILE="${ZSH_CONFIG_DIR}/local-early.zsh"
[ -e "${__ZSH_EARLY_LOCAL_FILE}" ] && source "${__ZSH_EARLY_LOCAL_FILE}"
# Some options
setopt autocd extendedglob rm_star_silent
unsetopt beep notify
# Show which completion we are on
zstyle ':completion:*' menu select
# Some general, random configuration
# History stuff
[ -v HISTFILE ] || HISTFILE="${HOME}/.cache/zsh/history"
[ ! -d "$(dirname "${HISTFILE}")" ] && mkdir -p "$(dirname "${HISTFILE}")"
HISTSIZE=1000
SAVEHIST=10000
# Set some basic variables
export EDITOR=nvim
export VISUAL="${EDITOR}"
export BROWSER=firefox
# Neovim aliases
alias n=nvim
alias se=sudoedit
# I mess this up a lot
alias cd..="cd .."
# Enable mouse support in less
export LESS="--mouse"
# Safer file functions
alias rm="rm -I"
alias cp="cp -i"
alias mv="mv -i"
# Use vi mode
bindkey -v
# Implement a replace mode
bindkey -N virep viins
bindkey -M vicmd "R" overwrite-mode
function overwrite-mode {
zle -K virep
zle .overwrite-mode
}
zle -N overwrite-mode
# Bat configuration
if which bat >/dev/null 2>&1; then
# Pager
export PAGER="bat --paging=always"
# Less syntax highlighting in interactive shells
alias less="bat --paging=always"
# Use bat instead of cat
alias cat="bat --paging=never"
alias pcat="bat -pp"
alias ncat="bat -pp --color=never"
# Bat as man pager
export MANPAGER="sh -c 'col -bx | bat -l man -p --paging=always'"
fi
# Exa configuration
if which exa >/dev/null 2>&1; then
alias ls="exa --git -F"
alias la="ls -a"
fi
# Git aliases
alias ga="git add"
alias gaa="git add -A"
alias gco="git commit"
alias gcm="git commit -m"
alias gca="git commit -a"
alias gcam="git commit -am"
alias gp="git push"
alias gu="git pull"
alias gf="git fetch"
alias gt="git status"
# Sudo last line with <Esc><Esc>
sudo-command-line() {
[[ -z $BUFFER ]] && zle up-history
if [[ $BUFFER == sudo\ * ]]; then
LBUFFER="${LBUFFER#sudo }"
elif [[ $BUFFER == $EDITOR\ * ]]; then
LBUFFER="${LBUFFER#$EDITOR }"
LBUFFER="sudoedit $LBUFFER"
elif [[ $BUFFER == sudoedit\ * ]]; then
LBUFFER="${LBUFFER#sudoedit }"
LBUFFER="$EDITOR $LBUFFER"
else
LBUFFER="sudo $LBUFFER"
fi
}
zle -N sudo-command-line
bindkey "\e\e" sudo-command-line
bindkey -M vicmd '\e\e' sudo-command-line
bindkey -M viins '\e\e' sudo-command-line
# Autosuggestions
load_plugin zsh-autosuggestions
# Fancy prompt (spaceship-prompt)
SPACESHIP_CHAR_SUFFIX=" "
SPACESHIP_VI_MODE_SHOW=false
autoload -U promptinit && promptinit
prompt spaceship
# Change cursor shape for different vi modes.
function zle-line-init zle-keymap-select {
SPACESHIP_CHAR_SYMBOL=""
local _shape=0
case "${KEYMAP}" in
main) _shape=6; SPACESHIP_CHAR_SYMBOL="" ;; # vi insert: line
viins) _shape=6; SPACESHIP_CHAR_SYMBOL="" ;; # vi insert: line
isearch) _shape=6 ;; # inc search: line
virep) _shape=4 ;; # vi replace: underscore
command) _shape=4 ;; # read a command: underscore
vicmd) _shape=2 ;; # vi cmd: block
visual) _shape=2 ;; # vi visual mode: block
viopp) _shape=1 ;; # vi operation pending: blinking block
*) _shape=0 ;;
esac
zle reset-prompt
printf '\e[%d q' "${_shape}"
}
zle -N zle-keymap-select
zle -N zle-line-init
# Bookmarks
[ -v ZSH_BOOKMARK_DIR ] || ZSH_BOOKMARK_DIR="${HOME}/.cache/zsh/bookmarks"
[ -v ZSH_BOOKMARK_LS ] || ZSH_BOOKMARK_LS=true
source "${ZSH_CONFIG_DIR}/bookmark.zsh"
__ZSH_LOCAL_FILE="${ZSH_CONFIG_DIR}/local.zsh"
[ -e "${__ZSH_LOCAL_FILE}" ] && source "${__ZSH_LOCAL_FILE}"
# THE FOLLOWING PLUGINS MUST COME LAST
# More completions
load_plugin zsh-completions
# Syntax highlighting
load_plugin zsh-syntax-highlighting
# History substring search
load_plugin zsh-history-substring-search
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down
bindkey -M vicmd 'k' history-substring-search-up
bindkey -M vicmd 'j' history-substring-search-down
bindkey -M emacs '^P' history-substring-search-up
bindkey -M emacs '^N' history-substring-search-down
# Only match at the begining of the line
HISTORY_SUBSTRING_SEARCH_PREFIXED="true"
HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND=""
setopt histignoredups
# Clean up internal functions
unfunction load_plugin
# Run fortune and cowsay if we are not in nvim
[[ -v NVIM ]] || fortune | cowsay -felephant-in-snake