diff options
Diffstat (limited to 'user/zsh/zshrc')
-rw-r--r-- | user/zsh/zshrc | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/user/zsh/zshrc b/user/zsh/zshrc new file mode 100644 index 00000000..22e28528 --- /dev/null +++ b/user/zsh/zshrc @@ -0,0 +1,134 @@ +# -*- mode: sh; -*- +setopt hist_ignore_space +setopt inc_append_history_time +setopt transient_rprompt + +WORDCHARS=${${WORDCHARS//[-.=]}//[\/]} + +zmodload zsh/terminfo + +bindkey '\e[3~' delete-char + +bindkey '\C-hd' describe-key-briefly + +dc () { + if [[ -x ./docker-compose ]] + then + ./docker-compose "$@" + else + docker-compose "$@" + fi +} +compdef '_dispatch docker-compose docker-compose' dc + +backward-argument () { + local WORDCHARS="\!\`~#@$%^&*()-_=+[{]}\|;:,<.>/?\'\"" + zle backward-word +} + +forward-argument () { + local WORDCHARS="\!\`~#@$%^&*()-_=+[{]}\|;:,<.>/?\'\"" + zle forward-word +} + +backward-kill-argument () { + local WORDCHARS="\!\`~#@$%^&*()-_=+[{]}\|;:,<.>/?\'\"" + zle backward-kill-word +} + +kill-argument () { + local WORDCHARS="\!\`~#@$%^&*()-_=+[{]}\|;:,<.>/?\'\"" + zle kill-word +} + +zle -N backward-argument +zle -N forward-argument +zle -N kill-argument +zle -N backward-kill-argument +bindkey '\e^b' backward-argument +bindkey '\e^f' forward-argument +bindkey '\e^d' backward-kill-argument +bindkey '\e^k' kill-argument + +sort=${commands[gsort]:-$commands[sort]} + +ds () { + du -hd1 "$@" | $sort -h +} + +# returns the first ghq root, whereas $GHQ_ROOT returns all +hash -d p=$ghq_root[0] +hash -d go=${GOPATH:-$HOME/go} + +zle -C hist-complete complete-word _generic +zstyle ':completion:hist-complete:*' completer _history +bindkey '\e ' hist-complete + +zstyle ':completion:*' matcher-list 'm:{a-zA-Z-_}={A-Za-z_-}' 'r:|=*' 'l:|=* r:|=*' +zstyle ':completion:*' completer _expand _complete _match + +# Plugins + +if [[ -n $commands[helm] ]] +then + autoload _helm + compdef _helm helm +fi + +# General configuration + +if [[ $TERM == "dumb" ]] +then + PROMPT='%B%F{green}%n %F{blue}%~%b%f +%# ' + unsetopt zle +else + AGKOZAK_PROMPT_DIRTRIM=0 + AGKOZAK_LEFT_PROMPT_ONLY=${+SSH_CLIENT} + + check_kubectl_context () { + if [[ "$PWD" =~ /kubernetes || "$PWD" =~ /monorepo ]] + then + kubectl_context=$(kubectl config current-context) + kubectl_namespace=$(kubectl config view -o jsonpath="{.contexts[?(@.name==\"${kubectl_context}\")].context.namespace}") + if [[ $kubectl_context =~ production ]] + then + kubectl_colour=red + kubectl_release=satoshipay-${kubectl_namespace} + else + kubectl_colour=yellow + if [[ -z $mr ]] + then + kubectl_release=satoshipay-${kubectl_namespace}-staging + else + kubectl_release=story-${mr}-${kubectl_namespace} + fi + fi + prompt_context="%F{$kubectl_colour}[${kubectl_context}:${kubectl_namespace}]%f" + else + prompt_context= + fi + } + precmd_functions+=(check_kubectl_context) + AGKOZAK_CUSTOM_RPROMPT='${prompt_context}%(3V.%F{${AGKOZAK_COLORS_BRANCH_STATUS}%3v%f.)' +fi + +if [[ -n $commands[fzf] ]] +then + export FZF_CTRL_T_COMMAND=' + (git ls-tree -r --name-only HEAD || + fd --hidden --follow --exclude ".git" . | + sed s/^..//) 2> /dev/null' + export FZF_ALT_C_COMMAND='fd --type d --hidden --follow --exclude ".git" .' + export FZF_DEFAULT_COMMAND=$FZF_CTRL_T_COMMAND + + bindkey '^t' transpose-chars + bindkey '^x^f' fzf-file-widget + + zstyle ":anyframe:selector:fzf:" command "fzf --height 40%" + + bindkey '\es' anyframe-widget-cd-ghq-repository + bindkey '^x^k' anyframe-widget-kill +fi + +unsetopt flow_control # Let me use ^S and ^Q |