summaryrefslogtreecommitdiff
path: root/config/zshrc
diff options
context:
space:
mode:
Diffstat (limited to 'config/zshrc')
-rwxr-xr-xconfig/zshrc167
1 files changed, 167 insertions, 0 deletions
diff --git a/config/zshrc b/config/zshrc
new file mode 100755
index 0000000..f211999
--- /dev/null
+++ b/config/zshrc
@@ -0,0 +1,167 @@
+# Emacs style
+bindkey -e
+zle -N edit-command-line
+bindkey '^xe' edit-command-line
+bindkey '^x^e' edit-command-line
+# Vi style:
+# zle -N edit-command-line
+# bindkey -M vicmd v edit-command-line
+
+bindkey \^U backward-kill-line
+
+# Enable Ctrl-x-e to edit command line
+autoload -U edit-command-line
+
+# completions
+fpath=(/usr/local/share/zsh-completions $fpath)
+
+# fix delete
+bindkey "^[[3~" delete-char
+bindkey "^[3;5~" delete-char
+
+# chpwd() { ls -A; } # Auto ls after changing directory.
+
+CDPATH=~ # Check ~ for directories after checking . (`c/d/` matches `./c*/d*/`, then tries `~/c*/d*/`).
+
+setopt no_auto_menu # don't complete on ambiguous cases
+setopt interactive_comments # Allow comments in the terminal.
+setopt BANG_HIST # Treat the '!' character specially during expansion.
+setopt EXTENDED_HISTORY # Write the history file in the ":start:elapsed;command" format.
+setopt INC_APPEND_HISTORY # Write to the history file immediately, not when the shell exits.
+setopt SHARE_HISTORY # Share history between all sessions.
+setopt HIST_EXPIRE_DUPS_FIRST # Expire duplicate entries first when trimming history.
+setopt HIST_IGNORE_DUPS # Don't record an entry that was just recorded again.
+setopt HIST_IGNORE_ALL_DUPS # Delete old recorded entry if new entry is a duplicate.
+setopt HIST_FIND_NO_DUPS # Do not display a line previously found.
+setopt HIST_IGNORE_SPACE # Don't record an entry starting with a space.
+setopt HIST_SAVE_NO_DUPS # Don't write duplicate entries in the history file.
+setopt HIST_REDUCE_BLANKS # Remove superfluous blanks before recording entry.
+# setopt HIST_VERIFY # Don't execute immediately upon history expansion.
+# setopt HIST_BEEP # Beep when accessing nonexistent history.
+
+# don't fret if globbing patterns can't be expanded, just
+# use them as is. useful for curl commands with '?'
+# https://superuser.com/questions/982110/how-can-i-disable-globbing-for-url-arguments-in-zsh
+setopt NO_NOMATCH
+
+# disable case sensitivity
+zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
+
+# don't ask "do you wish to see all NNN possibilities"
+export LISTMAX=0
+
+# if command -v startship
+# then
+# eval "$(starship init zsh)"
+local pure_src="$HOME/src/sindresorhus/pure"
+if [[ -d "$pure_src" ]]
+then
+ fpath=("$pure_src" "$fpath[@]")
+ autoload -U promptinit
+ promptinit
+ prompt pure
+ # PURE_PROMPT_SYMBOL='∴'
+else
+ # PROMPT="$SUPLEMENT%F{8}%1~%f ∴ "
+ PROMPT="%F{244}%1~%f ∴ "
+fi
+
+# Use modern completion system
+autoload -Uz compinit
+compinit -u
+zstyle ':completion:*' auto-description 'specify: %d'
+zstyle ':completion:*' completer _expand _complete _correct _approximate
+zstyle ':completion:*' format 'Completing %d'
+zstyle ':completion:*' group-name ''
+zstyle ':completion:*' menu select=2
+command -v dircolors >/dev/null 2>&1 && eval "$(dircolors -b)"
+zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
+zstyle ':completion:*' list-colors ''
+zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s
+zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=* l:|=*'
+zstyle ':completion:*' menu select=long
+zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
+zstyle ':completion:*' use-compctl false
+zstyle ':completion:*' verbose true
+zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'
+zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd'
+
+# Recommended by Docker autocompletion
+# https://docs.docker.com/compose/completion/
+# fpath=(~/.zsh/completion $fpath)
+# autoload -Uz compinit && compinit -i
+
+autoload run-help
+HELPDIR=/usr/local/share/zsh/help
+
+# function that sources the given file if it exists
+source_if_exists() {
+ if [[ -f "$1" ]]
+ then
+ source "$1"
+ fi
+}
+
+source "$HOME/.profile"
+
+# fzf setup (must come after .profile which sets up PATH for brew)
+brew_prefix="$(brew --prefix 2>/dev/null || true)"
+if [[ -n "$brew_prefix" ]]
+then
+ # Setup fzf
+ if [[ ! "$PATH" == *opt/fzf/bin* ]]; then
+ export PATH="$PATH:$brew_prefix/opt/fzf/bin"
+ fi
+
+ # Auto-completion
+ [[ $- == *i* ]] && source "$brew_prefix/opt/fzf/shell/completion.zsh" 2> /dev/null
+
+ # Key bindings
+ source "$brew_prefix/opt/fzf/shell/key-bindings.zsh"
+elif [[ "$(uname)" == "Linux" ]] && command -v fzf > /dev/null
+then
+ # check if file exists before sourcing with zsh
+ source_if_exists /usr/share/doc/fzf/examples/key-bindings.zsh
+ source_if_exists /usr/share/doc/fzf/examples/completion.zsh
+ source_if_exists /usr/share/fzf/shell/key-bindings.zsh
+fi
+
+export FZF_COMPLETION_OPTS="--border --info=inline ${FZF_COMPLETION_OPTS:-}"
+
+setup_dir_hashes() {
+ local src="$HOME/src"
+ if [ -d /Volumes/Sense/src ]
+ then
+ src=/Volumes/Sense/src
+ fi
+ # Named directories for the checkouts this account works in, ~dot and the
+ # rest. Only those that exist: zsh prints a warning for a hash -d to a
+ # missing path, and which projects a machine has is the machine's business.
+ # Not `local path`: in zsh that is tied to $PATH, and assigning to it in the
+ # loop would blank PATH for the rest of this function, sourced fragment
+ # included.
+ local name dir
+ for name dir in \
+ dot "$src/soarez/dot" \
+ cs "$src/soarez/cloud-setup"
+ do
+ [ -d "$dir" ] && hash -d "$name=$dir"
+ done
+ # More of them, for whatever this machine works on, from a file another layer
+ # links in. Same shape: `hash -d name=path`, one per line, zsh syntax.
+ local extra="${XDG_CONFIG_HOME:-$HOME/.config}/shell/dir-hashes.zsh"
+ [ -r "$extra" ] && source "$extra"
+}
+setup_dir_hashes
+
+# ~/bin is prepended to PATH in config/env (which, unlike the line that used to
+# be here, skips it when the directory doesn't exist).
+
+export COURSIER_CREDENTIALS=~/.config/coursier/credentials.properties
+
+
+# ## Support .envrc files: https://direnv.net/docs/hook.html
+# eval "$(direnv hook zsh)"
+
+# ## https://www.jenv.be
+# eval \"$( jenv init - )\"