summaryrefslogtreecommitdiff
path: root/plugins/asdf
diff options
context:
space:
mode:
authorTuowen Zhao <ztuowen@gmail.com>2026-01-04 22:47:54 -0800
committerTuowen Zhao <ztuowen@gmail.com>2026-01-04 22:47:54 -0800
commit2aa4cb7a52b28722816ecfd55f3b06293332c55c (patch)
treef02a9f3d59d109c70caf932a24e43368994e0e8c /plugins/asdf
parent7e951c254e779ff0620537cf43ca69dd878387b4 (diff)
parentd23d3ea69fdb839088e6e5589557cce77b34aaf8 (diff)
downloadzsh-master.tar.gz
zsh-master.tar.bz2
zsh-master.zip
Merge remote-tracking branch 'github/master'HEADmaster
Diffstat (limited to 'plugins/asdf')
-rw-r--r--plugins/asdf/README.md54
-rw-r--r--plugins/asdf/asdf.plugin.zsh39
2 files changed, 48 insertions, 45 deletions
diff --git a/plugins/asdf/README.md b/plugins/asdf/README.md
index f047860e2..69db6930a 100644
--- a/plugins/asdf/README.md
+++ b/plugins/asdf/README.md
@@ -1,30 +1,48 @@
-## asdf
-
-**Maintainer:** [@RobLoach](https://github.com/RobLoach)
+# asdf
Adds integration with [asdf](https://github.com/asdf-vm/asdf), the extendable version manager, with support for Ruby, Node.js, Elixir, Erlang and more.
-### Installation
+## Installation
-1. [Download asdf](https://asdf-vm.com/guide/getting-started.html#_2-download-asdf) by running the following:
+1. [Install](https://asdf-vm.com/guide/getting-started.html#_1-install-asdf) asdf and ensure that's it's discoverable on `$PATH`;
+2. Enable it by adding it to your `plugins` definition in `~/.zshrc`:
- ```
- git clone https://github.com/asdf-vm/asdf.git ~/.asdf
- ```
+```sh
+plugins=(asdf)
+```
-2. [Enable asdf](https://asdf-vm.com/guide/getting-started.html#_3-install-asdf) by adding it to your `plugins` definition in `~/.zshrc`.
+## Usage
- ```
- plugins=(asdf)
- ```
+Refer to the [asdf plugin documentation](https://asdf-vm.com/guide/getting-started.html#_4-install-a-plugin) for information on how to add a plugin and install the many runtime versions for it.
-### Usage
+Example for installing the nodejs plugin and the many runtimes for it:
-See the [asdf documentation](https://asdf-vm.com/guide/getting-started.html#_4-install-a-plugin) for information on how to use asdf:
+```sh
+# Add plugin to asdf
+asdf plugin add nodejs
-```
-asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
+# Install the latest available version
asdf install nodejs latest
-asdf global nodejs latest
-asdf local nodejs latest
+
+# Uninstall the latest version
+asdf uninstall nodejs latest
+
+# Install a specific version
+asdf install nodejs 16.5.0
+
+# Set the latest version in .tool-versions of the `current directory`
+asdf set nodejs latest
+
+# Set a specific version in the `parent directory`
+asdf set -p nodejs 16.5.0 # -p is shorthand for --parent
+
+# Set a global version under `$HOME`
+asdf set -u nodejs 16.5.0 # -u is shorthand for --home
```
+
+For more commands, run `asdf help` or refer to the
+[asdf CLI documentation](https://asdf-vm.com/manage/commands.html#all-commands).
+
+## Maintainer
+
+- [@RobLoach](https://github.com/RobLoach)
diff --git a/plugins/asdf/asdf.plugin.zsh b/plugins/asdf/asdf.plugin.zsh
index 7635d20c3..913949888 100644
--- a/plugins/asdf/asdf.plugin.zsh
+++ b/plugins/asdf/asdf.plugin.zsh
@@ -1,30 +1,15 @@
-# Find where asdf should be installed
-ASDF_DIR="${ASDF_DIR:-$HOME/.asdf}"
-ASDF_COMPLETIONS="$ASDF_DIR/completions"
+(( ! $+commands[asdf] )) && return
-if [[ ! -f "$ASDF_DIR/asdf.sh" || ! -f "$ASDF_COMPLETIONS/_asdf" ]]; then
- # If not found, check for archlinux/AUR package (/opt/asdf-vm/)
- if [[ -f "/opt/asdf-vm/asdf.sh" ]]; then
- ASDF_DIR="/opt/asdf-vm"
- ASDF_COMPLETIONS="$ASDF_DIR"
- # If not found, check for Homebrew package
- elif (( $+commands[brew] )); then
- _ASDF_PREFIX="$(brew --prefix asdf)"
- ASDF_DIR="${_ASDF_PREFIX}/libexec"
- ASDF_COMPLETIONS="${_ASDF_PREFIX}/share/zsh/site-functions"
- unset _ASDF_PREFIX
- else
- return
- fi
-fi
+export ASDF_DATA_DIR="${ASDF_DATA_DIR:-$HOME/.asdf}"
+
+# Add shims to the front of the path, removing if already present.
+path=("$ASDF_DATA_DIR/shims" ${path:#$ASDF_DATA_DIR/shims})
-# Load command
-if [[ -f "$ASDF_DIR/asdf.sh" ]]; then
- source "$ASDF_DIR/asdf.sh"
- # Load completions
- if [[ -f "$ASDF_COMPLETIONS/_asdf" ]]; then
- fpath+=("$ASDF_COMPLETIONS")
- autoload -Uz _asdf
- compdef _asdf asdf # compdef is already loaded before loading plugins
- fi
+# If the completion file doesn't exist yet, we need to autoload it and
+# bind it to `asdf`. Otherwise, compinit will have already done that.
+if [[ ! -f "$ZSH_CACHE_DIR/completions/_asdf" ]]; then
+ typeset -g -A _comps
+ autoload -Uz _asdf
+ _comps[asdf]=_asdf
fi
+asdf completion zsh >| "$ZSH_CACHE_DIR/completions/_asdf" &|