Skip to content

Instantly share code, notes, and snippets.

@mikalv
Forked from QinMing/.zshrc
Created April 30, 2019 23:56
Show Gist options
  • Save mikalv/fbbb04a339a1541438da8054da8b5d6d to your computer and use it in GitHub Desktop.
Save mikalv/fbbb04a339a1541438da8054da8b5d6d to your computer and use it in GitHub Desktop.
.zshrc (ZSH lazy load)
# Copyright (c) 2016-2018 Ming Qin (覃明) <https://github.com/QinMing>
# Open source under MIT LICENSE.
ZSH_THEME="agnoster"
plugins=(zsh-autosuggestions git pip django docker docker-compose)
# ......
unsetopt AUTO_CD
compdef gw=gradle
# https://github.com/gradle/gradle-completion/issues/14#issuecomment-478816232
alias l='ls -alhtr'
alias upthis='ss u'
alias downthis='ss d'
alias dcp='docker-compose'
alias docker-clean='docker system prune --volumes -f'
alias g='git'
alias gs='git status'
alias gl='git l'
alias gd='git diff'
alias gb='git branch'
alias gck='git checkout'
alias gp='git pull'
# https://stackoverflow.com/questions/1904860/how-to-remove-unreferenced-blobs-from-my-git-repo
alias git-clean='git -c gc.reflogExpire=0 -c gc.reflogExpireUnreachable=0 -c gc.rerereresolved=0 -c gc.rerereunresolved=0 -c gc.pruneExpire=now gc "$@"'
unalias gbd || true
gbd() {
# Delete local branches that squash-merged to `master`. Forked from https://github.com/not-an-aardvark/git-delete-squashed
git remote prune origin &&
git checkout -q master &&
git merge --ff-only origin/master &&
git for-each-ref refs/heads/ "--format=%(refname:short)" | while read branch; do
mergeBase=$(git merge-base master $branch) &&
[[ $(
git cherry master $(
git commit-tree $(
git rev-parse $branch^{tree}
) -p $mergeBase -m _
)
) == "-"*
]] && git branch -D $branch;
done;
git prune
}
lazy_load() {
# Act as a stub to another shell function/command. When first run, it will load the actual function/command then execute it.
# E.g. This made my zsh load 0.8 seconds faster by loading `nvm` when "nvm", "npm" or "node" is used for the first time
# $1: space separated list of alias to release after the first load
# $2: file to source
# $3: name of the command to run after it's loaded
# $4+: argv to be passed to $3
echo "Lazy loading $1 ..."
# $1.split(' ') using the s flag. In bash, this can be simply ($1) #http://unix.stackexchange.com/questions/28854/list-elements-with-spaces-in-zsh
# Single line won't work: local names=("${(@s: :)${1}}"). Due to http://stackoverflow.com/questions/14917501/local-arrays-in-zsh (zsh 5.0.8 (x86_64-apple-darwin15.0))
local -a names
if [[ -n "$ZSH_VERSION" ]]; then
names=("${(@s: :)${1}}")
else
names=($1)
fi
unalias "${names[@]}"
. $2
shift 2
$*
}
group_lazy_load() {
local script
script=$1
shift 1
for cmd in "$@"; do
alias $cmd="lazy_load \"$*\" $script $cmd"
done
}
export NVM_DIR=~/.nvm
group_lazy_load $HOME/.nvm/nvm.sh nvm node npm truffle
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
group_lazy_load $HOME/.rvm/scripts/rvm rvm irb rake rails
unset -f group_lazy_load
alias ve="lazy_load 've' $HOME/git/simple-virtualenv-wrapper/ve.sh ve"
# If using GnuPG to sign git commits, etc, need the following.
export GPG_TTY=$(tty)
# Other applications
# eval $(thefuck --alias)
# eval "$(pyenv init -)"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment