Giter Club home page Giter Club logo

zsh-asdf-direnv's Introduction

asdf-direnv

asdf-direnv is a zsh plugin that loads asdf & asdf-direnv.

Installing

zinit

Add this to your zinit config (.zshrc):

zinit light redxtech/zsh-asdf-direnv

# it also works with turbo mode:
zinit ice wait lucid
zinit load redxtech/zsh-asdf-direnv

oh-my-zsh

Install it with your favourite zsh package manager, or clone it directly to your $ZSH_CUSTOM/plugins directory with git, and add zsh-asdf-direnv to the plugins array in your .zshrc file:

export ASDF_DIR="$HOME/.asdf"
fpath=(${ASDF_DIR}/completions $fpath)

plugins = (... zsh-asdf-direnv)

Usage

Once it's loaded it your shell you should be able to use both asdf and direnv as normal.

If asdf hasn't been installed yet, it will be installed for you (git clone into ~/.asdf).

If direnv hasn't been installed yet, it will be installed for you (asdf plugin add direnv & asdf install direnv latest).

Config

If you set the environment variable ZSH_ASDF_DIRENV_LIBONLY to "true", it will only add $ASDF_DIR/bin to path and source $ASDF_DIR/lib/asdf.sh in order to not put $ASDF_DIR/shims in the path. Read this for more information.

Author

asdf-direnv © Gabe Dunn, Released under the MIT License.

zsh-asdf-direnv's People

Contributors

bo5o avatar iloveitaly avatar kuator avatar redxtech avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

zsh-asdf-direnv's Issues

Alternate approach with better loading performance

Hey,

thanks for the awesome plugin, it helped me a lot to understand the asdf & direnv installation process. Unfortunately, I have found out that the performance was/is not very satisfying when I checked zinit times. The plugin takes ~70ms to load and is the slowest in the list by a fair margin, even slower than other bigger contenders.


(not all entries are visible, left some for comparison)

❯ zini times
Plugin loading times:
    1 ms - zdharma-continuum/zinit-annex-as-monitor

   13 ms - romkatv/powerlevel10k
   11 ms - Aloxaf/fzf-tab
    3 ms - zimfw/utility

    3 ms - BurntSushi/ripgrep (sbin command)
   39 ms - zdharma-continuum/fast-syntax-highlighting
   16 ms - zsh-users/zsh-autosuggestions

   --> 73 ms - redxtech/zsh-asdf-direnv <--

    2 ms - jesseduffield/lazygit (sbin command)

I took that as a personal challenge to see if I can improve the situation. After some tinkering, I came up with a solution that does not require any extra plugin, just using plain zinit. As this is a completely different approach than yours I still decided to share it here.

Following code plugin setup is the result, it offers less comfort than your approach, but the loading times are better by a manifold. I assume the "generate once & only source the generated file" is the big performance winner compared to the used "eval" approach.

_zini_asdf_install() {
    # path export temporary required so the asdf script finds itself
    PATH="${PWD}/bin:$PATH"
    asdf plugin add direnv
    asdf install direnv latest
    asdf global direnv latest
    # see https://github.com/asdf-community/asdf-direnv#setup
    asdf exec direnv hook zsh > asdf_direnv_hook.zsh
    echo 'direnv() { asdf exec direnv "$@"; }' >> asdf_direnv_hook.zsh
}

zinit wait:'0b' \
    lucid \
    light-mode \
    sbin:'bin/asdf' \
    atinit:'export ASDF_DIR="$PWD"' \
    atclone:'_zini_asdf_install' \
    src:'lib/asdf.sh' \
    multisrc:'asdf_direnv_hook.zsh' \
    for \
    depth:1 @asdf-vm/asdf
❯ zini times | grep asdf
    2 ms - asdf-vm/asdf (sbin command)

Cheers!

Reinstalls direnv on every new shell if direnv config isn't in ~/.direnv

Since the most recent update, I see log messages about installing direnv on every new login shell.

Last login: Mon Oct 24 09:33:55 on console
[zsh-asdf-direnv] Installing direnv...
[zsh-asdf-direnv] -> direnv install OK
~

The latest release adds a check if direnv is already installed, but I think it's making a faulty assumption here:

[[ ! -d "~/.direnv" ]] && _zsh_asdf_direnv_install_direnv

I'm not sure this is the only standard location for the direnv config directory; I've had direnv for a long time and I don't have this directory. Based on the direnv manual this isn't the only place that direnv configuration can go. Maybe there's another way to determine whether direnv is installed.

Steps to reproduce

  1. From a blank home directory, install asdf and zsh-asdf-direnv
  2. Observe that this is logged:
 [zsh-asdf-direnv] Installing direnv...
 [zsh-asdf-direnv] -> direnv install OK
  1. Close the shell and logout
  2. Log back in
  3. Observe the same log messages as in 2.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.