Add basic XDG compliant sh architecture
The only file left in $HOME is .zshenv, which sets up zsh to source everything from XDG_CONFIG_HOME/zsh.
Shell files are split into sh and zsh directories, for global assignments (which should be posix compliant, work on any posix shell) like environemnt variables, xdg vars, and global aliases. zsh contains zsh specific customization (prompt customization, plugin loading, zsh completions).
Zsh initialization will pull from sh directory first, loading the respective mirror to its startup file (`.zprofile` loads `sh/profile` and `profile.d/*`, `.zshenv` loads `sh/env` and `sh/env.d/*` and `zsh/env.d/*`, `.zshrc` loads `sh/alias`, `sh/alias.d/*` and `zsh/alias.d/*`)
Once all is done, it will have loaded both global variables, aliases and settings, and zsh-only specifications. Other stow modules, if they want to add shell functionality, can include their aliases and functions in one of the above directories to automatically be picked up by zsh.
2020-02-02 15:08:40 +00:00
|
|
|
#!/usr/bin/env zsh
|
|
|
|
#
|
|
|
|
|
|
|
|
CONFDIR="${XDG_CONFIG_HOME:-$HOME/.config}"
|
|
|
|
ZSHCONFDIR="$CONFDIR/zsh"
|
|
|
|
|
2020-02-02 22:32:37 +00:00
|
|
|
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.config/zsh/.zshrc.
|
|
|
|
# Initialization code that may require console input (password prompts, [y/n]
|
|
|
|
# confirmations, etc.) must go above this block, everything else may go below.
|
|
|
|
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
|
|
|
|
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# load all plugins
|
|
|
|
[ -f "$ZSHCONFDIR/plugins.zsh" ] && source "$ZSHCONFDIR/plugins.zsh"
|
|
|
|
|
Add basic XDG compliant sh architecture
The only file left in $HOME is .zshenv, which sets up zsh to source everything from XDG_CONFIG_HOME/zsh.
Shell files are split into sh and zsh directories, for global assignments (which should be posix compliant, work on any posix shell) like environemnt variables, xdg vars, and global aliases. zsh contains zsh specific customization (prompt customization, plugin loading, zsh completions).
Zsh initialization will pull from sh directory first, loading the respective mirror to its startup file (`.zprofile` loads `sh/profile` and `profile.d/*`, `.zshenv` loads `sh/env` and `sh/env.d/*` and `zsh/env.d/*`, `.zshrc` loads `sh/alias`, `sh/alias.d/*` and `zsh/alias.d/*`)
Once all is done, it will have loaded both global variables, aliases and settings, and zsh-only specifications. Other stow modules, if they want to add shell functionality, can include their aliases and functions in one of the above directories to automatically be picked up by zsh.
2020-02-02 15:08:40 +00:00
|
|
|
# Set completion style
|
|
|
|
# The following lines were added by compinstall
|
|
|
|
zstyle ':completion:*' completer _complete _ignored _approximate
|
|
|
|
zstyle ':completion:*' list-colors ''
|
|
|
|
zstyle ':completion:*' matcher-list '' '+m:{[:lower:]}={[:upper:]} r:|[._-]=** r:|=**'
|
|
|
|
zstyle ':completion:*' menu select=1
|
|
|
|
zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
|
|
|
|
zstyle :compinstall filename "$ZSHCONFDIR/.zshrc"
|
|
|
|
# End of lines added by compinstall
|
|
|
|
autoload -Uz compinit zmv
|
|
|
|
compinit
|
|
|
|
|
|
|
|
# shellcheck source=alias
|
|
|
|
[ -f "$CONFDIR/sh/alias" ] && source "$CONFDIR/sh/alias"
|
|
|
|
# load additional aliases
|
|
|
|
if [ -d "$CONFDIR/sh/alias.d" ]; then
|
|
|
|
for _alias in "$CONFDIR/sh/alias.d"/*.sh; do
|
|
|
|
. "$_alias"
|
|
|
|
done
|
|
|
|
unset _alias
|
|
|
|
fi
|
|
|
|
if [ -d "$ZSHCONFDIR/alias.d" ]; then
|
|
|
|
for _alias in "$ZSHCONFDIR/alias.d"/*.sh; do
|
|
|
|
. "$_alias"
|
|
|
|
done
|
|
|
|
unset _alias
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Correct spelling for commands
|
|
|
|
setopt correct
|
|
|
|
# turn off the infernal correctall for filenames
|
|
|
|
unsetopt correctall
|
|
|
|
# Enable command auto-correction.
|
|
|
|
ENABLE_CORRECTION="true"
|
|
|
|
|
|
|
|
# Speed up autocomplete, force prefix mapping
|
|
|
|
zstyle ':completion:*' accept-exact '*(N)'
|
|
|
|
zstyle ':completion:*' use-cache on
|
2020-02-02 22:32:37 +00:00
|
|
|
zstyle ':completion:*' cache-path "${XDG_CACHE_HOME:-$HOME/.cache}/zshcompcache"
|
Add basic XDG compliant sh architecture
The only file left in $HOME is .zshenv, which sets up zsh to source everything from XDG_CONFIG_HOME/zsh.
Shell files are split into sh and zsh directories, for global assignments (which should be posix compliant, work on any posix shell) like environemnt variables, xdg vars, and global aliases. zsh contains zsh specific customization (prompt customization, plugin loading, zsh completions).
Zsh initialization will pull from sh directory first, loading the respective mirror to its startup file (`.zprofile` loads `sh/profile` and `profile.d/*`, `.zshenv` loads `sh/env` and `sh/env.d/*` and `zsh/env.d/*`, `.zshrc` loads `sh/alias`, `sh/alias.d/*` and `zsh/alias.d/*`)
Once all is done, it will have loaded both global variables, aliases and settings, and zsh-only specifications. Other stow modules, if they want to add shell functionality, can include their aliases and functions in one of the above directories to automatically be picked up by zsh.
2020-02-02 15:08:40 +00:00
|
|
|
# shellcheck disable=SC2016
|
|
|
|
zstyle -e ':completion:*:default' list-colors 'reply=("${PREFIX:+=(#bi)($PREFIX:t)*==34=34}:${(s.:.)LS_COLORS}")'
|
|
|
|
|
|
|
|
### history
|
|
|
|
## Set ZSH History defaults
|
|
|
|
setopt append_history
|
|
|
|
setopt extended_history
|
|
|
|
setopt hist_expire_dups_first
|
|
|
|
setopt hist_ignore_all_dups
|
|
|
|
setopt hist_ignore_dups
|
|
|
|
setopt hist_ignore_space
|
|
|
|
setopt hist_reduce_blanks
|
|
|
|
setopt hist_save_no_dups
|
|
|
|
setopt hist_verify
|
|
|
|
# Share your history across all your terminal windows
|
|
|
|
setopt share_history
|
|
|
|
setopt pushd_ignore_dups
|
|
|
|
#setopt pushd_silent
|
|
|
|
export HISTSIZE=100000
|
|
|
|
export SAVEHIST=100000
|
|
|
|
export HISTFILE="$XDG_DATA_HOME/zsh_history"
|
|
|
|
export HISTIGNORE="ls:cd:cd -:pwd:exit:date:* --help"
|
|
|
|
|
|
|
|
## Set ZSH History aliases
|
|
|
|
# Show the top 5 commands used in recent history
|
|
|
|
history_top() {
|
|
|
|
history | awk "{a[\$2]++} END{for(i in a){printf \"%5d\t%s\n\",a[i],i}}" | sort -rn | head
|
|
|
|
}
|
|
|
|
# Display timestamped recent command history
|
|
|
|
alias history="fc -l -d -D"
|
|
|
|
|
|
|
|
### Glob Alias expansion
|
|
|
|
# Expand aliases inline - see http://blog.patshead.com/2012/11/automatically-expaning-zsh-global-aliases---simplified.html
|
|
|
|
globalias() {
|
|
|
|
if [[ $LBUFFER =~ [A-Z0-9]+$ ]]; then
|
|
|
|
zle _expand_alias
|
|
|
|
zle expand-word
|
|
|
|
fi
|
|
|
|
zle self-insert
|
|
|
|
}
|
|
|
|
zle -N globalias
|
|
|
|
bindkey " " globalias
|
|
|
|
bindkey "^ " magic-space # control-space to bypass completion
|
|
|
|
bindkey -M isearch " " magic-space # normal space during searches
|
|
|
|
|
|
|
|
# Deduplicate PATH - remove any duplicate entries from PATH
|
|
|
|
# from: https://unix.stackexchange.com/questions/40749/remove-duplicate-path-entries-with-awk-command
|
|
|
|
get_var() {
|
|
|
|
eval 'printf "%s\n" "${'"$1"'}"'
|
|
|
|
}
|
|
|
|
set_var() {
|
|
|
|
eval "$1=\"\$2\""
|
|
|
|
}
|
|
|
|
dedup_pathvar() {
|
|
|
|
pathvar_name="$1"
|
|
|
|
pathvar_value="$(get_var "$pathvar_name")"
|
|
|
|
deduped_path="$(perl -e 'print join(":",grep { not $seen{$_}++ } split(/:/, $ARGV[0]))' "$pathvar_value")"
|
|
|
|
set_var "$pathvar_name" "$deduped_path"
|
|
|
|
}
|
|
|
|
dedup_pathvar PATH
|
|
|
|
dedup_pathvar MANPATH
|
|
|
|
|
|
|
|
# shellcheck is not built for zsh specific uses like p10k does
|
|
|
|
# so we remove it from being analyzed and linted in shellcheck by adding underscore
|
|
|
|
# To customize prompt, run `p10k configure` or edit ~/.config/zsh/.p10k.zsh.
|
|
|
|
[[ ! -f "$ZSHCONFDIR/.p10k._zsh" ]] || source "$ZSHCONFDIR/.p10k._zsh"
|
|
|
|
|
|
|
|
unset CONFDIR
|
|
|
|
unset ZSHCONFDIR
|