From ab88f2cb666586e73aec4b1dc6bde9420537cce4 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 26 Apr 2020 21:59:25 +0100 Subject: [PATCH] Improve shell start-up time by lazy-loading various tools --- zsh/kubernetes.zsh | 6 ++++- zsh/linux.zsh | 4 +--- zsh/ruby.zsh | 59 ++++++++++++++++++++++++++++++---------------- zsh/tmux.zsh | 36 +++++++++++++++++++++------- 4 files changed, 72 insertions(+), 33 deletions(-) diff --git a/zsh/kubernetes.zsh b/zsh/kubernetes.zsh index c02b876..e6990ee 100644 --- a/zsh/kubernetes.zsh +++ b/zsh/kubernetes.zsh @@ -7,5 +7,9 @@ alias hl="helm" alias mk="minikube" if (( $+commands[kubectl] )); then - eval "$(kubectl completion zsh)" + # lazy-load kubectl setup + _kubectl() { + unset -f _kubectl + eval "$(command kubectl completion zsh)" + } fi diff --git a/zsh/linux.zsh b/zsh/linux.zsh index 26d610a..c72013a 100644 --- a/zsh/linux.zsh +++ b/zsh/linux.zsh @@ -3,6 +3,4 @@ # # Ensure 256 color support in Linux -if [[ "$(uname)" == "Linux" ]]; then - export TERM="xterm-256color" -fi +export TERM="xterm-256color" diff --git a/zsh/ruby.zsh b/zsh/ruby.zsh index 6639f22..89d5e3c 100755 --- a/zsh/ruby.zsh +++ b/zsh/ruby.zsh @@ -50,32 +50,51 @@ alias bo="bundle open" alias bp="bundle package" alias bu="bundle update" -# lazy-load rbenv -rbenv() { - eval "$(command rbenv init -)" - rbenv "$@" -} +if (( $+commands[rbenv] )); then + # lazy-load rbenv + rbenv() { + load-rbenv + rbenv "$@" + } -rbenv-each-version () { - local current_version="$RBENV_VERSION" + _rbenv() { + load-rbenv + _rbenv "$@" + } - for v in $(ls "${HOME}/.rbenv/versions"); do - echo "==> Ruby $v:" - export RBENV_VERSION="$v" - eval $* - done + compctl -K _rbenv rbenv - export RBENV_VERSION="$current_version" -} + load-rbenv() { + unset -f load-rbenv _rbenv rbenv + eval "$(command rbenv init -)" + } -# lunchy auto-completion -if which gem &> /dev/null && gem which lunchy &> /dev/null; then - LUNCHY_DIR="$(dirname `gem which lunchy`)/../extras" - if [ -f "$LUNCHY_DIR/lunchy-completion.zsh" ]; then - . "$LUNCHY_DIR/lunchy-completion.zsh" - fi + rbenv-each-version () { + local current_version="$RBENV_VERSION" + + for v in $(ls "${HOME}/.rbenv/versions"); do + echo "==> Ruby $v:" + export RBENV_VERSION="$v" + eval $* + done + + export RBENV_VERSION="$current_version" + } fi +# lazy-load lunchy auto-completation +_lunchy() { + unset -f _lunchy + local lunchy_dir + if which gem &> /dev/null && gem which lunchy &> /dev/null; then + lunchy_dir="$(dirname `gem which lunchy`)/../extras" + if [ -f "${lunchy_dir}/lunchy-completion.bash" ]; then + source "${lunchy_dir}/lunchy-completion.bash" + fi + fi + _lunchy "$@" +} + # Solargraph related commands solargraph-install () { diff --git a/zsh/tmux.zsh b/zsh/tmux.zsh index 0f10d78..0ef5c14 100644 --- a/zsh/tmux.zsh +++ b/zsh/tmux.zsh @@ -12,19 +12,37 @@ fi # Tmuxifier if [ -d "$DOTFILES/tmux/tmuxifier" ]; then - if [ -d "$DOTPFILES/tmux-layouts" ]; then - export TMUXIFIER_LAYOUT_PATH="$DOTPFILES/tmux-layouts" - else - export TMUXIFIER_LAYOUT_PATH="$HOME/.tmux-layouts" - fi - - path_prepend "$DOTFILES/tmux/tmuxifier/bin" - eval "$(tmuxifier init -)" - alias m="tmuxifier" alias ms="tmuxifier load-session" alias mw="tmuxifier load-window" alias mm="tmuxifier load-session main" + + # lazy-load tmuxifier + tmuxifier() { + load-tmuxifier + tmuxifier "$@" + } + + _tmuxifier() { + load-tmuxifier + _tmuxifier "$@" + } + + compctl -K _tmuxifier tmuxifier + + load-tmuxifier() { + # unset lazy-load functions + unset -f load-tmuxifier _tmuxifier tmuxifier + + if [ -d "$DOTPFILES/tmux-layouts" ]; then + export TMUXIFIER_LAYOUT_PATH="$DOTPFILES/tmux-layouts" + else + export TMUXIFIER_LAYOUT_PATH="$HOME/.tmux-layouts" + fi + + path_prepend "$DOTFILES/tmux/tmuxifier/bin" + eval "$(command tmuxifier init -)" + } fi use-tmuxifier-dev() {