Add ccache symlink directory to start of PATH, this must be after `typeset -U PATH` because on macOS this reorders the list so ccache's symlinks will no longer be at the start of PATH rendering it unusable.
154 lines
4.0 KiB
Bash
154 lines
4.0 KiB
Bash
# .zshrc [2] Used for setting user's interactive shell configuration and
|
|
# executing commands, will be sourced when starting as an interactive shell.
|
|
|
|
# Load plugin scripts
|
|
plugin-load() { source ~/.config/zsh/$1/$1.plugin.zsh }
|
|
plugin-load zsh-autosuggestions
|
|
plugin-load zsh-history-substring-search
|
|
plugin-load zsh-syntax-highlighting
|
|
|
|
# Disable non end-of-line autosuggest accept widgets
|
|
ZSH_AUTOSUGGEST_ACCEPT_WIDGETS=(end-of-line vi-end-of-line)
|
|
|
|
# Remove duplicates from history
|
|
setopt hist_ignore_all_dups
|
|
setopt hist_reduce_blanks
|
|
setopt hist_save_no_dups
|
|
|
|
# Enable multi-terminal history
|
|
setopt inc_append_history
|
|
|
|
# Enable comments in the prompt
|
|
setopt interactive_comments
|
|
|
|
# Disable '<Ctrl>D' to logout
|
|
setopt ignore_eof
|
|
|
|
# Disable sound
|
|
unsetopt beep
|
|
|
|
# Disable tty flow control, allows vim to use '<Ctrl>S'
|
|
unsetopt flow_control && stty -ixon
|
|
|
|
# Initialize completions
|
|
autoload -U compinit
|
|
compinit
|
|
|
|
# Enable prompt themes
|
|
autoload -Uz promptinit
|
|
promptinit
|
|
prompt fresh
|
|
|
|
# Enable vi mode line editor keymap
|
|
bindkey -v
|
|
|
|
# Enable yank, change, and delete whole line with 'Y', 'cc', and 'dd'
|
|
bindkey -M vicmd 'Y' vi-yank-whole-line
|
|
|
|
# Enable undo with 'u' and redo with 'U'
|
|
bindkey -M vicmd 'u' undo
|
|
bindkey -M vicmd 'U' redo
|
|
|
|
# Enable toggle comment at start of line al la vim-commentary
|
|
bindkey -M vicmd 'gcc' vi-pound-insert
|
|
|
|
# TODO: vi-pipe???
|
|
|
|
# Enable accepting autosuggestions
|
|
bindkey '^O' forward-word
|
|
bindkey '^P' autosuggest-accept
|
|
|
|
# Enable substring history search with 'j' and 'k'
|
|
bindkey -M vicmd 'k' history-substring-search-up
|
|
bindkey -M vicmd 'j' history-substring-search-down
|
|
|
|
# Replace '<Esc>h' with 'K' to view help
|
|
bindkey -r '^[h'
|
|
bindkey -M vicmd 'K' run-help
|
|
|
|
# Disable Ex mode with ':'
|
|
bindkey -rM vicmd ':'
|
|
|
|
# Enable '<Shirt><Tab>' reverse order completions
|
|
bindkey '^[[Z' reverse-menu-complete
|
|
|
|
# Use editor to edit command line with '<Ctrl>V'
|
|
autoload -U edit-command-line
|
|
zle -N edit-command-line
|
|
bindkey -M vicmd '^V' edit-command-line
|
|
|
|
# Get the shells parent process name.
|
|
ppid_name() { echo $(ps -p $(ps -p $(echo $$) -o ppid=) -o comm=) }
|
|
|
|
# Enable changing cursor shape based on vi mode
|
|
if [ "$ITERM_PROFILE" != "" ] && [ "$TMUX" = "" ]; then
|
|
# iTerm2 cursor shape escape sequences outside tmux
|
|
cursor_block="\e]50;CursorShape=0\C-G"
|
|
cursor_line="\e]50;CursorShape=1\C-G"
|
|
elif [ "$(ppid_name)" != "python2" ]; then
|
|
# iTerm2 inside tmux or VTE compatible cursor shape escape sequences,
|
|
# exclude Guake even though it's VTE based it doesn't like these
|
|
cursor_block="\e[2 q"
|
|
cursor_line="\e[6 q"
|
|
fi
|
|
|
|
if [[ ! -z "$cursor_block" && ! -z "$cursor_line" ]]; then
|
|
# Change cursor shape when vi mode changes
|
|
function zle-keymap-select zle-line-init {
|
|
case $KEYMAP in
|
|
vicmd) print -n -- "$cursor_block" ;;
|
|
viins|main) print -n -- "$cursor_line" ;;
|
|
esac
|
|
zle reset-prompt
|
|
zle -R
|
|
}
|
|
|
|
# Change cursor shape when line editing is finished
|
|
function zle-line-finish { print -n -- "$cursor_block" }
|
|
|
|
# Register cursor shape hooks
|
|
zle -N zle-keymap-select
|
|
zle -N zle-line-init
|
|
zle -N zle-line-finish
|
|
fi
|
|
|
|
# Remove duplicates from environment variables
|
|
typeset -U PATH
|
|
typeset -U MANPATH
|
|
typeset -U INFOPATH
|
|
|
|
# Add ccache symlink directory to start of PATH, this must be after
|
|
# `typeset -U PATH` because on macOS this reorders the list so ccache's
|
|
# symlinks will no longer be at the start of PATH rendering it unusable.
|
|
if [ `uname` = Darwin ]; then
|
|
[ -f /usr/local/bin/ccache ] && \
|
|
PATH=/usr/local/opt/ccache/libexec:$PATH
|
|
else
|
|
[ -f /usr/bin/ccache ] && \
|
|
PATH=/usr/lib/ccache:$PATH
|
|
fi
|
|
|
|
# Aliases
|
|
alias grep='grep --color=always'
|
|
alias cninja='cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMNADS=ON'
|
|
alias ssh='TERM=xterm-256color ssh'
|
|
|
|
case `uname` in
|
|
Linux)
|
|
[ "$TMUX" = "" ] && \
|
|
alias cls="printf '\ec'" || alias cls="clear && printf '\e[3J'"
|
|
alias ls='ls -F --color=auto'
|
|
alias debug='cgdb --args'
|
|
;;
|
|
Darwin)
|
|
alias cls="clear && printf '\e[3J'"
|
|
alias ls='ls -GFh'
|
|
alias debug='lldb --'
|
|
;;
|
|
esac
|
|
|
|
if [ "$TMUX" != "" ]; then
|
|
alias sp='tmux split-window'
|
|
alias vs='tmux split-window -h'
|
|
fi
|