Initial commit
This commit is contained in:
180
init.zsh
Normal file
180
init.zsh
Normal file
@ -0,0 +1,180 @@
|
||||
# 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
|
Reference in New Issue
Block a user