# -*- 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 field () { awk "{ print \$${1:-0} }" } alias f=field delink () { if [[ ! -h "$1" ]] then echo "$1 is not a symlink" return 1 fi local src=$(readlink "$1") rm "$1" cp "$src" "$1" chmod u+w "$1" } mvlink () { src="$1" target="$2" if [[ -h "$src" ]] then echo "$src is already a symlink" return src fi if [[ -f "$target" ]] then echo "$target already exists" fi if [[ -d "$target" ]] then target="$target/$(basename $src)" fi mv "$src" "$target" ln -s "$target" "$src" } 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 autoload -Uz edit-command-line zle -N edit-command-line bindkey '^x^e' edit-command-line sort=${commands[gsort]:-$commands[sort]} ds () { du -hd1 "$@" | $sort -h } zle-upify() { buf="$(echo "$BUFFER" | sed 's/[ |]*$//')" tmp="$(mktemp)" eval "$buf |& up -o '$tmp' 2>/dev/null" cmd="$(tail -n +2 "$tmp")" rm -f "$tmp" BUFFER="$BUFFER | $cmd" zle end-of-line } zle -N zle-upify bindkey '\e^u' zle-upify bindkey '\e^p' zle-upify # returns the first ghq root, whereas $GHQ_ROOT returns all hash -d p=$ghq_root[0] hash -d go=${GOPATH:-$HOME/go} zstyle ':completion:*' use-cache on zstyle ':completion:*' cache-path ${XDG_CACHE_HOME:-$HOME/.cache}/zsh/completion 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 zstyle -e ':completion:*' hosts 'reply=($(< ~/.hosts))' zstyle ':completion:*:ssh:*' tag-order '! users' # General configuration if [[ $TERM == "dumb" ]] then PROMPT='%B%F{green}%n %F{blue}%~%b%f %# ' unsetopt zle else if [[ -f "$ZDOTDIR/.p10k.zsh" ]] then source $ZDOTDIR/.p10k.zsh fi fi export FZF_CTRL_T_COMMAND='(fd --hidden --follow --exclude ".git" .) 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 '\ej' anyframe-widget-cd-ghq-repository bindkey '^x^k' anyframe-widget-kill unsetopt flow_control # Let me use ^S and ^Q esetenv () { emacsclient -e "(setenv \"$1\" \"$2\")" } ecpenv () { esetenv "$1" "${(P)1}" } compdef '_parameters' ecpenv tere() { local result=$(command tere "$@") [ -n "$result" ] && cd -- "$result" } alias bathelp='bat --plain --language=help' help() { "$@" --help 2>&1 | bathelp }