-
-
Save Amar1729/294c6e310b191405bf8fceb72e96b399 to your computer and use it in GitHub Desktop.
# sdkman recommands settings SDKMAN_DIR and sourcing sdkman-init.sh | |
# this can really slow down shell startup, so here's my attempt to lazy-load sdk() | |
# | |
# This snippet lives in my ~/.profile but generally could live in any zsh-related startup file. | |
# | |
# the logic of this custom sdk is kind of odd, but it basically checks if the current | |
# definition of sdk() is too short (less than 10 lines). If so, it tries to source | |
# the init script and then pass through all the arguments to the real sdk function. | |
export SDKMAN_DIR="$HOME/.sdkman" | |
# too slow! | |
# [[ -s "$SDKMAN_DIR/bin/sdkman-init.sh" ]] && source "$SDKMAN_DIR/bin/sdkman-init.sh" | |
# do this instead: | |
sdk () { | |
# "metaprogramming" lol - source init if sdk currently looks like this sdk function | |
if [[ "$(which sdk | wc -l)" -le 10 ]]; then | |
unset -f sdk | |
source "$SDKMAN_DIR/bin/sdkman-init.sh" | |
fi | |
sdk "$@" | |
} |
no u right, this way is really dumb/hacky. I now use this zsh lazyload plugin
I honestly don't know autoload
well enough to have written this myself, but i assume you mean something a bit like this: https://stackoverflow.com/questions/30840651/what-does-autoload-do-in-zsh
Internally (I think) zsh-lazyload works quite similar to this code snippet, creates a function called the same as the command you're lazy loading, unset -f
/ unfunction
the function and source the file the command needs.
The main difference it's the implementation, and that zsh-lazyload can work for any number of commands you like. Quite handy actually.
Except for nvm, you can't use global installed packages like npm
, npx
and so on before actually (lazy) load nvm calling it once in the command line.
You can't call npx directly:
npx
You'll need to do something like this instead
nvm --version
npx
For this specific case I recommend zsh-nvm
How would you do it?