Skip to content

Instantly share code, notes, and snippets.

@jimador
Forked from QinMing/.zshrc
Created July 31, 2020 20:18
Show Gist options
  • Save jimador/d4ecd4b61508325254cb7f9fb1498fcc to your computer and use it in GitHub Desktop.
Save jimador/d4ecd4b61508325254cb7f9fb1498fcc to your computer and use it in GitHub Desktop.
.zshrc (lazy loading shell functions)
# 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
# AUTO_CD: if the command isn't found in the current directory, the shell will automatically cd into the command name, if the directory is found.
alias gw=./gradlew
alias gradlew=./gradlew
# 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 tff='find ./*/infrastructure -maxdepth 0 | xargs -L 1 tf fmt'
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 fetch origin &&
git fetch --tags -f &&
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 gulp yarn
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
# simple python virtual environment wrapper
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)
export AUTOSUGGESTION_HIGHLIGHT_COLOR='fg=cyan' # water mark for history commands
# Generated by hashicorp vault
# autoload -U +X bashcompinit && bashcompinit
# complete -o nospace -C /usr/local/bin/vault vault
# Other applications
# eval $(thefuck --alias)
# eval "$(pyenv init -)"
# export PIPENV_PYTHON=$HOME/.pyenv/shims/python
# export VIRTUALENV_PYTHON=$HOME/.pyenv/shims/python
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment