-
-
Save jimador/d4ecd4b61508325254cb7f9fb1498fcc to your computer and use it in GitHub Desktop.
.zshrc (lazy loading shell functions)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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