# -*- 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
user/zsh/zshrc (view raw)