function() # Keep local variables in here. { ############################## Completion ###################################### zmodload zsh/complist autoload -Uz compinit && compinit -d ${ZSH_CACHE_DIR}/zcompdump setopt ALWAYS_TO_END COMPLETE_IN_WORD GLOB_COMPLETE LIST_PACKED NO_LIST_BEEP zmodload zsh/zutil zmodload zsh/complist # Configure completions. zstyle ':completion:*' use-cache on zstyle ':completion:*' cache-path ${ZSH_CACHE_DIR}/zcompcache zstyle ':completion:*' menu select zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} zstyle ':completion:*' completer _extensions _complete _approximate _ignored # Next line is hyphen- and case-insensitive, partial-word and substring # completion, copied from oh-my-zsh. zstyle ':completion:*' matcher-list 'm:{a-zA-Z-_}={A-Za-z_-}' 'r:|=*' 'l:|=* r:|=*' zstyle ':completion:*' file-sort modification # access didn't work. zstyle ':completion:*' sort false # Needed for file-sort. zstyle ':completion:*:processes' command "ps -u $USER -o pid,user,comm,cmd -w -w" zstyle ':completion:*' complete-options true compdef '_dispatch git git' config # git completions for config. autoload -Uz +X bashcompinit && bashcompinit ############################# History ########################################## HISTSIZE=50000 # In memory. SAVEHIST=10000 # On disk. # Write command to history file after it is finished, with time and duration. setopt NO_SHARE_HISTORY EXTENDED_HISTORY INC_APPEND_HISTORY_TIME setopt HIST_EXPIRE_DUPS_FIRST HIST_IGNORE_DUPS setopt HIST_IGNORE_SPACE HIST_REDUCE_BLANKS HIST_VERIFY HIST_FCNTL_LOCK autoload -Uz add-zsh-hook # Import new commands from the history file function _my_import_history_zshaddhistory() { fc -RI return 0 } add-zsh-hook zshaddhistory _my_import_history_zshaddhistory function _my_filter_secrets_zshaddhistory() { case ${1} in *"Authorization: Bearer"*) return 1 ;; *"--password"*) return 1 ;; esac return 0 } add-zsh-hook zshaddhistory _my_filter_secrets_zshaddhistory ############################## Plugins ######################################### # https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters.md ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets) ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=237" for plugin in ${(@s/ /)ZSH_PLUGIN_DIST}; do [[ -n ${plugin} ]] && source ${plugin} done unset plugin [[ -n ${ZSH_PLUGIN_SOURCE} ]] && source ${ZSH_PLUGIN_SOURCE} # Fuzzy finder, . export FZF_CTRL_R_OPTS="--layout=reverse" if [[ -f /usr/share/fzf/key-bindings.zsh ]]; then # Current Gentoo path. source /usr/share/fzf/key-bindings.zsh elif [[ -f /usr/share/fzf/fzf.zsh ]]; then source /usr/share/fzf/fzf.zsh elif [[ -f /usr/share/zsh/site-contrib/fzf.zsh ]]; then source /usr/share/zsh/site-contrib/fzf.zsh fi # zstyle ':fzf-tab:*' fzf-command ftb-tmux-popup zstyle ':fzf-tab:complete:*:*' popup-pad 200 2 # Add padding [right, bottom] zstyle ':completion:*:descriptions' format '%F{green}[%d]%f' zstyle ':fzf-tab:*' show-group none zstyle ':fzf-tab:*' prefix '' # Use C-x h to get possible contexts for a command zstyle ':fzf-tab:complete:(ls|rmdir|grep):argument-rest' fzf-preview 'ls -1 --color=always $realpath' zstyle ':fzf-tab:complete:cd:*' fzf-preview 'ls -1 --color=always $realpath' zstyle ':fzf-tab:complete:rg:operand-argument-rest' fzf-preview 'ls -1 --color=always $realpath' zstyle ':fzf-tab:complete:(less|cat):argument-rest' fzf-preview 'less $realpath' zstyle ':fzf-tab:complete:emacsclient:*' fzf-preview 'less $realpath' zstyle ':fzf-tab:complete:(lessp|evince|mpv|cp|mv):*argument-rest' fzf-preview 'LESSOPEN="|lesspipe %s" less $realpath' zstyle ':fzf-tab:complete:file:*' fzf-preview 'file --brief $realpath' zstyle ':fzf-tab:complete:git-log:argument-1' fzf-preview 'git log --color=always $word' zstyle ':fzf-tab:complete:git-show:argument-rest' fzf-preview 'git show --color=always $word' zstyle ':fzf-tab:complete:git-(add|diff|restore):argument-1' fzf-preview 'git diff --color=always $word' zstyle ':fzf-tab:complete:man:*' fzf-preview 'whatis -l $word | cut -d- -f2,3,4,5,6' [[ -v ASYNC_VERSION && ${ASYNC_INIT_DONE} -eq 0 ]] && async_init ################################################################################ # Directory options setopt AUTO_CD AUTO_PUSHD PUSHD_IGNORE_DUPS PUSHD_MINUS # Various options setopt CORRECT_ALL NO_FLOW_CONTROL INTERACTIVE_COMMENTS LONG_LIST_JOBS setopt REMATCH_PCRE PROMPT_SUBST zmodload zsh/terminfo # Test for the title setting capability (To Status Line) if echoti tsl > /dev/null 2>&1; then # Write some info to terminal title. # This is seen when the shell prompts for input. function _my_title_precmd() { print -Pn "\e]0;%m: %(1j,%j job%(2j|s|); ,)%~\a" } add-zsh-hook precmd _my_title_precmd # Write command and args to terminal title. # This is seen while the shell waits for a command to complete. function _my_title_preexec() { local _my_jobs_dir print -Pnv _my_jobs_dir "%(1j,%j job%(2j|s|); ,)%~" printf "\e]0;%s: %s; %s\a" ${HOST} ${1} ${_my_jobs_dir} } add-zsh-hook preexec _my_title_preexec fi # Translate TrueColor to 256 colors if the terminal doesn't support it [[ ${COLORTERM} == *(truecolor|24bit)* ]] || zmodload zsh/nearcolor # emacsclient 27 (TODO: check later versions) needs this for TrueColor if type emacsclient >& - \ && [[ ${TERM#*-} == "256color" ]] \ && [[ ${COLORTERM} == *(truecolor|24bit)* ]] \ && [[ -f "/usr/share/terminfo/${TERM[1]}/${TERM%-*}-direct" ]]; then alias $(command -v emacsclient)="TERM=${TERM%-*}-direct $(command -v emacsclient)" if type emacsclient >& -; then alias $(command -v emacsremote)="TERM=${TERM%-*}-direct $(command -v emacsremote)" fi fi [[ ${COLORTERM} == *(truecolor|24bit)* ]] && export NVIM_TUI_ENABLE_TRUE_COLOR=1 export GPG_TTY=$(tty) case ${TERM} in (dumb) # Emacs shells and TRAMP. unsetopt ZLE if [[ ${INSIDE_EMACS} == *tramp* ]]; then HISTFILE="/dev/null" fi alias less='cat' alias more='cat' export PAGER='cat' ;; esac # Host specific settings. case $(hostname) in schnibble | gaffer | localhost) function sudo() { su -c "${*}" } DEFAULT_USER="u0_a197" ;; esac [[ -f ${ZDOTDIR}/keys.zsh ]] && source ${ZDOTDIR}/keys.zsh [[ -f ${ZDOTDIR}/aliases.zsh ]] && source ${ZDOTDIR}/aliases.zsh [[ -d ${ZDOTDIR}/functions ]] && autoload -Uz ${ZDOTDIR}/functions/* [[ -f ${ZDOTDIR}/themes/syntax-tastytea.zsh ]] && source ${ZDOTDIR}/themes/syntax-tastytea.zsh [[ -f ${ZDOTDIR}/local.zsh ]] && source ${ZDOTDIR}/local.zsh zstyle ':vcs_info:*' enable git svn hg # vcs_info_printsys zstyle ':vcs_info:*' check-for-changes true DEFAULT_USER=${DEFAULT_USER:-tastytea} autoload -U promptinit && promptinit prompt tastytea return 0 }