From 9b5d32e9fb0062de3c79030691ecb56fb3515006 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Mon, 23 Dec 2024 14:32:22 -0600 Subject: [PATCH 001/289] feat: build erlang with all cores (#3802) --- .github/workflows/test-plugins.yml | 6 +++--- src/plugins/core/erlang.rs | 5 ++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test-plugins.yml b/.github/workflows/test-plugins.yml index e55182a68b..6f0ff4ad71 100644 --- a/.github/workflows/test-plugins.yml +++ b/.github/workflows/test-plugins.yml @@ -57,12 +57,12 @@ jobs: - plugin: direnv command: mise exec direnv@latest -- direnv --version - plugin: erlang - command: mise exec erlang@24.3.4.9 -- erl -eval 'erlang:display(erlang:system_info(otp_release)), halt().' -noshell + command: mise exec erlang@27.2 -- erl -eval 'erlang:display(erlang:system_info(otp_release)), halt().' -noshell - plugin: elixir command: | - mise use --global erlang@24.3.4.9 + mise use --global erlang@27.2 eval "$(mise env bash)" - mise use --global elixir + mise use --global elixir@1.17.3 eval "$(mise env bash)" mise exec -- elixir --version - plugin: golang diff --git a/src/plugins/core/erlang.rs b/src/plugins/core/erlang.rs index 5b9e08f834..ae87817149 100644 --- a/src/plugins/core/erlang.rs +++ b/src/plugins/core/erlang.rs @@ -52,7 +52,6 @@ impl ErlangPlugin { self.install_kerl()?; cmd!(self.kerl_path(), "update", "releases") .env("KERL_BASE_DIR", self.kerl_base_dir()) - .stdout_to_stderr() .run()?; Ok(()) } @@ -73,7 +72,7 @@ impl ErlangPlugin { ctx: &InstallContext, mut tv: ToolVersion, ) -> Result> { - if SETTINGS.erlang.compile == Some(false) { + if SETTINGS.erlang.compile == Some(true) { return Ok(None); } let release_tag = format!("OTP-{}", tv.version); @@ -126,7 +125,7 @@ impl ErlangPlugin { tv.install_path() ) .env("KERL_BASE_DIR", self.ba.cache_path.join("kerl")) - .stdout_to_stderr() + .env("MAKEFLAGS", format!("-j{}", num_cpus::get())) .run()?; } } From 0cea93b27bc46ba9219557532d6d1d061d05f81d Mon Sep 17 00:00:00 2001 From: Jesse Claven Date: Mon, 23 Dec 2024 22:44:28 +0000 Subject: [PATCH 002/289] docs: Correct link to aqua registry (#3803) --- docs/plugins.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/plugins.md b/docs/plugins.md index 6c962139d0..4733e02bb1 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -8,7 +8,7 @@ Meanwhile, plugins have expanded beyond tools and can provide functionality like Tool plugins should be avoided for security reasons. New tools will not be accepted into mise built with asdf/vfox plugins unless they are very popular and aqua/ubi is not an option for some reason. -If you want to integrate a new tool into mise, you should either try to get it into the [aqua registry](https://mise.jdx.dev/dev-tools/backends/ubi.html) +If you want to integrate a new tool into mise, you should either try to get it into the [aqua registry](https://mise.jdx.dev/dev-tools/backends/aqua.html) or see if it can be installed with [ubi](https://mise.jdx.dev/dev-tools/backends/ubi.html). Then add it to the [registry](https://github.com/jdx/mise/blob/main/registry.toml). Aqua is definitely preferred to ubi as it has better UX and more features like slsa verification and the ability to use different logic for older versions. From 23876176720b0c7f10d34834f03a02c1dee5af47 Mon Sep 17 00:00:00 2001 From: kilianpaquier <107955904+kilianpaquier@users.noreply.github.com> Date: Wed, 25 Dec 2024 20:13:45 +0100 Subject: [PATCH 003/289] feat(hugo): add extended registry from aqua and keep only one registry with all aliases (#3813) * feat(hugo): add extended registry from aqua Signed-off-by: kilianpaquier * fix(hugo): keep only one registry will all aliases Signed-off-by: kilianpaquier * [autofix.ci] apply automated fixes --------- Signed-off-by: kilianpaquier Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- docs/registry.md | 4 ++-- registry.toml | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/registry.md b/docs/registry.md index 7982cf3800..8999ef8466 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -294,7 +294,6 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | goconvey | [asdf:therounds-contrib/asdf-goconvey](https://github.com/therounds-contrib/asdf-goconvey) | | gocryptfs | [aqua:rfjakob/gocryptfs](https://github.com/rfjakob/gocryptfs) [ubi:rfjakob/gocryptfs](https://github.com/rfjakob/gocryptfs) | | gofumpt | [ubi:mvdan/gofumpt](https://github.com/mvdan/gofumpt) [asdf:looztra/asdf-gofumpt](https://github.com/looztra/asdf-gofumpt) | -| gohugo | [ubi:gohugoio/hugo](https://github.com/gohugoio/hugo) [asdf:nklmilojevic/asdf-hugo](https://github.com/nklmilojevic/asdf-hugo) | | gojq | [aqua:itchyny/gojq](https://github.com/itchyny/gojq) [asdf:jimmidyson/asdf-gojq](https://github.com/jimmidyson/asdf-gojq) | | golangci-lint | [aqua:golangci/golangci-lint](https://github.com/golangci/golangci-lint) [ubi:golangci/golangci-lint](https://github.com/golangci/golangci-lint) [asdf:hypnoglow/asdf-golangci-lint](https://github.com/hypnoglow/asdf-golangci-lint) | | golangci-lint-langserver | [ubi:nametake/golangci-lint-langserver](https://github.com/nametake/golangci-lint-langserver) [go:github.com/nametake/golangci-lint-langserver](https://pkg.go.dev/github.com/nametake/golangci-lint-langserver) | @@ -344,7 +343,8 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | hostctl | [aqua:guumaster/hostctl](https://github.com/guumaster/hostctl) [asdf:svenluijten/asdf-hostctl](https://github.com/svenluijten/asdf-hostctl) | | httpie-go | [aqua:nojima/httpie-go](https://github.com/nojima/httpie-go) [asdf:abatilo/asdf-httpie-go](https://github.com/abatilo/asdf-httpie-go) | | hub | [aqua:mislav/hub](https://github.com/mislav/hub) [asdf:mise-plugins/asdf-hub](https://github.com/mise-plugins/asdf-hub) | -| hugo | [aqua:gohugoio/hugo](https://github.com/gohugoio/hugo) [asdf:NeoHsu/asdf-hugo](https://github.com/NeoHsu/asdf-hugo) | +| hugo | [aqua:gohugoio/hugo](https://github.com/gohugoio/hugo) [ubi:gohugoio/hugo](https://github.com/gohugoio/hugo) [asdf:NeoHsu/asdf-hugo](https://github.com/NeoHsu/asdf-hugo) [asdf:nklmilojevic/asdf-hugo](https://github.com/nklmilojevic/asdf-hugo) | +| hugo-extended | [aqua:gohugoio/hugo/hugo-extended](https://github.com/gohugoio/hugo/hugo-extended) | | hurl | [aqua:Orange-OpenSource/hurl](https://github.com/Orange-OpenSource/hurl) [asdf:raimon49/asdf-hurl](https://github.com/raimon49/asdf-hurl) | | hwatch | [ubi:blacknon/hwatch](https://github.com/blacknon/hwatch) [asdf:chessmango/asdf-hwatch](https://github.com/chessmango/asdf-hwatch) | | hygen | [asdf:brentjanderson/asdf-hygen](https://github.com/brentjanderson/asdf-hygen) | diff --git a/registry.toml b/registry.toml index 767ebb2857..c37e8762b5 100644 --- a/registry.toml +++ b/registry.toml @@ -726,7 +726,6 @@ go-swagger.test = ["swagger version", "version: v{{version}}"] goconvey.backends = ["asdf:therounds-contrib/asdf-goconvey"] gocryptfs.backends = ["aqua:rfjakob/gocryptfs", "ubi:rfjakob/gocryptfs"] gofumpt.backends = ["ubi:mvdan/gofumpt", "asdf:looztra/asdf-gofumpt"] -gohugo.backends = ["ubi:gohugoio/hugo", "asdf:nklmilojevic/asdf-hugo"] gojq.backends = ["aqua:itchyny/gojq", "asdf:jimmidyson/asdf-gojq"] golangci-lint.backends = [ "aqua:golangci/golangci-lint", @@ -826,7 +825,13 @@ httpie-go.backends = ["aqua:nojima/httpie-go", "asdf:abatilo/asdf-httpie-go"] httpie-go.os = ["linux", "macos"] httpie-go.test = ["ht --version", "httpie-go {{version}}"] hub.backends = ["aqua:mislav/hub", "asdf:mise-plugins/asdf-hub"] -hugo.backends = ["aqua:gohugoio/hugo", "asdf:NeoHsu/asdf-hugo"] +hugo.backends = [ + "aqua:gohugoio/hugo", + "ubi:gohugoio/hugo", + "asdf:NeoHsu/asdf-hugo", + "asdf:nklmilojevic/asdf-hugo" +] +hugo-extended.backends = ["aqua:gohugoio/hugo/hugo-extended"] hurl.backends = ["aqua:Orange-OpenSource/hurl", "asdf:raimon49/asdf-hurl"] hwatch.backends = ["ubi:blacknon/hwatch", "asdf:chessmango/asdf-hwatch"] hygen.backends = ["asdf:brentjanderson/asdf-hygen"] From 7a13356d2b03edb36705d13abaf92814124b4b55 Mon Sep 17 00:00:00 2001 From: Zurab Khadikov Date: Wed, 25 Dec 2024 20:14:04 +0100 Subject: [PATCH 004/289] feat: Modify install_rubygems_hook to place plugin in site_ruby directory (#3812) To avoid setting the RUBYLIB environment variable, the rubygems_plugin.rb file is now placed in the site_ruby directory within the Ruby installation. This change ensures that Ruby automatically loads the plugin. - Updated install_rubygems_hook method to place the plugin in the site_ruby directory. - Created the necessary directory structure if it does not exist. - Wrote the rubygems_plugin.rb file to the site_ruby directory. --- src/plugins/core/ruby.rs | 28 +++++++--------------------- src/plugins/core/ruby_windows.rs | 28 +++++++--------------------- 2 files changed, 14 insertions(+), 42 deletions(-) diff --git a/src/plugins/core/ruby.rs b/src/plugins/core/ruby.rs index 7ec65ff3b8..a7672452bd 100644 --- a/src/plugins/core/ruby.rs +++ b/src/plugins/core/ruby.rs @@ -15,7 +15,7 @@ use crate::install_context::InstallContext; use crate::lock_file::LockFile; use crate::toolset::{ToolVersion, Toolset}; use crate::ui::progress_report::SingleReport; -use crate::{cmd, env, file, plugins, timeout}; +use crate::{cmd, file, plugins, timeout}; use eyre::{Result, WrapErr}; use itertools::Itertools; use xx::regex; @@ -244,17 +244,13 @@ impl RubyPlugin { } fn install_rubygems_hook(&self, tv: &ToolVersion) -> Result<()> { - let d = self.rubygems_plugins_path(tv); - let f = d.join("rubygems_plugin.rb"); - file::create_dir_all(d)?; + let site_ruby_path = tv.install_path().join("lib/ruby/site_ruby"); + let f = site_ruby_path.join("rubygems_plugin.rb"); + file::create_dir_all(site_ruby_path)?; file::write(f, include_str!("assets/rubygems_plugin.rb"))?; Ok(()) } - fn rubygems_plugins_path(&self, tv: &ToolVersion) -> PathBuf { - tv.install_path().join("lib/rubygems_plugin") - } - fn install_cmd<'a>( &self, config: &Config, @@ -406,20 +402,10 @@ impl Backend for RubyPlugin { &self, _config: &Config, _ts: &Toolset, - tv: &ToolVersion, + _tv: &ToolVersion, ) -> eyre::Result> { - // TODO: is there a way to avoid needing to set RUBYLIB? - // is there a directory I can put rubygems_plugin.rb in that will be automatically loaded? - let rubygems_plugin_path = self.rubygems_plugins_path(tv); - let mut map = BTreeMap::new(); - if rubygems_plugin_path.exists() { - let rubygems_plugin_path = rubygems_plugin_path.to_string_lossy().to_string(); - let rubylib = match env::PRISTINE_ENV.get("RUBYLIB") { - Some(rubylib) => format!("{}:{}", rubylib, rubygems_plugin_path), - None => rubygems_plugin_path, - }; - map.insert("RUBYLIB".to_string(), rubylib); - } + let map = BTreeMap::new(); + // No modification to RUBYLIB Ok(map) } } diff --git a/src/plugins/core/ruby_windows.rs b/src/plugins/core/ruby_windows.rs index 2d361fb7aa..7556fe895d 100644 --- a/src/plugins/core/ruby_windows.rs +++ b/src/plugins/core/ruby_windows.rs @@ -11,7 +11,7 @@ use crate::http::HTTP; use crate::install_context::InstallContext; use crate::toolset::{ToolVersion, Toolset}; use crate::ui::progress_report::SingleReport; -use crate::{env, file, github, plugins}; +use crate::{file, github, plugins}; use eyre::Result; use itertools::Itertools; use versions::Versioning; @@ -93,17 +93,13 @@ impl RubyPlugin { } fn install_rubygems_hook(&self, tv: &ToolVersion) -> Result<()> { - let d = self.rubygems_plugins_path(tv); - let f = d.join("rubygems_plugin.rb"); - file::create_dir_all(d)?; + let site_ruby_path = tv.install_path().join("lib/ruby/site_ruby"); + let f = site_ruby_path.join("rubygems_plugin.rb"); + file::create_dir_all(site_ruby_path)?; file::write(f, include_str!("assets/rubygems_plugin.rb"))?; Ok(()) } - fn rubygems_plugins_path(&self, tv: &ToolVersion) -> PathBuf { - tv.install_path().join("lib").join("rubygems_plugin") - } - fn download(&self, tv: &ToolVersion, pr: &Box) -> Result { let arch = arch(); let url = format!( @@ -206,20 +202,10 @@ impl Backend for RubyPlugin { &self, _config: &Config, _ts: &Toolset, - tv: &ToolVersion, + _tv: &ToolVersion, ) -> eyre::Result> { - // TODO: is there a way to avoid needing to set RUBYLIB? - // is there a directory I can put rubygems_plugin.rb in that will be automatically loaded? - let rubygems_plugin_path = self.rubygems_plugins_path(tv); - let mut map = BTreeMap::new(); - if rubygems_plugin_path.exists() { - let rubygems_plugin_path = rubygems_plugin_path.to_string_lossy().to_string(); - let rubylib = match env::PRISTINE_ENV.get("RUBYLIB") { - Some(rubylib) => format!("{}:{}", rubylib, rubygems_plugin_path), - None => rubygems_plugin_path, - }; - map.insert("RUBYLIB".to_string(), rubylib); - } + let map = BTreeMap::new(); + // No modification to RUBYLIB Ok(map) } } From 2dbabda481910ba470cdc2462c425e714b5b59d2 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 25 Dec 2024 13:25:15 -0600 Subject: [PATCH 005/289] fix: add checksum for macos-x86 (#3815) Fixes #3807 --- packaging/standalone/install.envsubst | 5 ++++- scripts/render-install.sh | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packaging/standalone/install.envsubst b/packaging/standalone/install.envsubst index c43e1541e0..773863ad4a 100644 --- a/packaging/standalone/install.envsubst +++ b/packaging/standalone/install.envsubst @@ -120,6 +120,7 @@ get_checksum() { checksum_linux_arm64_musl_zstd="$MISE_CHECKSUM_LINUX_ARM64_MUSL_ZSTD" checksum_linux_armv7_zstd="$MISE_CHECKSUM_LINUX_ARMV7_ZSTD" checksum_linux_armv7_musl_zstd="$MISE_CHECKSUM_LINUX_ARMV7_MUSL_ZSTD" + checksum_macos_x86_64_zstd="$MISE_CHECKSUM_MACOS_X86_64_ZSTD" checksum_macos_arm64_zstd="$MISE_CHECKSUM_MACOS_ARM64_ZSTD" # TODO: refactor this, it's a bit messy @@ -141,7 +142,9 @@ get_checksum() { warn "no checksum for $os-$arch" fi elif [ "$os" = "macos" ]; then - if [ "$arch" = "arm64" ]; then + if [ "$arch" = "x64" ]; then + echo "$checksum_macos_x86_64_zstd" + elif [ "$arch" = "arm64" ]; then echo "$checksum_macos_arm64_zstd" else warn "no checksum for $os-$arch" diff --git a/scripts/render-install.sh b/scripts/render-install.sh index 6aef007b28..bb096bb77f 100755 --- a/scripts/render-install.sh +++ b/scripts/render-install.sh @@ -17,6 +17,7 @@ MISE_CURRENT_VERSION=$MISE_VERSION \ MISE_CHECKSUM_LINUX_ARM64_MUSL_ZSTD=$(grep "mise-v.*linux-arm64-musl.tar.zst" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ MISE_CHECKSUM_LINUX_ARMV7_ZSTD=$(grep "mise-v.*linux-armv7.tar.zst" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ MISE_CHECKSUM_LINUX_ARMV7_MUSL_ZSTD=$(grep "mise-v.*linux-armv7-musl.tar.zst" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ + MISE_CHECKSUM_MACOS_X86_64_ZSTD=$(grep "mise-v.*macos-x64.tar.zst" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ MISE_CHECKSUM_MACOS_ARM64_ZSTD=$(grep "mise-v.*macos-arm64.tar.zst" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ - envsubst '$MISE_CURRENT_VERSION,$MISE_CHECKSUM_LINUX_X86_64,$MISE_CHECKSUM_LINUX_X86_64_MUSL,$MISE_CHECKSUM_LINUX_ARM64,$MISE_CHECKSUM_LINUX_ARM64_MUSL,$MISE_CHECKSUM_LINUX_ARMV6,$MISE_CHECKSUM_LINUX_ARMV6_MUSL,$MISE_CHECKSUM_LINUX_ARMV7,$MISE_CHECKSUM_LINUX_ARMV7_MUSL,$MISE_CHECKSUM_MACOS_X86_64,$MISE_CHECKSUM_MACOS_ARM64,$MISE_CHECKSUM_LINUX_X86_64_ZSTD,$MISE_CHECKSUM_LINUX_X86_64_MUSL_ZSTD,$MISE_CHECKSUM_LINUX_ARM64_ZSTD,$MISE_CHECKSUM_LINUX_ARM64_MUSL_ZSTD,$MISE_CHECKSUM_LINUX_ARMV7_ZSTD,$MISE_CHECKSUM_LINUX_ARMV7_MUSL_ZSTD,$MISE_CHECKSUM_MACOS_ARM64_ZSTD' \ + envsubst '$MISE_CURRENT_VERSION,$MISE_CHECKSUM_LINUX_X86_64,$MISE_CHECKSUM_LINUX_X86_64_MUSL,$MISE_CHECKSUM_LINUX_ARM64,$MISE_CHECKSUM_LINUX_ARM64_MUSL,$MISE_CHECKSUM_LINUX_ARMV6,$MISE_CHECKSUM_LINUX_ARMV6_MUSL,$MISE_CHECKSUM_LINUX_ARMV7,$MISE_CHECKSUM_LINUX_ARMV7_MUSL,$MISE_CHECKSUM_MACOS_X86_64,$MISE_CHECKSUM_MACOS_ARM64,$MISE_CHECKSUM_LINUX_X86_64_ZSTD,$MISE_CHECKSUM_LINUX_X86_64_MUSL_ZSTD,$MISE_CHECKSUM_LINUX_ARM64_ZSTD,$MISE_CHECKSUM_LINUX_ARM64_MUSL_ZSTD,$MISE_CHECKSUM_LINUX_ARMV7_ZSTD,$MISE_CHECKSUM_LINUX_ARMV7_MUSL_ZSTD,$MISE_CHECKSUM_MACOS_X86_64_ZSTD,$MISE_CHECKSUM_MACOS_ARM64_ZSTD' \ <"$BASE_DIR/packaging/standalone/install.envsubst" From 1fae2b02bf1770d710f8c70f4e41d97c6a4c6297 Mon Sep 17 00:00:00 2001 From: mise-en-dev Date: Wed, 25 Dec 2024 14:45:03 -0600 Subject: [PATCH 006/289] chore: release 2024.12.20 (#3801) --- CHANGELOG.md | 27 +++++++++++++++++++++++++++ Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 2 +- aqua-registry | 2 +- completions/_mise | 6 +++--- completions/mise.bash | 6 +++--- completions/mise.fish | 6 +++--- default.nix | 2 +- packaging/rpm/mise.spec | 2 +- 10 files changed, 42 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b33640fd6..ee235be87b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,32 @@ # Changelog +## [2024.12.20](https://github.com/jdx/mise/compare/v2024.12.19..v2024.12.20) - 2024-12-25 + +### ๐Ÿš€ Features + +- **(hugo)** add extended registry from aqua and keep only one registry with all aliases by [@kilianpaquier](https://github.com/kilianpaquier) in [#3813](https://github.com/jdx/mise/pull/3813) +- build erlang with all cores by [@jdx](https://github.com/jdx) in [#3802](https://github.com/jdx/mise/pull/3802) +- Modify install_rubygems_hook to place plugin in site_ruby directory by [@zkhadikov](https://github.com/zkhadikov) in [#3812](https://github.com/jdx/mise/pull/3812) + +### ๐Ÿ› Bug Fixes + +- do not require "v" prefix in mise.run by [@jdx](https://github.com/jdx) in [#3800](https://github.com/jdx/mise/pull/3800) +- add checksum for macos-x86 by [@jdx](https://github.com/jdx) in [#3815](https://github.com/jdx/mise/pull/3815) + +### ๐Ÿ“š Documentation + +- Correct link to aqua registry by [@jesse-c](https://github.com/jesse-c) in [#3803](https://github.com/jdx/mise/pull/3803) + +### ๐Ÿงช Testing + +- skip dotnet if not installed by [@jdx](https://github.com/jdx) in [1a663dd](https://github.com/jdx/mise/commit/1a663dd63e17cc08a961b86b5b0b6a1d7e9b2a1f) + +### New Contributors + +- @zkhadikov made their first contribution in [#3812](https://github.com/jdx/mise/pull/3812) +- @kilianpaquier made their first contribution in [#3813](https://github.com/jdx/mise/pull/3813) +- @jesse-c made their first contribution in [#3803](https://github.com/jdx/mise/pull/3803) + ## [2024.12.19](https://github.com/jdx/mise/compare/v2024.12.18..v2024.12.19) - 2024-12-23 ### ๐Ÿš€ Features diff --git a/Cargo.lock b/Cargo.lock index 4be2695395..70c4ab2af8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2609,7 +2609,7 @@ dependencies = [ [[package]] name = "mise" -version = "2024.12.19" +version = "2024.12.20" dependencies = [ "base64 0.22.1", "built", diff --git a/Cargo.toml b/Cargo.toml index 0d67c1572e..ea960c175a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mise" -version = "2024.12.19" +version = "2024.12.20" edition = "2021" description = "The front-end to your dev env" authors = ["Jeff Dickey (@jdx)"] diff --git a/README.md b/README.md index f627f8b8ea..255c139aa9 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Install mise (other methods [here](https://mise.jdx.dev/getting-started.html)): ```sh-session $ curl https://mise.run | sh $ ~/.local/bin/mise --version -2024.12.19 macos-arm64 (a1b2d3e 2024-12-23) +2024.12.20 macos-arm64 (a1b2d3e 2024-12-25) ``` or install a specific a version: diff --git a/aqua-registry b/aqua-registry index f4dd705163..1a932ad1e9 160000 --- a/aqua-registry +++ b/aqua-registry @@ -1 +1 @@ -Subproject commit f4dd705163ea669129105c6d4d93419b974af6b2 +Subproject commit 1a932ad1e97d026b950a4044769c782779ac5e08 diff --git a/completions/_mise b/completions/_mise index 0b726d53ca..65c8f83895 100644 --- a/completions/_mise +++ b/completions/_mise @@ -27,11 +27,11 @@ _mise() { zstyle ":completion:${curcontext}:" cache-policy _usage_mise_cache_policy fi - if ( [[ -z "${_usage_spec_mise_2024_12_19:-}" ]] || _cache_invalid _usage_spec_mise_2024_12_19 ) \ - && ! _retrieve_cache _usage_spec_mise_2024_12_19; + if ( [[ -z "${_usage_spec_mise_2024_12_20:-}" ]] || _cache_invalid _usage_spec_mise_2024_12_20 ) \ + && ! _retrieve_cache _usage_spec_mise_2024_12_20; then spec="$(mise usage)" - _store_cache _usage_spec_mise_2024_12_19 spec + _store_cache _usage_spec_mise_2024_12_20 spec fi _arguments "*: :(($(usage complete-word --shell zsh -s "$spec" -- "${words[@]}" )))" diff --git a/completions/mise.bash b/completions/mise.bash index 785c28c679..866389b9bf 100644 --- a/completions/mise.bash +++ b/completions/mise.bash @@ -6,14 +6,14 @@ _mise() { return 1 fi - if [[ -z ${_usage_spec_mise_2024_12_19:-} ]]; then - _usage_spec_mise_2024_12_19="$(mise usage)" + if [[ -z ${_usage_spec_mise_2024_12_20:-} ]]; then + _usage_spec_mise_2024_12_20="$(mise usage)" fi local cur prev words cword was_split comp_args _comp_initialize -n : -- "$@" || return # shellcheck disable=SC2207 - _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2024_12_19}" --cword="$cword" -- "${words[@]}")" + _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2024_12_20}" --cword="$cword" -- "${words[@]}")" _comp_ltrim_colon_completions "$cur" # shellcheck disable=SC2181 if [[ $? -ne 0 ]]; then diff --git a/completions/mise.fish b/completions/mise.fish index a69ef98751..94a0fb2c23 100644 --- a/completions/mise.fish +++ b/completions/mise.fish @@ -6,7 +6,7 @@ if ! command -v usage &> /dev/null return 1 end -if ! set -q _usage_spec_mise_2024_12_19 - set -g _usage_spec_mise_2024_12_19 (mise usage | string collect) +if ! set -q _usage_spec_mise_2024_12_20 + set -g _usage_spec_mise_2024_12_20 (mise usage | string collect) end -complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2024_12_19" -- (commandline -cop) (commandline -t))' +complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2024_12_20" -- (commandline -cop) (commandline -t))' diff --git a/default.nix b/default.nix index 35b87b618b..4cde97afcf 100644 --- a/default.nix +++ b/default.nix @@ -2,7 +2,7 @@ rustPlatform.buildRustPackage { pname = "mise"; - version = "2024.12.19"; + version = "2024.12.20"; src = lib.cleanSource ./.; diff --git a/packaging/rpm/mise.spec b/packaging/rpm/mise.spec index 1edb54e8a9..b7c12372d3 100644 --- a/packaging/rpm/mise.spec +++ b/packaging/rpm/mise.spec @@ -1,6 +1,6 @@ Summary: The front-end to your dev env Name: mise -Version: 2024.12.19 +Version: 2024.12.20 Release: 1 URL: https://github.com/jdx/mise/ Group: System From 323a85b6f7632b906cb113a428519f2ba89197e7 Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Fri, 27 Dec 2024 19:58:48 +0100 Subject: [PATCH 007/289] fix: zstd detection false positive on MacOS (#3845) * fix: zstd detection false positive on MacOS * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- mise.lock | 3 +++ packaging/standalone/install.envsubst | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/mise.lock b/mise.lock index 1dca3abf29..420b200a49 100644 --- a/mise.lock +++ b/mise.lock @@ -73,6 +73,9 @@ jq-macos-arm64 = "sha256:0bbe619e663e0de2c550be2fe0d240d076799d6f8a652b70fa04aea version = "0.11" backend = "aqua:jedisct1/minisign" +[tools.minisign.checksums] +"minisign-0.11-linux.tar.gz" = "sha256:f0a0954413df8531befed169e447a66da6868d79052ed7e892e50a4291af7ae0" + [tools."npm:markdownlint-cli"] version = "0.43.0" backend = "npm:markdownlint-cli" diff --git a/packaging/standalone/install.envsubst b/packaging/standalone/install.envsubst index 773863ad4a..87e8fb8ec1 100644 --- a/packaging/standalone/install.envsubst +++ b/packaging/standalone/install.envsubst @@ -77,7 +77,7 @@ get_ext() { tar_supports_zstd() { # tar is bsdtar or version is >= 1.31 - if tar --version | grep -q 'bsdtar'; then + if tar --version | grep -q 'bsdtar' && command -v zstd >/dev/null 2>&1; then true elif tar --version | grep -q '1.(3[1-9]|{4-9}\d)'; then true From a28739b6c0f4a7e831034970e85aeb637c755185 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Dec 2024 13:09:29 -0600 Subject: [PATCH 008/289] fix(deps): update rust crate ubi to 0.3 (#3836) * fix(deps): update rust crate ubi to 0.3 * [autofix.ci] apply automated fixes --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- Cargo.lock | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++--- Cargo.toml | 2 +- 2 files changed, 58 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 70c4ab2af8..49b2e1e372 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -248,6 +248,17 @@ dependencies = [ "zstd-safe", ] +[[package]] +name = "async-trait" +version = "0.1.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + [[package]] name = "atomic-waker" version = "1.1.2" @@ -3779,6 +3790,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "scc" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94b13f8ea6177672c49d12ed964cca44836f59621981b04a3e26b87e675181de" +dependencies = [ + "sdd", +] + [[package]] name = "schannel" version = "0.1.27" @@ -3805,6 +3825,12 @@ dependencies = [ "sha2", ] +[[package]] +name = "sdd" +version = "3.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478f121bb72bbf63c52c93011ea1791dca40140dfe13f8336c4c5ac952c33aa9" + [[package]] name = "secrecy" version = "0.8.0" @@ -4032,6 +4058,31 @@ dependencies = [ "unsafe-libyaml", ] +[[package]] +name = "serial_test" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b258109f244e1d6891bf1053a55d63a5cd4f8f4c30cf9a1280989f80e7a1fa9" +dependencies = [ + "futures", + "log", + "once_cell", + "parking_lot", + "scc", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + [[package]] name = "sevenz-rust" version = "0.6.1" @@ -4786,13 +4837,14 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "ubi" -version = "0.2.4" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62cddbea2772c6d00b7d951dfd3fd8ba39f2479219769f36fec91d29f2ee602d" +checksum = "f6ef459632e0e8855058d9edd90abea425569fefa1c13e048eb17719759b2977" dependencies = [ "anyhow", + "async-trait", "binstall-tar", - "bzip2 0.4.4", + "bzip2 0.5.0", "document-features", "flate2", "itertools 0.13.0", @@ -4802,6 +4854,8 @@ dependencies = [ "regex", "reqwest", "serde", + "serde_json", + "serial_test", "strum", "tempfile", "thiserror 2.0.9", diff --git a/Cargo.toml b/Cargo.toml index ea960c175a..467967ce28 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -136,7 +136,7 @@ thiserror = "2" tokio = { version = "1", features = ["io-std", "rt", "time"] } toml = { version = "0.8", features = ["parse"] } toml_edit = { version = "0.22", features = ["parse"] } -ubi = { version = "0.2", default-features = false } +ubi = { version = "0.3", default-features = false } url = "2" # usage-lib = { path = "../usage/lib", features = ["clap", "docs"] } usage-lib = { version = "1", features = ["clap", "docs"] } From 05687682ec44c887a8a5c812b7bfd83a739772b6 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 27 Dec 2024 19:12:07 +0000 Subject: [PATCH 009/289] docs: fix incorrect examples that were causing 'expected a sequence' error (#3839) * Fix incorrect examples in docs python_create_args and uv_create_args options only allow list of strings and not simple strings. Current examples were causing a config loading error like: invalid type: string "--without-pip", expected a sequence * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- docs/lang/python.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/lang/python.md b/docs/lang/python.md index 73613ea77d..e701751453 100644 --- a/docs/lang/python.md +++ b/docs/lang/python.md @@ -137,8 +137,8 @@ _.python.venv = "/root/.venv" # can be absolute _.python.venv = "{{env.HOME}}/.cache/venv/myproj" # can use templates _.python.venv = { path = ".venv", create = true } # create the venv if it doesn't exist _.python.venv = { path = ".venv", create = true, python = "3.10" } # use a specific python version -_.python.venv = { path = ".venv", create = true, python_create_args = "--without-pip" } # pass args to python -m venv -_.python.venv = { path = ".venv", create = true, uv_create_args = "--system-site-packages" } # pass args to uv venv +_.python.venv = { path = ".venv", create = true, python_create_args = ["--without-pip"] } # pass args to python -m venv +_.python.venv = { path = ".venv", create = true, uv_create_args = ["--system-site-packages"] } # pass args to uv venv ``` The venv will need to be created manually with `python -m venv /path/to/venv` unless `create=true`. From 6d2c94c14caf991506190c396b8dfab237fd47ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Fri, 27 Dec 2024 18:48:57 -0100 Subject: [PATCH 010/289] fix(python): force precompiled setting warning message syntax (#3850) --- src/plugins/core/python.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/core/python.rs b/src/plugins/core/python.rs index aca0af9472..b1e3f1b700 100644 --- a/src/plugins/core/python.rs +++ b/src/plugins/core/python.rs @@ -160,7 +160,7 @@ impl PythonPlugin { if available.is_empty() { debug!("no precompiled python found for {}", tv.version); } else { - warn!("no precompiled python found for {}, force mise to use a precompiled version with `mise settings set python.compile=false`", tv.version); + warn!("no precompiled python found for {}, force mise to use a precompiled version with `mise settings set python.compile false`", tv.version); } trace!( "available precompiled versions: {}", From 71ec24bb7db42dd5302a9330020b56fbf9e25aba Mon Sep 17 00:00:00 2001 From: mise-en-dev Date: Fri, 27 Dec 2024 14:15:23 -0600 Subject: [PATCH 011/289] chore: release 2024.12.21 (#3818) --- CHANGELOG.md | 15 ++++ Cargo.lock | 152 +++++++++++++++++++++++----------------- Cargo.toml | 2 +- README.md | 2 +- aqua-registry | 2 +- completions/_mise | 6 +- completions/mise.bash | 6 +- completions/mise.fish | 6 +- default.nix | 2 +- packaging/rpm/mise.spec | 2 +- 10 files changed, 116 insertions(+), 79 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee235be87b..bfc964e615 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## [2024.12.21](https://github.com/jdx/mise/compare/v2024.12.20..v2024.12.21) - 2024-12-27 + +### ๐Ÿ› Bug Fixes + +- **(python)** force precompiled setting warning message syntax by [@scop](https://github.com/scop) in [#3850](https://github.com/jdx/mise/pull/3850) +- zstd detection false positive on MacOS by [@roele](https://github.com/roele) in [#3845](https://github.com/jdx/mise/pull/3845) + +### ๐Ÿ“š Documentation + +- fix incorrect examples that were causing 'expected a sequence' error by [@ssbarnea](https://github.com/ssbarnea) in [#3839](https://github.com/jdx/mise/pull/3839) + +### ๐Ÿ“ฆ๏ธ Dependency Updates + +- update rust crate ubi to 0.3 by [@renovate[bot]](https://github.com/renovate[bot]) in [#3836](https://github.com/jdx/mise/pull/3836) + ## [2024.12.20](https://github.com/jdx/mise/compare/v2024.12.19..v2024.12.20) - 2024-12-25 ### ๐Ÿš€ Features diff --git a/Cargo.lock b/Cargo.lock index 49b2e1e372..c02399fcec 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -256,7 +256,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -462,9 +462,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.5" +version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e" +checksum = "8d6dbb628b8f8555f86d0323c2eb39e3ec81901f4b83e091db8a6a76d316a333" dependencies = [ "jobserver", "libc", @@ -595,7 +595,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -647,7 +647,7 @@ dependencies = [ "nom", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -699,7 +699,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -892,7 +892,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -928,7 +928,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -952,7 +952,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -963,7 +963,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -1027,7 +1027,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -1040,7 +1040,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -1095,7 +1095,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -1509,7 +1509,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -1916,7 +1916,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn 2.0.91", + "syn 2.0.92", "unic-langid", ] @@ -1930,7 +1930,7 @@ dependencies = [ "i18n-config", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -2071,7 +2071,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -2126,7 +2126,7 @@ dependencies = [ "autocfg", "impl-tools-lib", "proc-macro-error2", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -2138,7 +2138,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -2315,9 +2315,9 @@ dependencies = [ [[package]] name = "lazy-regex" -version = "3.3.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d8e41c97e6bc7ecb552016274b99fbb5d035e8de288c582d9b933af6677bfda" +checksum = "60c7310b93682b36b98fa7ea4de998d3463ccbebd94d935d6b48ba5b6ffa7126" dependencies = [ "lazy-regex-proc_macros", "once_cell", @@ -2326,14 +2326,14 @@ dependencies = [ [[package]] name = "lazy-regex-proc_macros" -version = "3.3.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76e1d8b05d672c53cb9c7b920bbba8783845ae4f0b076e02a3db1d02c81b4163" +checksum = "4ba01db5ef81e17eb10a5e0f2109d1b3a3e29bac3070fdbd7d156bf7dbd206a1" dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -2568,7 +2568,7 @@ checksum = "23c9b935fbe1d6cbd1dac857b54a688145e2d93f48db36010514d0f612d0ad67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -2620,7 +2620,7 @@ dependencies = [ [[package]] name = "mise" -version = "2024.12.20" +version = "2024.12.21" dependencies = [ "base64 0.22.1", "built", @@ -2764,7 +2764,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -2901,7 +2901,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -3084,7 +3084,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -3163,7 +3163,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -3297,7 +3297,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -3372,9 +3372,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -3495,9 +3495,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.9" +version = "0.12.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" +checksum = "7fe060fe50f524be480214aba758c71f99f90ee8c83c5a36b5e9e1d568eb4eb3" dependencies = [ "async-compression", "base64 0.22.1", @@ -3536,6 +3536,7 @@ dependencies = [ "tokio-native-tls", "tokio-rustls", "tokio-util", + "tower", "tower-service", "url", "wasm-bindgen", @@ -3651,7 +3652,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.91", + "syn 2.0.92", "walkdir", ] @@ -3762,9 +3763,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" @@ -3792,9 +3793,9 @@ dependencies = [ [[package]] name = "scc" -version = "2.2.6" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b13f8ea6177672c49d12ed964cca44836f59621981b04a3e26b87e675181de" +checksum = "28e1c91382686d21b5ac7959341fcb9780fa7c03773646995a87c950fa7be640" dependencies = [ "sdd", ] @@ -3959,7 +3960,7 @@ checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -4017,9 +4018,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.11.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" +checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" dependencies = [ "base64 0.22.1", "chrono", @@ -4035,14 +4036,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.11.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" +checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -4080,7 +4081,7 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -4300,7 +4301,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -4322,9 +4323,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.91" +version = "2.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53cbcb5a243bd33b7858b1d7f4aca2153490815872d86d955d6ea29f743c035" +checksum = "70ae51629bf965c5c098cc9e87908a3df5301051a9e087d6f9bef5c9771ed126" dependencies = [ "proc-macro2", "quote", @@ -4348,7 +4349,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -4512,7 +4513,7 @@ checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -4547,7 +4548,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -4558,7 +4559,7 @@ checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -4653,7 +4654,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -4732,6 +4733,27 @@ dependencies = [ "winnow", ] +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + [[package]] name = "tower-service" version = "0.3.3" @@ -4757,7 +4779,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -5164,7 +5186,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", "wasm-bindgen-shared", ] @@ -5199,7 +5221,7 @@ checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5339,7 +5361,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -5350,7 +5372,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -5649,7 +5671,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", "synstructure", ] @@ -5671,7 +5693,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -5691,7 +5713,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", "synstructure", ] @@ -5712,7 +5734,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] @@ -5734,7 +5756,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.92", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 467967ce28..548ce6e520 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mise" -version = "2024.12.20" +version = "2024.12.21" edition = "2021" description = "The front-end to your dev env" authors = ["Jeff Dickey (@jdx)"] diff --git a/README.md b/README.md index 255c139aa9..0539a0a753 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Install mise (other methods [here](https://mise.jdx.dev/getting-started.html)): ```sh-session $ curl https://mise.run | sh $ ~/.local/bin/mise --version -2024.12.20 macos-arm64 (a1b2d3e 2024-12-25) +2024.12.21 macos-arm64 (a1b2d3e 2024-12-27) ``` or install a specific a version: diff --git a/aqua-registry b/aqua-registry index 1a932ad1e9..bec42350e8 160000 --- a/aqua-registry +++ b/aqua-registry @@ -1 +1 @@ -Subproject commit 1a932ad1e97d026b950a4044769c782779ac5e08 +Subproject commit bec42350e8166c3bc2850bda279e65a8d2ee9af9 diff --git a/completions/_mise b/completions/_mise index 65c8f83895..07cdeda261 100644 --- a/completions/_mise +++ b/completions/_mise @@ -27,11 +27,11 @@ _mise() { zstyle ":completion:${curcontext}:" cache-policy _usage_mise_cache_policy fi - if ( [[ -z "${_usage_spec_mise_2024_12_20:-}" ]] || _cache_invalid _usage_spec_mise_2024_12_20 ) \ - && ! _retrieve_cache _usage_spec_mise_2024_12_20; + if ( [[ -z "${_usage_spec_mise_2024_12_21:-}" ]] || _cache_invalid _usage_spec_mise_2024_12_21 ) \ + && ! _retrieve_cache _usage_spec_mise_2024_12_21; then spec="$(mise usage)" - _store_cache _usage_spec_mise_2024_12_20 spec + _store_cache _usage_spec_mise_2024_12_21 spec fi _arguments "*: :(($(usage complete-word --shell zsh -s "$spec" -- "${words[@]}" )))" diff --git a/completions/mise.bash b/completions/mise.bash index 866389b9bf..38a58f59b7 100644 --- a/completions/mise.bash +++ b/completions/mise.bash @@ -6,14 +6,14 @@ _mise() { return 1 fi - if [[ -z ${_usage_spec_mise_2024_12_20:-} ]]; then - _usage_spec_mise_2024_12_20="$(mise usage)" + if [[ -z ${_usage_spec_mise_2024_12_21:-} ]]; then + _usage_spec_mise_2024_12_21="$(mise usage)" fi local cur prev words cword was_split comp_args _comp_initialize -n : -- "$@" || return # shellcheck disable=SC2207 - _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2024_12_20}" --cword="$cword" -- "${words[@]}")" + _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2024_12_21}" --cword="$cword" -- "${words[@]}")" _comp_ltrim_colon_completions "$cur" # shellcheck disable=SC2181 if [[ $? -ne 0 ]]; then diff --git a/completions/mise.fish b/completions/mise.fish index 94a0fb2c23..2b93985c03 100644 --- a/completions/mise.fish +++ b/completions/mise.fish @@ -6,7 +6,7 @@ if ! command -v usage &> /dev/null return 1 end -if ! set -q _usage_spec_mise_2024_12_20 - set -g _usage_spec_mise_2024_12_20 (mise usage | string collect) +if ! set -q _usage_spec_mise_2024_12_21 + set -g _usage_spec_mise_2024_12_21 (mise usage | string collect) end -complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2024_12_20" -- (commandline -cop) (commandline -t))' +complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2024_12_21" -- (commandline -cop) (commandline -t))' diff --git a/default.nix b/default.nix index 4cde97afcf..1fb5c67db5 100644 --- a/default.nix +++ b/default.nix @@ -2,7 +2,7 @@ rustPlatform.buildRustPackage { pname = "mise"; - version = "2024.12.20"; + version = "2024.12.21"; src = lib.cleanSource ./.; diff --git a/packaging/rpm/mise.spec b/packaging/rpm/mise.spec index b7c12372d3..91abeabe41 100644 --- a/packaging/rpm/mise.spec +++ b/packaging/rpm/mise.spec @@ -1,6 +1,6 @@ Summary: The front-end to your dev env Name: mise -Version: 2024.12.20 +Version: 2024.12.21 Release: 1 URL: https://github.com/jdx/mise/ Group: System From a9b6e001f12af9226ac2901ae602e17e1874041e Mon Sep 17 00:00:00 2001 From: Itamar Lencovsky <4740959+eitamal@users.noreply.github.com> Date: Sat, 28 Dec 2024 20:59:34 +1000 Subject: [PATCH 012/289] fix: add `:` escaping for tasks with multiple colons (#3853) --- mise.usage.kdl | 2 +- src/assets/mise-extra.usage.kdl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mise.usage.kdl b/mise.usage.kdl index a15f329c9d..f7ccf6116e 100644 --- a/mise.usage.kdl +++ b/mise.usage.kdl @@ -2060,7 +2060,7 @@ complete "plugin" run="mise plugins --core --user" complete "prefix" run="mise ls-remote {{words[PREV]}}" complete "setting" run="mise settings | awk '{print $1}'" complete "task" run=r#" -mise tasks --json | jq -r '.[] | (.name | sub(":"; "\\:")) + ":" + (.description | sub(":"; "\\:"))' +mise tasks --json | jq -r '.[] | (.name | gsub(":"; "\\:")) + ":" + (.description | gsub(":"; "\\:"))' "# descriptions=true complete "tool@version" run=r#" diff --git a/src/assets/mise-extra.usage.kdl b/src/assets/mise-extra.usage.kdl index dc01f10317..5898cb4d56 100644 --- a/src/assets/mise-extra.usage.kdl +++ b/src/assets/mise-extra.usage.kdl @@ -7,7 +7,7 @@ complete "plugin" run="mise plugins --core --user" complete "prefix" run="mise ls-remote {{words[PREV]}}" complete "setting" run="mise settings | awk '{print $1}'" complete "task" run=r#" -mise tasks --json | jq -r '.[] | (.name | sub(":"; "\\:")) + ":" + (.description | sub(":"; "\\:"))' +mise tasks --json | jq -r '.[] | (.name | gsub(":"; "\\:")) + ":" + (.description | gsub(":"; "\\:"))' "# descriptions=true complete "tool@version" run=r#" From 6d462d002e44e75d00ebf74fc0856124d656ba77 Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Sat, 28 Dec 2024 15:23:23 +0100 Subject: [PATCH 013/289] fix: type issue in docs/JSON schema for python_create_args and uv_create_args (#3855) --- schema/mise.json | 10 ++++++++-- settings.toml | 8 ++++++-- src/config/env_directive/venv.rs | 18 ++---------------- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/schema/mise.json b/schema/mise.json index 5a6154b4d5..73f98f1b3c 100644 --- a/schema/mise.json +++ b/schema/mise.json @@ -653,7 +653,10 @@ }, "uv_venv_create_args": { "description": "Arguments to pass to uv when creating a venv.", - "type": "string" + "type": "array", + "items": { + "type": "string" + } }, "venv_auto_create": { "description": "Automatically create virtualenvs for python tools.", @@ -662,7 +665,10 @@ }, "venv_create_args": { "description": "Arguments to pass to python when creating a venv. (not used for uv venv creation)", - "type": "string" + "type": "array", + "items": { + "type": "string" + } }, "venv_stdlib": { "description": "Prefer to use venv from Python's standard library.", diff --git a/settings.toml b/settings.toml index f42999e455..d8589c7efd 100644 --- a/settings.toml +++ b/settings.toml @@ -718,8 +718,10 @@ description = "Integrate with uv to automatically create/source venvs if uv.lock [python.uv_venv_create_args] env = "MISE_PYTHON_UV_VENV_CREATE_ARGS" -type = "String" +type = "ListString" +rust_type = "Vec" optional = true +parse_env = "list_by_colon" description = "Arguments to pass to uv when creating a venv." [python.venv_auto_create] @@ -731,8 +733,10 @@ description = "Automatically create virtualenvs for python tools." [python.venv_create_args] env = "MISE_PYTHON_VENV_CREATE_ARGS" -type = "String" +type = "ListString" +rust_type = "Vec" optional = true +parse_env = "list_by_colon" description = "Arguments to pass to python when creating a venv. (not used for uv venv creation)" [python.venv_stdlib] diff --git a/src/config/env_directive/venv.rs b/src/config/env_directive/venv.rs index 1a9807810f..f2eadee11f 100644 --- a/src/config/env_directive/venv.rs +++ b/src/config/env_directive/venv.rs @@ -78,14 +78,7 @@ impl EnvResults { let extra = SETTINGS .python .uv_venv_create_args - .as_ref() - .and_then(|a| match shell_words::split(a) { - Ok(a) => Some(a), - Err(err) => { - warn!("failed to split uv_venv_create_args: {}", err); - None - } - }) + .clone() .or(uv_create_args) .unwrap_or_default(); let mut cmd = CmdLineRunner::new("uv").args(["venv", &venv.to_string_lossy()]); @@ -104,14 +97,7 @@ impl EnvResults { let extra = SETTINGS .python .venv_create_args - .as_ref() - .and_then(|a| match shell_words::split(a) { - Ok(a) => Some(a), - Err(err) => { - warn!("failed to split venv_create_args: {}", err); - None - } - }) + .clone() .or(python_create_args) .unwrap_or_default(); From a706333a355b9f9653c1008210e759db2a1b7754 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Sat, 28 Dec 2024 14:00:09 -0100 Subject: [PATCH 014/289] docs(settings): fix link to precompiled python binaries (#3851) --- settings.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.toml b/settings.toml index d8589c7efd..537254bea7 100644 --- a/settings.toml +++ b/settings.toml @@ -653,7 +653,7 @@ optional = true description = "If true, compile python from source. If false, use precompiled binaries. If not set, use precompiled binaries if available." docs = """ * Values: - * `true` - always compile with python-build instead of downloading [precompiled binaries](/python.html#precompiled-python-binaries). + * `true` - always compile with python-build instead of downloading [precompiled binaries](/lang/python.html#precompiled-python-binaries). * `false` - always download precompiled binaries. * [undefined] - use precompiled binary if one is available for the current platform, compile otherwise. """ From 0a6b6925107b088d6dd65ae2ed5fc7de6abf6788 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sat, 28 Dec 2024 13:58:38 -0600 Subject: [PATCH 015/289] Delete .github/ISSUE_TEMPLATE/blank.md --- .github/ISSUE_TEMPLATE/blank.md | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/blank.md diff --git a/.github/ISSUE_TEMPLATE/blank.md b/.github/ISSUE_TEMPLATE/blank.md deleted file mode 100644 index 453cc7c6a9..0000000000 --- a/.github/ISSUE_TEMPLATE/blank.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: Blank -about: Blank issue template -title: "" -labels: "" -assignees: "" ---- - - From 951eab7ca534a713cdc470704967057951ff4743 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sat, 28 Dec 2024 13:58:53 -0600 Subject: [PATCH 016/289] Delete .github/ISSUE_TEMPLATE/bug_report.md --- .github/ISSUE_TEMPLATE/bug_report.md | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 059496bd04..0000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -name: Bug report -about: Something not working right? -title: "" -labels: bug -assignees: "" ---- - - - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior. - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**`mise doctor` output** - -```text -REPLACE WITH OUTPUT OF `mise doctor` -``` - -**Additional context** -Add any other context about the problem here. Consider running mise with `--debug` or `--trace` for extra debug info. From d16797986a770c5340c472726ed05397463a6755 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sat, 28 Dec 2024 14:00:30 -0600 Subject: [PATCH 017/289] Create config.yml --- .github/ISSUE_TEMPLATE/config.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/config.yml diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000..47dfe85cd9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Features, Bug Reports, Questions + url: https://github.com/jdx/mise/discussions/new/choose + about: Our preferred starting point if you have any questions or suggestions about configuration, features or behavior. From 1bb59d9f1cbd9667e4afdae41448450a744af0c0 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sat, 28 Dec 2024 14:01:17 -0600 Subject: [PATCH 018/289] Delete .github/ISSUE_TEMPLATE/feature_request.md --- .github/ISSUE_TEMPLATE/feature_request.md | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 92816ac2e8..0000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: "" -labels: enhancement -assignees: "" ---- - - From 51fa75e9aa265434d73a469cf44a9af8ba554877 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sat, 28 Dec 2024 14:05:59 -0600 Subject: [PATCH 019/289] Create preapproved.md --- .github/ISSUE_TEMPLATE/preapproved.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/preapproved.md diff --git a/.github/ISSUE_TEMPLATE/preapproved.md b/.github/ISSUE_TEMPLATE/preapproved.md new file mode 100644 index 0000000000..ab9c1a7f1c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/preapproved.md @@ -0,0 +1,9 @@ +--- +name: Pre-Discussed and Approved Topics +about: |- + Only for topics already discussed and approved in the GitHub Discussions section. +--- + + + +Discussion Number: From ad3a5f040013bad046f2ca3abb9eebc941301368 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sat, 28 Dec 2024 17:25:25 -0600 Subject: [PATCH 020/289] feat: colorize banner --- src/cli/version.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/cli/version.rs b/src/cli/version.rs index d8dcac89ca..221fd5227d 100644 --- a/src/cli/version.rs +++ b/src/cli/version.rs @@ -10,6 +10,7 @@ use crate::cli::self_update::SelfUpdate; #[cfg(not(test))] use crate::config::Settings; use crate::file::modified_duration; +use crate::ui::style; use crate::{dirs, duration, env, file}; /// Display the version of mise @@ -83,8 +84,7 @@ pub fn print_version_if_requested(args: &[String]) -> std::io::Result { fn show_version() -> std::io::Result<()> { if console::user_attended() { - miseprintln!( - "{}", + let banner = style::nred( r#" _ __ ____ ___ (_)_______ ___ ____ ____ / /___ _________ @@ -93,8 +93,9 @@ fn show_version() -> std::io::Result<()> { /_/ /_/ /_/_/____/\___/ \___/_/ /_/ / .___/_/\__,_/\___/\___/ /_/ "# - .trim_start_matches("\n") + .trim_start_matches("\n"), ); + miseprintln!("{banner}"); } miseprintln!("{}", *VERSION); Ok(()) From 2b94fcf2ecc8b91d30addf0f547216a180345ad8 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sat, 28 Dec 2024 19:01:30 -0600 Subject: [PATCH 021/289] Delete .github/ISSUE_TEMPLATE/preapproved.md --- .github/ISSUE_TEMPLATE/preapproved.md | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/preapproved.md diff --git a/.github/ISSUE_TEMPLATE/preapproved.md b/.github/ISSUE_TEMPLATE/preapproved.md deleted file mode 100644 index ab9c1a7f1c..0000000000 --- a/.github/ISSUE_TEMPLATE/preapproved.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: Pre-Discussed and Approved Topics -about: |- - Only for topics already discussed and approved in the GitHub Discussions section. ---- - - - -Discussion Number: From 6d7e3c56f812d32182df7d909d79ffea361265bf Mon Sep 17 00:00:00 2001 From: Tom Forbes Date: Sun, 29 Dec 2024 13:07:05 +0000 Subject: [PATCH 022/289] docs: Fix cargo install examples (#3862) --- docs/dev-tools/backends/cargo.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/dev-tools/backends/cargo.md b/docs/dev-tools/backends/cargo.md index f2eb93cbce..d9ce5c98d1 100644 --- a/docs/dev-tools/backends/cargo.md +++ b/docs/dev-tools/backends/cargo.md @@ -96,7 +96,7 @@ Select the CLI bin name to install when multiple are available (passed as `cargo ```toml [tools] -"cargo:github.com/username/demo" = { version = "tag:v1.0.0", bin = "demo" } +"cargo:https://github.com/username/demo" = { version = "tag:v1.0.0", bin = "demo" } ``` ### `crate` @@ -106,7 +106,7 @@ Select the crate name to install when multiple are available (passed as ```toml [tools] -"cargo:github.com/username/demo" = { version = "tag:v1.0.0", crate = "demo" } +"cargo:https://github.com/username/demo" = { version = "tag:v1.0.0", crate = "demo" } ``` ### `locked` @@ -116,5 +116,5 @@ pass `false` to disable: ```toml [tools] -"cargo:github.com/username/demo" = { version = "latest", locked = false } +"cargo:https://github.com/username/demo" = { version = "latest", locked = false } ``` From 9d613b924b785f508e713d27a2d5a8a59208f4ac Mon Sep 17 00:00:00 2001 From: mise-en-dev Date: Sun, 29 Dec 2024 18:20:47 -0600 Subject: [PATCH 023/289] chore: release 2024.12.22 (#3852) --- CHANGELOG.md | 30 ++++++++++++ Cargo.lock | 106 ++++++++++++++++++++-------------------- Cargo.toml | 2 +- README.md | 2 +- aqua-registry | 2 +- completions/_mise | 6 +-- completions/mise.bash | 6 +-- completions/mise.fish | 6 +-- default.nix | 2 +- packaging/rpm/mise.spec | 2 +- 10 files changed, 97 insertions(+), 67 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfc964e615..7829df0b4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,35 @@ # Changelog +## [2024.12.22](https://github.com/jdx/mise/compare/v2024.12.21..v2024.12.22) - 2024-12-30 + +### ๐Ÿš€ Features + +- colorize banner by [@jdx](https://github.com/jdx) in [ad3a5f0](https://github.com/jdx/mise/commit/ad3a5f040013bad046f2ca3abb9eebc941301368) + +### ๐Ÿ› Bug Fixes + +- add `:` escaping for tasks with multiple colons by [@eitamal](https://github.com/eitamal) in [#3853](https://github.com/jdx/mise/pull/3853) +- type issue in docs/JSON schema for python_create_args and uv_create_args by [@roele](https://github.com/roele) in [#3855](https://github.com/jdx/mise/pull/3855) + +### ๐Ÿ“š Documentation + +- **(settings)** fix link to precompiled python binaries by [@scop](https://github.com/scop) in [#3851](https://github.com/jdx/mise/pull/3851) +- Fix cargo install examples by [@orf](https://github.com/orf) in [#3862](https://github.com/jdx/mise/pull/3862) + +### ๐Ÿ” Other Changes + +- Delete .github/ISSUE_TEMPLATE/blank.md by [@jdx](https://github.com/jdx) in [0a6b692](https://github.com/jdx/mise/commit/0a6b6925107b088d6dd65ae2ed5fc7de6abf6788) +- Delete .github/ISSUE_TEMPLATE/bug_report.md by [@jdx](https://github.com/jdx) in [951eab7](https://github.com/jdx/mise/commit/951eab7ca534a713cdc470704967057951ff4743) +- Create config.yml by [@jdx](https://github.com/jdx) in [d167979](https://github.com/jdx/mise/commit/d16797986a770c5340c472726ed05397463a6755) +- Delete .github/ISSUE_TEMPLATE/feature_request.md by [@jdx](https://github.com/jdx) in [1bb59d9](https://github.com/jdx/mise/commit/1bb59d9f1cbd9667e4afdae41448450a744af0c0) +- Create preapproved.md by [@jdx](https://github.com/jdx) in [51fa75e](https://github.com/jdx/mise/commit/51fa75e9aa265434d73a469cf44a9af8ba554877) +- Delete .github/ISSUE_TEMPLATE/preapproved.md by [@jdx](https://github.com/jdx) in [2b94fcf](https://github.com/jdx/mise/commit/2b94fcf2ecc8b91d30addf0f547216a180345ad8) + +### New Contributors + +- @orf made their first contribution in [#3862](https://github.com/jdx/mise/pull/3862) +- @eitamal made their first contribution in [#3853](https://github.com/jdx/mise/pull/3853) + ## [2024.12.21](https://github.com/jdx/mise/compare/v2024.12.20..v2024.12.21) - 2024-12-27 ### ๐Ÿ› Bug Fixes diff --git a/Cargo.lock b/Cargo.lock index c02399fcec..5b68bacb41 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -256,7 +256,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -595,7 +595,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -647,7 +647,7 @@ dependencies = [ "nom", "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -699,7 +699,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -892,7 +892,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -928,7 +928,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -952,7 +952,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -963,7 +963,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -1027,7 +1027,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -1040,7 +1040,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -1095,7 +1095,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -1509,7 +1509,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -1607,9 +1607,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "globset" @@ -1916,7 +1916,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn 2.0.92", + "syn 2.0.93", "unic-langid", ] @@ -1930,7 +1930,7 @@ dependencies = [ "i18n-config", "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -2071,7 +2071,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -2126,7 +2126,7 @@ dependencies = [ "autocfg", "impl-tools-lib", "proc-macro-error2", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -2138,7 +2138,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -2333,7 +2333,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -2568,7 +2568,7 @@ checksum = "23c9b935fbe1d6cbd1dac857b54a688145e2d93f48db36010514d0f612d0ad67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -2620,7 +2620,7 @@ dependencies = [ [[package]] name = "mise" -version = "2024.12.21" +version = "2024.12.22" dependencies = [ "base64 0.22.1", "built", @@ -2764,7 +2764,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -2901,7 +2901,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -3084,7 +3084,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -3163,7 +3163,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -3297,7 +3297,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -3652,7 +3652,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.92", + "syn 2.0.93", "walkdir", ] @@ -3935,9 +3935,9 @@ checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" [[package]] name = "serde" -version = "1.0.216" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] @@ -3954,13 +3954,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.216" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -4043,7 +4043,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -4081,7 +4081,7 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -4301,7 +4301,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -4323,9 +4323,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.92" +version = "2.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ae51629bf965c5c098cc9e87908a3df5301051a9e087d6f9bef5c9771ed126" +checksum = "9c786062daee0d6db1132800e623df74274a0a87322d8e183338e01b3d98d058" dependencies = [ "proc-macro2", "quote", @@ -4349,7 +4349,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -4513,7 +4513,7 @@ checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -4548,7 +4548,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -4559,7 +4559,7 @@ checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -4654,7 +4654,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -4779,7 +4779,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -5186,7 +5186,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", "wasm-bindgen-shared", ] @@ -5221,7 +5221,7 @@ checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5361,7 +5361,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -5372,7 +5372,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -5671,7 +5671,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", "synstructure", ] @@ -5693,7 +5693,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -5713,7 +5713,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", "synstructure", ] @@ -5734,7 +5734,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] @@ -5756,7 +5756,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.92", + "syn 2.0.93", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 548ce6e520..4bb49cf966 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mise" -version = "2024.12.21" +version = "2024.12.22" edition = "2021" description = "The front-end to your dev env" authors = ["Jeff Dickey (@jdx)"] diff --git a/README.md b/README.md index 0539a0a753..94044f1e57 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Install mise (other methods [here](https://mise.jdx.dev/getting-started.html)): ```sh-session $ curl https://mise.run | sh $ ~/.local/bin/mise --version -2024.12.21 macos-arm64 (a1b2d3e 2024-12-27) +2024.12.22 macos-arm64 (a1b2d3e 2024-12-30) ``` or install a specific a version: diff --git a/aqua-registry b/aqua-registry index bec42350e8..4c8586025a 160000 --- a/aqua-registry +++ b/aqua-registry @@ -1 +1 @@ -Subproject commit bec42350e8166c3bc2850bda279e65a8d2ee9af9 +Subproject commit 4c8586025a865ed0ea0e7aa47762a184afb6c250 diff --git a/completions/_mise b/completions/_mise index 07cdeda261..144d9a9ff8 100644 --- a/completions/_mise +++ b/completions/_mise @@ -27,11 +27,11 @@ _mise() { zstyle ":completion:${curcontext}:" cache-policy _usage_mise_cache_policy fi - if ( [[ -z "${_usage_spec_mise_2024_12_21:-}" ]] || _cache_invalid _usage_spec_mise_2024_12_21 ) \ - && ! _retrieve_cache _usage_spec_mise_2024_12_21; + if ( [[ -z "${_usage_spec_mise_2024_12_22:-}" ]] || _cache_invalid _usage_spec_mise_2024_12_22 ) \ + && ! _retrieve_cache _usage_spec_mise_2024_12_22; then spec="$(mise usage)" - _store_cache _usage_spec_mise_2024_12_21 spec + _store_cache _usage_spec_mise_2024_12_22 spec fi _arguments "*: :(($(usage complete-word --shell zsh -s "$spec" -- "${words[@]}" )))" diff --git a/completions/mise.bash b/completions/mise.bash index 38a58f59b7..bc99a6ad4a 100644 --- a/completions/mise.bash +++ b/completions/mise.bash @@ -6,14 +6,14 @@ _mise() { return 1 fi - if [[ -z ${_usage_spec_mise_2024_12_21:-} ]]; then - _usage_spec_mise_2024_12_21="$(mise usage)" + if [[ -z ${_usage_spec_mise_2024_12_22:-} ]]; then + _usage_spec_mise_2024_12_22="$(mise usage)" fi local cur prev words cword was_split comp_args _comp_initialize -n : -- "$@" || return # shellcheck disable=SC2207 - _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2024_12_21}" --cword="$cword" -- "${words[@]}")" + _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2024_12_22}" --cword="$cword" -- "${words[@]}")" _comp_ltrim_colon_completions "$cur" # shellcheck disable=SC2181 if [[ $? -ne 0 ]]; then diff --git a/completions/mise.fish b/completions/mise.fish index 2b93985c03..744b2463dd 100644 --- a/completions/mise.fish +++ b/completions/mise.fish @@ -6,7 +6,7 @@ if ! command -v usage &> /dev/null return 1 end -if ! set -q _usage_spec_mise_2024_12_21 - set -g _usage_spec_mise_2024_12_21 (mise usage | string collect) +if ! set -q _usage_spec_mise_2024_12_22 + set -g _usage_spec_mise_2024_12_22 (mise usage | string collect) end -complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2024_12_21" -- (commandline -cop) (commandline -t))' +complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2024_12_22" -- (commandline -cop) (commandline -t))' diff --git a/default.nix b/default.nix index 1fb5c67db5..1d3e44107b 100644 --- a/default.nix +++ b/default.nix @@ -2,7 +2,7 @@ rustPlatform.buildRustPackage { pname = "mise"; - version = "2024.12.21"; + version = "2024.12.22"; src = lib.cleanSource ./.; diff --git a/packaging/rpm/mise.spec b/packaging/rpm/mise.spec index 91abeabe41..746f6087ae 100644 --- a/packaging/rpm/mise.spec +++ b/packaging/rpm/mise.spec @@ -1,6 +1,6 @@ Summary: The front-end to your dev env Name: mise -Version: 2024.12.21 +Version: 2024.12.22 Release: 1 URL: https://github.com/jdx/mise/ Group: System From 9dec542188e731ef357fd74339dd08ac005cb9e3 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sun, 29 Dec 2024 21:18:30 -0600 Subject: [PATCH 024/289] fix: winget release PRs --- .github/workflows/winget.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/winget.yml b/.github/workflows/winget.yml index 6eded9bf86..a8d2f60ff6 100644 --- a/.github/workflows/winget.yml +++ b/.github/workflows/winget.yml @@ -2,6 +2,7 @@ name: Publish to WinGet on: release: types: [released] + workflow_dispatch: jobs: publish: runs-on: windows-latest @@ -18,6 +19,6 @@ jobs: - run: git push -f origin master - uses: vedantmgoyal9/winget-releaser@main with: - identifier: mise.jdx + identifier: jdx.mise max-versions-to-keep: 5 token: ${{ secrets.RTX_GITHUB_BOT_TOKEN }} From 85a70faa900f44927ea66eb2217593b69a6ec115 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sun, 29 Dec 2024 21:22:11 -0600 Subject: [PATCH 025/289] chore: release alpine every 10 releases --- .github/workflows/release.yml | 2 +- .github/workflows/winget.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0bcca538e1..fa97e0e14b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -332,7 +332,7 @@ jobs: container: ghcr.io/jdx/mise:alpine timeout-minutes: 30 needs: [release] - if: startsWith(github.event.ref, 'refs/tags/v') && endsWith(github.event.ref, '.0') + if: startsWith(github.event.ref, 'refs/tags/v') && endsWith(github.event.ref, '0') steps: - name: Checkout repository uses: actions/checkout@v4 diff --git a/.github/workflows/winget.yml b/.github/workflows/winget.yml index a8d2f60ff6..ee6d77f960 100644 --- a/.github/workflows/winget.yml +++ b/.github/workflows/winget.yml @@ -1,4 +1,4 @@ -name: Publish to WinGet +name: winget on: release: types: [released] From d046234da9d17b4bd39e04c91a842f3442bb774f Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sun, 29 Dec 2024 21:25:10 -0600 Subject: [PATCH 026/289] chore: release winget every 10 releases --- .github/workflows/winget.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/winget.yml b/.github/workflows/winget.yml index ee6d77f960..423190970b 100644 --- a/.github/workflows/winget.yml +++ b/.github/workflows/winget.yml @@ -18,6 +18,7 @@ jobs: - run: git pull --rebase microsoft master - run: git push -f origin master - uses: vedantmgoyal9/winget-releaser@main + if: endsWith(github.event.payload.release.tag_name, '0') with: identifier: jdx.mise max-versions-to-keep: 5 From beab48029b3e7a91047012b655f3efe4fd722acf Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sun, 29 Dec 2024 22:26:24 -0600 Subject: [PATCH 027/289] docs: syntax in `mise watch` --- docs/cli/watch.md | 2 +- mise.usage.kdl | 2 +- src/cli/watch.rs | 2 +- xtasks/fig/src/mise.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/cli/watch.md b/docs/cli/watch.md index 3bb92d1270..13c1d17482 100644 --- a/docs/cli/watch.md +++ b/docs/cli/watch.md @@ -15,7 +15,7 @@ It must be installed for this command to work, but you can install it with `mise Tasks to run Can specify multiple tasks by separating with `:::` -e.g.: mise run task1 arg1 arg2 ::: task2 arg1 arg2 +e.g.: `mise run task1 arg1 arg2 ::: task2 arg1 arg2` ### `[ARGS]...` diff --git a/mise.usage.kdl b/mise.usage.kdl index f7ccf6116e..c0a1ae1ebd 100644 --- a/mise.usage.kdl +++ b/mise.usage.kdl @@ -2005,7 +2005,7 @@ It must be installed for this command to work, but you can install it with `mise flag "--manual" help="Show the manual page" { long_help "Show the manual page\n\nThis shows the manual page for Watchexec, if the output is a terminal and the 'man' program is available. If not, the manual page is printed to stdout in ROFF format (suitable for writing to a watchexec.1 file)." } - arg "[TASK]" help="Tasks to run\nCan specify multiple tasks by separating with `:::`\ne.g.: mise run task1 arg1 arg2 ::: task2 arg1 arg2" required=false + arg "[TASK]" help="Tasks to run\nCan specify multiple tasks by separating with `:::`\ne.g.: `mise run task1 arg1 arg2 ::: task2 arg1 arg2`" required=false arg "[ARGS]..." help="Task and arguments to run" required=false double_dash="automatic" var=true } cmd "where" help="Display the installation path for a tool" { diff --git a/src/cli/watch.rs b/src/cli/watch.rs index 626bcb057d..6888d77bc0 100644 --- a/src/cli/watch.rs +++ b/src/cli/watch.rs @@ -23,7 +23,7 @@ use std::path::PathBuf; pub struct Watch { /// Tasks to run /// Can specify multiple tasks by separating with `:::` - /// e.g.: mise run task1 arg1 arg2 ::: task2 arg1 arg2 + /// e.g.: `mise run task1 arg1 arg2 ::: task2 arg1 arg2` #[clap(allow_hyphen_values = true, verbatim_doc_comment)] task: Option, diff --git a/xtasks/fig/src/mise.ts b/xtasks/fig/src/mise.ts index ec18128608..7bd5977c5f 100644 --- a/xtasks/fig/src/mise.ts +++ b/xtasks/fig/src/mise.ts @@ -3443,7 +3443,7 @@ const completionSpec: Fig.Spec = { "args": [ { "name": "task", - "description": "Tasks to run\nCan specify multiple tasks by separating with `:::`\ne.g.: mise run task1 arg1 arg2 ::: task2 arg1 arg2", + "description": "Tasks to run\nCan specify multiple tasks by separating with `:::`\ne.g.: `mise run task1 arg1 arg2 ::: task2 arg1 arg2`", "isOptional": true, "generators": simpleTaskGenerator }, From 0cfdf92bb73f66a317fb83bb347ea7e88fd1c55a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olav=20R=C3=B8nnestad=20Birkeland?= <6450056+o-l-a-v@users.noreply.github.com> Date: Mon, 30 Dec 2024 14:04:06 +0100 Subject: [PATCH 028/289] Fix sh code block (#3876) --- docs/contributing.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/contributing.md b/docs/contributing.md index ba83693137..83b27aeb4b 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -46,10 +46,10 @@ Slow tests do not run by default or on PRs. They can be manually enabled with `T ### Windows E2E Tests -:::sh +```sh pwsh e2e-win\run.ps1 pwsh e2e-win\run.ps1 task # run tests matching `*task*` -::: +``` ## Dependencies From 48f1021048646061e7cd85d9f9969946b00962a6 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Mon, 30 Dec 2024 10:49:51 -0600 Subject: [PATCH 029/289] chore: remove unused versioned tarballs from mise.jdx.dev --- mise.lock | 1 + scripts/publish-s3.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/mise.lock b/mise.lock index 420b200a49..23a3785e8a 100644 --- a/mise.lock +++ b/mise.lock @@ -75,6 +75,7 @@ backend = "aqua:jedisct1/minisign" [tools.minisign.checksums] "minisign-0.11-linux.tar.gz" = "sha256:f0a0954413df8531befed169e447a66da6868d79052ed7e892e50a4291af7ae0" +"minisign-0.11-macos.zip" = "sha256:e7c410ae8b8960d7087392472b040bda9b2f307c76df0384ac37f9ad103fc893" [tools."npm:markdownlint-cli"] version = "0.43.0" diff --git a/scripts/publish-s3.sh b/scripts/publish-s3.sh index 8dff69b75c..3bbbfe957d 100755 --- a/scripts/publish-s3.sh +++ b/scripts/publish-s3.sh @@ -5,7 +5,7 @@ set -euxo pipefail cache_day="max-age=86400,s-maxage=86400,public,immutable" cache_week="max-age=604800,s-maxage=604800,public,immutable" -aws s3 cp "$RELEASE_DIR/$MISE_VERSION" "s3://$AWS_S3_BUCKET/$MISE_VERSION/" --cache-control "$cache_week" --no-progress --recursive --include "*" --exclude "*.tar.gz" --exclude "*.tar.xz" +#aws s3 cp "$RELEASE_DIR/$MISE_VERSION" "s3://$AWS_S3_BUCKET/$MISE_VERSION/" --cache-control "$cache_week" --no-progress --recursive --include "*" --exclude "*.tar.gz" --exclude "*.tar.xz" aws s3 cp "$RELEASE_DIR" "s3://$AWS_S3_BUCKET/" --cache-control "$cache_day" --no-progress --recursive --exclude "*.tar.gz" --exclude "*.tar.xz" --include "mise-latest-*" aws s3 cp "$RELEASE_DIR" "s3://$AWS_S3_BUCKET/" --cache-control "$cache_day" --no-progress --content-type "text/plain" --recursive --exclude "*" --include "SHASUMS*" From 62b7ad4b5ab2e6e8ed4bdc012014d556660cbd76 Mon Sep 17 00:00:00 2001 From: Brendan Mulholland Date: Mon, 30 Dec 2024 18:22:10 +0100 Subject: [PATCH 030/289] docs: Update registry link (#3864) Old one was archived with a README link to new locaton --- docs/plugins.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/plugins.md b/docs/plugins.md index 4733e02bb1..b6758608a6 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -17,7 +17,7 @@ Aqua is definitely preferred to ubi as it has better UX and more features like s mise uses asdf's plugin ecosystem under the hood. These plugins contain shell scripts like `bin/install` (for installing) and `bin/list-all` (for listing all of the available versions). -See for the list of built-in plugins shorthands. See asdf's +See for the list of built-in plugins shorthands. See asdf's [Create a Plugin](https://asdf-vm.com/plugins/create.html) for how to create your own or just learn more about how they work. From 7489357b02d27e8437f8b11c0c185b985733a79b Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Mon, 30 Dec 2024 18:40:45 +0100 Subject: [PATCH 031/289] fix: mise settings unset does not seem to work (#3867) * fix: mise settings unset does not seem to work * [autofix.ci] apply automated fixes * fix: mise settings unset does not seem to work --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- e2e/cli/test_settings_unset | 6 +++++ src/cli/settings/set.rs | 50 ++++++++++++++++++++----------------- src/cli/settings/unset.rs | 40 +++++++++++++++++++---------- 3 files changed, 60 insertions(+), 36 deletions(-) create mode 100644 e2e/cli/test_settings_unset diff --git a/e2e/cli/test_settings_unset b/e2e/cli/test_settings_unset new file mode 100644 index 0000000000..3a53c153a5 --- /dev/null +++ b/e2e/cli/test_settings_unset @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +mise settings set python.compile true +assert "mise settings get python.compile" "true" +mise settings unset python.compile +assert_fail "mise settings get python.compile" "mise ERROR Unknown setting: python.compile" diff --git a/src/cli/settings/set.rs b/src/cli/settings/set.rs index d56289c769..2b7ad4b778 100644 --- a/src/cli/settings/set.rs +++ b/src/cli/settings/set.rs @@ -51,32 +51,36 @@ pub fn set(mut key: &str, value: &str, add: bool, local: bool) -> Result<()> { if !config.contains_key("settings") { config["settings"] = toml_edit::Item::Table(toml_edit::Table::new()); } - let mut settings = config["settings"].as_table_mut().unwrap(); - if key.contains(".") { - let (parent_key, child_key) = key.split_once('.').unwrap(); - - key = child_key; - settings = settings - .entry(parent_key) - .or_insert(toml_edit::Item::Table(toml_edit::Table::new())) - .as_table_mut() - .unwrap(); - } - - let value = match settings.get(key).map(|c| c.as_array()) { - Some(Some(array)) if add => { - let mut array = array.clone(); - array.extend(value.as_array().unwrap().iter().cloned()); - array.into() + if let Some(mut settings) = config["settings"].as_table_mut() { + if let Some((parent_key, child_key)) = key.split_once('.') { + key = child_key; + settings = settings + .entry(parent_key) + .or_insert({ + let mut t = toml_edit::Table::new(); + t.set_implicit(true); + toml_edit::Item::Table(t) + }) + .as_table_mut() + .unwrap(); } - _ => value, - }; - settings.insert(key, value.into()); - // validate - let _: SettingsFile = toml::from_str(&config.to_string())?; + let value = match settings.get(key).map(|c| c.as_array()) { + Some(Some(array)) if add => { + let mut array = array.clone(); + array.extend(value.as_array().unwrap().iter().cloned()); + array.into() + } + _ => value, + }; + settings.insert(key, value.into()); + + // validate + let _: SettingsFile = toml::from_str(&config.to_string())?; - file::write(path, config.to_string()) + file::write(path, config.to_string())?; + } + Ok(()) } fn parse_list_by_comma(value: &str) -> Result { diff --git a/src/cli/settings/unset.rs b/src/cli/settings/unset.rs index 1391628cb2..880b03f247 100644 --- a/src/cli/settings/unset.rs +++ b/src/cli/settings/unset.rs @@ -20,24 +20,38 @@ pub struct SettingsUnset { impl SettingsUnset { pub fn run(self) -> Result<()> { - let path = if self.local { - config::local_toml_config_path() - } else { - config::global_config_path() - }; - let raw = file::read_to_string(&path)?; - let mut config: DocumentMut = raw.parse()?; - if !config.contains_key("settings") { - return Ok(()); - } - let settings = config["settings"].as_table_mut().unwrap(); - settings.remove(&self.key); + unset(&self.key, self.local) + } +} +pub fn unset(mut key: &str, local: bool) -> Result<()> { + let path = if local { + config::local_toml_config_path() + } else { + config::global_config_path() + }; + let raw = file::read_to_string(&path)?; + let mut config: DocumentMut = raw.parse()?; + if let Some(mut settings) = config["settings"].as_table_mut() { + if let Some((parent_key, child_key)) = key.split_once('.') { + key = child_key; + settings = settings + .entry(parent_key) + .or_insert({ + let mut t = toml_edit::Table::new(); + t.set_implicit(true); + toml_edit::Item::Table(t) + }) + .as_table_mut() + .unwrap(); + } + settings.remove(key); // validate let _: SettingsFile = toml::from_str(&config.to_string())?; - file::write(&path, config.to_string()) + file::write(&path, config.to_string())?; } + Ok(()) } static AFTER_LONG_HELP: &str = color_print::cstr!( From 50f812c6d19dff8ca25350f8d73934b8502dcaba Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Mon, 30 Dec 2024 11:55:05 -0600 Subject: [PATCH 032/289] fix: gradle aqua package (#3880) --- docs/registry.md | 2 +- registry.toml | 7 ++++++- src/aqua/aqua_template.rs | 17 +++++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/docs/registry.md b/docs/registry.md index 8999ef8466..29b934fdf9 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -305,7 +305,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | goss | [aqua:goss-org/goss](https://github.com/goss-org/goss) [asdf:raimon49/asdf-goss](https://github.com/raimon49/asdf-goss) | | gotestsum | [aqua:gotestyourself/gotestsum](https://github.com/gotestyourself/gotestsum) [asdf:pmalek/mise-gotestsum](https://github.com/pmalek/mise-gotestsum) | | graalvm | [asdf:asdf-community/asdf-graalvm](https://github.com/asdf-community/asdf-graalvm) | -| gradle | [asdf:rfrancis/asdf-gradle](https://github.com/rfrancis/asdf-gradle) [vfox:version-fox/vfox-gradle](https://github.com/version-fox/vfox-gradle) | +| gradle | [aqua:gradle/gradle-distributions](https://github.com/gradle/gradle-distributions) [asdf:rfrancis/asdf-gradle](https://github.com/rfrancis/asdf-gradle) [vfox:version-fox/vfox-gradle](https://github.com/version-fox/vfox-gradle) | | gradle-profiler | [asdf:joschi/asdf-gradle-profiler](https://github.com/joschi/asdf-gradle-profiler) | | grails | [asdf:weibemoura/asdf-grails](https://github.com/weibemoura/asdf-grails) | | grain | [asdf:cometkim/asdf-grain](https://github.com/cometkim/asdf-grain) | diff --git a/registry.toml b/registry.toml index c37e8762b5..a5dadfcfb2 100644 --- a/registry.toml +++ b/registry.toml @@ -758,7 +758,12 @@ gotestsum.backends = [ "asdf:pmalek/mise-gotestsum" ] graalvm.backends = ["asdf:asdf-community/asdf-graalvm"] -gradle.backends = ["asdf:rfrancis/asdf-gradle", "vfox:version-fox/vfox-gradle"] +gradle.backends = [ + "aqua:gradle/gradle-distributions", + "asdf:rfrancis/asdf-gradle", + "vfox:version-fox/vfox-gradle" +] +gradle.depends = ["java"] gradle-profiler.backends = ["asdf:joschi/asdf-gradle-profiler"] grails.backends = ["asdf:weibemoura/asdf-grails"] grain.backends = ["asdf:cometkim/asdf-grain"] diff --git a/src/aqua/aqua_template.rs b/src/aqua/aqua_template.rs index d9cab671b8..ac17bc99d7 100644 --- a/src/aqua/aqua_template.rs +++ b/src/aqua/aqua_template.rs @@ -139,6 +139,21 @@ impl Parser<'_> { s = str.to_string(); } } + "trimSuffix" => { + let suffix = next_arg(&mut tokens)?; + let str = next_arg(&mut tokens)?; + if let Some(str) = str.strip_suffix(&suffix) { + s = str.to_string(); + } else { + s = str.to_string(); + } + } + "replace" => { + let from = next_arg(&mut tokens)?; + let to = next_arg(&mut tokens)?; + let str = next_arg(&mut tokens)?; + s = str.replace(&from, &to); + } _ => bail!("unexpected function: {func}"), }, Token::Whitespace(_) => {} @@ -190,7 +205,9 @@ mod tests { test_parse_trimv: (r#"trimV "v1.0.0""#, "1.0.0", hashmap!{}), test_parse_trim_prefix: (r#"trimPrefix "v" "v1.0.0""#, "1.0.0", hashmap!{}), test_parse_trim_prefix2: (r#"trimPrefix "v" "1.0.0""#, "1.0.0", hashmap!{}), + test_parse_trim_suffix: (r#"trimSuffix "-v1.0.0" "foo-v1.0.0""#, "foo", hashmap!{}), test_parse_pipe: (r#"trimPrefix "foo-" "foo-v1.0.0" | trimV"#, "1.0.0", hashmap!{}), + test_parse_replace: (r#"replace "foo" "bar" "foo-bar""#, "bar-bar", hashmap!{}), ); #[test] From c8f2c90111c5d20fe4586d59eb66f3bb2f8cfd9a Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Mon, 30 Dec 2024 17:57:15 +0000 Subject: [PATCH 033/289] chore: trim newline in banner --- src/cli/version.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/cli/version.rs b/src/cli/version.rs index 221fd5227d..02b9f25257 100644 --- a/src/cli/version.rs +++ b/src/cli/version.rs @@ -91,9 +91,8 @@ fn show_version() -> std::io::Result<()> { / __ `__ \/ / ___/ _ \______/ _ \/ __ \______/ __ \/ / __ `/ ___/ _ \ / / / / / / (__ ) __/_____/ __/ / / /_____/ /_/ / / /_/ / /__/ __/ /_/ /_/ /_/_/____/\___/ \___/_/ /_/ / .___/_/\__,_/\___/\___/ - /_/ -"# - .trim_start_matches("\n"), + /_/"# + .trim_start_matches("\n"), ); miseprintln!("{banner}"); } From e306720c558c3d0c346716cdf2655702efad004e Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Mon, 30 Dec 2024 14:31:09 -0600 Subject: [PATCH 034/289] fix: remove `root` env var in tasks (#3884) I believe the intention here was for templates but for some reason this was added to env vars. Removing as it can obviously conflict with other env vars. Fixes https://github.com/jdx/mise/issues/3883 BREAKING CHANGE: you will need to use `{{root}}` or `MISE_PROJECT_ROOT` after this change. --- docs/tasks/index.md | 2 +- src/cli/run.rs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/tasks/index.md b/docs/tasks/index.md index 9f54e6a029..ed814cff1d 100644 --- a/docs/tasks/index.md +++ b/docs/tasks/index.md @@ -53,7 +53,7 @@ The following environment variables are passed to the task: - `MISE_ORIGINAL_CWD`: The original working directory from where the task was run. - `MISE_CONFIG_ROOT`: The directory containing the `mise.toml` file where the task was defined or if the config path is something like `~/src/myproj/.config/mise.toml`, it will be `~/src/myproj`. -- `MISE_PROJECT_ROOT` or `root`: The root of the project. +- `MISE_PROJECT_ROOT`: The root of the project. - `MISE_TASK_NAME`: The name of the task being run. - `MISE_TASK_DIR`: The directory containing the task script. - `MISE_TASK_FILE`: The full path to the task script. diff --git a/src/cli/run.rs b/src/cli/run.rs index 229ab8a249..8991a4d996 100644 --- a/src/cli/run.rs +++ b/src/cli/run.rs @@ -445,7 +445,6 @@ impl Run { } if let Some(root) = config.project_root.clone().or(task.config_root.clone()) { env.insert("MISE_PROJECT_ROOT".into(), root.display().to_string()); - env.insert("root".into(), root.display().to_string()); } env.insert("MISE_TASK_NAME".into(), task.name.clone()); let task_file = task.file.as_ref().unwrap_or(&task.config_source); From 742fdeb44b0ca9ad95f47625bf9e97531f6ac65d Mon Sep 17 00:00:00 2001 From: Simon Holloway Date: Mon, 30 Dec 2024 21:08:38 +0000 Subject: [PATCH 035/289] docs: clarify shims behaviour (#3881) * docs: clarify shims behaviour * [autofix.ci] apply automated fixes * removed ide integration warning --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- docs/cli/activate.md | 3 +++ docs/dev-tools/shims.md | 39 +++++++++++++++++++++++++++------------ docs/getting-started.md | 5 +++++ docs/ide-integration.md | 2 +- docs/troubleshooting.md | 5 +++++ mise.usage.kdl | 2 +- src/cli/activate.rs | 3 +++ 7 files changed, 45 insertions(+), 14 deletions(-) diff --git a/docs/cli/activate.md b/docs/cli/activate.md index 9cd2334772..866d35e282 100644 --- a/docs/cli/activate.md +++ b/docs/cli/activate.md @@ -51,6 +51,9 @@ Effectively the same as: PATH="$HOME/.local/share/mise/shims:$PATH" ``` +`mise activate --shims` does not support all the features of `mise activate`. +See for more information + ### `-q --quiet` Suppress non-error messages diff --git a/docs/dev-tools/shims.md b/docs/dev-tools/shims.md index ca5a3a24be..67c9f2e0fd 100644 --- a/docs/dev-tools/shims.md +++ b/docs/dev-tools/shims.md @@ -4,6 +4,11 @@ The [beginner's guide](https://dev.to/jdxcode/beginners-guide-to-rtx-ac4), and my [blog post](https://jdx.dev/posts/2024-04-13-shims-how-they-work-in-mise-en-place/) are helpful resources to dive deeper into shims. ::: +::: warning +`mise activate --shims` does not support all the features of `mise activate`.
+See [shims vs path](/dev-tools/shims.html#shims-vs-path) for more info. +::: + ## Introduction There are two ways for dev tools to be loaded into your shell: `mise activate` and `shims`. @@ -77,6 +82,12 @@ but since this is only run once per shell session it's not a big deal. ## Shims vs PATH +The following features are affected when shims are used **instead** of PATH activation: + +- Env vars defined in mise are only available to mise tools +- Most hooks won't trigger +- The unix `which` command points to the shim, obscuring the real executable + In general, I recommend using PATH (`mise activate`) instead of shims for _interactive_ situations. The way activate works is every time the prompt is displayed, mise-en-place will determine what PATH and other env vars should be and export them. This is why it doesn't work well for non-interactive situations like @@ -103,18 +114,6 @@ This may be fixable at least for some shells if they support a hook for director some investigation will need to be done. See [#1294](https://github.com/jdx/mise/issues/1294) for details. ::: -### `which` - -`which` is a command that I personally find great value in. shims effectively "break" `which` and -cause it to show the location of the shim. Of course `mise which` will show the location but I prefer -the "cleanliness" of running `which node` and getting back a real path with a version number inside of it. -e.g: - -```sh -$ which node -/Users/jdx/.mise/installs/node/20/bin/node -``` - ### Env vars and shims A downside of shims is the "mise environment" is only loaded when a shim is called. This means if you @@ -151,6 +150,22 @@ In general, [tasks](/tasks/) are a good way to ensure that the mise environment this isn't a problem. ::: +### Hooks and shims + +The [hooks](/hooks.html) `cd`, `enter`, `exit`, and `watch_files` only trigger with `mise activate`. However `preinstall` and `postinstall` still work with shims because they don't require shell integration. + +### `which` + +`which` is a command that I personally find great value in. shims effectively "break" `which` and +cause it to show the location of the shim. Of course `mise which` will show the location but I prefer +the "cleanliness" of running `which node` and getting back a real path with a version number inside of it. +e.g: + +```sh +$ which node +/Users/jdx/.mise/installs/node/20/bin/node +``` + ## Hook on `cd` Some version managers modify the behavior of `cd`. That might seem like the ideal method of making a version diff --git a/docs/getting-started.md b/docs/getting-started.md index c51d6da875..facc568038 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -79,6 +79,11 @@ Now that `mise` is installed, you can optionally activate it or add its [shims]( - [`mise activate`](/cli/activate) method updates your environment variable and `PATH` every time your prompt is run to ensure you use the correct versions. - [Shims](dev-tools/shims.md) are symlinks to the `mise` binary that intercept commands and load the appropriate environment +::: warning +Shims do not support all the features of `mise activate`.
+See [shims vs path](/dev-tools/shims.html#shims-vs-path) for more info. +::: + For interactive shells, `mise activate` is recommended. In non-interactive sessions, like CI/CD, IDEs, and scripts, using `shims` might work best. You can also not use any and call `mise exec/run` directly instead. See [this guide](dev-tools/shims.md) for more information. diff --git a/docs/ide-integration.md b/docs/ide-integration.md index bf916bdf43..9dcde7e9fc 100644 --- a/docs/ide-integration.md +++ b/docs/ide-integration.md @@ -60,7 +60,7 @@ end ::: This assumes that `mise` is on `PATH`. If it is not, you'll need to use the absolute path ( -e.g.: `eval "$($HOME/.local/bin/mise activate zsh)"`). +e.g.: `eval "$($HOME/.local/bin/mise activate zsh --shims)"`). Here is an example showing that VSCode will use `node` provided by `mise`: diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index 0f1527104c..3588b46d2d 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -13,6 +13,11 @@ however that will only setup the global tools. It won't modify the environment variables when entering into a different project. +::: warning +`mise activate --shims` does not support all the features of `mise activate`.
+See [shims vs path](/dev-tools/shims.html#shims-vs-path) for more info. +::: + Also see the [shebang](/tips-and-tricks#shebang) example for a way to make scripts call mise to get the runtime. That is another way to use mise without activation. diff --git a/mise.usage.kdl b/mise.usage.kdl index c0a1ae1ebd..86607b0b9e 100644 --- a/mise.usage.kdl +++ b/mise.usage.kdl @@ -94,7 +94,7 @@ Customize status output with `status` settings."# } flag "--status" help="Show \"mise: @\" message when changing directories" hide=true flag "--shims" help="Use shims instead of modifying PATH\nEffectively the same as:" { - long_help "Use shims instead of modifying PATH\nEffectively the same as:\n\n PATH=\"$HOME/.local/share/mise/shims:$PATH\"" + long_help "Use shims instead of modifying PATH\nEffectively the same as:\n\n PATH=\"$HOME/.local/share/mise/shims:$PATH\"\n\n`mise activate --shims` does not support all the features of `mise activate`.\nSee https://mise.jdx.dev/dev-tools/shims.html#shims-vs-path for more information" } flag "-q --quiet" help="Suppress non-error messages" flag "--no-hook-env" help="Do not automatically call hook-env" { diff --git a/src/cli/activate.rs b/src/cli/activate.rs index a52bda345c..5ff7acd5ef 100644 --- a/src/cli/activate.rs +++ b/src/cli/activate.rs @@ -43,6 +43,9 @@ pub struct Activate { /// Effectively the same as: /// /// PATH="$HOME/.local/share/mise/shims:$PATH" + /// + /// `mise activate --shims` does not support all the features of `mise activate`. + /// See https://mise.jdx.dev/dev-tools/shims.html#shims-vs-path for more information #[clap(long, verbatim_doc_comment)] shims: bool, From 463335e723d4e2d2cbffad01d80101b8d5b686f2 Mon Sep 17 00:00:00 2001 From: mise-en-dev Date: Mon, 30 Dec 2024 15:38:27 -0600 Subject: [PATCH 036/289] chore: release 2024.12.23 (#3873) --- CHANGELOG.md | 25 ++++++++++++++++++++++ Cargo.lock | 46 ++++++++++++++++++----------------------- Cargo.toml | 2 +- README.md | 2 +- aqua-registry | 2 +- completions/_mise | 6 +++--- completions/mise.bash | 6 +++--- completions/mise.fish | 6 +++--- default.nix | 2 +- packaging/rpm/mise.spec | 2 +- 10 files changed, 59 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7829df0b4f..99ac53e0d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,30 @@ # Changelog +## [2024.12.23](https://github.com/jdx/mise/compare/v2024.12.22..v2024.12.23) - 2024-12-30 + +### ๐Ÿ› Bug Fixes + +- winget release PRs by [@jdx](https://github.com/jdx) in [9dec542](https://github.com/jdx/mise/commit/9dec542188e731ef357fd74339dd08ac005cb9e3) +- mise settings unset does not seem to work by [@roele](https://github.com/roele) in [#3867](https://github.com/jdx/mise/pull/3867) +- gradle aqua package by [@jdx](https://github.com/jdx) in [#3880](https://github.com/jdx/mise/pull/3880) +- **breaking** remove `root` env var in tasks by [@jdx](https://github.com/jdx) in [#3884](https://github.com/jdx/mise/pull/3884) + +### ๐Ÿ“š Documentation + +- syntax in `mise watch` by [@jdx](https://github.com/jdx) in [beab480](https://github.com/jdx/mise/commit/beab48029b3e7a91047012b655f3efe4fd722acf) +- Update registry link by [@bmulholland](https://github.com/bmulholland) in [#3864](https://github.com/jdx/mise/pull/3864) +- clarify shims behaviour by [@syhol](https://github.com/syhol) in [#3881](https://github.com/jdx/mise/pull/3881) + +### ๐Ÿ” Other Changes + +- Fix sh code block by [@o-l-a-v](https://github.com/o-l-a-v) in [#3876](https://github.com/jdx/mise/pull/3876) +- remove unused versioned tarballs from mise.jdx.dev by [@jdx](https://github.com/jdx) in [48f1021](https://github.com/jdx/mise/commit/48f1021048646061e7cd85d9f9969946b00962a6) +- trim newline in banner by [@jdx](https://github.com/jdx) in [c8f2c90](https://github.com/jdx/mise/commit/c8f2c90111c5d20fe4586d59eb66f3bb2f8cfd9a) + +### New Contributors + +- @bmulholland made their first contribution in [#3864](https://github.com/jdx/mise/pull/3864) + ## [2024.12.22](https://github.com/jdx/mise/compare/v2024.12.21..v2024.12.22) - 2024-12-30 ### ๐Ÿš€ Features diff --git a/Cargo.lock b/Cargo.lock index 5b68bacb41..9d225bd925 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1280,7 +1280,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62d87141875739c4eb2b6a6e0c6dbd6f877ff3336953cdbf850b3dc920d3bf2f" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.5.0", "log", "once_cell", "pest", @@ -1346,9 +1346,9 @@ dependencies = [ [[package]] name = "fixedbitset" -version = "0.4.2" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flate2" @@ -1647,7 +1647,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.7.0", + "indexmap 2.5.0", "slab", "tokio", "tokio-util", @@ -1666,12 +1666,6 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -[[package]] -name = "hashbrown" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" - [[package]] name = "heck" version = "0.4.1" @@ -2160,12 +2154,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", - "hashbrown 0.15.2", + "hashbrown 0.14.5", "serde", ] @@ -2620,7 +2614,7 @@ dependencies = [ [[package]] name = "mise" -version = "2024.12.22" +version = "2024.12.23" dependencies = [ "base64 0.22.1", "built", @@ -2657,7 +2651,7 @@ dependencies = [ "homedir", "humantime", "indenter", - "indexmap 2.7.0", + "indexmap 2.5.0", "indicatif", "indoc", "insta", @@ -3100,12 +3094,12 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +checksum = "c94eb96835f05ec51384814c9b2daef83f68486f67a0e2e9680e0f698dca808e" dependencies = [ "fixedbitset", - "indexmap 2.7.0", + "indexmap 2.5.0", ] [[package]] @@ -3605,7 +3599,7 @@ dependencies = [ "generic-array", "hex", "impl-tools", - "indexmap 2.7.0", + "indexmap 2.5.0", "rand", "regex", "serde", @@ -3978,7 +3972,7 @@ version = "1.0.134" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.5.0", "itoa", "memchr", "ryu", @@ -4026,7 +4020,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.7.0", + "indexmap 2.5.0", "serde", "serde_derive", "serde_json", @@ -4052,7 +4046,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.5.0", "itoa", "ryu", "serde", @@ -4726,7 +4720,7 @@ version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.5.0", "serde", "serde_spanned", "toml_datetime", @@ -5034,7 +5028,7 @@ checksum = "ab923f719b3048bd1cd2fb738fca978ed2a60756ce15cdad639fc40645adad9c" dependencies = [ "clap", "heck 0.5.0", - "indexmap 2.7.0", + "indexmap 2.5.0", "itertools 0.13.0", "kdl", "log", @@ -5104,7 +5098,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4c44e4ec114bba1eeed55bc3a47ced72545cd2ffa04ce0ec0bdba1fb535807d" dependencies = [ "homedir", - "indexmap 2.7.0", + "indexmap 2.5.0", "itertools 0.13.0", "log", "mlua", @@ -5775,7 +5769,7 @@ dependencies = [ "displaydoc", "flate2", "hmac", - "indexmap 2.7.0", + "indexmap 2.5.0", "lzma-rs", "memchr", "pbkdf2", diff --git a/Cargo.toml b/Cargo.toml index 4bb49cf966..23178965e7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mise" -version = "2024.12.22" +version = "2024.12.23" edition = "2021" description = "The front-end to your dev env" authors = ["Jeff Dickey (@jdx)"] diff --git a/README.md b/README.md index 94044f1e57..9fcbcf72d9 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Install mise (other methods [here](https://mise.jdx.dev/getting-started.html)): ```sh-session $ curl https://mise.run | sh $ ~/.local/bin/mise --version -2024.12.22 macos-arm64 (a1b2d3e 2024-12-30) +2024.12.23 macos-arm64 (a1b2d3e 2024-12-30) ``` or install a specific a version: diff --git a/aqua-registry b/aqua-registry index 4c8586025a..fc91393364 160000 --- a/aqua-registry +++ b/aqua-registry @@ -1 +1 @@ -Subproject commit 4c8586025a865ed0ea0e7aa47762a184afb6c250 +Subproject commit fc91393364ded9e389918bc8166704363667de98 diff --git a/completions/_mise b/completions/_mise index 144d9a9ff8..9807a8d770 100644 --- a/completions/_mise +++ b/completions/_mise @@ -27,11 +27,11 @@ _mise() { zstyle ":completion:${curcontext}:" cache-policy _usage_mise_cache_policy fi - if ( [[ -z "${_usage_spec_mise_2024_12_22:-}" ]] || _cache_invalid _usage_spec_mise_2024_12_22 ) \ - && ! _retrieve_cache _usage_spec_mise_2024_12_22; + if ( [[ -z "${_usage_spec_mise_2024_12_23:-}" ]] || _cache_invalid _usage_spec_mise_2024_12_23 ) \ + && ! _retrieve_cache _usage_spec_mise_2024_12_23; then spec="$(mise usage)" - _store_cache _usage_spec_mise_2024_12_22 spec + _store_cache _usage_spec_mise_2024_12_23 spec fi _arguments "*: :(($(usage complete-word --shell zsh -s "$spec" -- "${words[@]}" )))" diff --git a/completions/mise.bash b/completions/mise.bash index bc99a6ad4a..a432decb50 100644 --- a/completions/mise.bash +++ b/completions/mise.bash @@ -6,14 +6,14 @@ _mise() { return 1 fi - if [[ -z ${_usage_spec_mise_2024_12_22:-} ]]; then - _usage_spec_mise_2024_12_22="$(mise usage)" + if [[ -z ${_usage_spec_mise_2024_12_23:-} ]]; then + _usage_spec_mise_2024_12_23="$(mise usage)" fi local cur prev words cword was_split comp_args _comp_initialize -n : -- "$@" || return # shellcheck disable=SC2207 - _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2024_12_22}" --cword="$cword" -- "${words[@]}")" + _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2024_12_23}" --cword="$cword" -- "${words[@]}")" _comp_ltrim_colon_completions "$cur" # shellcheck disable=SC2181 if [[ $? -ne 0 ]]; then diff --git a/completions/mise.fish b/completions/mise.fish index 744b2463dd..fd56d001c3 100644 --- a/completions/mise.fish +++ b/completions/mise.fish @@ -6,7 +6,7 @@ if ! command -v usage &> /dev/null return 1 end -if ! set -q _usage_spec_mise_2024_12_22 - set -g _usage_spec_mise_2024_12_22 (mise usage | string collect) +if ! set -q _usage_spec_mise_2024_12_23 + set -g _usage_spec_mise_2024_12_23 (mise usage | string collect) end -complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2024_12_22" -- (commandline -cop) (commandline -t))' +complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2024_12_23" -- (commandline -cop) (commandline -t))' diff --git a/default.nix b/default.nix index 1d3e44107b..d5371f2328 100644 --- a/default.nix +++ b/default.nix @@ -2,7 +2,7 @@ rustPlatform.buildRustPackage { pname = "mise"; - version = "2024.12.22"; + version = "2024.12.23"; src = lib.cleanSource ./.; diff --git a/packaging/rpm/mise.spec b/packaging/rpm/mise.spec index 746f6087ae..fbc6ca4794 100644 --- a/packaging/rpm/mise.spec +++ b/packaging/rpm/mise.spec @@ -1,6 +1,6 @@ Summary: The front-end to your dev env Name: mise -Version: 2024.12.22 +Version: 2024.12.23 Release: 1 URL: https://github.com/jdx/mise/ Group: System From bb7e022240c0e7019a595d093a33b414119e975f Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Mon, 30 Dec 2024 14:56:20 -0600 Subject: [PATCH 037/289] chore: add commented out cleanup of old CLIs --- scripts/publish-s3.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/publish-s3.sh b/scripts/publish-s3.sh index 3bbbfe957d..c45a6150e4 100755 --- a/scripts/publish-s3.sh +++ b/scripts/publish-s3.sh @@ -25,6 +25,10 @@ aws s3 cp artifacts/rpm/repodata/ "s3://$AWS_S3_BUCKET/rpm/repodata/" --cache-co aws s3 cp artifacts/deb/pool/ "s3://$AWS_S3_BUCKET/deb/pool/" --cache-control "$cache_week" --no-progress --recursive aws s3 cp artifacts/deb/dists/ "s3://$AWS_S3_BUCKET/deb/dists/" --cache-control "$cache_day" --no-progress --no-progress --recursive +# delete ancient CLIs +# since=`date --date '-3 years' +%F 2>/dev/null` +# aws s3api list-objects-v2 --bucket "$AWS_S3_BUCKET" --query 'Contents[?LastModified < `'"$since"'`]' | jq -r '.[].Key' | grep "^(deb|rpm)\/" + export CLOUDFLARE_ACCOUNT_ID=6e243906ff257b965bcae8025c2fc344 # jdx.dev From cc88dca50e8e0dac94dbb83d0ce1ebcfc38a1ec4 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Mon, 30 Dec 2024 18:21:58 -0600 Subject: [PATCH 038/289] fix: switch back to asdf for gradle #3889 --- docs/registry.md | 2 +- registry.toml | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/registry.md b/docs/registry.md index 29b934fdf9..7bc2138b94 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -305,7 +305,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | goss | [aqua:goss-org/goss](https://github.com/goss-org/goss) [asdf:raimon49/asdf-goss](https://github.com/raimon49/asdf-goss) | | gotestsum | [aqua:gotestyourself/gotestsum](https://github.com/gotestyourself/gotestsum) [asdf:pmalek/mise-gotestsum](https://github.com/pmalek/mise-gotestsum) | | graalvm | [asdf:asdf-community/asdf-graalvm](https://github.com/asdf-community/asdf-graalvm) | -| gradle | [aqua:gradle/gradle-distributions](https://github.com/gradle/gradle-distributions) [asdf:rfrancis/asdf-gradle](https://github.com/rfrancis/asdf-gradle) [vfox:version-fox/vfox-gradle](https://github.com/version-fox/vfox-gradle) | +| gradle | [asdf:rfrancis/asdf-gradle](https://github.com/rfrancis/asdf-gradle) [vfox:version-fox/vfox-gradle](https://github.com/version-fox/vfox-gradle) [aqua:gradle/gradle-distributions](https://github.com/gradle/gradle-distributions) | | gradle-profiler | [asdf:joschi/asdf-gradle-profiler](https://github.com/joschi/asdf-gradle-profiler) | | grails | [asdf:weibemoura/asdf-grails](https://github.com/weibemoura/asdf-grails) | | grain | [asdf:cometkim/asdf-grain](https://github.com/cometkim/asdf-grain) | diff --git a/registry.toml b/registry.toml index a5dadfcfb2..4c34cb4834 100644 --- a/registry.toml +++ b/registry.toml @@ -759,11 +759,12 @@ gotestsum.backends = [ ] graalvm.backends = ["asdf:asdf-community/asdf-graalvm"] gradle.backends = [ - "aqua:gradle/gradle-distributions", "asdf:rfrancis/asdf-gradle", - "vfox:version-fox/vfox-gradle" + "vfox:version-fox/vfox-gradle", + "aqua:gradle/gradle-distributions" ] gradle.depends = ["java"] +# gradle.test = ["gradle -V", "Gradle {{version}}"] TODO: make test-tool use dependencies gradle-profiler.backends = ["asdf:joschi/asdf-gradle-profiler"] grails.backends = ["asdf:weibemoura/asdf-grails"] grain.backends = ["asdf:cometkim/asdf-grain"] From b04359f54a167e655d84b95dfe04339494845346 Mon Sep 17 00:00:00 2001 From: mise-en-dev Date: Mon, 30 Dec 2024 18:40:37 -0600 Subject: [PATCH 039/289] chore: release 2024.12.24 (#3887) --- CHANGELOG.md | 10 ++++++++++ Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 2 +- aqua-registry | 2 +- completions/_mise | 6 +++--- completions/mise.bash | 6 +++--- completions/mise.fish | 6 +++--- default.nix | 2 +- packaging/rpm/mise.spec | 2 +- 10 files changed, 25 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 99ac53e0d1..d3fde29d26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## [2024.12.24](https://github.com/jdx/mise/compare/v2024.12.23..v2024.12.24) - 2024-12-31 + +### ๐Ÿ› Bug Fixes + +- switch back to asdf for gradle by [@jdx](https://github.com/jdx) in [cc88dca](https://github.com/jdx/mise/commit/cc88dca50e8e0dac94dbb83d0ce1ebcfc38a1ec4) + +### ๐Ÿ” Other Changes + +- add commented out cleanup of old CLIs by [@jdx](https://github.com/jdx) in [bb7e022](https://github.com/jdx/mise/commit/bb7e022240c0e7019a595d093a33b414119e975f) + ## [2024.12.23](https://github.com/jdx/mise/compare/v2024.12.22..v2024.12.23) - 2024-12-30 ### ๐Ÿ› Bug Fixes diff --git a/Cargo.lock b/Cargo.lock index 9d225bd925..18143be8c9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2614,7 +2614,7 @@ dependencies = [ [[package]] name = "mise" -version = "2024.12.23" +version = "2024.12.24" dependencies = [ "base64 0.22.1", "built", diff --git a/Cargo.toml b/Cargo.toml index 23178965e7..68b9a5481e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mise" -version = "2024.12.23" +version = "2024.12.24" edition = "2021" description = "The front-end to your dev env" authors = ["Jeff Dickey (@jdx)"] diff --git a/README.md b/README.md index 9fcbcf72d9..0c9d3492c2 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Install mise (other methods [here](https://mise.jdx.dev/getting-started.html)): ```sh-session $ curl https://mise.run | sh $ ~/.local/bin/mise --version -2024.12.23 macos-arm64 (a1b2d3e 2024-12-30) +2024.12.24 macos-arm64 (a1b2d3e 2024-12-31) ``` or install a specific a version: diff --git a/aqua-registry b/aqua-registry index fc91393364..f66ddfb1a1 160000 --- a/aqua-registry +++ b/aqua-registry @@ -1 +1 @@ -Subproject commit fc91393364ded9e389918bc8166704363667de98 +Subproject commit f66ddfb1a141a1645bc7a0cf5c68526ecca91a52 diff --git a/completions/_mise b/completions/_mise index 9807a8d770..79c5c9f5fb 100644 --- a/completions/_mise +++ b/completions/_mise @@ -27,11 +27,11 @@ _mise() { zstyle ":completion:${curcontext}:" cache-policy _usage_mise_cache_policy fi - if ( [[ -z "${_usage_spec_mise_2024_12_23:-}" ]] || _cache_invalid _usage_spec_mise_2024_12_23 ) \ - && ! _retrieve_cache _usage_spec_mise_2024_12_23; + if ( [[ -z "${_usage_spec_mise_2024_12_24:-}" ]] || _cache_invalid _usage_spec_mise_2024_12_24 ) \ + && ! _retrieve_cache _usage_spec_mise_2024_12_24; then spec="$(mise usage)" - _store_cache _usage_spec_mise_2024_12_23 spec + _store_cache _usage_spec_mise_2024_12_24 spec fi _arguments "*: :(($(usage complete-word --shell zsh -s "$spec" -- "${words[@]}" )))" diff --git a/completions/mise.bash b/completions/mise.bash index a432decb50..52a7c18aea 100644 --- a/completions/mise.bash +++ b/completions/mise.bash @@ -6,14 +6,14 @@ _mise() { return 1 fi - if [[ -z ${_usage_spec_mise_2024_12_23:-} ]]; then - _usage_spec_mise_2024_12_23="$(mise usage)" + if [[ -z ${_usage_spec_mise_2024_12_24:-} ]]; then + _usage_spec_mise_2024_12_24="$(mise usage)" fi local cur prev words cword was_split comp_args _comp_initialize -n : -- "$@" || return # shellcheck disable=SC2207 - _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2024_12_23}" --cword="$cword" -- "${words[@]}")" + _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2024_12_24}" --cword="$cword" -- "${words[@]}")" _comp_ltrim_colon_completions "$cur" # shellcheck disable=SC2181 if [[ $? -ne 0 ]]; then diff --git a/completions/mise.fish b/completions/mise.fish index fd56d001c3..affd899615 100644 --- a/completions/mise.fish +++ b/completions/mise.fish @@ -6,7 +6,7 @@ if ! command -v usage &> /dev/null return 1 end -if ! set -q _usage_spec_mise_2024_12_23 - set -g _usage_spec_mise_2024_12_23 (mise usage | string collect) +if ! set -q _usage_spec_mise_2024_12_24 + set -g _usage_spec_mise_2024_12_24 (mise usage | string collect) end -complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2024_12_23" -- (commandline -cop) (commandline -t))' +complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2024_12_24" -- (commandline -cop) (commandline -t))' diff --git a/default.nix b/default.nix index d5371f2328..ff86992c90 100644 --- a/default.nix +++ b/default.nix @@ -2,7 +2,7 @@ rustPlatform.buildRustPackage { pname = "mise"; - version = "2024.12.23"; + version = "2024.12.24"; src = lib.cleanSource ./.; diff --git a/packaging/rpm/mise.spec b/packaging/rpm/mise.spec index fbc6ca4794..1458bdbd6a 100644 --- a/packaging/rpm/mise.spec +++ b/packaging/rpm/mise.spec @@ -1,6 +1,6 @@ Summary: The front-end to your dev env Name: mise -Version: 2024.12.23 +Version: 2024.12.24 Release: 1 URL: https://github.com/jdx/mise/ Group: System From d52f32c802d77af32036ed9ea575317be6c2f5fb Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Tue, 31 Dec 2024 04:24:23 -0600 Subject: [PATCH 040/289] Update installing-mise.md --- docs/installing-mise.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/installing-mise.md b/docs/installing-mise.md index 5b426d9a24..abdaf32a68 100644 --- a/docs/installing-mise.md +++ b/docs/installing-mise.md @@ -287,6 +287,17 @@ this is not necessary. See [`MISE_FISH_AUTO_ACTIVATE=1`](/configuration#mise_fish_auto_activate1) for more information. ::: +### Powershell + +::: warning +See [about_Profiles](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_profiles) docs to find your actual profile location. +You will need to first create the parent directory if it does not exist. +::: + +```pwsh +echo '~/.local/bin/mise activate mise activate pwsh | Out-String | Invoke-Expression' >> $HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 +``` + ### Nushell Nu From b66f7cac26186b1f935c11e296647baebf1a20f1 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Tue, 31 Dec 2024 04:55:27 -0600 Subject: [PATCH 041/289] Update installing-mise.md --- docs/installing-mise.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installing-mise.md b/docs/installing-mise.md index abdaf32a68..acb4b4813a 100644 --- a/docs/installing-mise.md +++ b/docs/installing-mise.md @@ -294,7 +294,7 @@ See [about_Profiles](https://learn.microsoft.com/en-us/powershell/module/microso You will need to first create the parent directory if it does not exist. ::: -```pwsh +```powershell echo '~/.local/bin/mise activate mise activate pwsh | Out-String | Invoke-Expression' >> $HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 ``` From 156db1130c2757aaaf6e53686148d8b9b0791ae7 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Tue, 31 Dec 2024 12:12:14 -0600 Subject: [PATCH 042/289] docs: Update LICENSE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿพ --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index f5997f2a5d..5333824e7f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 Jeff Dickey +Copyright (c) 2025 Jeff Dickey Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 47aaa3e3f5dfbc69d5c28e99956c2347bcd1ffae Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Tue, 31 Dec 2024 20:57:19 +0100 Subject: [PATCH 043/289] fix: panic when setting config value (#3823) --- e2e/cli/test_config_set | 15 +++++++++++++++ src/cli/config/set.rs | 41 ++++++++++++++++++++++++++++++++--------- 2 files changed, 47 insertions(+), 9 deletions(-) create mode 100644 e2e/cli/test_config_set diff --git a/e2e/cli/test_config_set b/e2e/cli/test_config_set new file mode 100644 index 0000000000..cfcb86bff8 --- /dev/null +++ b/e2e/cli/test_config_set @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +echo '[tools.node] +version = "latest"' >mise.toml + +assert "cat mise.toml" '[tools.node] +version = "latest"' + +mise config set tools.node.postinstall 'corepack enable' +assert "mise config get tools.node.postinstall" "corepack enable" +assert "mise config get tools.node.version" "latest" +mise config set env._.python.venv.path '.venv' +assert "mise config get env._.python.venv.path" ".venv" +mise config set env._.python.venv.create true +assert "mise config get env._.python.venv.create" "true" diff --git a/src/cli/config/set.rs b/src/cli/config/set.rs index 3b86539665..b0e8062fcc 100644 --- a/src/cli/config/set.rs +++ b/src/cli/config/set.rs @@ -51,14 +51,27 @@ impl ConfigSet { let mut config: toml_edit::DocumentMut = std::fs::read_to_string(&file)?.parse()?; let mut container = config.as_item_mut(); let parts = self.key.split('.').collect::>(); - for key in parts.iter().take(parts.len() - 1) { - container = container.as_table_mut().unwrap().entry(key).or_insert({ - let mut t = toml_edit::Table::new(); - t.set_implicit(true); - toml_edit::Item::Table(t) - }); - } let last_key = parts.last().unwrap(); + for (idx, key) in parts.iter().take(parts.len() - 1).enumerate() { + container = container + .as_table_like_mut() + .unwrap() + .entry(key) + .or_insert({ + let mut t = toml_edit::Table::new(); + t.set_implicit(true); + toml_edit::Item::Table(t) + }); + // if the key is a tool with a simple value, we want to convert it to a inline table preserving the version + let is_simple_tool_version = + self.key.starts_with("tools.") && idx == 1 && !container.is_table_like(); + if is_simple_tool_version { + let mut inline_table = toml_edit::InlineTable::new(); + inline_table.insert("version", container.as_value().unwrap().clone()); + *container = + toml_edit::Item::Value(toml_edit::Value::InlineTable(inline_table)); + } + } let type_to_use = match self.type_ { TomlValueTypes::Infer => { @@ -78,7 +91,10 @@ impl ConfigSet { SettingsType::ListString => TomlValueTypes::List, SettingsType::ListPath => TomlValueTypes::List, }, - None => TomlValueTypes::String, + None => match self.value.as_str() { + "true" | "false" => TomlValueTypes::Bool, + _ => TomlValueTypes::String, + }, } } _ => self.type_, @@ -99,7 +115,14 @@ impl ConfigSet { TomlValueTypes::Infer => bail!("Type not found"), }; - container.as_table_mut().unwrap().insert(last_key, value); + container + .as_table_like_mut() + .unwrap_or({ + let mut t = toml_edit::Table::new(); + t.set_implicit(true); + toml_edit::Item::Table(t).as_table_like_mut().unwrap() + }) + .insert(last_key, value); let raw = config.to_string(); MiseToml::from_str(&raw, &file)?; From f8916d4cbd09fbbc8142bf25b4d586e146d19a21 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Tue, 31 Dec 2024 14:17:05 -0600 Subject: [PATCH 044/289] docs: updated roadmap --- docs/roadmap.md | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/docs/roadmap.md b/docs/roadmap.md index 291d3cf7c1..b3813070fb 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -3,19 +3,28 @@ Issues marked ["enhancements"](https://github.com/jdx/mise/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement) are the best way to read about ideas for future -functionality. As far as general scope however, these are likely going to be focuses for 2024: +functionality. As far as general scope however, these are likely going to be focuses for 2025: -- Tasks - this is the newest headline feature of mise and needs to be refined, tested, and iterated - on before it can come out of experimental -- Documentation website - we've outgrown what is mostly a single README -- Supply chain hardening - securing mise is very important and this topic has had a lot of interest +- Removing experimental flag on features - several features are still marked as experimental. My hope + is all features will be GA by the end of 2025. +- Supply chain hardening - in 2024 security was greatly enhanced in mise through migrating to aqua/ubi + backends for tools in the registry, but about 1/3 of the tools still rely on asdf plugins. Aqua + tools also can benefit from further hardening through the use of slsa-verify and cosign. from the community. We plan to make several improvements on this front -- Improved python development - better virtualenv integration, precompiled python binaries, and - other areas are topics that frequently come up to improve -- Improved plugin development - it's unclear what we'll do exactly but in general we want to make - the experience of vending tools for asdf/mise to be better and safer. -- GUI/TUI - While we're all big CLI fans, it still would be great to better visualize what tools are - available, what your configuration is, and other things via some kind of UI. +- Tasks improvements - tasks came out of experimental at the end of 2024 but there are still features + that I'd like to see from tasks such as prompts and error handling. +- Hook improvements - hooks are very new in mise and still experimental. I suspect the design of hooks + will change a bit as we learn more about how they are used. It's unclear what exactly will happen here right now. +- Improved python development - python improved a lot with better venv support and the precompiled + binaries provided by Astral. As users are adopting this more we're learning about how mise can still + be further improved for python developmentโ€”which is the most complicated tool to support in mise by far. + Where possible, the plan is to leverage uv as much as we can since they're the real experts when it + comes to the python ecosystem. +- Further Windows support - non-WSL Windows support was added in 2024 but it is not heavily used. There are + definitely bugs and gaps with Windows remaining but we should be able to get Windows much closer to UNIX + by the end of the year. More testing on Windows would be a big help here. +- GUI/TUI - A few commands in mise make use of a TUI like `mise run`, `mise use`, and `mise up -i`, + I'd like to see more done with these type of UIs in 2025. ## Versioning From 7521cc9a40b386369ebb5dbdb0087b07c3ee40ca Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Tue, 31 Dec 2024 17:42:34 -0600 Subject: [PATCH 045/289] Update index.md --- docs/environments/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/environments/index.md b/docs/environments/index.md index 0fe79aff57..afb34a65f4 100644 --- a/docs/environments/index.md +++ b/docs/environments/index.md @@ -50,7 +50,7 @@ Variables can be redacted from the output by setting `redact = true`: ```toml [env] SECRET = { value = "my_secret", redact = true } -_.file = { path = [".env.json"], tools = true } # directives may also set redact = true +_.file = { path = [".env.json"], redact = true, tools = true } ``` ## `env._` directives From 16eaf42fc23d0566cf13dabb7307c680888b629f Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Tue, 31 Dec 2024 20:02:41 -0600 Subject: [PATCH 046/289] Update index.md --- docs/environments/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/environments/index.md b/docs/environments/index.md index afb34a65f4..452d49abf6 100644 --- a/docs/environments/index.md +++ b/docs/environments/index.md @@ -50,7 +50,7 @@ Variables can be redacted from the output by setting `redact = true`: ```toml [env] SECRET = { value = "my_secret", redact = true } -_.file = { path = [".env.json"], redact = true, tools = true } +_.file = { path = [".env.json"], redact = true } ``` ## `env._` directives From 8579ee7ea5e4f687dd3c7a2037020b378a101f65 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 1 Jan 2025 01:29:24 -0600 Subject: [PATCH 047/289] Update faq.md --- docs/faq.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/faq.md b/docs/faq.md index 544b18b079..b5e6cc6a7b 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -150,17 +150,19 @@ should be usable in mise. The commands in mise are slightly different, such as `mise install node@20.0.0` vs `asdf install node 20.0.0`โ€”this is done so multiple tools can be specified at once. However, asdf-style syntax is still supported: (`mise install node 20.0.0`). This is the case for most commands, though the help for the command may -say that asdf-style syntax is supported. +say that asdf-style syntax is supported. When in doubt, just try asdf syntax and see if it worksโ€”it probably does. -When in doubt, just try asdf syntax and see if it works. If it doesn't open a ticket. It may -not be possible to support every command identically, but -we should attempt to make things as consistent as possible. +UPDATE (2025-01-01): mise was designed to be compatible with the asdf written in bash (<=0.15). The new asdf written in go (>=0.16) +has commands mise does not support like `asdf set`. `mise set` is an existing command that is completely different than `asdf set`โ€”in mise that sets env vars. This isn't important for usability reasons so much as making it so plugins continue to work that -call asdf commands. +call asdf commands inside of the plugin code. Using commands like `mise use` may output `.tool-versions` files that are not compatible with asdf, -such as using fuzzy versions. You can set `MISE_PIN=1` to make it output asdf-compatible versions. +such as using fuzzy versions. You can set `--pin` or `MISE_PIN=1` to make `mise use` output asdf-compatible versions +in `.tool-versions`. Alternatively, you can have `mise.toml` and `.tool-versions` sitting side-by-side. `mise.toml` tools +will override tools defined in a `.tool-versions` in the same directory. + That said, in general compatibility with asdf is no longer a design goal. It's long been the case that there is no reason to prefer asdf to mise so users should migrate. While plenty of users have teams which use both in tandem, issues with such a setup are unlikely to be prioritized. From a098ceb189998aff731c3f4d6a1c4c39bdf4b0d4 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 1 Jan 2025 02:29:34 -0600 Subject: [PATCH 048/289] Update comparison-to-asdf.md --- docs/dev-tools/comparison-to-asdf.md | 48 +++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/docs/dev-tools/comparison-to-asdf.md b/docs/dev-tools/comparison-to-asdf.md index 68fad372f3..06543a7595 100644 --- a/docs/dev-tools/comparison-to-asdf.md +++ b/docs/dev-tools/comparison-to-asdf.md @@ -4,7 +4,8 @@ mise can be used as a drop-in replacement for asdf. It supports the same `.tool- you may have used with asdf and can use asdf plugins through the [asdf backend](/dev-tools/backends/asdf.html). It will not, however, reuse existing asdf directories -(so you'll need to either reinstall them or move them), and 100% compatibility is not a design goal. +(so you'll need to either reinstall them or move them), and 100% compatibility is not a design goal. That said, +if you're coming from asdf-bash (0.15 and below), mise actually has [fewer breaking changes than asdf-go (0.16 and above)](https://asdf-vm.com/guide/upgrading-from-v0-15-to-v0-16.html) despite 100% compatibility not being a design goal of mise. Casual users coming from asdf have generally found mise to just be a faster, easier to use asdf. @@ -17,6 +18,32 @@ are major portions of mise that have no asdf equivalent. If you're moving from asdf to mise, please review [#how-do-i-migrate-from-asdf](/faq.html#how-do-i-migrate-from-asdf) for guidance. +## asdf in go (0.16+) + +asdf has gone through a rewrite in go. Because this is quite new as of this writing (2025-01-01), I'm going to keep information about 0.16+ asdf versions (which I call "asdf-go" vs "asdf-bash") in this section and the rest of this doc will apply to asdf-bash (0.15 and below). + +In terms of performance, mise is still faster than the go asdf, however the difference is much closer. asdf is likely fast enough that the difference in overhead between asdf-go and mise may not even be enough to notice for youโ€”after all there are plenty of people still using asdf-bash that claim they don't even notice how slow it is (don't ask me how): + +![GgAQJJmWIAAUlec](https://github.com/user-attachments/assets/05689925-396d-41f3-bcd1-7b3b1bf6c2fa) + +I don't think performance is a good enough reason to switch though now that asdf-go is a thing. It's a reason, but it's a minor one. The improved security in mise, better DX, and lack of reliance on shims. + +Given they went through the trouble of rewriting asdfโ€”that's also an indication they want to keep working on it (which is awesome that they're doing that btw). This does mean that some of what's written here may go out of date if they address some of the problems +with asdf. + +## Supply chain security + +asdf plugins are not very secure. This is explained on the [asdf backend page](https://mise.jdx.dev/dev-tools/backends/asdf.html), but the quick explanation is that asdf plugins involve shell code which can essentially do anything on your machine. It's dangerous code. What's worse is asdf plugins are rarely written by the tool vendor (who you need to trust anyway to use the tool), which means for every asdf plugin you use you'll be trusting a random developer to not go rogue and to not get hacked themselves and publish changes to a plugin with an exploit. + +While mise still uses asdf plugins for some tools, the count is (as of this writing, 2025-01-01) ~35% of tools in the default mise registry use asdf as the primary backend. aqua/ubi are the preferred backends, however not all tools can work with aqua or ubiโ€”it's basically just tools that have GitHub Releases of precompiled binaries that can. If something needs to be compiled or uses features like custom env vars, it needs to use an asdf plugin. (vfox can also be used, but vfox suffers from the same supply-chain issue as asdf). + +We've been working on reducing this number and hopefully by the end of 2025 we will have either moved everything over to safer backends or forked/moved all the asdf plugins into the [mise-plugins org](https://github.com/mise-plugins). The mise-plugins org also solves this issue for us +since that org is owned by meโ€”a developer going rogue would need to submit a PR containing an exploit that I would need to first accept. Of course, that's [no guarantee nothing could slip in](https://www.puppet.com/blog/xz-backdoor), but it's certainly better than the wild west of asdf plugins. Given that asdf plugins rarely need patches of any kind it's relatively easy for me to audit each +change. + +Most core tools and some aqua tools have support for extra security features like gpg verification, slsa-verify, cosign, or minisign. I try to adopt whatever the vendor provides to validate what gets fetched is genuine. This is an area that mise will perpetually need contributors helping though. If you notice a tool doesn't have any verification (you can see mise verifying during installs if you set `--verbose`), see if the vendor offers something like gpg signed checksums or slsa provenance. If so, it should just be a matter of +adding [configuration](https://aquaproj.github.io/docs/reference/security/cosign-slsa/) to the [aqua-registry](https://github.com/aquaproj/aqua-registry). + ## UX ![CleanShot 2024-01-28 at 12 36 20@2x](https://github.com/jdx/mise-docs/assets/216188/47f381d7-1566-4b78-9260-3b85a21dd6ec) @@ -105,6 +132,8 @@ mise install node 20.0.0 mise local node 20.0.0 ``` +UPDATE (2025-01-01): asdf-go (0.16+) actually got rid of `asdf global|local` entirely in favor of `asdf set` which we can't support since we already have a command named `mise set`. mise command compatibility will likely not be as good with asdf-go 0.16+. + It's not recommended though. You almost always want to modify config files and install things so `mise use node@20` saves an extra command. Also, the "@" in the command is preferred since it allows you to install multiple tools at once: `mise use|install node@20 node@18`. Also, there are edge cases @@ -122,3 +151,20 @@ directly from cargo and npm: mise use -g cargo:ripgrep@14 mise use -g npm:prettier@3 ``` + +## Other considerations + +* [mise seems to be far more popular than asdf at least on homebrew](https://formulae.brew.sh/analytics/install-on-request/30d/) +* despite asdf having a 9-year leadโ€”I believe I've put much more hours into mise than asdf developers have put into asdf. As a result, mise is pretty complete, you won't find issues/discussions with loads of +1's for mise like you will for [asdf](https://github.com/asdf-vm/asdf/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc). +* mise's stargazer count is growing more rapidlyโ€”it's likely only a few more months until it overtakes asdf in terms of total stars: + +![star-history-202511 (1)](https://github.com/user-attachments/assets/3f3d2484-99fb-434e-931b-4291f2f96761) + +## asdf was a great tool, and I hope it becomes a great one again + +I owe a lot to asdf. Without it mise either wouldn't exist or it wouldn't be nearly as good. The plugin model (while problematic for security reasons) is quite clever and I don't think I would've come up with something quite so elegant. I really appreciate the hard +work asdf developers have put in over the years. This doc feels like throwing shade and I hate that, but I also think it's more important to inform users that asdf is not a good choice anymore and they should know why. + +While I think that asdf has a lot of problems (I wouldn't have started writing mise if that wasn't the case), my hope is that they address them and are able to make asdf into a great tool again. + +I think asdf still has the edge in one important area: it's simpler. Users discovering mise are unsurprisingly intimidated by everything mise does. The simple fact that mise has a task runner is enough to put people off and I don't blame them. The docs for mise are huge and take a long time to go through. Even just the tools portion of mise is far more complex in every way (docs, code, config) than asdf. I think there are users out there that would prefer a more lightweight alternative to mise and I think asdf could be that but right now there are just too many problems. Even though it's lightweight, it's actually quite a bit more difficult to use. From 00147db8ed0cfe59d04b17618feb406329789de0 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 1 Jan 2025 02:31:16 -0600 Subject: [PATCH 049/289] Update asdf.md --- docs/dev-tools/backends/asdf.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/dev-tools/backends/asdf.md b/docs/dev-tools/backends/asdf.md index 80ef19f427..731aac0438 100644 --- a/docs/dev-tools/backends/asdf.md +++ b/docs/dev-tools/backends/asdf.md @@ -11,5 +11,3 @@ need to set env vars other than PATH. ## Writing asdf plugins for mise See the asdf documentation for more information on [writing plugins](https://asdf-vm.com/plugins/create.html). - -_TODO: document special features only available in mise._ From 2d71dd4f5a184ce7d3a695085194a2a3f4700664 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 1 Jan 2025 02:40:01 -0600 Subject: [PATCH 050/289] Update comparison-to-asdf.md --- docs/dev-tools/comparison-to-asdf.md | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/docs/dev-tools/comparison-to-asdf.md b/docs/dev-tools/comparison-to-asdf.md index 06543a7595..07a42db1a4 100644 --- a/docs/dev-tools/comparison-to-asdf.md +++ b/docs/dev-tools/comparison-to-asdf.md @@ -26,23 +26,18 @@ In terms of performance, mise is still faster than the go asdf, however the diff ![GgAQJJmWIAAUlec](https://github.com/user-attachments/assets/05689925-396d-41f3-bcd1-7b3b1bf6c2fa) -I don't think performance is a good enough reason to switch though now that asdf-go is a thing. It's a reason, but it's a minor one. The improved security in mise, better DX, and lack of reliance on shims. +I don't think performance is a good enough reason to switch though now that asdf-go is a thing. It's a reason, but it's a minor one. The improved security in mise, better DX, and lack of reliance on shims are all more important than performance. Given they went through the trouble of rewriting asdfโ€”that's also an indication they want to keep working on it (which is awesome that they're doing that btw). This does mean that some of what's written here may go out of date if they address some of the problems with asdf. ## Supply chain security -asdf plugins are not very secure. This is explained on the [asdf backend page](https://mise.jdx.dev/dev-tools/backends/asdf.html), but the quick explanation is that asdf plugins involve shell code which can essentially do anything on your machine. It's dangerous code. What's worse is asdf plugins are rarely written by the tool vendor (who you need to trust anyway to use the tool), which means for every asdf plugin you use you'll be trusting a random developer to not go rogue and to not get hacked themselves and publish changes to a plugin with an exploit. +asdf plugins are not secure. This is explained in [SECURITY.md](https://github.com/jdx/mise/blob/main/SECURITY.md), but the quick explanation is that asdf plugins involve shell code which can essentially do anything on your machine. It's dangerous code. What's worse is asdf plugins are rarely written by the tool vendor (who you need to trust anyway to use the tool), which means for every asdf plugin you use you'll be trusting a random developer to not go rogue and to not get hacked themselves and publish changes to a plugin with an exploit. -While mise still uses asdf plugins for some tools, the count is (as of this writing, 2025-01-01) ~35% of tools in the default mise registry use asdf as the primary backend. aqua/ubi are the preferred backends, however not all tools can work with aqua or ubiโ€”it's basically just tools that have GitHub Releases of precompiled binaries that can. If something needs to be compiled or uses features like custom env vars, it needs to use an asdf plugin. (vfox can also be used, but vfox suffers from the same supply-chain issue as asdf). +mise still uses asdf plugins for some tools, but we're actively reducing that count as well as moving things into the [mise-plugins org](https://github.com/mise-plugins). It looks like asdf has a similar model with their asdf-community org, but it isn't. asdf gives plugin authors commit access to their plugin in [asdf-community](https://github.com/asdf-community) when they move it in, which I feel like defeats the purpose of having a dedicated org in the first place. By the end of 2025 I would like for there to no longer be any asdf plugins in the registry that aren't owned by me. -We've been working on reducing this number and hopefully by the end of 2025 we will have either moved everything over to safer backends or forked/moved all the asdf plugins into the [mise-plugins org](https://github.com/mise-plugins). The mise-plugins org also solves this issue for us -since that org is owned by meโ€”a developer going rogue would need to submit a PR containing an exploit that I would need to first accept. Of course, that's [no guarantee nothing could slip in](https://www.puppet.com/blog/xz-backdoor), but it's certainly better than the wild west of asdf plugins. Given that asdf plugins rarely need patches of any kind it's relatively easy for me to audit each -change. - -Most core tools and some aqua tools have support for extra security features like gpg verification, slsa-verify, cosign, or minisign. I try to adopt whatever the vendor provides to validate what gets fetched is genuine. This is an area that mise will perpetually need contributors helping though. If you notice a tool doesn't have any verification (you can see mise verifying during installs if you set `--verbose`), see if the vendor offers something like gpg signed checksums or slsa provenance. If so, it should just be a matter of -adding [configuration](https://aquaproj.github.io/docs/reference/security/cosign-slsa/) to the [aqua-registry](https://github.com/aquaproj/aqua-registry). +I've also been adopting extra security verification steps when vendors offer that ability such as gpg verification on node installs, or slsa-verify/cosign checks on some aqua tools. ## UX From 0ea60d5fc66feb9c93a16f0b9a67c0a44aaf30c8 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 1 Jan 2025 02:46:11 -0600 Subject: [PATCH 051/289] Update SECURITY.md --- SECURITY.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/SECURITY.md b/SECURITY.md index 59115b383c..03a1920d29 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -33,6 +33,10 @@ if cosign/slsa-verifier is installed and the tool is configured to support it. T See the [aqua docs](https://aquaproj.github.io/docs/reference/security/cosign-slsa) for more on how this is configured in the [aqua registry](https://github.com/aquaproj/aqua-registry). +You will see this verification happen when tools are installed, setting `--verbose` when installing tools will help +make it easier to see if verification happened. If you happen to notice a tool offers gpg/slsa/cosign/minisign/etc, see if you can +make a PR to the aqua registry for mise to pick it up. + ## `mise.lock` mise has support for [lockfiles](https://mise.jdx.dev/configuration/settings.html#lockfile) which will @@ -56,6 +60,10 @@ Please contribute to this effort by checking if a tool works in ubi or aqua and in ubi or is missing from aqua, submit an issue or PR to the respective project to add it. New tools using asdf are not likely to be accepted unless they cannot be supported in any other way. +Another way I can reduce the risk of asdf plugins is by forking plugins into the [mise-plugins org](https://github.com/mise-plugins) which only +gives commit access to me and the mise advisory panel. On the [Roadmap for 2025](https://mise.jdx.dev/roadmap.html) is a goal to get +everything either off of asdf/vfox or at least into the mise-plugins org. + ## Supported Versions The only supported version is the most recent one. From 13ed2e04d2cf2d4ee0b5eeff34d8fd5b7db36797 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 1 Jan 2025 02:56:32 -0600 Subject: [PATCH 052/289] Update roadmap.md --- docs/roadmap.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/roadmap.md b/docs/roadmap.md index b3813070fb..79b0fddee4 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -8,9 +8,10 @@ functionality. As far as general scope however, these are likely going to be foc - Removing experimental flag on features - several features are still marked as experimental. My hope is all features will be GA by the end of 2025. - Supply chain hardening - in 2024 security was greatly enhanced in mise through migrating to aqua/ubi - backends for tools in the registry, but about 1/3 of the tools still rely on asdf plugins. Aqua - tools also can benefit from further hardening through the use of slsa-verify and cosign. - from the community. We plan to make several improvements on this front + backends for tools in the registry, but about 1/3 of the tools still rely on asdf plugins. + For tools we can't use aqua/ubi for, my goal is to fork them all into the [mise-plugins org](https://github.com/mise-plugins) by EOY + which only me and the advisory panel have commit access to. + Aqua tools also can benefit from further hardening through the use of slsa-verify and cosign and other verification methods. - Tasks improvements - tasks came out of experimental at the end of 2024 but there are still features that I'd like to see from tasks such as prompts and error handling. - Hook improvements - hooks are very new in mise and still experimental. I suspect the design of hooks From 62b1e518ecc0717e7c214ab80cd4658b6e65659e Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 1 Jan 2025 10:44:21 +0000 Subject: [PATCH 053/289] hide git-cliff other changes --- cliff.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/cliff.toml b/cliff.toml index 7d2ebb2314..55ec0b28d9 100644 --- a/cliff.toml +++ b/cliff.toml @@ -103,7 +103,6 @@ commit_parsers = [ { message = '^perf', group = "โšก Performance" }, { message = '^test', group = "๐Ÿงช Testing" }, { message = '^revert', group = "โ—€๏ธ Revert" }, - { message = '.', group = "๐Ÿ” Other Changes" }, ] # protect breaking changes from being skipped due to matching a skipping commit_parser protect_breaking_commits = false From 432a3e4cee22ee97d1648d28960e9c5bba94829e Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 1 Jan 2025 10:48:06 +0000 Subject: [PATCH 054/289] fix: add hidden settings/task --complete option (#3902) Fixes #3898 Fixes #3805 --- build.rs | 40 ++++++---- docs/cli/settings.md | 9 ++- docs/cli/settings/ls.md | 4 +- docs/dev-tools/comparison-to-asdf.md | 114 ++++++++++++++++----------- mise.usage.kdl | 24 ++++-- src/assets/mise-extra.usage.kdl | 6 +- src/cli/config/set.rs | 2 +- src/cli/settings/ls.rs | 32 +++++--- src/cli/settings/mod.rs | 45 +++-------- src/cli/tasks/ls.rs | 25 ++++-- src/config/settings.rs | 2 +- xtasks/fig/src/mise.ts | 6 +- 12 files changed, 179 insertions(+), 130 deletions(-) diff --git a/build.rs b/build.rs index 940aa50950..46bec1070e 100644 --- a/build.rs +++ b/build.rs @@ -166,8 +166,7 @@ fn codegen_registry() { fn codegen_settings() { let out_dir = env::var_os("OUT_DIR").unwrap(); let dest_path = Path::new(&out_dir).join("settings.rs"); - let mut lines = vec![r#" -#[derive(Config, Default, Debug, Clone, Serialize)] + let mut lines = vec![r#"#[derive(Config, Default, Debug, Clone, Serialize)] #[config(partial_attr(derive(Clone, Serialize, Default)))] pub struct Settings {"# .to_string()]; @@ -246,11 +245,11 @@ pub struct Settings {"# .collect::>(); for (child, props) in &nested_settings { lines.push(format!( - r#"#[derive(Config, Default, Debug, Clone, Serialize)] + r#" +#[derive(Config, Default, Debug, Clone, Serialize)] #[config(partial_attr(derive(Clone, Serialize, Default)))] #[config(partial_attr(serde(deny_unknown_fields)))] -pub struct Settings{name} {{ -"#, +pub struct Settings{name} {{"#, name = child.to_upper_camel_case() )); @@ -262,19 +261,24 @@ pub struct Settings{name} {{ lines.push( r#" -pub static SETTINGS_META: Lazy> = Lazy::new(|| { - indexmap!{ - "# - .to_string(), +pub static SETTINGS_META: Lazy> = Lazy::new(|| { + indexmap!{"# + .to_string(), ); for (name, props) in &settings { let props = props.as_table().unwrap(); if let Some(type_) = props.get("type").map(|v| v.as_str().unwrap()) { lines.push(format!( - r#" "{name}".to_string() => SettingsMeta {{ - type_: SettingsType::{type_}, - }},"#, + r#" "{name}" => SettingsMeta {{ + type_: SettingsType::{type_},"#, )); + if let Some(description) = props.get("description") { + let description = description.as_str().unwrap().to_string(); + lines.push(format!( + r####" description: r###"{description}"###,"#### + )); + } + lines.push(" },".to_string()); } } for (name, props) in &nested_settings { @@ -282,11 +286,17 @@ pub static SETTINGS_META: Lazy> = Lazy::new(|| { let props = props.as_table().unwrap(); if let Some(type_) = props.get("type").map(|v| v.as_str().unwrap()) { lines.push(format!( - r#" "{name}.{key}".to_string() => SettingsMeta {{ - type_: SettingsType::{type_}, - }},"#, + r#" "{name}.{key}" => SettingsMeta {{ + type_: SettingsType::{type_},"#, + )); + } + if let Some(description) = props.get("description") { + let description = description.as_str().unwrap().to_string(); + lines.push(format!( + r####" description: r###"{description}"###,"#### )); } + lines.push(" },".to_string()); } } lines.push( diff --git a/docs/cli/settings.md b/docs/cli/settings.md index 33f56a1c6f..02f213b176 100644 --- a/docs/cli/settings.md +++ b/docs/cli/settings.md @@ -3,13 +3,18 @@ - **Usage**: `mise settings [FLAGS] [SETTING] [VALUE] ` - **Source code**: [`src/cli/settings.rs`](https://github.com/jdx/mise/blob/main/src/cli/settings.rs) -Manage settings +Show current settings + +This is the contents of ~/.config/mise/config.toml + +Note that aliases are also stored in this file +but managed separately with `mise aliases` ## Arguments ### `[SETTING]` -Setting name to get/set +Name of setting ### `[VALUE]` diff --git a/docs/cli/settings/ls.md b/docs/cli/settings/ls.md index e48d2d5276..437e860af5 100644 --- a/docs/cli/settings/ls.md +++ b/docs/cli/settings/ls.md @@ -15,13 +15,13 @@ but managed separately with `mise aliases` ### `[SETTING]` -List keys under this key +Name of setting ## Flags ### `-a --all` -Display settings set to the default +List all settings ### `-l --local` diff --git a/docs/dev-tools/comparison-to-asdf.md b/docs/dev-tools/comparison-to-asdf.md index 07a42db1a4..81c1d62d72 100644 --- a/docs/dev-tools/comparison-to-asdf.md +++ b/docs/dev-tools/comparison-to-asdf.md @@ -1,11 +1,15 @@ # Comparison to asdf mise can be used as a drop-in replacement for asdf. It supports the same `.tool-versions` files that -you may have used with asdf and can use asdf plugins through the [asdf backend](/dev-tools/backends/asdf.html). +you may have used with asdf and can use asdf plugins through +the [asdf backend](/dev-tools/backends/asdf.html). It will not, however, reuse existing asdf directories -(so you'll need to either reinstall them or move them), and 100% compatibility is not a design goal. That said, -if you're coming from asdf-bash (0.15 and below), mise actually has [fewer breaking changes than asdf-go (0.16 and above)](https://asdf-vm.com/guide/upgrading-from-v0-15-to-v0-16.html) despite 100% compatibility not being a design goal of mise. +(so you'll need to either reinstall them or move them), and 100% compatibility is not a design goal. +That said, +if you're coming from asdf-bash (0.15 and below), mise actually +has [fewer breaking changes than asdf-go (0.16 and above)](https://asdf-vm.com/guide/upgrading-from-v0-15-to-v0-16.html) +despite 100% compatibility not being a design goal of mise. Casual users coming from asdf have generally found mise to just be a faster, easier to use asdf. @@ -16,37 +20,61 @@ are major portions of mise that have no asdf equivalent. ## Migrate from asdf to mise -If you're moving from asdf to mise, please review [#how-do-i-migrate-from-asdf](/faq.html#how-do-i-migrate-from-asdf) for guidance. +If you're moving from asdf to mise, please +review [#how-do-i-migrate-from-asdf](/faq.html#how-do-i-migrate-from-asdf) for guidance. ## asdf in go (0.16+) -asdf has gone through a rewrite in go. Because this is quite new as of this writing (2025-01-01), I'm going to keep information about 0.16+ asdf versions (which I call "asdf-go" vs "asdf-bash") in this section and the rest of this doc will apply to asdf-bash (0.15 and below). +asdf has gone through a rewrite in go. Because this is quite new as of this writing (2025-01-01), +I'm going to keep information about 0.16+ asdf versions (which I call "asdf-go" vs "asdf-bash") in +this section and the rest of this doc will apply to asdf-bash (0.15 and below). -In terms of performance, mise is still faster than the go asdf, however the difference is much closer. asdf is likely fast enough that the difference in overhead between asdf-go and mise may not even be enough to notice for youโ€”after all there are plenty of people still using asdf-bash that claim they don't even notice how slow it is (don't ask me how): +In terms of performance, mise is still faster than the go asdf, however the difference is much +closer. asdf is likely fast enough that the difference in overhead between asdf-go and mise may not +even be enough to notice for youโ€”after all there are plenty of people still using asdf-bash that +claim they don't even notice how slow it is (don't ask me how): ![GgAQJJmWIAAUlec](https://github.com/user-attachments/assets/05689925-396d-41f3-bcd1-7b3b1bf6c2fa) -I don't think performance is a good enough reason to switch though now that asdf-go is a thing. It's a reason, but it's a minor one. The improved security in mise, better DX, and lack of reliance on shims are all more important than performance. +I don't think performance is a good enough reason to switch though now that asdf-go is a thing. It's +a reason, but it's a minor one. The improved security in mise, better DX, and lack of reliance on +shims are all more important than performance. -Given they went through the trouble of rewriting asdfโ€”that's also an indication they want to keep working on it (which is awesome that they're doing that btw). This does mean that some of what's written here may go out of date if they address some of the problems +Given they went through the trouble of rewriting asdfโ€”that's also an indication they want to keep +working on it (which is awesome that they're doing that btw). This does mean that some of what's +written here may go out of date if they address some of the problems with asdf. ## Supply chain security -asdf plugins are not secure. This is explained in [SECURITY.md](https://github.com/jdx/mise/blob/main/SECURITY.md), but the quick explanation is that asdf plugins involve shell code which can essentially do anything on your machine. It's dangerous code. What's worse is asdf plugins are rarely written by the tool vendor (who you need to trust anyway to use the tool), which means for every asdf plugin you use you'll be trusting a random developer to not go rogue and to not get hacked themselves and publish changes to a plugin with an exploit. +asdf plugins are not secure. This is explained +in [SECURITY.md](https://github.com/jdx/mise/blob/main/SECURITY.md), but the quick explanation is +that asdf plugins involve shell code which can essentially do anything on your machine. It's +dangerous code. What's worse is asdf plugins are rarely written by the tool vendor (who you need to +trust anyway to use the tool), which means for every asdf plugin you use you'll be trusting a random +developer to not go rogue and to not get hacked themselves and publish changes to a plugin with an +exploit. -mise still uses asdf plugins for some tools, but we're actively reducing that count as well as moving things into the [mise-plugins org](https://github.com/mise-plugins). It looks like asdf has a similar model with their asdf-community org, but it isn't. asdf gives plugin authors commit access to their plugin in [asdf-community](https://github.com/asdf-community) when they move it in, which I feel like defeats the purpose of having a dedicated org in the first place. By the end of 2025 I would like for there to no longer be any asdf plugins in the registry that aren't owned by me. +mise still uses asdf plugins for some tools, but we're actively reducing that count as well as +moving things into the [mise-plugins org](https://github.com/mise-plugins). It looks like asdf has a +similar model with their asdf-community org, but it isn't. asdf gives plugin authors commit access +to their plugin in [asdf-community](https://github.com/asdf-community) when they move it in, which I +feel like defeats the purpose of having a dedicated org in the first place. By the end of 2025 I +would like for there to no longer be any asdf plugins in the registry that aren't owned by me. -I've also been adopting extra security verification steps when vendors offer that ability such as gpg verification on node installs, or slsa-verify/cosign checks on some aqua tools. +I've also been adopting extra security verification steps when vendors offer that ability such as +gpg verification on node installs, or slsa-verify/cosign checks on some aqua tools. ## UX ![CleanShot 2024-01-28 at 12 36 20@2x](https://github.com/jdx/mise-docs/assets/216188/47f381d7-1566-4b78-9260-3b85a21dd6ec) Some commands are the same in asdf but others have been changed. Everything that's possible -in asdf should be possible in mise but may use slightly different syntax. mise has more forgiving commands, +in asdf should be possible in mise but may use slightly different syntax. mise has more forgiving +commands, such as using fuzzy-matching, e.g.: `mise install node@20`. While in asdf you _can_ run -`asdf install node latest:20`, you can't use `latest:20` in a `.tool-versions` file or many other places. +`asdf install node latest:20`, you can't use `latest:20` in a `.tool-versions` file or many other +places. In `mise` you can use fuzzy-matching everywhere. asdf requires several steps to install a new runtime if the plugin isn't installed, e.g.: @@ -84,37 +112,48 @@ were very good. I really just have 2 complaints: the shims and the fact it's wri ## Performance asdf made (what I consider) a poor design decision to use shims that go between a call to a runtime -and the runtime itself. e.g.: when you call `node` it will call an asdf shim file `~/.asdf/shims/node`, +and the runtime itself. e.g.: when you call `node` it will call an asdf shim file +`~/.asdf/shims/node`, which then calls `asdf exec`, which then calls the correct version of node. -These shims have terrible performance, adding ~120ms to every runtime call. `mise activate` does not use shims and instead -updates `PATH` so that it doesn't have any overhead when simply calling binaries. These shims are the main reason that I wrote this. Note that in the demo GIF at the top of this README +These shims have terrible performance, adding ~120ms to every runtime call. `mise activate` does not +use shims and instead +updates `PATH` so that it doesn't have any overhead when simply calling binaries. These shims are +the main reason that I wrote this. Note that in the demo GIF at the top of this README that `mise` isn't actually used when calling `node -v` for this reason. The performance is identical to running node without using mise. I don't think it's possible for asdf to fix these issues. The author of asdf did a great writeup of [performance problems](https://stratus3d.com/blog/2022/08/11/asdf-performance/). asdf is written -in bash which certainly makes it challenging to be performant, however I think the real problem is the +in bash which certainly makes it challenging to be performant, however I think the real problem is +the shim design. I don't think it's possible to fix that without a complete rewrite. mise does call an internal command `mise hook-env` every time the directory has changed, but because -it's written in Rust, this is very quickโ€”taking ~10ms on my machine. 4ms if there are no changes, 14ms if it's +it's written in Rust, this is very quickโ€”taking ~10ms on my machine. 4ms if there are no changes, +14ms if it's a full reload. -tl;dr: asdf adds overhead (~120ms) when calling a runtime, mise adds a small amount of overhead (~5ms) +tl;dr: asdf adds overhead (~120ms) when calling a runtime, mise adds a small amount of overhead (~ +5ms) when the prompt loads. ## Windows support -asdf does not run on Windows at all. With mise, tools using non-asdf backends can support Windows. Of course, this means the tool -vendor must provide Windows binaries but if they do, and the backend isn't asdf, the tool should work on Windows. +asdf does not run on Windows at all. With mise, tools using non-asdf backends can support Windows. +Of course, this means the tool +vendor must provide Windows binaries but if they do, and the backend isn't asdf, the tool should +work on Windows. ## Security -asdf plugins are insecure. They typically are written by individuals with no ties to the vendors that provide the underlying tool. -Where possible, mise does not use asdf plugins and instead uses backends like aqua and ubi which do not require separate plugins. +asdf plugins are insecure. They typically are written by individuals with no ties to the vendors +that provide the underlying tool. +Where possible, mise does not use asdf plugins and instead uses backends like aqua and ubi which do +not require separate plugins. -Aqua tools can be configured with cosign/slsa verification as well. See [SECURITY](https://github.com/jdx/mise/blob/main/SECURITY.md) for more information. +Aqua tools can be configured with cosign/slsa verification as well. +See [SECURITY](https://github.com/jdx/mise/blob/main/SECURITY.md) for more information. ## Command Compatibility @@ -127,12 +166,16 @@ mise install node 20.0.0 mise local node 20.0.0 ``` -UPDATE (2025-01-01): asdf-go (0.16+) actually got rid of `asdf global|local` entirely in favor of `asdf set` which we can't support since we already have a command named `mise set`. mise command compatibility will likely not be as good with asdf-go 0.16+. +UPDATE (2025-01-01): asdf-go (0.16+) actually got rid of `asdf global|local` entirely in favor of +`asdf set` which we can't support since we already have a command named `mise set`. mise command +compatibility will likely not be as good with asdf-go 0.16+. It's not recommended though. You almost always want to modify config files and install things so `mise use node@20` saves an extra command. Also, the "@" in the command is preferred since it allows -you to install multiple tools at once: `mise use|install node@20 node@18`. Also, there are edge cases -where it's not possibleโ€”or at least very challengingโ€”for us to definitively know which syntax is being +you to install multiple tools at once: `mise use|install node@20 node@18`. Also, there are edge +cases +where it's not possibleโ€”or at least very challengingโ€”for us to definitively know which syntax is +being used and so we default to mise-style. While there aren't many of these, asdf-compatibility is done as a "best-effort" in order to make transitioning from asdf feel familiar for those users who can rely on their muscle memory. Ensuring asdf-syntax works with everything is not a design goal. @@ -146,20 +189,3 @@ directly from cargo and npm: mise use -g cargo:ripgrep@14 mise use -g npm:prettier@3 ``` - -## Other considerations - -* [mise seems to be far more popular than asdf at least on homebrew](https://formulae.brew.sh/analytics/install-on-request/30d/) -* despite asdf having a 9-year leadโ€”I believe I've put much more hours into mise than asdf developers have put into asdf. As a result, mise is pretty complete, you won't find issues/discussions with loads of +1's for mise like you will for [asdf](https://github.com/asdf-vm/asdf/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc). -* mise's stargazer count is growing more rapidlyโ€”it's likely only a few more months until it overtakes asdf in terms of total stars: - -![star-history-202511 (1)](https://github.com/user-attachments/assets/3f3d2484-99fb-434e-931b-4291f2f96761) - -## asdf was a great tool, and I hope it becomes a great one again - -I owe a lot to asdf. Without it mise either wouldn't exist or it wouldn't be nearly as good. The plugin model (while problematic for security reasons) is quite clever and I don't think I would've come up with something quite so elegant. I really appreciate the hard -work asdf developers have put in over the years. This doc feels like throwing shade and I hate that, but I also think it's more important to inform users that asdf is not a good choice anymore and they should know why. - -While I think that asdf has a lot of problems (I wouldn't have started writing mise if that wasn't the case), my hope is that they address them and are able to make asdf into a great tool again. - -I think asdf still has the edge in one important area: it's simpler. Users discovering mise are unsurprisingly intimidated by everything mise does. The simple fact that mise has a task runner is enough to put people off and I don't blame them. The docs for mise are huge and take a long time to go through. Even just the tools portion of mise is far more complex in every way (docs, code, config) than asdf. I think there are users out there that would prefer a more lightweight alternative to mise and I think asdf could be that but right now there are just too many problems. Even though it's lightweight, it's actually quite a bit more difficult to use. diff --git a/mise.usage.kdl b/mise.usage.kdl index 86607b0b9e..6698573c4a 100644 --- a/mise.usage.kdl +++ b/mise.usage.kdl @@ -1177,6 +1177,12 @@ By default, this command modifies `mise.toml` in the current directory." arg "[ENV_VARS]..." help="Environment variable(s) to set\ne.g.: NODE_ENV=production" required=false var=true } cmd "settings" help="Manage settings" { + long_help r"Show current settings + +This is the contents of ~/.config/mise/config.toml + +Note that aliases are also stored in this file +but managed separately with `mise aliases`" after_long_help r#"Examples: # list all settings $ mise settings @@ -1191,11 +1197,12 @@ cmd "settings" help="Manage settings" { $ mise settings node.mirror_url https://npm.taobao.org/mirrors/node "# flag "-a --all" help="List all settings" + flag "--complete" help="Print all settings with descriptions for shell completions" hide=true flag "-l --local" help="Use the local config file instead of the global one" global=true flag "-J --json" help="Output in JSON format" flag "--json-extended" help="Output in JSON format with sources" flag "-T --toml" help="Output in TOML format" - arg "[SETTING]" help="Setting name to get/set" required=false + arg "[SETTING]" help="Name of setting" required=false arg "[VALUE]" help="Setting value to set" required=false cmd "add" help="Adds a setting to the configuration file" { long_help r"Adds a setting to the configuration file @@ -1243,12 +1250,13 @@ but managed separately with `mise aliases`" default_packages_file = "~/.default-python-packages" ... "# - flag "-a --all" help="Display settings set to the default" - flag "-l --local" help="Use the local config file instead of the global one" + flag "-a --all" help="List all settings" + flag "--complete" help="Print all settings with descriptions for shell completions" hide=true + flag "-l --local" help="Use the local config file instead of the global one" global=true flag "-J --json" help="Output in JSON format" flag "--json-extended" help="Output in JSON format with sources" flag "-T --toml" help="Output in TOML format" - arg "[SETTING]" help="List keys under this key" required=false + arg "[SETTING]" help="Name of setting" required=false } cmd "set" help="Add/update a setting" { alias "create" @@ -1353,6 +1361,7 @@ cmd "tasks" help="Manage tasks" { $ mise tasks ls " flag "--no-header" help="Do not print table header" global=true + flag "--complete" help="Display tasks for usage completion" hide=true flag "-x --extended" help="Show all columns" global=true flag "--hidden" help="Show hidden tasks" global=true flag "--sort" help="Sort by column. Default is name." global=true { @@ -1484,6 +1493,7 @@ tasks will override the global ones if they have the same name." $ mise tasks ls " flag "--no-header" help="Do not print table header" global=true + flag "--complete" help="Display tasks for usage completion" hide=true flag "-x --extended" help="Show all columns" global=true flag "--hidden" help="Show hidden tasks" global=true flag "--sort" help="Sort by column. Default is name." global=true { @@ -2058,10 +2068,8 @@ complete "config_file" type="file" complete "new_plugin" run="mise plugins --all" complete "plugin" run="mise plugins --core --user" complete "prefix" run="mise ls-remote {{words[PREV]}}" -complete "setting" run="mise settings | awk '{print $1}'" -complete "task" run=r#" -mise tasks --json | jq -r '.[] | (.name | gsub(":"; "\\:")) + ":" + (.description | gsub(":"; "\\:"))' -"# descriptions=true +complete "setting" run="mise settings --complete" descriptions=true +complete "task" run="mise tasks ls --complete" descriptions=true complete "tool@version" run=r#" cur="{{words[CURRENT]}}" diff --git a/src/assets/mise-extra.usage.kdl b/src/assets/mise-extra.usage.kdl index 5898cb4d56..f909aef627 100644 --- a/src/assets/mise-extra.usage.kdl +++ b/src/assets/mise-extra.usage.kdl @@ -5,10 +5,8 @@ complete "config_file" type="file" complete "new_plugin" run="mise plugins --all" complete "plugin" run="mise plugins --core --user" complete "prefix" run="mise ls-remote {{words[PREV]}}" -complete "setting" run="mise settings | awk '{print $1}'" -complete "task" run=r#" -mise tasks --json | jq -r '.[] | (.name | gsub(":"; "\\:")) + ":" + (.description | gsub(":"; "\\:"))' -"# descriptions=true +complete "setting" run="mise settings --complete" descriptions=true +complete "task" run="mise tasks ls --complete" descriptions=true complete "tool@version" run=r#" cur="{{words[CURRENT]}}" diff --git a/src/cli/config/set.rs b/src/cli/config/set.rs index b0e8062fcc..52c65ffd2e 100644 --- a/src/cli/config/set.rs +++ b/src/cli/config/set.rs @@ -78,7 +78,7 @@ impl ConfigSet { let expected_type = if !self.key.starts_with("settings.") { None } else { - SETTINGS_META.get(&(*last_key).to_string()) + SETTINGS_META.get(*last_key) }; match expected_type { Some(meta) => match meta.type_ { diff --git a/src/cli/settings/ls.rs b/src/cli/settings/ls.rs index 06f7ea0613..5a68be17c6 100644 --- a/src/cli/settings/ls.rs +++ b/src/cli/settings/ls.rs @@ -1,5 +1,5 @@ use crate::config; -use crate::config::settings::SettingsPartial; +use crate::config::settings::{SettingsPartial, SETTINGS_META}; use crate::config::{Settings, ALL_TOML_CONFIG_FILES, SETTINGS}; use crate::file::display_path; use crate::ui::table; @@ -14,34 +14,41 @@ use tabled::{Table, Tabled}; /// Note that aliases are also stored in this file /// but managed separately with `mise aliases` #[derive(Debug, clap::Args)] -#[clap(visible_alias = "list", after_long_help = AFTER_LONG_HELP, verbatim_doc_comment)] +#[clap(after_long_help = AFTER_LONG_HELP, verbatim_doc_comment)] pub struct SettingsLs { - /// List keys under this key + /// Name of setting pub setting: Option, - /// Display settings set to the default + /// List all settings #[clap(long, short)] - pub all: bool, + all: bool, + + /// Print all settings with descriptions for shell completions + #[clap(long, hide = true)] + complete: bool, /// Use the local config file instead of the global one - #[clap(long, short)] + #[clap(long, short, global = true)] pub local: bool, /// Output in JSON format #[clap(long, short = 'J', group = "output")] - pub json: bool, + json: bool, /// Output in JSON format with sources #[clap(long, group = "output")] - pub json_extended: bool, + json_extended: bool, /// Output in TOML format #[clap(long, short = 'T', group = "output")] - pub toml: bool, + toml: bool, } impl SettingsLs { pub fn run(self) -> Result<()> { + if self.complete { + return self.complete(); + } let mut rows: Vec = if self.local { let source = config::local_toml_config_path(); let partial = Settings::parse_settings_file(&source).unwrap_or_default(); @@ -90,6 +97,13 @@ impl SettingsLs { Ok(()) } + fn complete(&self) -> Result<()> { + for (k, sm) in SETTINGS_META.iter() { + println!("{k}:{}", sm.description.replace(":", "\\:")); + } + Ok(()) + } + fn print_json(&self, rows: Vec) -> Result<()> { let mut table = serde_json::Map::new(); for row in rows { diff --git a/src/cli/settings/mod.rs b/src/cli/settings/mod.rs index 34ac3d14ec..ee331a9310 100644 --- a/src/cli/settings/mod.rs +++ b/src/cli/settings/mod.rs @@ -13,39 +13,19 @@ pub struct Settings { #[clap(subcommand)] command: Option, - /// Setting name to get/set - #[clap(conflicts_with = "all")] - setting: Option, + #[clap(flatten)] + ls: ls::SettingsLs, /// Setting value to set #[clap(conflicts_with = "all")] value: Option, - - /// List all settings - #[clap(long, short)] - all: bool, - - /// Use the local config file instead of the global one - #[clap(long, short, verbatim_doc_comment, global = true)] - local: bool, - - /// Output in JSON format - #[clap(long, short = 'J', group = "output")] - pub json: bool, - - /// Output in JSON format with sources - #[clap(long, group = "output")] - pub json_extended: bool, - - /// Output in TOML format - #[clap(long, short = 'T', group = "output")] - pub toml: bool, } #[derive(Debug, Subcommand)] enum Commands { Add(add::SettingsAdd), Get(get::SettingsGet), + #[clap(visible_alias = "list")] Ls(ls::SettingsLs), Set(set::SettingsSet), Unset(unset::SettingsUnset), @@ -68,32 +48,25 @@ impl Settings { let cmd = self.command.unwrap_or_else(|| { if let Some(value) = self.value { Commands::Set(set::SettingsSet { - setting: self.setting.unwrap(), + setting: self.ls.setting.unwrap(), value, - local: self.local, + local: self.ls.local, }) - } else if let Some(setting) = self.setting { + } else if let Some(setting) = self.ls.setting { if let Some((setting, value)) = setting.split_once('=') { Commands::Set(set::SettingsSet { setting: setting.to_string(), value: value.to_string(), - local: self.local, + local: self.ls.local, }) } else { Commands::Get(get::SettingsGet { setting, - local: self.local, + local: self.ls.local, }) } } else { - Commands::Ls(ls::SettingsLs { - all: self.all, - setting: None, - local: self.local, - json: self.json, - json_extended: self.json_extended, - toml: self.toml, - }) + Commands::Ls(self.ls) } }); diff --git a/src/cli/tasks/ls.rs b/src/cli/tasks/ls.rs index c45ce01441..1ec017dc6f 100644 --- a/src/cli/tasks/ls.rs +++ b/src/cli/tasks/ls.rs @@ -22,6 +22,10 @@ pub struct TasksLs { #[clap(long, alias = "no-headers", global = true, verbatim_doc_comment)] pub no_header: bool, + /// Display tasks for usage completion + #[clap(long, hide = true)] + pub complete: bool, + /// Show all columns #[clap(short = 'x', long, global = true, verbatim_doc_comment)] pub extended: bool, @@ -72,17 +76,28 @@ impl TasksLs { .sorted_by(|a, b| self.sort(a, b)) .collect::>(); - if self.usage { + if self.complete { + return self.complete(tasks); + } else if self.usage { self.display_usage(ts, tasks)?; } else if self.json { - self.display_json(ts, tasks)?; + self.display_json(tasks)?; } else { - self.display(ts, tasks)?; + self.display(tasks)?; + } + Ok(()) + } + + fn complete(&self, tasks: Vec) -> Result<()> { + for t in tasks { + let name = t.display_name().replace(":", "\\:"); + let description = t.description.replace(":", "\\:"); + println!("{name}:{description}",); } Ok(()) } - fn display(&self, _ts: &Toolset, tasks: Vec) -> Result<()> { + fn display(&self, tasks: Vec) -> Result<()> { let mut table = MiseTable::new( self.no_header, if self.extended { @@ -114,7 +129,7 @@ impl TasksLs { Ok(()) } - fn display_json(&self, _ts: &Toolset, tasks: Vec) -> Result<()> { + fn display_json(&self, tasks: Vec) -> Result<()> { let array_items = tasks .into_iter() .map(|task| { diff --git a/src/config/settings.rs b/src/config/settings.rs index cb9ade8257..6efedcb7db 100644 --- a/src/config/settings.rs +++ b/src/config/settings.rs @@ -40,7 +40,7 @@ pub enum SettingsType { pub struct SettingsMeta { // pub key: String, pub type_: SettingsType, - // pub description: String, + pub description: &'static str, } #[derive( diff --git a/xtasks/fig/src/mise.ts b/xtasks/fig/src/mise.ts index 7bd5977c5f..c947247fa0 100644 --- a/xtasks/fig/src/mise.ts +++ b/xtasks/fig/src/mise.ts @@ -2002,7 +2002,7 @@ const completionSpec: Fig.Spec = { "-a", "--all" ], - "description": "Display settings set to the default", + "description": "List all settings", "isRepeatable": false }, { @@ -2037,7 +2037,7 @@ const completionSpec: Fig.Spec = { ], "args": { "name": "setting", - "description": "List keys under this key", + "description": "Name of setting", "isOptional": true, "generators": settingsGenerator } @@ -2137,7 +2137,7 @@ const completionSpec: Fig.Spec = { "args": [ { "name": "setting", - "description": "Setting name to get/set", + "description": "Name of setting", "isOptional": true, "generators": settingsGenerator }, From 2e0622b4d50bb3c2a07ba798e2efca6a8240c6fe Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 1 Jan 2025 13:51:53 +0000 Subject: [PATCH 055/289] fix: handle panic when task contains invalid template (#3904) Fixes #3895 --- src/task/task_script_parser.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/task/task_script_parser.rs b/src/task/task_script_parser.rs index ca78c0b68d..df6fb2e8cc 100644 --- a/src/task/task_script_parser.rs +++ b/src/task/task_script_parser.rs @@ -4,7 +4,7 @@ use crate::exit::exit; use crate::shell::ShellType; use crate::task::Task; use crate::tera::get_tera; -use eyre::Result; +use eyre::{Context, Result}; use itertools::Itertools; use std::collections::HashMap; use std::iter::once; @@ -278,8 +278,11 @@ impl TaskScriptParser { tera_ctx.insert("env", &env); let scripts = scripts .iter() - .map(|s| tera.render_str(s.trim(), &tera_ctx).unwrap()) - .collect(); + .map(|s| { + tera.render_str(s.trim(), &tera_ctx) + .wrap_err_with(|| s.to_string()) + }) + .collect::>>()?; let mut cmd = usage::SpecCommand::default(); // TODO: ensure no gaps in args, e.g.: 1,2,3,4,5 let arg_order = arg_order.lock().unwrap(); From e2065acd66386d3f51535b82fb5b925d3cbcadee Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 1 Jan 2025 13:59:03 +0000 Subject: [PATCH 056/289] feat: use aqua for gradle (#3903) Fixes #3889 --- docs/registry.md | 2 +- registry.toml | 24 ++++++++++-------------- src/cli/test_tool.rs | 13 +++++++++++-- src/http.rs | 7 ++++--- src/toolset/install_state.rs | 19 +++++++++++++++++-- 5 files changed, 43 insertions(+), 22 deletions(-) diff --git a/docs/registry.md b/docs/registry.md index 7bc2138b94..6102fccfda 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -305,7 +305,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | goss | [aqua:goss-org/goss](https://github.com/goss-org/goss) [asdf:raimon49/asdf-goss](https://github.com/raimon49/asdf-goss) | | gotestsum | [aqua:gotestyourself/gotestsum](https://github.com/gotestyourself/gotestsum) [asdf:pmalek/mise-gotestsum](https://github.com/pmalek/mise-gotestsum) | | graalvm | [asdf:asdf-community/asdf-graalvm](https://github.com/asdf-community/asdf-graalvm) | -| gradle | [asdf:rfrancis/asdf-gradle](https://github.com/rfrancis/asdf-gradle) [vfox:version-fox/vfox-gradle](https://github.com/version-fox/vfox-gradle) [aqua:gradle/gradle-distributions](https://github.com/gradle/gradle-distributions) | +| gradle | [aqua:gradle/gradle](https://github.com/gradle/gradle) [vfox:version-fox/vfox-gradle](https://github.com/version-fox/vfox-gradle) | | gradle-profiler | [asdf:joschi/asdf-gradle-profiler](https://github.com/joschi/asdf-gradle-profiler) | | grails | [asdf:weibemoura/asdf-grails](https://github.com/weibemoura/asdf-grails) | | grain | [asdf:cometkim/asdf-grain](https://github.com/cometkim/asdf-grain) | diff --git a/registry.toml b/registry.toml index 4c34cb4834..9d558e8056 100644 --- a/registry.toml +++ b/registry.toml @@ -9,7 +9,7 @@ 1password.backends = ["asdf:NeoHsu/asdf-1password-cli", "aqua:1password/cli"] # 1password.test = ["op --version", "{{version}}"] fails on CI for some reason aapt2.backends = ["asdf:ronnnnn/asdf-aapt2"] -aapt2.test = ["aapt2 version", "Android Asset Packaging Tool (aapt)"] +aapt2.test = ["aapt2 version 2>&1", "Android Asset Packaging Tool (aapt)"] act.backends = ["aqua:nektos/act", "ubi:nektos/act", "asdf:gr1m0h/asdf-act"] act.test = ["act --version", "act version {{version}}"] action-validator.backends = [ @@ -43,7 +43,7 @@ age-plugin-yubikey.backends = [ # test seems to fail on linux # age-plugin-yubikey.test = ["age-plugin-yubikey --version", "age-plugin-yubikey {{version}}"] agebox.backends = ["ubi:slok/agebox", "asdf:slok/asdf-agebox"] -agebox.test = ["agebox --version", "v{{version}}"] +agebox.test = ["agebox --version 2>&1", "v{{version}}"] air.backends = ["aqua:air-verse/air", "asdf:pdemagny/asdf-air"] air.test = ["air -v", "{{version}}"] aks-engine.backends = [ @@ -56,7 +56,7 @@ allure.test = ["allure --version", "{{version}}"] alp.backends = ["aqua:tkuchiki/alp", "asdf:asdf-community/asdf-alp"] alp.test = ["alp --version", "{{version}}"] amass.backends = ["ubi:owasp-amass/amass", "asdf:dhoeric/asdf-amass"] -amass.test = ["amass -version", "v{{version}}"] +amass.test = ["amass -version 2>&1", "v{{version}}"] amazon-ecr-credential-helper.backends = [ "aqua:awslabs/amazon-ecr-credential-helper", "asdf:dex4er/asdf-amazon-ecr-credential-helper" @@ -298,7 +298,7 @@ choose.backends = [ ] chromedriver.backends = ["asdf:schinckel/asdf-chromedriver"] cidr-merger.backends = ["ubi:zhanhb/cidr-merger", "asdf:ORCID/asdf-cidr-merger"] -cidr-merger.test = ["cidr-merger --version", "cidr merger {{version}}"] +cidr-merger.test = ["cidr-merger --version 2>&1", "cidr merger {{version}}"] cidrchk.backends = ["ubi:mhausenblas/cidrchk", "asdf:ORCID/asdf-cidrchk"] cidrchk.test = ["cidrchk --version", "{{version}},"] cilium-cli.backends = [ @@ -741,7 +741,7 @@ gomigrate.backends = [ "aqua:golang-migrate/migrate", "asdf:joschi/asdf-gomigrate" ] -gomigrate.test = ["migrate --version", "{{version}}"] +gomigrate.test = ["migrate --version 2>&1", "{{version}}"] gomplate.backends = [ "aqua:hairyhenderson/gomplate", "asdf:sneakybeaky/asdf-gomplate" @@ -758,13 +758,9 @@ gotestsum.backends = [ "asdf:pmalek/mise-gotestsum" ] graalvm.backends = ["asdf:asdf-community/asdf-graalvm"] -gradle.backends = [ - "asdf:rfrancis/asdf-gradle", - "vfox:version-fox/vfox-gradle", - "aqua:gradle/gradle-distributions" -] +gradle.backends = ["aqua:gradle/gradle", "vfox:version-fox/vfox-gradle"] gradle.depends = ["java"] -# gradle.test = ["gradle -V", "Gradle {{version}}"] TODO: make test-tool use dependencies +gradle.test = ["gradle -V", "Gradle"] gradle-profiler.backends = ["asdf:joschi/asdf-gradle-profiler"] grails.backends = ["asdf:weibemoura/asdf-grails"] grain.backends = ["asdf:cometkim/asdf-grain"] @@ -829,7 +825,7 @@ hls.backends = ["asdf:sestrella/asdf-ghcup"] hostctl.backends = ["aqua:guumaster/hostctl", "asdf:svenluijten/asdf-hostctl"] httpie-go.backends = ["aqua:nojima/httpie-go", "asdf:abatilo/asdf-httpie-go"] httpie-go.os = ["linux", "macos"] -httpie-go.test = ["ht --version", "httpie-go {{version}}"] +httpie-go.test = ["ht --version 2>&1", "httpie-go {{version}}"] hub.backends = ["aqua:mislav/hub", "asdf:mise-plugins/asdf-hub"] hugo.backends = [ "aqua:gohugoio/hugo", @@ -867,7 +863,7 @@ istioctl.test = ["istioctl version", "client version: {{version}}"] janet.backends = ["asdf:Jakski/asdf-janet"] java.backends = ["core:java"] jb.backends = ["aqua:jsonnet-bundler/jsonnet-bundler", "asdf:beardix/asdf-jb"] -jb.test = ["jb --version", "v{{version}}"] +jb.test = ["jb --version 2>&1", "v{{version}}"] jbang.backends = ["asdf:jbangdev/jbang-asdf"] jfrog-cli.backends = ["asdf:LozanoMatheus/asdf-jfrog-cli"] jib.backends = ["asdf:joschi/asdf-jib"] @@ -1014,7 +1010,7 @@ kubent.backends = [ "aqua:doitintl/kube-no-trouble", "asdf:virtualstaticvoid/asdf-kubent" ] -kubent.test = ["kubent --version", "version {{version}}"] +kubent.test = ["kubent --version 2>&1", "version {{version}}"] kubergrunt.backends = [ "aqua:gruntwork-io/kubergrunt", "asdf:NeoHsu/asdf-kubergrunt" diff --git a/src/cli/test_tool.rs b/src/cli/test_tool.rs index 83dfadd5cf..38a28c2369 100644 --- a/src/cli/test_tool.rs +++ b/src/cli/test_tool.rs @@ -106,8 +106,17 @@ impl TestTool { } fn test(&self, tool: &ToolArg, cmd: &str, expected: &str) -> Result<()> { + let mut args = vec![tool.clone()]; + args.extend( + tool.ba + .backend()? + .get_all_dependencies(false)? + .into_iter() + .map(|ba| ba.to_string().parse()) + .collect::>>()?, + ); let mut ts = ToolsetBuilder::new() - .with_args(&[tool.clone()]) + .with_args(&args) .with_default_to_latest(true) .build(&Config::get())?; let opts = InstallOptions { @@ -144,7 +153,7 @@ impl TestTool { } else { cmd!("sh", "-c", cmd) }; - cmd = cmd.stderr_to_stdout().stdout_capture(); + cmd = cmd.stdout_capture(); for (k, v) in env.iter() { cmd = cmd.env(k, v); } diff --git a/src/http.rs b/src/http.rs index 240a612532..73c699ba77 100644 --- a/src/http.rs +++ b/src/http.rs @@ -1,4 +1,3 @@ -use std::fs::File; use std::io::Write; use std::path::Path; use std::time::Duration; @@ -174,14 +173,16 @@ impl Client { } } - file::create_dir_all(path.parent().unwrap())?; - let mut file = File::create(path)?; + let parent = path.parent().unwrap(); + file::create_dir_all(parent)?; + let mut file = tempfile::NamedTempFile::with_prefix_in(path, parent)?; while let Some(chunk) = resp.chunk().await? { file.write_all(&chunk)?; if let Some(pr) = pr { pr.inc(chunk.len() as u64); } } + file.persist(path)?; Ok::<(), eyre::Error>(()) })?; Ok(()) diff --git a/src/toolset/install_state.rs b/src/toolset/install_state.rs index c3a4c4e110..6e4c315078 100644 --- a/src/toolset/install_state.rs +++ b/src/toolset/install_state.rs @@ -1,6 +1,7 @@ use crate::backend::backend_type::BackendType; use crate::cli::args::BackendArg; use crate::file::display_path; +use crate::git::Git; use crate::plugins::PluginType; use crate::{dirs, file, runtime_symlinks}; use eyre::{Ok, Result}; @@ -9,7 +10,7 @@ use itertools::Itertools; use rayon::prelude::*; use std::collections::BTreeMap; use std::ops::Deref; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use std::sync::{Arc, Mutex}; use versions::Versioning; @@ -55,7 +56,11 @@ fn init_plugins() -> MutexResult { .filter_map(|d| { time!("init_plugins {d}"); let path = dirs::PLUGINS.join(&d); - if path.join("metadata.lua").exists() { + if is_banned_plugin(&path) { + info!("removing banned plugin {d}"); + let _ = file::remove_all(&path); + None + } else if path.join("metadata.lua").exists() { Some((d, PluginType::Vfox)) } else if path.join("bin").join("list-all").exists() { Some((d, PluginType::Asdf)) @@ -128,6 +133,16 @@ pub fn list_plugins() -> Result>> { Ok(plugins) } +fn is_banned_plugin(path: &Path) -> bool { + if path.ends_with("gradle") { + let repo = Git::new(path); + if let Some(url) = repo.get_remote_url() { + return url == "https://github.com/rfrancis/asdf-gradle.git"; + } + } + false +} + pub fn get_tool_full(short: &str) -> Result> { let tools = init_tools()?; Ok(tools.get(short).and_then(|t| t.full.clone())) From daae8d071693879169114bb8bbcf7be115ef5c52 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 1 Jan 2025 16:20:59 +0000 Subject: [PATCH 057/289] fix: missing checksums in mise.run script (#3906) --- scripts/render-install.sh | 30 +++++++++++++++--------------- scripts/test-standalone.sh | 6 +++--- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/scripts/render-install.sh b/scripts/render-install.sh index bb096bb77f..f9369e8838 100755 --- a/scripts/render-install.sh +++ b/scripts/render-install.sh @@ -3,21 +3,21 @@ set -euxo pipefail # shellcheck disable=SC2016 MISE_CURRENT_VERSION=$MISE_VERSION \ - MISE_CHECKSUM_LINUX_X86_64=$(grep "mise-v.*linux-x64.tar.gz" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ - MISE_CHECKSUM_LINUX_X86_64_MUSL=$(grep "mise-v.*linux-x64-musl.tar.gz" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ - MISE_CHECKSUM_LINUX_ARM64=$(grep "mise-v.*linux-arm64.tar.gz" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ - MISE_CHECKSUM_LINUX_ARM64_MUSL=$(grep "mise-v.*linux-arm64-musl.tar.gz" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ + MISE_CHECKSUM_LINUX_X86_64=$(grep "mise-v.*linux-x64.tar.gz" "$RELEASE_DIR/$MISE_VERSION/SHASUMS256.txt") \ + MISE_CHECKSUM_LINUX_X86_64_MUSL=$(grep "mise-v.*linux-x64-musl.tar.gz" "$RELEASE_DIR/$MISE_VERSION/SHASUMS256.txt") \ + MISE_CHECKSUM_LINUX_ARM64=$(grep "mise-v.*linux-arm64.tar.gz" "$RELEASE_DIR/$MISE_VERSION/SHASUMS256.txt") \ + MISE_CHECKSUM_LINUX_ARM64_MUSL=$(grep "mise-v.*linux-arm64-musl.tar.gz" "$RELEASE_DIR/$MISE_VERSION/SHASUMS256.txt") \ MISE_CHECKSUM_LINUX_ARMV7=$(grep "mise-v.*linux-armv7.tar.gz" "$RELEASE_DIR/$MISE_VERSION/SHASUMS256.txt") \ - MISE_CHECKSUM_LINUX_ARMV7_MUSL=$(grep "mise-v.*linux-armv7-musl.tar.gz" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ - MISE_CHECKSUM_MACOS_X86_64=$(grep "mise-v.*macos-x64.tar.gz" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ - MISE_CHECKSUM_MACOS_ARM64=$(grep "mise-v.*macos-arm64.tar.gz" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ - MISE_CHECKSUM_LINUX_X86_64_ZSTD=$(grep "mise-v.*linux-x64.tar.zst" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ - MISE_CHECKSUM_LINUX_X86_64_MUSL_ZSTD=$(grep "mise-v.*linux-x64-musl.tar.zst" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ - MISE_CHECKSUM_LINUX_ARM64_ZSTD=$(grep "mise-v.*linux-arm64.tar.zst" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ - MISE_CHECKSUM_LINUX_ARM64_MUSL_ZSTD=$(grep "mise-v.*linux-arm64-musl.tar.zst" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ - MISE_CHECKSUM_LINUX_ARMV7_ZSTD=$(grep "mise-v.*linux-armv7.tar.zst" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ - MISE_CHECKSUM_LINUX_ARMV7_MUSL_ZSTD=$(grep "mise-v.*linux-armv7-musl.tar.zst" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ - MISE_CHECKSUM_MACOS_X86_64_ZSTD=$(grep "mise-v.*macos-x64.tar.zst" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ - MISE_CHECKSUM_MACOS_ARM64_ZSTD=$(grep "mise-v.*macos-arm64.tar.zst" "$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt") \ + MISE_CHECKSUM_LINUX_ARMV7_MUSL=$(grep "mise-v.*linux-armv7-musl.tar.gz" "$RELEASE_DIR/$MISE_VERSION/SHASUMS256.txt") \ + MISE_CHECKSUM_MACOS_X86_64=$(grep "mise-v.*macos-x64.tar.gz" "$RELEASE_DIR/$MISE_VERSION/SHASUMS256.txt") \ + MISE_CHECKSUM_MACOS_ARM64=$(grep "mise-v.*macos-arm64.tar.gz" "$RELEASE_DIR/$MISE_VERSION/SHASUMS256.txt") \ + MISE_CHECKSUM_LINUX_X86_64_ZSTD=$(grep "mise-v.*linux-x64.tar.zst" "$RELEASE_DIR/$MISE_VERSION/SHASUMS256.txt") \ + MISE_CHECKSUM_LINUX_X86_64_MUSL_ZSTD=$(grep "mise-v.*linux-x64-musl.tar.zst" "$RELEASE_DIR/$MISE_VERSION/SHASUMS256.txt") \ + MISE_CHECKSUM_LINUX_ARM64_ZSTD=$(grep "mise-v.*linux-arm64.tar.zst" "$RELEASE_DIR/$MISE_VERSION/SHASUMS256.txt") \ + MISE_CHECKSUM_LINUX_ARM64_MUSL_ZSTD=$(grep "mise-v.*linux-arm64-musl.tar.zst" "$RELEASE_DIR/$MISE_VERSION/SHASUMS256.txt") \ + MISE_CHECKSUM_LINUX_ARMV7_ZSTD=$(grep "mise-v.*linux-armv7.tar.zst" "$RELEASE_DIR/$MISE_VERSION/SHASUMS256.txt") \ + MISE_CHECKSUM_LINUX_ARMV7_MUSL_ZSTD=$(grep "mise-v.*linux-armv7-musl.tar.zst" "$RELEASE_DIR/$MISE_VERSION/SHASUMS256.txt") \ + MISE_CHECKSUM_MACOS_X86_64_ZSTD=$(grep "mise-v.*macos-x64.tar.zst" "$RELEASE_DIR/$MISE_VERSION/SHASUMS256.txt") \ + MISE_CHECKSUM_MACOS_ARM64_ZSTD=$(grep "mise-v.*macos-arm64.tar.zst" "$RELEASE_DIR/$MISE_VERSION/SHASUMS256.txt") \ envsubst '$MISE_CURRENT_VERSION,$MISE_CHECKSUM_LINUX_X86_64,$MISE_CHECKSUM_LINUX_X86_64_MUSL,$MISE_CHECKSUM_LINUX_ARM64,$MISE_CHECKSUM_LINUX_ARM64_MUSL,$MISE_CHECKSUM_LINUX_ARMV6,$MISE_CHECKSUM_LINUX_ARMV6_MUSL,$MISE_CHECKSUM_LINUX_ARMV7,$MISE_CHECKSUM_LINUX_ARMV7_MUSL,$MISE_CHECKSUM_MACOS_X86_64,$MISE_CHECKSUM_MACOS_ARM64,$MISE_CHECKSUM_LINUX_X86_64_ZSTD,$MISE_CHECKSUM_LINUX_X86_64_MUSL_ZSTD,$MISE_CHECKSUM_LINUX_ARM64_ZSTD,$MISE_CHECKSUM_LINUX_ARM64_MUSL_ZSTD,$MISE_CHECKSUM_LINUX_ARMV7_ZSTD,$MISE_CHECKSUM_LINUX_ARMV7_MUSL_ZSTD,$MISE_CHECKSUM_MACOS_X86_64_ZSTD,$MISE_CHECKSUM_MACOS_ARM64_ZSTD' \ <"$BASE_DIR/packaging/standalone/install.envsubst" diff --git a/scripts/test-standalone.sh b/scripts/test-standalone.sh index c642a7e741..6d3b58e4d2 100755 --- a/scripts/test-standalone.sh +++ b/scripts/test-standalone.sh @@ -3,11 +3,11 @@ set -euxo pipefail BASE_DIR="$(pwd)" RELEASE_DIR="$(pwd)/tmp" -MISE_VERSION="$(curl -fsSL https://mise.jdx.dev/VERSION)" +MISE_VERSION="v$(curl -fsSL https://mise.jdx.dev/VERSION)" export BASE_DIR RELEASE_DIR MISE_VERSION -mkdir -p "$RELEASE_DIR/v$MISE_VERSION" -curl -fsSL "https://mise.jdx.dev/v$MISE_VERSION/SHASUMS256.txt" >"$RELEASE_DIR/v$MISE_VERSION/SHASUMS256.txt" +mkdir -p "$RELEASE_DIR/$MISE_VERSION" +curl -fsSL "https://mise.jdx.dev/$MISE_VERSION/SHASUMS256.txt" >"$RELEASE_DIR/$MISE_VERSION/SHASUMS256.txt" ./scripts/render-install.sh >tmp/install.sh chmod +x tmp/install.sh mise x shellcheck -- shellcheck tmp/install.sh From a31cd43519e033217b122d87ddc6c265b2d799b6 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 1 Jan 2025 16:25:28 +0000 Subject: [PATCH 058/289] fix: active flag for symlinked tools in `mise ls --json` (#3907) Fixes #3860 --- src/cli/ls.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/cli/ls.rs b/src/cli/ls.rs index 1487c43c09..a1a83e4020 100644 --- a/src/cli/ls.rs +++ b/src/cli/ls.rs @@ -295,11 +295,16 @@ impl From> for JSONToolVersion { Some(source.as_json()) }, installed: !matches!(vs, VersionStatus::Missing(_)), - active: matches!(vs, VersionStatus::Active(_, _)), + active: match vs { + VersionStatus::Active(_, _) => true, + VersionStatus::Symlink(_, active) => active, + _ => false, + }, } } } +#[derive(Debug)] enum VersionStatus { Active(String, bool), Inactive(String), From 0cfaf74aabeef05086b67319359a510bd88fab51 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 1 Jan 2025 18:01:24 +0000 Subject: [PATCH 059/289] feat: added completions to more commands (#3910) Fixes #3909 --- docs/cli/index.md | 10 ++-- docs/cli/ls.md | 6 +-- docs/cli/set.md | 4 +- docs/cli/tool.md | 4 +- docs/cli/unset.md | 4 +- docs/cli/which.md | 4 +- e2e/cli/test_registry | 2 +- mise.lock | 8 +-- mise.usage.kdl | 25 +++++++--- src/assets/mise-extra.usage.kdl | 6 +++ src/cli/ls.rs | 26 +++++----- src/cli/registry.rs | 86 +++++++++++++++++++++------------ src/cli/set.rs | 18 ++++++- src/cli/tool.rs | 6 +-- src/cli/unset.rs | 2 +- src/cli/which.rs | 44 ++++++++++++----- xtasks/fig/src/mise.ts | 31 +++++++----- 17 files changed, 181 insertions(+), 105 deletions(-) diff --git a/docs/cli/index.md b/docs/cli/index.md index a1ac4a70dc..7638ddd148 100644 --- a/docs/cli/index.md +++ b/docs/cli/index.md @@ -95,7 +95,7 @@ Can also use `MISE_NO_CONFIG=1` - [`mise install-into `](/cli/install-into.md) - [`mise latest [-i --installed] `](/cli/latest.md) - [`mise link [-f --force] `](/cli/link.md) -- [`mise ls [FLAGS] [PLUGIN]...`](/cli/ls.md) +- [`mise ls [FLAGS] [INSTALLED_TOOL]...`](/cli/ls.md) - [`mise ls-remote [--all] [TOOL@VERSION] [PREFIX]`](/cli/ls-remote.md) - [`mise outdated [FLAGS] [TOOL@VERSION]...`](/cli/outdated.md) - [`mise plugins [FLAGS] `](/cli/plugins.md) @@ -110,7 +110,7 @@ Can also use `MISE_NO_CONFIG=1` - [`mise reshim [-f --force]`](/cli/reshim.md) - [`mise run [FLAGS]`](/cli/run.md) - [`mise self-update [FLAGS] [VERSION]`](/cli/self-update.md) -- [`mise set [--file ] [-g --global] [ENV_VARS]...`](/cli/set.md) +- [`mise set [--file ] [-g --global] [ENV_VAR]...`](/cli/set.md) - [`mise settings [FLAGS] [SETTING] [VALUE] `](/cli/settings.md) - [`mise settings add [-l --local] `](/cli/settings/add.md) - [`mise settings get [-l --local] `](/cli/settings/get.md) @@ -129,14 +129,14 @@ Can also use `MISE_NO_CONFIG=1` - [`mise tasks info [-J --json] `](/cli/tasks/info.md) - [`mise tasks ls [FLAGS]`](/cli/tasks/ls.md) - [`mise tasks run [FLAGS] [TASK] [ARGS]...`](/cli/tasks/run.md) -- [`mise tool [FLAGS] `](/cli/tool.md) +- [`mise tool [FLAGS] `](/cli/tool.md) - [`mise trust [FLAGS] [CONFIG_FILE]`](/cli/trust.md) - [`mise uninstall [-a --all] [-n --dry-run] [INSTALLED_TOOL@VERSION]...`](/cli/uninstall.md) -- [`mise unset [-f --file ] [-g --global] [KEYS]...`](/cli/unset.md) +- [`mise unset [-f --file ] [-g --global] [ENV_KEY]...`](/cli/unset.md) - [`mise unuse [--no-prune] [--global] ...`](/cli/unuse.md) - [`mise upgrade [FLAGS] [TOOL@VERSION]...`](/cli/upgrade.md) - [`mise use [FLAGS] [TOOL@VERSION]...`](/cli/use.md) - [`mise version`](/cli/version.md) - [`mise watch [FLAGS] [TASK] [ARGS]...`](/cli/watch.md) - [`mise where `](/cli/where.md) -- [`mise which [FLAGS] `](/cli/which.md) +- [`mise which [FLAGS] [BIN_NAME]`](/cli/which.md) diff --git a/docs/cli/ls.md b/docs/cli/ls.md index cd0b923a4a..6befafea7d 100644 --- a/docs/cli/ls.md +++ b/docs/cli/ls.md @@ -1,6 +1,6 @@ # `mise ls` -- **Usage**: `mise ls [FLAGS] [PLUGIN]...` +- **Usage**: `mise ls [FLAGS] [INSTALLED_TOOL]...` - **Aliases**: `list` - **Source code**: [`src/cli/ls.rs`](https://github.com/jdx/mise/blob/main/src/cli/ls.rs) @@ -14,9 +14,9 @@ It's a useful command to get the current state of your tools. ## Arguments -### `[PLUGIN]...` +### `[INSTALLED_TOOL]...` -Only show tool versions from [PLUGIN] +Only show tool versions from [TOOL] ## Flags diff --git a/docs/cli/set.md b/docs/cli/set.md index a2b61e8aba..1f833d7f16 100644 --- a/docs/cli/set.md +++ b/docs/cli/set.md @@ -1,6 +1,6 @@ # `mise set` -- **Usage**: `mise set [--file ] [-g --global] [ENV_VARS]...` +- **Usage**: `mise set [--file ] [-g --global] [ENV_VAR]...` - **Source code**: [`src/cli/set.rs`](https://github.com/jdx/mise/blob/main/src/cli/set.rs) Set environment variables in mise.toml @@ -9,7 +9,7 @@ By default, this command modifies `mise.toml` in the current directory. ## Arguments -### `[ENV_VARS]...` +### `[ENV_VAR]...` Environment variable(s) to set e.g.: NODE_ENV=production diff --git a/docs/cli/tool.md b/docs/cli/tool.md index 55675d6740..476f55ba51 100644 --- a/docs/cli/tool.md +++ b/docs/cli/tool.md @@ -1,13 +1,13 @@ # `mise tool` -- **Usage**: `mise tool [FLAGS] ` +- **Usage**: `mise tool [FLAGS] ` - **Source code**: [`src/cli/tool.rs`](https://github.com/jdx/mise/blob/main/src/cli/tool.rs) Gets information about a tool ## Arguments -### `` +### `` Tool name to get information about diff --git a/docs/cli/unset.md b/docs/cli/unset.md index bb9ab2402e..62df989c48 100644 --- a/docs/cli/unset.md +++ b/docs/cli/unset.md @@ -1,6 +1,6 @@ # `mise unset` -- **Usage**: `mise unset [-f --file ] [-g --global] [KEYS]...` +- **Usage**: `mise unset [-f --file ] [-g --global] [ENV_KEY]...` - **Source code**: [`src/cli/unset.rs`](https://github.com/jdx/mise/blob/main/src/cli/unset.rs) Remove environment variable(s) from the config file. @@ -9,7 +9,7 @@ By default, this command modifies `mise.toml` in the current directory. ## Arguments -### `[KEYS]...` +### `[ENV_KEY]...` Environment variable(s) to remove e.g.: NODE_ENV diff --git a/docs/cli/which.md b/docs/cli/which.md index 2900338216..578d0b5615 100644 --- a/docs/cli/which.md +++ b/docs/cli/which.md @@ -1,6 +1,6 @@ # `mise which` -- **Usage**: `mise which [FLAGS] ` +- **Usage**: `mise which [FLAGS] [BIN_NAME]` - **Source code**: [`src/cli/which.rs`](https://github.com/jdx/mise/blob/main/src/cli/which.rs) Shows the path that a tool's bin points to. @@ -9,7 +9,7 @@ Use this to figure out what version of a tool is currently active. ## Arguments -### `` +### `[BIN_NAME]` The bin to look up diff --git a/e2e/cli/test_registry b/e2e/cli/test_registry index a42bf60560..6866b99917 100644 --- a/e2e/cli/test_registry +++ b/e2e/cli/test_registry @@ -1,4 +1,4 @@ #!/usr/bin/env bash assert "mise registry gh" "aqua:cli/cli ubi:cli/cli[exe=gh] asdf:bartlomiejdanek/asdf-github-cli" -assert_contains "mise registry" "gh aqua:cli/cli ubi:cli/cli[exe=gh] asdf:bartlomiejdanek/asdf-github-cli" +assert_contains "mise registry" "gh aqua:cli/cli ubi:cli/cli[exe=gh] asdf:bartlomiejdanek/asdf-github-cli" diff --git a/mise.lock b/mise.lock index 23a3785e8a..812b22c6f0 100644 --- a/mise.lock +++ b/mise.lock @@ -1,13 +1,9 @@ [tools.actionlint] -version = "1.7.4" +version = "1.7.5" backend = "aqua:rhysd/actionlint" [tools.actionlint.checksums] -actionlint-linux-x86_64 = "sha256:39cae525cdb54af5d91dcf27f55e040d37ecea01dd4153490c4dc84f5d251d46" -actionlint-macos-aarch64 = "sha256:f381afca13b39e095e4cee25e2b2abbb39ae8b2848f5ccd2564bf86192c1b661" -"actionlint.exe-windows-x86_64" = "sha256:04ca117d9f33b77731fd3ef6a3670bd6b11b40c1b1cc5b7aaf6c28392d74d2e2" -"actionlint_1.7.4_linux_amd64.tar.gz" = "sha256:fc0a6886bbb9a23a39eeec4b176193cadb54ddbe77cdbb19b637933919545395" -"actionlint_1.7.4_linux_arm64.tar.gz" = "sha256:ede03682dc955381d057dde95bb85ce9ca418122209a8a313b617d4adec56416" +"actionlint_1.7.5_darwin_arm64.tar.gz" = "sha256:397119f9baa3fd9fe195db340b30acdaea532826e19a047a9cc9d96add7c267d" [tools.bun] version = "1.1.42" diff --git a/mise.usage.kdl b/mise.usage.kdl index 6698573c4a..7759bf8f36 100644 --- a/mise.usage.kdl +++ b/mise.usage.kdl @@ -804,7 +804,7 @@ It's a useful command to get the current state of your tools."# } "# flag "-p --plugin" hide=true { - arg "" + arg "" } flag "-c --current" help="Only show tool versions currently specified in a mise.toml" flag "-g --global" help="Only show tool versions currently specified in the global mise.toml" @@ -817,7 +817,7 @@ It's a useful command to get the current state of your tools."# arg "" } flag "--no-header" help="Don't display headers" - arg "[PLUGIN]..." help="Only show tool versions from [PLUGIN]" required=false var=true + arg "[INSTALLED_TOOL]..." help="Only show tool versions from [TOOL]" required=false var=true } cmd "ls-remote" help="List runtime versions available for install." { alias "list-all" "list-remote" hide=true @@ -1025,6 +1025,7 @@ For example, `poetry` is shorthand for `asdf:mise-plugins/mise-poetry`." flag "-b --backend" help="Show only tools for this backend" { arg "" } + flag "--complete" help="Print all tools with descriptions for shell completions" hide=true flag "--hide-aliased" help="Hide aliased tools" arg "[NAME]" help="Show only the specified tool's full name" required=false } @@ -1169,12 +1170,13 @@ By default, this command modifies `mise.toml` in the current directory." long_help "The TOML file to update\n\nDefaults to MISE_DEFAULT_CONFIG_FILENAME environment variable, or `mise.toml`." arg "" } + flag "--complete" help="Render completions" hide=true flag "-g --global" help="Set the environment variable in the global config file" - flag "--remove" help="Remove the environment variable from config file" var=true hide=true { + flag "--remove --rm --unset" help="Remove the environment variable from config file" var=true hide=true { long_help "Remove the environment variable from config file\n\nCan be used multiple times." - arg "" + arg "" } - arg "[ENV_VARS]..." help="Environment variable(s) to set\ne.g.: NODE_ENV=production" required=false var=true + arg "[ENV_VAR]..." help="Environment variable(s) to set\ne.g.: NODE_ENV=production" required=false var=true } cmd "settings" help="Manage settings" { long_help r"Show current settings @@ -1624,7 +1626,7 @@ cmd "tool" help="Gets information about a tool" { flag "--requested" help="Only show requested versions" flag "--config-source" help="Only show config source" flag "--tool-options" help="Only show tool options" - arg "" help="Tool name to get information about" + arg "" help="Tool name to get information about" } cmd "trust" help="Marks a config file as trusted" { long_help r"Marks a config file as trusted @@ -1685,7 +1687,7 @@ By default, this command modifies `mise.toml` in the current directory." arg "" } flag "-g --global" help="Use the global config file" - arg "[KEYS]..." help="Environment variable(s) to remove\ne.g.: NODE_ENV" required=false var=true + arg "[ENV_KEY]..." help="Environment variable(s) to remove\ne.g.: NODE_ENV" required=false var=true } cmd "unuse" help="Removes installed tool versions from mise.toml" { alias "rm" "remove" @@ -2052,12 +2054,13 @@ Use this to figure out what version of a tool is currently active." $ mise which node --version 20.0.0 " + flag "--complete" hide=true flag "--plugin" help="Show the plugin name instead of the path" flag "--version" help="Show the version instead of the path" flag "-t --tool" help="Use a specific tool@version\ne.g.: `mise which npm --tool=node@20`" { arg "" } - arg "" help="The bin to look up" + arg "[BIN_NAME]" help="The bin to look up" required=false } cmd "render-help" hide=true help="internal command to generate markdown from help" cmd "render-mangen" hide=true help="internal command to generate markdown from help" @@ -2066,10 +2069,16 @@ source_code_link_template "https://github.com/jdx/mise/blob/main/src/cli/{{path} complete "alias" run="mise alias ls {{words[PREV]}} | awk '{print $2}'" complete "config_file" type="file" complete "new_plugin" run="mise plugins --all" +complete "installed_tool" run="mise plugins --core --user" complete "plugin" run="mise plugins --core --user" complete "prefix" run="mise ls-remote {{words[PREV]}}" complete "setting" run="mise settings --complete" descriptions=true complete "task" run="mise tasks ls --complete" descriptions=true +complete "tool" run="mise registry --complete" descriptions=true +complete "env_var" run=r#"mise set --complete | awk '{print $1"="}'"# +complete "env_key" run="mise set --complete" +complete "backend" run="mise backends" +complete "bin_name" run="mise which --complete" complete "tool@version" run=r#" cur="{{words[CURRENT]}}" diff --git a/src/assets/mise-extra.usage.kdl b/src/assets/mise-extra.usage.kdl index f909aef627..b248f104d6 100644 --- a/src/assets/mise-extra.usage.kdl +++ b/src/assets/mise-extra.usage.kdl @@ -3,10 +3,16 @@ source_code_link_template "https://github.com/jdx/mise/blob/main/src/cli/{{path} complete "alias" run="mise alias ls {{words[PREV]}} | awk '{print $2}'" complete "config_file" type="file" complete "new_plugin" run="mise plugins --all" +complete "installed_tool" run="mise plugins --core --user" complete "plugin" run="mise plugins --core --user" complete "prefix" run="mise ls-remote {{words[PREV]}}" complete "setting" run="mise settings --complete" descriptions=true complete "task" run="mise tasks ls --complete" descriptions=true +complete "tool" run="mise registry --complete" descriptions=true +complete "env_var" run=r#"mise set --complete | awk '{print $1"="}'"# +complete "env_key" run="mise set --complete" +complete "backend" run="mise backends" +complete "bin_name" run="mise which --complete" complete "tool@version" run=r#" cur="{{words[CURRENT]}}" diff --git a/src/cli/ls.rs b/src/cli/ls.rs index a1a83e4020..4646d5fb64 100644 --- a/src/cli/ls.rs +++ b/src/cli/ls.rs @@ -25,12 +25,12 @@ use crate::ui::table::MiseTable; #[derive(Debug, clap::Args)] #[clap(visible_alias = "list", verbatim_doc_comment, after_long_help = AFTER_LONG_HELP)] pub struct Ls { - /// Only show tool versions from [PLUGIN] - #[clap(conflicts_with = "plugin_flag")] - plugin: Option>, + /// Only show tool versions from [TOOL] + #[clap(conflicts_with = "tool_flag")] + installed_tool: Option>, - #[clap(long = "plugin", short, hide = true)] - plugin_flag: Option, + #[clap(long = "plugin", short = 'p', hide = true)] + tool_flag: Option, /// Only show tool versions currently specified in a mise.toml #[clap(long, short)] @@ -62,7 +62,7 @@ pub struct Ls { missing: bool, /// Display versions matching this prefix - #[clap(long, requires = "plugin")] + #[clap(long, requires = "installed_tool")] prefix: Option, /// Don't display headers @@ -73,9 +73,9 @@ pub struct Ls { impl Ls { pub fn run(mut self) -> Result<()> { let config = Config::try_get()?; - self.plugin = self - .plugin - .or_else(|| self.plugin_flag.clone().map(|p| vec![p])); + self.installed_tool = self + .installed_tool + .or_else(|| self.tool_flag.clone().map(|p| vec![p])); self.verify_plugin()?; let mut runtimes = self.get_runtime_list(&config)?; @@ -101,7 +101,7 @@ impl Ls { } fn verify_plugin(&self) -> Result<()> { - if let Some(plugins) = &self.plugin { + if let Some(plugins) = &self.installed_tool { for ba in plugins { if let Some(plugin) = ba.backend()?.plugin() { ensure!(plugin.is_installed(), "{ba} is not installed"); @@ -112,7 +112,7 @@ impl Ls { } fn display_json(&self, runtimes: Vec) -> Result<()> { - if let Some(plugins) = &self.plugin { + if let Some(plugins) = &self.installed_tool { // only runtimes for 1 plugin let runtimes: Vec = runtimes .into_iter() @@ -185,7 +185,7 @@ impl Ls { .list_all_versions()? .into_iter() .map(|(b, tv)| ((b, tv.version.clone()), tv)) - .filter(|((b, _), _)| match &self.plugin { + .filter(|((b, _), _)| match &self.installed_tool { Some(p) => p.contains(b.ba()), None => true, }) @@ -199,7 +199,7 @@ impl Ls { .map(|(k, tv)| (self, k.0, tv.clone(), tv.request.source().clone())) // if it isn't installed and it's not specified, don't show it .filter(|(_ls, p, tv, source)| !source.is_unknown() || p.is_version_installed(tv, true)) - .filter(|(_ls, p, _, _)| match &self.plugin { + .filter(|(_ls, p, _, _)| match &self.installed_tool { Some(backend) => backend.contains(p.ba()), None => true, }) diff --git a/src/cli/registry.rs b/src/cli/registry.rs index bcb46625ca..d9508bcfde 100644 --- a/src/cli/registry.rs +++ b/src/cli/registry.rs @@ -1,10 +1,9 @@ use crate::backend::backend_type::BackendType; use crate::config::SETTINGS; use crate::registry::{RegistryTool, REGISTRY}; -use crate::ui::table; +use crate::ui::table::MiseTable; use eyre::{bail, Result}; use itertools::Itertools; -use tabled::{Table, Tabled}; /// List available tools to install /// @@ -21,6 +20,10 @@ pub struct Registry { #[clap(short, long)] backend: Option, + /// Print all tools with descriptions for shell completions + #[clap(long, hide = true)] + complete: bool, + /// Hide aliased tools #[clap(long)] hide_aliased: bool, @@ -28,6 +31,21 @@ pub struct Registry { impl Registry { pub fn run(self) -> Result<()> { + if let Some(name) = &self.name { + if let Some(rt) = REGISTRY.get(name.as_str()) { + miseprintln!("{}", rt.backends().join(" ")); + } else { + bail!("tool not found in registry: {name}"); + } + } else if self.complete { + self.complete()?; + } else { + self.display_table()?; + } + Ok(()) + } + + fn display_table(&self) -> Result<()> { let filter_backend = |rt: &RegistryTool| { if let Some(backend) = self.backend { rt.backends() @@ -39,38 +57,44 @@ impl Registry { rt.backends() } }; - if let Some(name) = &self.name { - if let Some(rt) = REGISTRY.get(name.as_str()) { - miseprintln!("{}", rt.backends().join(" ")); - } else { - bail!("tool not found in registry: {name}"); - } - } else { - let data = REGISTRY - .iter() - .filter(|(short, _)| !SETTINGS.disable_tools.contains(**short)) - .filter(|(short, rt)| !self.hide_aliased || **short == rt.short) - .map(|(short, rt)| Row::from((short.to_string(), filter_backend(rt).join(" ")))) - .filter(|row| !row.backends.is_empty()) - .sorted_by(|a, b| a.short.cmp(&b.short)); - let mut table = Table::new(data); - table::default_style(&mut table, false); - miseprintln!("{table}"); + let mut table = MiseTable::new(false, &["Tool", "Backends"]); + let data = REGISTRY + .iter() + .filter(|(short, _)| !SETTINGS.disable_tools.contains(**short)) + .filter(|(short, rt)| !self.hide_aliased || **short == rt.short) + .map(|(short, rt)| (short.to_string(), filter_backend(rt).join(" "))) + .filter(|(_, backends)| !backends.is_empty()) + .sorted_by(|(a, _), (b, _)| a.cmp(b)) + .map(|(short, backends)| vec![short, backends]) + .collect_vec(); + for row in data { + table.add_row(row); } - Ok(()) + table.print() } -} -#[derive(Tabled, Eq, PartialEq, Ord, PartialOrd)] -#[tabled(rename_all = "PascalCase")] -struct Row { - short: String, - backends: String, -} - -impl From<(String, String)> for Row { - fn from((short, backends): (String, String)) -> Self { - Self { short, backends } + fn complete(&self) -> Result<()> { + REGISTRY + .iter() + .filter(|(short, _)| !SETTINGS.disable_tools.contains(**short)) + .filter(|(short, rt)| !self.hide_aliased || **short == rt.short) + .map(|(short, rt)| { + ( + short.to_string(), + rt.description + .or(rt.backends().first().cloned()) + .unwrap_or_default(), + ) + }) + .sorted_by(|(a, _), (b, _)| a.cmp(b)) + .for_each(|(short, description)| { + println!( + "{}:{}", + short.replace(":", "\\:"), + description.replace(":", "\\:") + ); + }); + Ok(()) } } diff --git a/src/cli/set.rs b/src/cli/set.rs index 6a2f034491..f71f3f6d93 100644 --- a/src/cli/set.rs +++ b/src/cli/set.rs @@ -25,6 +25,10 @@ pub struct Set { #[clap(long, verbatim_doc_comment, required = false, value_hint = clap::ValueHint::FilePath)] file: Option, + /// Render completions + #[clap(long, hide = true)] + complete: bool, + /// Set the environment variable in the global config file #[clap(short, long, verbatim_doc_comment, overrides_with = "file")] global: bool, @@ -32,17 +36,20 @@ pub struct Set { /// Remove the environment variable from config file /// /// Can be used multiple times. - #[clap(long, value_name = "ENV_VAR", verbatim_doc_comment, aliases = ["rm", "unset"], hide = true)] + #[clap(long, value_name = "ENV_KEY", verbatim_doc_comment, visible_aliases = ["rm", "unset"], hide = true)] remove: Option>, /// Environment variable(s) to set /// e.g.: NODE_ENV=production - #[clap(verbatim_doc_comment)] + #[clap(value_name = "ENV_VAR", verbatim_doc_comment)] env_vars: Option>, } impl Set { pub fn run(self) -> Result<()> { + if self.complete { + return self.complete(); + } match (&self.remove, &self.env_vars) { (None, None) => { return self.list_all(); @@ -86,6 +93,13 @@ impl Set { mise_toml.save() } + fn complete(&self) -> Result<()> { + for ev in self.cur_env()? { + println!("{}", ev.key); + } + Ok(()) + } + fn list_all(self) -> Result<()> { let env = self.cur_env()?; let mut table = tabled::Table::new(env); diff --git a/src/cli/tool.rs b/src/cli/tool.rs index 191f305632..340ba80464 100644 --- a/src/cli/tool.rs +++ b/src/cli/tool.rs @@ -12,7 +12,7 @@ use crate::ui::table; #[clap(verbatim_doc_comment, after_long_help = AFTER_LONG_HELP)] pub struct Tool { /// Tool name to get information about - backend: BackendArg, + tool: BackendArg, /// Output in JSON format #[clap(long, short = 'J')] json: bool, @@ -57,9 +57,9 @@ impl Tool { pub fn run(self) -> Result<()> { let mut ts = ToolsetBuilder::new().build(&Config::get())?; ts.resolve()?; - let tvl = ts.versions.get(&self.backend); + let tvl = ts.versions.get(&self.tool); let tv = tvl.map(|tvl| tvl.versions.first().unwrap()); - let ba = tv.map(|tv| tv.ba()).unwrap_or_else(|| &self.backend); + let ba = tv.map(|tv| tv.ba()).unwrap_or_else(|| &self.tool); let backend = ba.backend().ok(); let info = ToolInfo { backend: ba.full(), diff --git a/src/cli/unset.rs b/src/cli/unset.rs index 3bcc8abb9b..0afd71dc43 100644 --- a/src/cli/unset.rs +++ b/src/cli/unset.rs @@ -14,7 +14,7 @@ use crate::{config, env}; pub struct Unset { /// Environment variable(s) to remove /// e.g.: NODE_ENV - #[clap(verbatim_doc_comment)] + #[clap(verbatim_doc_comment, value_name = "ENV_KEY")] keys: Vec, /// Specify a file to use instead of `mise.toml` diff --git a/src/cli/which.rs b/src/cli/which.rs index d2d6d4f71c..500f18cd6f 100644 --- a/src/cli/which.rs +++ b/src/cli/which.rs @@ -1,9 +1,10 @@ -use eyre::{bail, Result}; - use crate::cli::args::ToolArg; use crate::config::Config; use crate::dirs::SHIMS; +use crate::file; use crate::toolset::{Toolset, ToolsetBuilder}; +use eyre::{bail, Result}; +use itertools::Itertools; /// Shows the path that a tool's bin points to. /// @@ -12,8 +13,11 @@ use crate::toolset::{Toolset, ToolsetBuilder}; #[clap(verbatim_doc_comment, after_long_help = AFTER_LONG_HELP)] pub struct Which { /// The bin to look up - #[clap()] - pub bin_name: String, + #[clap(required_unless_present = "complete")] + pub bin_name: Option, + + #[clap(long, hide = true)] + pub complete: bool, /// Show the plugin name instead of the path #[clap(long, conflicts_with = "version")] @@ -31,32 +35,48 @@ pub struct Which { impl Which { pub fn run(self) -> Result<()> { + if self.complete { + return self.complete(); + } let ts = self.get_toolset()?; - match ts.which(&self.bin_name) { + let bin_name = self.bin_name.clone().unwrap(); + match ts.which(&bin_name) { Some((p, tv)) => { if self.version { miseprintln!("{}", tv.version); } else if self.plugin { miseprintln!("{p}"); } else { - let path = p.which(&tv, &self.bin_name)?; + let path = p.which(&tv, &bin_name)?; miseprintln!("{}", path.unwrap().display()); } Ok(()) } None => { - if self.has_shim(&self.bin_name) { - bail!("{} is a mise bin however it is not currently active. Use `mise use` to activate it in this directory.", self.bin_name) + if self.has_shim(&bin_name) { + bail!("{bin_name} is a mise bin however it is not currently active. Use `mise use` to activate it in this directory.") } else { - bail!( - "{} is not a mise bin. Perhaps you need to install it first.", - self.bin_name - ) + bail!("{bin_name} is not a mise bin. Perhaps you need to install it first.",) } } } } + fn complete(&self) -> Result<()> { + let ts = self.get_toolset()?; + let bins = ts + .list_paths() + .into_iter() + .flat_map(|p| file::ls(&p).unwrap_or_default()) + .map(|p| p.file_name().unwrap().to_string_lossy().to_string()) + .unique() + .sorted() + .collect_vec(); + for bin in bins { + println!("{}", bin); + } + Ok(()) + } fn get_toolset(&self) -> Result { let config = Config::try_get()?; let mut tsb = ToolsetBuilder::new(); diff --git a/xtasks/fig/src/mise.ts b/xtasks/fig/src/mise.ts index c947247fa0..1142dece96 100644 --- a/xtasks/fig/src/mise.ts +++ b/xtasks/fig/src/mise.ts @@ -460,7 +460,8 @@ const completionSpec: Fig.Spec = { "args": { "name": "tool", "description": "Show aliases for ", - "isOptional": true + "isOptional": true, + "generators": completionGeneratorTemplate(`mise registry --complete`) } }, { @@ -1412,11 +1413,11 @@ const completionSpec: Fig.Spec = { } ], "args": { - "name": "plugin", - "description": "Only show tool versions from [PLUGIN]", + "name": "installed_tool", + "description": "Only show tool versions from [TOOL]", "isOptional": true, "isVariadic": true, - "generators": pluginGenerator + "generators": completionGeneratorTemplate(`mise plugins --core --user`) } }, { @@ -1715,7 +1716,8 @@ const completionSpec: Fig.Spec = { "name": "installed_tool", "description": "Prune only these tools", "isOptional": true, - "isVariadic": true + "isVariadic": true, + "generators": completionGeneratorTemplate(`mise plugins --core --user`) } }, { @@ -1730,7 +1732,8 @@ const completionSpec: Fig.Spec = { "description": "Show only tools for this backend", "isRepeatable": false, "args": { - "name": "backend" + "name": "backend", + "generators": completionGeneratorTemplate(`mise backends`) } }, { @@ -1934,7 +1937,7 @@ const completionSpec: Fig.Spec = { } ], "args": { - "name": "env_vars", + "name": "env_var", "description": "Environment variable(s) to set\ne.g.: NODE_ENV=production", "isOptional": true, "isVariadic": true, @@ -2763,8 +2766,9 @@ const completionSpec: Fig.Spec = { } ], "args": { - "name": "backend", - "description": "Tool name to get information about" + "name": "tool", + "description": "Tool name to get information about", + "generators": completionGeneratorTemplate(`mise registry --complete`) } }, { @@ -2858,10 +2862,11 @@ const completionSpec: Fig.Spec = { } ], "args": { - "name": "keys", + "name": "env_key", "description": "Environment variable(s) to remove\ne.g.: NODE_ENV", "isOptional": true, - "isVariadic": true + "isVariadic": true, + "generators": completionGeneratorTemplate(`mise set --complete`) } }, { @@ -3493,7 +3498,9 @@ const completionSpec: Fig.Spec = { ], "args": { "name": "bin_name", - "description": "The bin to look up" + "description": "The bin to look up", + "isOptional": true, + "generators": completionGeneratorTemplate(`mise which --complete`) } } ], From ef6936a3091752d0d6b030a892eaa6f8a905736c Mon Sep 17 00:00:00 2001 From: mise-en-dev Date: Wed, 1 Jan 2025 14:00:46 -0600 Subject: [PATCH 060/289] chore: release 2025.1.0 (#3894) --- CHANGELOG.md | 147 ++++++++++++++-------------------------- Cargo.lock | 54 ++++++++------- Cargo.toml | 2 +- README.md | 2 +- aqua-registry | 2 +- completions/_mise | 6 +- completions/mise.bash | 6 +- completions/mise.fish | 6 +- default.nix | 2 +- packaging/rpm/mise.spec | 2 +- 10 files changed, 94 insertions(+), 135 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3fde29d26..34364ae1da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,32 @@ # Changelog +## [2025.1.0](https://github.com/jdx/mise/compare/v2024.12.24..v2025.1.0) - 2025-01-01 + +### ๐Ÿš€ Features + +- use aqua for gradle by [@jdx](https://github.com/jdx) in [#3903](https://github.com/jdx/mise/pull/3903) +- added completions to more commands by [@jdx](https://github.com/jdx) in [#3910](https://github.com/jdx/mise/pull/3910) + +### ๐Ÿ› Bug Fixes + +- panic when setting config value by [@roele](https://github.com/roele) in [#3823](https://github.com/jdx/mise/pull/3823) +- add hidden settings/task --complete option by [@jdx](https://github.com/jdx) in [#3902](https://github.com/jdx/mise/pull/3902) +- handle panic when task contains invalid template by [@jdx](https://github.com/jdx) in [#3904](https://github.com/jdx/mise/pull/3904) +- missing checksums in mise.run script by [@jdx](https://github.com/jdx) in [#3906](https://github.com/jdx/mise/pull/3906) +- active flag for symlinked tools in `mise ls --json` by [@jdx](https://github.com/jdx) in [#3907](https://github.com/jdx/mise/pull/3907) + +### ๐Ÿ“š Documentation + +- Update LICENSE by [@jdx](https://github.com/jdx) in [156db11](https://github.com/jdx/mise/commit/156db1130c2757aaaf6e53686148d8b9b0791ae7) +- updated roadmap by [@jdx](https://github.com/jdx) in [f8916d4](https://github.com/jdx/mise/commit/f8916d4cbd09fbbc8142bf25b4d586e146d19a21) + ## [2024.12.24](https://github.com/jdx/mise/compare/v2024.12.23..v2024.12.24) - 2024-12-31 ### ๐Ÿ› Bug Fixes - switch back to asdf for gradle by [@jdx](https://github.com/jdx) in [cc88dca](https://github.com/jdx/mise/commit/cc88dca50e8e0dac94dbb83d0ce1ebcfc38a1ec4) -### ๐Ÿ” Other Changes +### Chore - add commented out cleanup of old CLIs by [@jdx](https://github.com/jdx) in [bb7e022](https://github.com/jdx/mise/commit/bb7e022240c0e7019a595d093a33b414119e975f) @@ -25,9 +45,8 @@ - Update registry link by [@bmulholland](https://github.com/bmulholland) in [#3864](https://github.com/jdx/mise/pull/3864) - clarify shims behaviour by [@syhol](https://github.com/syhol) in [#3881](https://github.com/jdx/mise/pull/3881) -### ๐Ÿ” Other Changes +### Chore -- Fix sh code block by [@o-l-a-v](https://github.com/o-l-a-v) in [#3876](https://github.com/jdx/mise/pull/3876) - remove unused versioned tarballs from mise.jdx.dev by [@jdx](https://github.com/jdx) in [48f1021](https://github.com/jdx/mise/commit/48f1021048646061e7cd85d9f9969946b00962a6) - trim newline in banner by [@jdx](https://github.com/jdx) in [c8f2c90](https://github.com/jdx/mise/commit/c8f2c90111c5d20fe4586d59eb66f3bb2f8cfd9a) @@ -51,15 +70,6 @@ - **(settings)** fix link to precompiled python binaries by [@scop](https://github.com/scop) in [#3851](https://github.com/jdx/mise/pull/3851) - Fix cargo install examples by [@orf](https://github.com/orf) in [#3862](https://github.com/jdx/mise/pull/3862) -### ๐Ÿ” Other Changes - -- Delete .github/ISSUE_TEMPLATE/blank.md by [@jdx](https://github.com/jdx) in [0a6b692](https://github.com/jdx/mise/commit/0a6b6925107b088d6dd65ae2ed5fc7de6abf6788) -- Delete .github/ISSUE_TEMPLATE/bug_report.md by [@jdx](https://github.com/jdx) in [951eab7](https://github.com/jdx/mise/commit/951eab7ca534a713cdc470704967057951ff4743) -- Create config.yml by [@jdx](https://github.com/jdx) in [d167979](https://github.com/jdx/mise/commit/d16797986a770c5340c472726ed05397463a6755) -- Delete .github/ISSUE_TEMPLATE/feature_request.md by [@jdx](https://github.com/jdx) in [1bb59d9](https://github.com/jdx/mise/commit/1bb59d9f1cbd9667e4afdae41448450a744af0c0) -- Create preapproved.md by [@jdx](https://github.com/jdx) in [51fa75e](https://github.com/jdx/mise/commit/51fa75e9aa265434d73a469cf44a9af8ba554877) -- Delete .github/ISSUE_TEMPLATE/preapproved.md by [@jdx](https://github.com/jdx) in [2b94fcf](https://github.com/jdx/mise/commit/2b94fcf2ecc8b91d30addf0f547216a180345ad8) - ### New Contributors - @orf made their first contribution in [#3862](https://github.com/jdx/mise/pull/3862) @@ -114,7 +124,7 @@ - use zstd in mise.run by [@jdx](https://github.com/jdx) in [#3798](https://github.com/jdx/mise/pull/3798) - verify zig with minisign by [@jdx](https://github.com/jdx) in [#3793](https://github.com/jdx/mise/pull/3793) -### ๐Ÿ” Other Changes +### Chore - increase tarball compression by [@jdx](https://github.com/jdx) in [a899155](https://github.com/jdx/mise/commit/a8991551bd7c61d1f75a800906d2f718b4bdf7c0) - use max threads for zstd compression by [@jdx](https://github.com/jdx) in [a3f792a](https://github.com/jdx/mise/commit/a3f792a1eb0a395c7a82a063b96d30282b6343de) @@ -144,14 +154,13 @@ - added stubbed test for https://github.com/jdx/mise/discussions/3783 by [@jdx](https://github.com/jdx) in [f79a3a4](https://github.com/jdx/mise/commit/f79a3a41ebf833d2c49bdc91ae4026c46498d9f7) -### ๐Ÿ” Other Changes +### Chore - add shell to user-agent by [@jdx](https://github.com/jdx) in [#3786](https://github.com/jdx/mise/pull/3786) - sign releases with minisign by [@jdx](https://github.com/jdx) in [#3789](https://github.com/jdx/mise/pull/3789) - create minisign secret key by [@jdx](https://github.com/jdx) in [dea4676](https://github.com/jdx/mise/commit/dea4676f53ee4d1a905ae17b004131c6dee3b385) - create minisign secret key by [@jdx](https://github.com/jdx) in [ecebebe](https://github.com/jdx/mise/commit/ecebebee13cc20773eaefda706bad4e5ac8cc25f) - fix minisign signing by [@jdx](https://github.com/jdx) in [6401ff8](https://github.com/jdx/mise/commit/6401ff84e0dcbdb890dd037aff6fbcf3edc51af5) -- Revert "fix: Use arguments for to pass staged filenames to pre-commit task (#โ€ฆ" by [@jdx](https://github.com/jdx) in [#3791](https://github.com/jdx/mise/pull/3791) - added install.sh to releases by [@jdx](https://github.com/jdx) in [2946d58](https://github.com/jdx/mise/commit/2946d5864cffb65a1ee1260f3c38070531743854) - install minisign by [@jdx](https://github.com/jdx) in [f22272c](https://github.com/jdx/mise/commit/f22272c3838fcb8de0365a4022f8aefc00c46f4c) - use ubuntu-24 for release by [@jdx](https://github.com/jdx) in [40a13f8](https://github.com/jdx/mise/commit/40a13f8e7088ba13762178eccc5eb8438bc9ce6b) @@ -192,7 +201,7 @@ - fix elixir release test by [@jdx](https://github.com/jdx) in [b4f11da](https://github.com/jdx/mise/commit/b4f11dabf7a16a875f9d7ab3ded6a516b481f6f8) - add some test cases for env var templates by [@jdx](https://github.com/jdx) in [c938977](https://github.com/jdx/mise/commit/c938977ccc265c9530200e0b19bb0cce5f73ddbb) -### ๐Ÿ” Other Changes +### Chore - updated usage by [@jdx](https://github.com/jdx) in [dad7857](https://github.com/jdx/mise/commit/dad785727c80efeb4bf498995ed5237f6cd94d79) @@ -218,19 +227,15 @@ - remove reference to deprecated asdf_compat functionality by [@jdx](https://github.com/jdx) in [03a2afb](https://github.com/jdx/mise/commit/03a2afb4f8c738e3b172d0f5e1ca1465bf1d6a5c) - describe behavior of `run --output` better by [@jdx](https://github.com/jdx) in [#3740](https://github.com/jdx/mise/pull/3740) -### ๐Ÿ” Other Changes - -- Update bug_report.md by [@jdx](https://github.com/jdx) in [5365b72](https://github.com/jdx/mise/commit/5365b72ba6c89ddcd04604f897237d9f6a6a93d0) -- Update feature_request.md by [@jdx](https://github.com/jdx) in [4947e99](https://github.com/jdx/mise/commit/4947e995ecb463e848f821f0577e9cd469ff9881) -- Update blank.md by [@jdx](https://github.com/jdx) in [6bd6d58](https://github.com/jdx/mise/commit/6bd6d582d36f2605a07a63612f41375eb87f5691) -- lint fix by [@jdx](https://github.com/jdx) in [118b8de](https://github.com/jdx/mise/commit/118b8de645712ff1d78c33b9a2c094a1f92c5b20) -- Clarify docs on using oh-my-zsh plugin by [@ssbarnea](https://github.com/ssbarnea) in [#3735](https://github.com/jdx/mise/pull/3735) -- switch from home -> homedir crate by [@jdx](https://github.com/jdx) in [#3743](https://github.com/jdx/mise/pull/3743) - ### ๐Ÿ“ฆ๏ธ Dependency Updates - update dependency bun to v1.1.40 by [@renovate[bot]](https://github.com/renovate[bot]) in [#3729](https://github.com/jdx/mise/pull/3729) +### Chore + +- lint fix by [@jdx](https://github.com/jdx) in [118b8de](https://github.com/jdx/mise/commit/118b8de645712ff1d78c33b9a2c094a1f92c5b20) +- switch from home -> homedir crate by [@jdx](https://github.com/jdx) in [#3743](https://github.com/jdx/mise/pull/3743) + ### New Contributors - @acesyde made their first contribution in [#3737](https://github.com/jdx/mise/pull/3737) @@ -276,12 +281,9 @@ - fix conduit test for new structure by [@jdx](https://github.com/jdx) in [8691331](https://github.com/jdx/mise/commit/86913318f7705e6cabb999970475c958605219d1) -### ๐Ÿ” Other Changes +### Chore -- Update continuous-integration.md by [@highb](https://github.com/highb) in [#3696](https://github.com/jdx/mise/pull/3696) -- Update installing-mise.md by [@jdx](https://github.com/jdx) in [8b805de](https://github.com/jdx/mise/commit/8b805de7dc52fed1f07ff689c2f3658faa55b90a) - hide non-functioning docker tasks by [@jdx](https://github.com/jdx) in [40fd3f6](https://github.com/jdx/mise/commit/40fd3f60ebde1d549503a6d9927b79b37622b1b0) -- Update contributing.md by [@jdx](https://github.com/jdx) in [4f960eb](https://github.com/jdx/mise/commit/4f960ebe6f9350399bf09c1701320b896c34eef0) ### New Contributors @@ -314,11 +316,6 @@ - add test cases for venv templates by [@jdx](https://github.com/jdx) in [#3683](https://github.com/jdx/mise/pull/3683) -### ๐Ÿ” Other Changes - -- Update index.md by [@jdx](https://github.com/jdx) in [907a96a](https://github.com/jdx/mise/commit/907a96ac04e3c8560c5a8f361263597d796186b5) -- Update config.ts by [@jdx](https://github.com/jdx) in [bc22e7c](https://github.com/jdx/mise/commit/bc22e7ca9222bdcbd6349277bbe682cd53511584) - ### New Contributors - @NavyD made their first contribution in [#3664](https://github.com/jdx/mise/pull/3664) @@ -354,7 +351,7 @@ - add elixir to sidebar by [@risu729](https://github.com/risu729) in [#3650](https://github.com/jdx/mise/pull/3650) - update task documentation by [@hverlin](https://github.com/hverlin) in [#3651](https://github.com/jdx/mise/pull/3651) -### ๐Ÿ” Other Changes +### Chore - format toml with taplo by [@jdx](https://github.com/jdx) in [#3625](https://github.com/jdx/mise/pull/3625) - add platform field to registry backends by [@jdx](https://github.com/jdx) in [#3626](https://github.com/jdx/mise/pull/3626) @@ -388,7 +385,7 @@ - Install on Windows - Update doc on install on Windows with Scoop and WinGet + fix NOTE section by [@o-l-a-v](https://github.com/o-l-a-v) in [#3604](https://github.com/jdx/mise/pull/3604) - remove note about winget by [@jdx](https://github.com/jdx) in [9c0c1ce](https://github.com/jdx/mise/commit/9c0c1ce943c6fb54ca049d6cdfb81c1122987d05) -### ๐Ÿ” Other Changes +### Chore - disable automatic cargo up on release by [@jdx](https://github.com/jdx) in [3f0d91a](https://github.com/jdx/mise/commit/3f0d91a40928df8ed10cef1837730d8c3a15efea) @@ -431,14 +428,6 @@ - better warning when venv auto create is skipped by [@syhol](https://github.com/syhol) in [#3573](https://github.com/jdx/mise/pull/3573) - added rendered go settings by [@jdx](https://github.com/jdx) in [b41c3dd](https://github.com/jdx/mise/commit/b41c3dd8cfd97f97352900a9d856194185347e8d) -### ๐Ÿ” Other Changes - -- Update comparison-to-asdf.md by [@jdx](https://github.com/jdx) in [e7715c8](https://github.com/jdx/mise/commit/e7715c87811cb30848e3c0475f647ef97e09f7a5) -- Update task-configuration.md by [@jdx](https://github.com/jdx) in [e3586b7](https://github.com/jdx/mise/commit/e3586b7ee6c47cd1dd8ca4706a7c83d6d4a93857) -- Update contributing.md by [@jdx](https://github.com/jdx) in [80d5b8d](https://github.com/jdx/mise/commit/80d5b8d78dbc15e57751c518fd6693fb4c432ab5) -- Fix concat for nushell script by [@samuelallan72](https://github.com/samuelallan72) in [#3591](https://github.com/jdx/mise/pull/3591) -- use sudo for apt by [@fhalim](https://github.com/fhalim) in [#3595](https://github.com/jdx/mise/pull/3595) - ### New Contributors - @fhalim made their first contribution in [#3595](https://github.com/jdx/mise/pull/3595) @@ -467,11 +456,9 @@ - add installation via zinit by [@Finkregh](https://github.com/Finkregh) in [#3563](https://github.com/jdx/mise/pull/3563) -### ๐Ÿ” Other Changes +### Chore -- Update config.ts by [@jdx](https://github.com/jdx) in [7ba504c](https://github.com/jdx/mise/commit/7ba504cf2cf5b0f64ffc77e3c6ef03092971cdf1) - added comfy-table by [@jdx](https://github.com/jdx) in [#3561](https://github.com/jdx/mise/pull/3561) -- Update tips-and-tricks.md by [@jdx](https://github.com/jdx) in [a09d4c2](https://github.com/jdx/mise/commit/a09d4c29a95f72b7c41855bc8cae35b168e31cc8) - pitchfork by [@jdx](https://github.com/jdx) in [2c47f72](https://github.com/jdx/mise/commit/2c47f721c03e8fed57a8ae5ed2f63a0649ffaa9b) - updated usage by [@jdx](https://github.com/jdx) in [#3564](https://github.com/jdx/mise/pull/3564) - added install-dev task by [@jdx](https://github.com/jdx) in [0c351a8](https://github.com/jdx/mise/commit/0c351a83d952cff8b953fd5c244698a14d74c305) @@ -507,10 +494,6 @@ - pin swift version by [@jdx](https://github.com/jdx) in [2b966a4](https://github.com/jdx/mise/commit/2b966a4945851b35be593182527bd40a80279fe4) - skip firebase by [@jdx](https://github.com/jdx) in [e5714bc](https://github.com/jdx/mise/commit/e5714bcfe9cd45f173aecefcbd3c95fbeab83417) -### ๐Ÿ” Other Changes - -- Update pipx.md by [@jdx](https://github.com/jdx) in [5fc9d9d](https://github.com/jdx/mise/commit/5fc9d9df43221a63d17dcf39ebacd2d5fabb1f39) - ### ๐Ÿ“ฆ๏ธ Dependency Updates - update rust crate bzip2 to 0.5 by [@renovate[bot]](https://github.com/renovate[bot]) in [#3511](https://github.com/jdx/mise/pull/3511) @@ -531,9 +514,8 @@ - Add more examples for toml tasks by [@hverlin](https://github.com/hverlin) in [#3491](https://github.com/jdx/mise/pull/3491) -### ๐Ÿ” Other Changes +### Chore -- Fix README link. by [@biggusbeetus](https://github.com/biggusbeetus) in [#3502](https://github.com/jdx/mise/pull/3502) - use main branch for winget by [@jdx](https://github.com/jdx) in [b4036cf](https://github.com/jdx/mise/commit/b4036cf0d10f6ccd8758b0bebc341963c8777d2e) ### New Contributors @@ -570,7 +552,7 @@ - updated `mise watch` docs to drop the `-t` by [@jdx](https://github.com/jdx) in [8ea6226](https://github.com/jdx/mise/commit/8ea622688cb01a0a0a2805692b38a4a7f1340ce5) -### ๐Ÿ” Other Changes +### Chore - move debug log to trace by [@jdx](https://github.com/jdx) in [5c6c884](https://github.com/jdx/mise/commit/5c6c884cf51e704d1c8c347790ec30b30b0f401e) @@ -606,10 +588,9 @@ - remove bad formatting in setting by [@jdx](https://github.com/jdx) in [f33813b](https://github.com/jdx/mise/commit/f33813bde40cf65e946a3c1773a4275fce3cb0ef) - added external links by [@jdx](https://github.com/jdx) in [8271e7b](https://github.com/jdx/mise/commit/8271e7ba0fa8628279cff0460715ec9c80a1c6bd) -### ๐Ÿ” Other Changes +### Chore - fix windows zip structure by [@jdx](https://github.com/jdx) in [195039f](https://github.com/jdx/mise/commit/195039ff2bbe702c7e80ace3fcaeb95cb02d018b) -- Update contributing.md by [@jdx](https://github.com/jdx) in [bdd06e5](https://github.com/jdx/mise/commit/bdd06e5716d92e157c809f0f73823c9df9d3133b) ### New Contributors @@ -637,7 +618,7 @@ - example with required version by [@felixhummel](https://github.com/felixhummel) in [#3448](https://github.com/jdx/mise/pull/3448) - document new windows installers by [@jdx](https://github.com/jdx) in [#3452](https://github.com/jdx/mise/pull/3452) -### ๐Ÿ” Other Changes +### Chore - added winget workflow by [@jdx](https://github.com/jdx) in [901e048](https://github.com/jdx/mise/commit/901e04865842f765188dd687584f9120ad4e5519) @@ -666,13 +647,9 @@ - Small documentation improvements by [@hverlin](https://github.com/hverlin) in [#3413](https://github.com/jdx/mise/pull/3413) - updated demo.gif by [@jdx](https://github.com/jdx) in [#3419](https://github.com/jdx/mise/pull/3419) -### ๐Ÿ” Other Changes +### Build -- Update walkthrough.md by [@jdx](https://github.com/jdx) in [c3aa2d0](https://github.com/jdx/mise/commit/c3aa2d0f0b5269e432fa78ba4545b0320be55826) -- Update hooks.md by [@jdx](https://github.com/jdx) in [9c71e44](https://github.com/jdx/mise/commit/9c71e44cc12871cd69f2a4829390e912cb8519a8) -- Update installing-mise.md by [@jdx](https://github.com/jdx) in [2cc97ca](https://github.com/jdx/mise/commit/2cc97ca317df356da19bc9b25fb37cc74d89b8a4) - update default.nix by [@minhtrancccp](https://github.com/minhtrancccp) in [#3430](https://github.com/jdx/mise/pull/3430) -- Fix mention of slsa-verifier in documentation by [@will-ockmore](https://github.com/will-ockmore) in [#3435](https://github.com/jdx/mise/pull/3435) ### New Contributors @@ -696,10 +673,6 @@ - increase performance of watch_files by [@jdx](https://github.com/jdx) in [#3407](https://github.com/jdx/mise/pull/3407) - make `ls --offline` default behavior by [@jdx](https://github.com/jdx) in [#3409](https://github.com/jdx/mise/pull/3409) -### ๐Ÿ” Other Changes - -- Update environments.md by [@jdx](https://github.com/jdx) in [aa5eeff](https://github.com/jdx/mise/commit/aa5eeff161a8b01435c87dcae124fd54f8ddcf4d) - ### New Contributors - @msnazarow made their first contribution in [#3406](https://github.com/jdx/mise/pull/3406) @@ -727,7 +700,7 @@ - add zig to core tools by [@risu729](https://github.com/risu729) in [#3385](https://github.com/jdx/mise/pull/3385) -### ๐Ÿ” Other Changes +### Chore - debug log by [@jdx](https://github.com/jdx) in [0075db0](https://github.com/jdx/mise/commit/0075db05a24a9bc2e3015b8a48bcfe730fe80d07) @@ -761,11 +734,6 @@ - try to fix coverage rate limits by [@jdx](https://github.com/jdx) in [#3384](https://github.com/jdx/mise/pull/3384) -### ๐Ÿ” Other Changes - -- Update shims.md by [@jdx](https://github.com/jdx) in [2d48109](https://github.com/jdx/mise/commit/2d48109a77ae4432b0fd6cede3196a0819710186) -- Update hooks.md by [@jdx](https://github.com/jdx) in [2693f94](https://github.com/jdx/mise/commit/2693f946f7cbb2819a4d4df37b6314759e38e9f3) - ### New Contributors - @avysk made their first contribution in [#3363](https://github.com/jdx/mise/pull/3363) @@ -802,17 +770,9 @@ - remove gleam by [@jdx](https://github.com/jdx) in [fdfe20b](https://github.com/jdx/mise/commit/fdfe20b32b16b835655551d3f12b5d6e90856b2e) - use latest golang in e2e test by [@jdx](https://github.com/jdx) in [#3349](https://github.com/jdx/mise/pull/3349) -### ๐Ÿ” Other Changes +### Chore -- Update tips-and-tricks.md by [@jdx](https://github.com/jdx) in [5071419](https://github.com/jdx/mise/commit/5071419b988d3655b87e7413a4577fab2684ddf8) -- Update tips-and-tricks.md by [@jdx](https://github.com/jdx) in [fcc6b59](https://github.com/jdx/mise/commit/fcc6b59740306ee2065f365d230b30abbefcc7d2) -- Update tips-and-tricks.md by [@jdx](https://github.com/jdx) in [039b19d](https://github.com/jdx/mise/commit/039b19dd9dc68e3047b23127483af2f9efd11e1b) -- Update configuration.md by [@jdx](https://github.com/jdx) in [b0cac9e](https://github.com/jdx/mise/commit/b0cac9e7573ccb5dd70c3b3b1e53a0a7911c2e18) -- Update tips-and-tricks.md by [@jdx](https://github.com/jdx) in [9347be8](https://github.com/jdx/mise/commit/9347be89a9a86c0bde40c3986c01b98e4f8d68b8) -- Update tips-and-tricks.md by [@jdx](https://github.com/jdx) in [1cfc822](https://github.com/jdx/mise/commit/1cfc8228541c98111c36c5470323f9fe52d2125f) -- Update registry.toml by [@jdx](https://github.com/jdx) in [5a28860](https://github.com/jdx/mise/commit/5a28860ac7f8d81194926d6b14eb394ecbe7dc0d) - upgrade usage-lib by [@jdx](https://github.com/jdx) in [554d533](https://github.com/jdx/mise/commit/554d533a253a137c27c5cdac6da2ae09629029dc) -- add rust to core tools list by [@gurgelio](https://github.com/gurgelio) in [#3341](https://github.com/jdx/mise/pull/3341) - use asdf:mise-plugins/mise-nim by [@jdx](https://github.com/jdx) in [#3352](https://github.com/jdx/mise/pull/3352) ### New Contributors @@ -842,9 +802,8 @@ - use aqua for snyk by [@scop](https://github.com/scop) in [#3290](https://github.com/jdx/mise/pull/3290) -### ๐Ÿ” Other Changes +### Chore -- Revert "fix: always prefer glibc to musl in mise run " by [@jdx](https://github.com/jdx) in [#3298](https://github.com/jdx/mise/pull/3298) - bump expr-lang by [@jdx](https://github.com/jdx) in [#3297](https://github.com/jdx/mise/pull/3297) - mise up --bump by [@jdx](https://github.com/jdx) in [6872b54](https://github.com/jdx/mise/commit/6872b5469622140335a12131dfa4acf310fc0c2a) - update mise.lock by [@jdx](https://github.com/jdx) in [4c12502](https://github.com/jdx/mise/commit/4c12502c459ba2e214689c3f55d964b8f75966af) @@ -856,7 +815,7 @@ ## [2024.11.36](https://github.com/jdx/mise/compare/v2024.11.35..v2024.11.36) - 2024-11-29 -### ๐Ÿ” Other Changes +### Chore - mise i by [@jdx](https://github.com/jdx) in [8150732](https://github.com/jdx/mise/commit/81507327e7f1c9f2137b3dadcf35a8245d43a8ba) @@ -878,7 +837,7 @@ - remove unnecessary cargo-binstall test by [@jdx](https://github.com/jdx) in [0a4da7a](https://github.com/jdx/mise/commit/0a4da7a023b1cb969b732afd3ad4b3cf02c42530) -### ๐Ÿ” Other Changes +### Chore - dont require build-windows before unit-windows by [@jdx](https://github.com/jdx) in [c85e2ec](https://github.com/jdx/mise/commit/c85e2ec77193d73ff20d4ce8fb7e3787a6db223d) @@ -907,7 +866,7 @@ - added hooks to sidebar by [@jdx](https://github.com/jdx) in [4bbc340](https://github.com/jdx/mise/commit/4bbc3403e46aa817450e6936f37b5d4c983b43d4) - added swift to sidebar by [@jdx](https://github.com/jdx) in [bc06cbf](https://github.com/jdx/mise/commit/bc06cbf240cc7aae2173575cfa83289ae526dad1) -### ๐Ÿ” Other Changes +### Chore - skip checkov test by [@jdx](https://github.com/jdx) in [2ae18a3](https://github.com/jdx/mise/commit/2ae18a3e8329eb9913dc43ae94432f8f75b36a94) - added timeout for release-plz by [@jdx](https://github.com/jdx) in [dae4bc3](https://github.com/jdx/mise/commit/dae4bc32bbb7de7873e3fa047a785c70f02a5c05) @@ -941,14 +900,12 @@ - describe mise behavior when mise version is lower than min_version by [@erickguan](https://github.com/erickguan) in [#2994](https://github.com/jdx/mise/pull/2994) -### ๐Ÿ” Other Changes +### Chore - wait for gh rate limit if expended by [@jdx](https://github.com/jdx) in [#3251](https://github.com/jdx/mise/pull/3251) - set github token for docs job by [@jdx](https://github.com/jdx) in [908dd18](https://github.com/jdx/mise/commit/908dd18fe3ddf19d1531c93695ee3ff98d0995c5) - skip hyperfine unless on release pr by [@jdx](https://github.com/jdx) in [#3253](https://github.com/jdx/mise/pull/3253) - move tasks dir so it doesnt show up in unrelated projects by [@jdx](https://github.com/jdx) in [#3254](https://github.com/jdx/mise/pull/3254) -- Update comparison-to-asdf.md by [@jdx](https://github.com/jdx) in [fe50c72](https://github.com/jdx/mise/commit/fe50c72ab9786e17651ede49862bab7820492ac0) -- added "en" command by [@jdx](https://github.com/jdx) in [#1697](https://github.com/jdx/mise/pull/1697) ## [2024.11.32](https://github.com/jdx/mise/compare/v2024.11.31..v2024.11.32) - 2024-11-27 @@ -980,12 +937,11 @@ - correction in aqua by [@jdx](https://github.com/jdx) in [b7de2f3](https://github.com/jdx/mise/commit/b7de2f32e6a23458bbd3573372f9c49733b80e62) - typo by [@jdx](https://github.com/jdx) in [98aa6bd](https://github.com/jdx/mise/commit/98aa6bd7b2631a5904243cbf9aeb2eaf218c9c64) -### ๐Ÿ” Other Changes +### Chore - bump tabled by [@jdx](https://github.com/jdx) in [#3245](https://github.com/jdx/mise/pull/3245) - fix tools tests on release branch by [@jdx](https://github.com/jdx) in [675a2b0](https://github.com/jdx/mise/commit/675a2b086116f0afb431189c51136255b6f6c434) - fix tools tests on release branch by [@jdx](https://github.com/jdx) in [130c3a4](https://github.com/jdx/mise/commit/130c3a4de60edfbed98642bc6dc71e67ba9b6ce1) -- Mention the fish shell's automatic activation in the Quickstart section by [@rmacklin](https://github.com/rmacklin) in [#2295](https://github.com/jdx/mise/pull/2295) - fix tools tests on release branch by [@jdx](https://github.com/jdx) in [9feb3b6](https://github.com/jdx/mise/commit/9feb3b638ef634d320f576921b3e366f6cd73075) ### New Contributors @@ -1050,13 +1006,10 @@ - remove flaky maven test by [@jdx](https://github.com/jdx) in [65f6eb4](https://github.com/jdx/mise/commit/65f6eb48880b6322439c33b3cd53eab7b8b97439) - added test for vault by [@jdx](https://github.com/jdx) in [#3194](https://github.com/jdx/mise/pull/3194) -### ๐Ÿ” Other Changes +### Chore - bump expr-lang by [@jdx](https://github.com/jdx) in [#3199](https://github.com/jdx/mise/pull/3199) - add aqua-registry as submodule by [@jdx](https://github.com/jdx) in [#3204](https://github.com/jdx/mise/pull/3204) -- Update plugins.md by [@jdx](https://github.com/jdx) in [1a38802](https://github.com/jdx/mise/commit/1a38802dd2c729805654638a6e2464afed6e8e14) -- Update plugins.md by [@jdx](https://github.com/jdx) in [8ca6f5f](https://github.com/jdx/mise/commit/8ca6f5f9e8df0be7b714ffe6d030fd60bf04fcd7) -- Update plugins.md by [@jdx](https://github.com/jdx) in [c82d4d7](https://github.com/jdx/mise/commit/c82d4d7e16cd79a6c6cab759065f0ec0d9d2badd) ### New Contributors @@ -1083,7 +1036,7 @@ - disable cargo-binstall test by [@jdx](https://github.com/jdx) in [8fee82e](https://github.com/jdx/mise/commit/8fee82e652031a1c9a31dbb05437478c961b6107) -### ๐Ÿ” Other Changes +### Chore - include aqua-registry yaml files in crate by [@jdx](https://github.com/jdx) in [#3186](https://github.com/jdx/mise/pull/3186) - gitignore aqua-registry by [@jdx](https://github.com/jdx) in [1c38bca](https://github.com/jdx/mise/commit/1c38bca434cfc17792eb3053be2f4271a9e92fdd) @@ -1108,7 +1061,7 @@ - **(security)** added release gpg key by [@jdx](https://github.com/jdx) in [8f5dfd6](https://github.com/jdx/mise/commit/8f5dfd6dd2903c55fd792aeecd8ec97ef9f7f7ba) - typos by [@jdx](https://github.com/jdx) in [#3173](https://github.com/jdx/mise/pull/3173) -### ๐Ÿ” Other Changes +### Chore - clean up CHANGELOG by [@jdx](https://github.com/jdx) in [8ec0ca2](https://github.com/jdx/mise/commit/8ec0ca20fce57d07d769209fd9043a129daa86f1) diff --git a/Cargo.lock b/Cargo.lock index 18143be8c9..3762190e44 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1280,7 +1280,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62d87141875739c4eb2b6a6e0c6dbd6f877ff3336953cdbf850b3dc920d3bf2f" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.7.0", "log", "once_cell", "pest", @@ -1346,9 +1346,9 @@ dependencies = [ [[package]] name = "fixedbitset" -version = "0.5.7" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" @@ -1647,7 +1647,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.5.0", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -1666,6 +1666,12 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + [[package]] name = "heck" version = "0.4.1" @@ -2154,12 +2160,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.5.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.2", "serde", ] @@ -2614,7 +2620,7 @@ dependencies = [ [[package]] name = "mise" -version = "2024.12.24" +version = "2025.1.0" dependencies = [ "base64 0.22.1", "built", @@ -2651,7 +2657,7 @@ dependencies = [ "homedir", "humantime", "indenter", - "indexmap 2.5.0", + "indexmap 2.7.0", "indicatif", "indoc", "insta", @@ -3094,12 +3100,12 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.6.6" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c94eb96835f05ec51384814c9b2daef83f68486f67a0e2e9680e0f698dca808e" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.5.0", + "indexmap 2.7.0", ] [[package]] @@ -3489,9 +3495,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.11" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe060fe50f524be480214aba758c71f99f90ee8c83c5a36b5e9e1d568eb4eb3" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "async-compression", "base64 0.22.1", @@ -3599,7 +3605,7 @@ dependencies = [ "generic-array", "hex", "impl-tools", - "indexmap 2.5.0", + "indexmap 2.7.0", "rand", "regex", "serde", @@ -3972,7 +3978,7 @@ version = "1.0.134" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.7.0", "itoa", "memchr", "ryu", @@ -4020,7 +4026,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.5.0", + "indexmap 2.7.0", "serde", "serde_derive", "serde_json", @@ -4046,7 +4052,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.7.0", "itoa", "ryu", "serde", @@ -4720,7 +4726,7 @@ version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.7.0", "serde", "serde_spanned", "toml_datetime", @@ -5028,7 +5034,7 @@ checksum = "ab923f719b3048bd1cd2fb738fca978ed2a60756ce15cdad639fc40645adad9c" dependencies = [ "clap", "heck 0.5.0", - "indexmap 2.5.0", + "indexmap 2.7.0", "itertools 0.13.0", "kdl", "log", @@ -5098,7 +5104,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4c44e4ec114bba1eeed55bc3a47ced72545cd2ffa04ce0ec0bdba1fb535807d" dependencies = [ "homedir", - "indexmap 2.5.0", + "indexmap 2.7.0", "itertools 0.13.0", "log", "mlua", @@ -5558,9 +5564,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.20" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +checksum = "e6f5bb5257f2407a5425c6e749bfd9692192a73e70a6060516ac04f889087d68" dependencies = [ "memchr", ] @@ -5769,7 +5775,7 @@ dependencies = [ "displaydoc", "flate2", "hmac", - "indexmap 2.5.0", + "indexmap 2.7.0", "lzma-rs", "memchr", "pbkdf2", diff --git a/Cargo.toml b/Cargo.toml index 68b9a5481e..2c9ab3c4c1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mise" -version = "2024.12.24" +version = "2025.1.0" edition = "2021" description = "The front-end to your dev env" authors = ["Jeff Dickey (@jdx)"] diff --git a/README.md b/README.md index 0c9d3492c2..e48acd5888 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Install mise (other methods [here](https://mise.jdx.dev/getting-started.html)): ```sh-session $ curl https://mise.run | sh $ ~/.local/bin/mise --version -2024.12.24 macos-arm64 (a1b2d3e 2024-12-31) +2025.1.0 macos-arm64 (a1b2d3e 2025-01-01) ``` or install a specific a version: diff --git a/aqua-registry b/aqua-registry index f66ddfb1a1..42c5df96df 160000 --- a/aqua-registry +++ b/aqua-registry @@ -1 +1 @@ -Subproject commit f66ddfb1a141a1645bc7a0cf5c68526ecca91a52 +Subproject commit 42c5df96df400c7badf7d2e42b9c2ab8c0a5af1e diff --git a/completions/_mise b/completions/_mise index 79c5c9f5fb..f595b8ca44 100644 --- a/completions/_mise +++ b/completions/_mise @@ -27,11 +27,11 @@ _mise() { zstyle ":completion:${curcontext}:" cache-policy _usage_mise_cache_policy fi - if ( [[ -z "${_usage_spec_mise_2024_12_24:-}" ]] || _cache_invalid _usage_spec_mise_2024_12_24 ) \ - && ! _retrieve_cache _usage_spec_mise_2024_12_24; + if ( [[ -z "${_usage_spec_mise_2025_1_0:-}" ]] || _cache_invalid _usage_spec_mise_2025_1_0 ) \ + && ! _retrieve_cache _usage_spec_mise_2025_1_0; then spec="$(mise usage)" - _store_cache _usage_spec_mise_2024_12_24 spec + _store_cache _usage_spec_mise_2025_1_0 spec fi _arguments "*: :(($(usage complete-word --shell zsh -s "$spec" -- "${words[@]}" )))" diff --git a/completions/mise.bash b/completions/mise.bash index 52a7c18aea..b7243f83b9 100644 --- a/completions/mise.bash +++ b/completions/mise.bash @@ -6,14 +6,14 @@ _mise() { return 1 fi - if [[ -z ${_usage_spec_mise_2024_12_24:-} ]]; then - _usage_spec_mise_2024_12_24="$(mise usage)" + if [[ -z ${_usage_spec_mise_2025_1_0:-} ]]; then + _usage_spec_mise_2025_1_0="$(mise usage)" fi local cur prev words cword was_split comp_args _comp_initialize -n : -- "$@" || return # shellcheck disable=SC2207 - _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2024_12_24}" --cword="$cword" -- "${words[@]}")" + _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2025_1_0}" --cword="$cword" -- "${words[@]}")" _comp_ltrim_colon_completions "$cur" # shellcheck disable=SC2181 if [[ $? -ne 0 ]]; then diff --git a/completions/mise.fish b/completions/mise.fish index affd899615..db0a8a1eac 100644 --- a/completions/mise.fish +++ b/completions/mise.fish @@ -6,7 +6,7 @@ if ! command -v usage &> /dev/null return 1 end -if ! set -q _usage_spec_mise_2024_12_24 - set -g _usage_spec_mise_2024_12_24 (mise usage | string collect) +if ! set -q _usage_spec_mise_2025_1_0 + set -g _usage_spec_mise_2025_1_0 (mise usage | string collect) end -complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2024_12_24" -- (commandline -cop) (commandline -t))' +complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_1_0" -- (commandline -cop) (commandline -t))' diff --git a/default.nix b/default.nix index ff86992c90..11fc729c8c 100644 --- a/default.nix +++ b/default.nix @@ -2,7 +2,7 @@ rustPlatform.buildRustPackage { pname = "mise"; - version = "2024.12.24"; + version = "2025.1.0"; src = lib.cleanSource ./.; diff --git a/packaging/rpm/mise.spec b/packaging/rpm/mise.spec index 1458bdbd6a..63e81ef669 100644 --- a/packaging/rpm/mise.spec +++ b/packaging/rpm/mise.spec @@ -1,6 +1,6 @@ Summary: The front-end to your dev env Name: mise -Version: 2024.12.24 +Version: 2025.1.0 Release: 1 URL: https://github.com/jdx/mise/ Group: System From e00f84923859bc163b4f7c0328ba6ec0115052e0 Mon Sep 17 00:00:00 2001 From: Lindsay Holmwood Date: Thu, 2 Jan 2025 18:56:13 +1100 Subject: [PATCH 061/289] Fix typo in docs (#3914) --- docs/tasks/task-configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tasks/task-configuration.md b/docs/tasks/task-configuration.md index 5dcfa8500c..ead6f9545a 100644 --- a/docs/tasks/task-configuration.md +++ b/docs/tasks/task-configuration.md @@ -208,7 +208,7 @@ has changed since the last build. The counterpart to `sources`, these are the files or directories that the task will create/modify after it executes. -`auto = true` is an altnernative to specifying output files manually. In that case, mise will touch +`auto = true` is an alternative to specifying output files manually. In that case, mise will touch an internally tracked file based on the hash of the task definition (stored in `~/.local/state/mise/task-outputs/` if you're curious). This is useful if you want `mise run` to execute when sources change but don't want to have to manually `touch` a file for `sources` to work. From f84ae91877ff264189b1e84b9fb757481efbd983 Mon Sep 17 00:00:00 2001 From: Xavier Capaldi <38892330+xcapaldi@users.noreply.github.com> Date: Fri, 3 Jan 2025 14:30:50 -0500 Subject: [PATCH 062/289] docs: Fix broken link to environment variables doc (#3938) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e48acd5888..2297488c86 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ ## What is it? - Like [asdf](https://asdf-vm.com) (or [nvm](https://github.com/nvm-sh/nvm) or [pyenv](https://github.com/pyenv/pyenv) but for any language) it manages [dev tools](https://mise.jdx.dev/dev-tools/) like node, python, cmake, terraform, and [hundreds more](https://mise.jdx.dev/registry.html). -- Like [direnv](https://github.com/direnv/direnv) it manages [environment variables](https://mise.jdx.dev/environments.html) for different project directories. +- Like [direnv](https://github.com/direnv/direnv) it manages [environment variables](https://mise.jdx.dev/environments/) for different project directories. - Like [make](https://www.gnu.org/software/make/manual/make.html) it manages [tasks](https://mise.jdx.dev/tasks/) used to build and test projects. ## 30 Second Demo From 39908f01dd20b2a8005092f0fc492cac96823ee5 Mon Sep 17 00:00:00 2001 From: Hugues Verlin Date: Sat, 4 Jan 2025 09:29:59 +0100 Subject: [PATCH 063/289] fix: improve mise generate bootstrap (#3939) * fix: improve mise generate bootstrap * [autofix.ci] apply automated fixes * fix test * additional fix * lint --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- .gitignore | 1 + e2e/generate/test_generate_bootstrap | 5 +++++ mise.lock | 1 + src/cli/generate/bootstrap.rs | 20 +++++++++++++++----- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 4b0ccc3d41..987fe261eb 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ megalinter-reports/ .vscode/ testResults.xml +.mise/ \ No newline at end of file diff --git a/e2e/generate/test_generate_bootstrap b/e2e/generate/test_generate_bootstrap index 9bb5f1259b..a4c3b394f4 100644 --- a/e2e/generate/test_generate_bootstrap +++ b/e2e/generate/test_generate_bootstrap @@ -6,3 +6,8 @@ assert "./bin/mise version" assert "mise task add xxx -- echo 'running xxx'" assert "mise generate task-stubs --mise-bin ./bin/mise" assert "./bin/xxx" "running xxx" + +assert "mise generate bootstrap -l -w" +assert_contains "./bin/mise tasks ls" "xxx" + +assert_not_contains "MISE_IGNORED_CONFIG_PATHS=$(pwd) ./bin/mise tasks ls" "xxx" diff --git a/mise.lock b/mise.lock index 812b22c6f0..0600dd0b7c 100644 --- a/mise.lock +++ b/mise.lock @@ -3,6 +3,7 @@ version = "1.7.5" backend = "aqua:rhysd/actionlint" [tools.actionlint.checksums] +actionlint-macos-aarch64 = "sha256:84d2e2a03e3891bb55aacb09008fc750199242106d2899d8496208fe66b6137b" "actionlint_1.7.5_darwin_arm64.tar.gz" = "sha256:397119f9baa3fd9fe195db340b30acdaea532826e19a047a9cc9d96add7c267d" [tools.bun] diff --git a/src/cli/generate/bootstrap.rs b/src/cli/generate/bootstrap.rs index 32a7882dbd..e1bf3cb792 100644 --- a/src/cli/generate/bootstrap.rs +++ b/src/cli/generate/bootstrap.rs @@ -1,8 +1,7 @@ use crate::config::SETTINGS; use crate::http::HTTP; use crate::ui::info; -use crate::Result; -use crate::{file, minisign}; +use crate::{file, minisign, Result}; use clap::ValueHint; use std::path::PathBuf; use xx::file::display_path; @@ -63,19 +62,27 @@ impl Bootstrap { .get(1) .unwrap() .as_str(); + + let shared_vars = r#" +local script_dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +local project_dir=$( cd -- "$( dirname -- "$script_dir" )" &> /dev/null && pwd ) +export MISE_BOOTSTRAP_PROJECT_DIR="$project_dir" +"#; + let vars = if self.localize { // TODO: this will only work right if it is in the base directory, not an absolute path or has a subdirectory let localized_dir = self.localized_dir.to_string_lossy(); format!( r#" -local script_dir=$( cd -- "$( dirname -- "${{BASH_SOURCE[0]}}" )" &> /dev/null && pwd ) -local project_dir=$( cd -- "$( dirname -- "$script_dir" )" &> /dev/null && pwd ) local localized_dir="$project_dir/{localized_dir}" +export MISE_BOOTSTRAP_PROJECT_DIR="$project_dir" export MISE_DATA_DIR="$localized_dir" export MISE_CONFIG_DIR="$localized_dir" export MISE_CACHE_DIR="$localized_dir/cache" export MISE_STATE_DIR="$localized_dir/state" export MISE_INSTALL_PATH="$localized_dir/mise-{version}" +export MISE_TRUSTED_CONFIG_PATHS="$project_dir${{MISE_TRUSTED_CONFIG_PATHS:+:$MISE_TRUSTED_CONFIG_PATHS}}" +export MISE_IGNORED_CONFIG_PATHS="$HOME/.config/mise${{MISE_IGNORED_CONFIG_PATHS:+:$MISE_IGNORED_CONFIG_PATHS}}" "# ) } else { @@ -86,16 +93,19 @@ export MISE_INSTALL_PATH="$cache_home/mise-{version}" "# ) }; + let shared_vars = info::indent_by(shared_vars.trim(), " "); let vars = info::indent_by(vars.trim(), " "); let script = format!( r#" -#!/bin/sh +#!/usr/bin/env bash set -eu __mise_bootstrap() {{ +{shared_vars} {vars} install() {{ {install} + cd "$MISE_BOOTSTRAP_PROJECT_DIR" }} local MISE_INSTALL_HELP=0 test -f "$MISE_INSTALL_PATH" || install From ca257dbcd20537914d3f3a5019951ad25d9e16b8 Mon Sep 17 00:00:00 2001 From: Ben Berry-Allwood <71074961+benberryallwood@users.noreply.github.com> Date: Sat, 4 Jan 2025 09:32:21 +0000 Subject: [PATCH 064/289] feat: add databricks-cli to registry (#3937) --- docs/registry.md | 1 + registry.toml | 2 ++ 2 files changed, 3 insertions(+) diff --git a/docs/registry.md b/docs/registry.md index 6102fccfda..6a6f81ad2e 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -179,6 +179,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | dapr | [aqua:dapr/cli](https://github.com/dapr/cli) [asdf:asdf-community/asdf-dapr-cli](https://github.com/asdf-community/asdf-dapr-cli) | | dart | [asdf:PatOConnor43/asdf-dart](https://github.com/PatOConnor43/asdf-dart) [vfox:version-fox/vfox-dart](https://github.com/version-fox/vfox-dart) | | dasel | [aqua:TomWright/dasel](https://github.com/TomWright/dasel) [asdf:asdf-community/asdf-dasel](https://github.com/asdf-community/asdf-dasel) | +| databricks-cli | [ubi:databricks/cli](https://github.com/databricks/cli) | | datree | [aqua:datreeio/datree](https://github.com/datreeio/datree) [asdf:lukeab/asdf-datree](https://github.com/lukeab/asdf-datree) | | daytona | [asdf:CrouchingMuppet/asdf-daytona](https://github.com/CrouchingMuppet/asdf-daytona) | | dbmate | [aqua:amacneil/dbmate](https://github.com/amacneil/dbmate) [asdf:juusujanar/asdf-dbmate](https://github.com/juusujanar/asdf-dbmate) | diff --git a/registry.toml b/registry.toml index 9d558e8056..78c1e6efb9 100644 --- a/registry.toml +++ b/registry.toml @@ -461,6 +461,8 @@ dapr.backends = ["aqua:dapr/cli", "asdf:asdf-community/asdf-dapr-cli"] dapr.test = ["dapr --version", "CLI version: {{version}}"] dart.backends = ["asdf:PatOConnor43/asdf-dart", "vfox:version-fox/vfox-dart"] dasel.backends = ["aqua:TomWright/dasel", "asdf:asdf-community/asdf-dasel"] +databricks-cli.backends = ["ubi:databricks/cli[exe=databricks]"] +databricks-cli.test = ["databricks --version", "Databricks CLI v{{version}}"] datree.backends = ["aqua:datreeio/datree", "asdf:lukeab/asdf-datree"] daytona.backends = ["asdf:CrouchingMuppet/asdf-daytona"] dbmate.backends = ["aqua:amacneil/dbmate", "asdf:juusujanar/asdf-dbmate"] From 1bbe9d8f73655257b55048184d8c777e22d8491c Mon Sep 17 00:00:00 2001 From: Hugues Verlin Date: Sat, 4 Jan 2025 10:39:29 +0100 Subject: [PATCH 065/289] docs: Add usage property to mise schema (#3942) * docs: Add usage property to mise schema * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- schema/mise-task.json | 4 ++++ schema/mise.json | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/schema/mise-task.json b/schema/mise-task.json index 4944b3e880..0fc8c58d5e 100644 --- a/schema/mise-task.json +++ b/schema/mise-task.json @@ -224,6 +224,10 @@ "description": "specify a shell command to run the script with", "type": "string", "default": "sh -c" + }, + "usage": { + "description": "Specify usage (https://usage.jdx.dev/) specs for the task", + "type": "string" } }, "type": "object" diff --git a/schema/mise.json b/schema/mise.json index 73f98f1b3c..82107f90f7 100644 --- a/schema/mise.json +++ b/schema/mise.json @@ -1173,6 +1173,10 @@ "description": "specify a shell command to run the script with", "type": "string", "default": "sh -c" + }, + "usage": { + "description": "Specify usage (https://usage.jdx.dev/) specs for the task", + "type": "string" } }, "type": "object" From 34e348c6aa527c5e45fb49d916f2f15c55b43bee Mon Sep 17 00:00:00 2001 From: KITAGAWA Yasutaka Date: Sat, 4 Jan 2025 22:38:54 +0900 Subject: [PATCH 066/289] feat: add navi to registry (#3943) --- docs/registry.md | 1 + registry.toml | 2 ++ 2 files changed, 3 insertions(+) diff --git a/docs/registry.md b/docs/registry.md index 6a6f81ad2e..f2b2582842 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -521,6 +521,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | nancy | [aqua:sonatype-nexus-community/nancy](https://github.com/sonatype-nexus-community/nancy) [asdf:iilyak/asdf-nancy](https://github.com/iilyak/asdf-nancy) | | nano | [asdf:mfakane/asdf-nano](https://github.com/mfakane/asdf-nano) | | nasm | [asdf:Dpbm/asdf-nasm](https://github.com/Dpbm/asdf-nasm) | +| navi | [aqua:denisidoro/navi](https://github.com/denisidoro/navi) [ubi:denisidoro/navi](https://github.com/denisidoro/navi) | | neko | [asdf:asdf-community/asdf-neko](https://github.com/asdf-community/asdf-neko) | | neovim | [aqua:neovim/neovim](https://github.com/neovim/neovim) [asdf:richin13/asdf-neovim](https://github.com/richin13/asdf-neovim) | | nerdctl | [aqua:containerd/nerdctl](https://github.com/containerd/nerdctl) [asdf:dmpe/asdf-nerdctl](https://github.com/dmpe/asdf-nerdctl) | diff --git a/registry.toml b/registry.toml index 78c1e6efb9..c633dcec28 100644 --- a/registry.toml +++ b/registry.toml @@ -1154,6 +1154,8 @@ nancy.backends = [ ] nano.backends = ["asdf:mfakane/asdf-nano"] nasm.backends = ["asdf:Dpbm/asdf-nasm"] +navi.backends = ["aqua:denisidoro/navi", "ubi:denisidoro/navi"] +navi.test = ["navi --version", "navi {{version}}"] neko.backends = ["asdf:asdf-community/asdf-neko"] neovim.backends = ["aqua:neovim/neovim", "asdf:richin13/asdf-neovim"] nerdctl.backends = ["aqua:containerd/nerdctl", "asdf:dmpe/asdf-nerdctl"] From c06a41544e2cb09912244efe6a8f5bcc03eb24d7 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sun, 5 Jan 2025 20:46:57 +0100 Subject: [PATCH 067/289] chore: upgrade expr Fixes https://github.com/jdx/mise/discussions/3944 --- Cargo.lock | 127 +++++++++++++++++++++++++++-------------------------- 1 file changed, 64 insertions(+), 63 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3762190e44..860db9b197 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -250,13 +250,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.83" +version = "0.1.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +checksum = "1b1244b10dcd56c92219da4e14caa97e312079e185f04ba3eea25061561dc0a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -368,9 +368,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.11.1" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "786a307d683a5bf92e6fd5fd69a7eb613751668d1d8d67d802846dfe367c62c8" +checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0" dependencies = [ "memchr", "serde", @@ -462,9 +462,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.6" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d6dbb628b8f8555f86d0323c2eb39e3ec81901f4b83e091db8a6a76d316a333" +checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" dependencies = [ "jobserver", "libc", @@ -595,7 +595,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -647,7 +647,7 @@ dependencies = [ "nom", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -699,7 +699,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -892,7 +892,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -928,7 +928,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -952,7 +952,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -963,7 +963,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -1027,7 +1027,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -1040,7 +1040,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -1095,7 +1095,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -1276,9 +1276,9 @@ dependencies = [ [[package]] name = "expr-lang" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62d87141875739c4eb2b6a6e0c6dbd6f877ff3336953cdbf850b3dc920d3bf2f" +checksum = "bbf7d3d8b433d4dc8fe3e5383ad01f1cb2ffba8e999191af8bf7af1e9fa3e2ca" dependencies = [ "indexmap 2.7.0", "log", @@ -1509,7 +1509,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -1916,7 +1916,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn 2.0.93", + "syn 2.0.95", "unic-langid", ] @@ -1930,7 +1930,7 @@ dependencies = [ "i18n-config", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -2071,7 +2071,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -2126,7 +2126,7 @@ dependencies = [ "autocfg", "impl-tools-lib", "proc-macro-error2", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -2138,7 +2138,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -2200,13 +2200,13 @@ dependencies = [ [[package]] name = "insta" -version = "1.41.1" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e9ffc4d4892617c50a928c52b2961cb5174b6fc6ebf252b2fac9d21955c48b8" +checksum = "6513e4067e16e69ed1db5ab56048ed65db32d10ba5fc1217f5393f8f17d8b5a5" dependencies = [ "console", - "lazy_static", "linked-hash-map", + "once_cell", "regex", "serde", "similar", @@ -2333,7 +2333,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -2568,7 +2568,7 @@ checksum = "23c9b935fbe1d6cbd1dac857b54a688145e2d93f48db36010514d0f612d0ad67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -2764,7 +2764,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -2901,7 +2901,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -3084,7 +3084,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -3163,7 +3163,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -3297,7 +3297,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -3652,7 +3652,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.93", + "syn 2.0.95", "walkdir", ] @@ -3960,7 +3960,7 @@ checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -4043,7 +4043,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -4081,7 +4081,7 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -4301,7 +4301,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -4323,9 +4323,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.93" +version = "2.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c786062daee0d6db1132800e623df74274a0a87322d8e183338e01b3d98d058" +checksum = "46f71c0377baf4ef1cc3e3402ded576dccc315800fbc62dfc7fe04b009773b4a" dependencies = [ "proc-macro2", "quote", @@ -4349,7 +4349,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -4442,12 +4442,13 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.14.0" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" dependencies = [ "cfg-if", "fastrand", + "getrandom", "once_cell", "rustix", "windows-sys 0.59.0", @@ -4513,7 +4514,7 @@ checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -4548,7 +4549,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -4559,7 +4560,7 @@ checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -4654,7 +4655,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -4779,7 +4780,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -5186,7 +5187,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", "wasm-bindgen-shared", ] @@ -5221,7 +5222,7 @@ checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5361,7 +5362,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -5372,7 +5373,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -5564,9 +5565,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.21" +version = "0.6.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6f5bb5257f2407a5425c6e749bfd9692192a73e70a6060516ac04f889087d68" +checksum = "39281189af81c07ec09db316b302a3e67bf9bd7cbf6c820b50e35fee9c2fa980" dependencies = [ "memchr", ] @@ -5603,9 +5604,9 @@ dependencies = [ [[package]] name = "xattr" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" +checksum = "e105d177a3871454f754b33bb0ee637ecaaac997446375fd3e5d43a2ed00c909" dependencies = [ "libc", "linux-raw-sys", @@ -5671,7 +5672,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", "synstructure", ] @@ -5693,7 +5694,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -5713,7 +5714,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", "synstructure", ] @@ -5734,7 +5735,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] @@ -5756,7 +5757,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn 2.0.95", ] [[package]] From 678f6489a9501b32bf3c36771977771d933f2466 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sun, 5 Jan 2025 20:58:54 +0100 Subject: [PATCH 068/289] chore: mise up --- mise.lock | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mise.lock b/mise.lock index 0600dd0b7c..2eb2476f07 100644 --- a/mise.lock +++ b/mise.lock @@ -1,10 +1,9 @@ [tools.actionlint] -version = "1.7.5" +version = "1.7.6" backend = "aqua:rhysd/actionlint" [tools.actionlint.checksums] -actionlint-macos-aarch64 = "sha256:84d2e2a03e3891bb55aacb09008fc750199242106d2899d8496208fe66b6137b" -"actionlint_1.7.5_darwin_arm64.tar.gz" = "sha256:397119f9baa3fd9fe195db340b30acdaea532826e19a047a9cc9d96add7c267d" +"actionlint_1.7.6_darwin_arm64.tar.gz" = "sha256:9a7c9cb2b627bb137ef68742eead2dd5b78f3ddc44876e84c37d323ba28b4710" [tools.bun] version = "1.1.42" @@ -27,7 +26,7 @@ version = "0.13.0" backend = "cargo:cargo-edit" [tools."cargo:cargo-insta"] -version = "1.41.1" +version = "1.42.0" backend = "cargo:cargo-insta" [tools."cargo:cargo-show"] From 69d44fd064d2fdaae08ff9ea3300a42e560630cd Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sun, 5 Jan 2025 21:03:21 +0100 Subject: [PATCH 069/289] chore: cargo-show --- xtasks/release-plz | 3 +++ 1 file changed, 3 insertions(+) diff --git a/xtasks/release-plz b/xtasks/release-plz index 893271d2bc..74ebbc5fd6 100755 --- a/xtasks/release-plz +++ b/xtasks/release-plz @@ -4,6 +4,9 @@ set -euxo pipefail git config user.name mise-en-dev git config user.email release@mise.jdx.dev +mise uninstall cargo:cargo-show +cargo install cargo-show + cur_version="$(cargo pkgid mise | cut -d# -f2)" if ! cargo show mise --json | jq -r '.versions.[].num' | grep -q "^$cur_version$"; then echo "Releasing $cur_version" From ab8e9e9e429beeb23731c356537525f64bc59b28 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sun, 5 Jan 2025 21:17:27 +0100 Subject: [PATCH 070/289] chore: remove cargo-show dependency --- mise.toml | 1 - xtasks/release-plz | 5 +---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/mise.toml b/mise.toml index 2932c0ff56..82f024547d 100644 --- a/mise.toml +++ b/mise.toml @@ -10,7 +10,6 @@ bun = "1.1.42" cargo-binstall = "1.10.17" "cargo:cargo-edit" = "latest" "cargo:cargo-insta" = "latest" -"cargo:cargo-show" = { version = "latest", os = ["linux", "macos"] } "cargo:git-cliff" = "latest" "cargo:toml-cli" = "latest" "cargo:usage-cli" = { version = "latest", os = ["linux", "macos"] } diff --git a/xtasks/release-plz b/xtasks/release-plz index 74ebbc5fd6..f7df657bb0 100755 --- a/xtasks/release-plz +++ b/xtasks/release-plz @@ -4,11 +4,8 @@ set -euxo pipefail git config user.name mise-en-dev git config user.email release@mise.jdx.dev -mise uninstall cargo:cargo-show -cargo install cargo-show - cur_version="$(cargo pkgid mise | cut -d# -f2)" -if ! cargo show mise --json | jq -r '.versions.[].num' | grep -q "^$cur_version$"; then +if ! "cargo info mise | grep 'version:' | head -n1 | awk '{print \$2}'" | grep -q "^$cur_version$"; then echo "Releasing $cur_version" cargo publish changelog="$(git cliff --tag "v$cur_version" --strip all --unreleased)" From ca2f89c6cd36d828a9eab2884a3f8c9cc1fe2c19 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sun, 5 Jan 2025 21:20:33 +0100 Subject: [PATCH 071/289] chore: remove cargo-show dependency --- xtasks/release-plz | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xtasks/release-plz b/xtasks/release-plz index f7df657bb0..8f07728949 100755 --- a/xtasks/release-plz +++ b/xtasks/release-plz @@ -5,7 +5,7 @@ git config user.name mise-en-dev git config user.email release@mise.jdx.dev cur_version="$(cargo pkgid mise | cut -d# -f2)" -if ! "cargo info mise | grep 'version:' | head -n1 | awk '{print \$2}'" | grep -q "^$cur_version$"; then +if ! cargo info mise | grep 'version:' | head -n1 | awk '{print \$2}' | grep -q "^$cur_version$"; then echo "Releasing $cur_version" cargo publish changelog="$(git cliff --tag "v$cur_version" --strip all --unreleased)" From 82e3390c5fc9a97c942dc407b2073edfcb3974bc Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sun, 5 Jan 2025 21:22:14 +0100 Subject: [PATCH 072/289] chore: remove cargo-show dependency --- xtasks/release-plz | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xtasks/release-plz b/xtasks/release-plz index 8f07728949..29fee4851f 100755 --- a/xtasks/release-plz +++ b/xtasks/release-plz @@ -5,7 +5,7 @@ git config user.name mise-en-dev git config user.email release@mise.jdx.dev cur_version="$(cargo pkgid mise | cut -d# -f2)" -if ! cargo info mise | grep 'version:' | head -n1 | awk '{print \$2}' | grep -q "^$cur_version$"; then +if ! cargo info mise | grep 'version:' | head -n1 | awk '{print $2}' | grep -q "^$cur_version$"; then echo "Releasing $cur_version" cargo publish changelog="$(git cliff --tag "v$cur_version" --strip all --unreleased)" From cde45d63b2d19ae62e0ce2634931d4849e42d3ef Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 5 Jan 2025 14:22:35 -0600 Subject: [PATCH 073/289] fix(deps): update rust crate itertools to 0.14 (#3926) * fix(deps): update rust crate itertools to 0.14 * [autofix.ci] apply automated fixes --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- Cargo.lock | 11 ++++++++++- Cargo.toml | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 860db9b197..62467fab90 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2267,6 +2267,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.14" @@ -2661,7 +2670,7 @@ dependencies = [ "indicatif", "indoc", "insta", - "itertools 0.13.0", + "itertools 0.14.0", "junction", "log", "md-5", diff --git a/Cargo.toml b/Cargo.toml index 2c9ab3c4c1..c582127a53 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -85,7 +85,7 @@ indenter = "0.3" indexmap = { version = "2", features = ["serde"] } indicatif = { version = "0.17", features = ["default", "improved_unicode"] } indoc = "2" -itertools = "0.13" +itertools = "0.14" junction = "1" log = "0.4" minisign-verify = "0.2" From b36479491729be6cab2c120091dd50d48aa56c50 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 5 Jan 2025 14:22:45 -0600 Subject: [PATCH 074/289] fix(deps): update rust crate petgraph to 0.7 (#3927) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Cargo.lock | 44 +++++++++++++++++++------------------------- Cargo.toml | 2 +- 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 62467fab90..bbc1ac6830 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1280,7 +1280,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbf7d3d8b433d4dc8fe3e5383ad01f1cb2ffba8e999191af8bf7af1e9fa3e2ca" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.5.0", "log", "once_cell", "pest", @@ -1346,9 +1346,9 @@ dependencies = [ [[package]] name = "fixedbitset" -version = "0.4.2" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flate2" @@ -1647,7 +1647,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.7.0", + "indexmap 2.5.0", "slab", "tokio", "tokio-util", @@ -1666,12 +1666,6 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -[[package]] -name = "hashbrown" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" - [[package]] name = "heck" version = "0.4.1" @@ -2160,12 +2154,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", - "hashbrown 0.15.2", + "hashbrown 0.14.5", "serde", ] @@ -2666,7 +2660,7 @@ dependencies = [ "homedir", "humantime", "indenter", - "indexmap 2.7.0", + "indexmap 2.5.0", "indicatif", "indoc", "insta", @@ -3109,12 +3103,12 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.6.5" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +checksum = "e2b1374ec32450264534c67d1ccb5ca09818c4db8fd87cf97478d0df2fa44c65" dependencies = [ "fixedbitset", - "indexmap 2.7.0", + "indexmap 2.5.0", ] [[package]] @@ -3614,7 +3608,7 @@ dependencies = [ "generic-array", "hex", "impl-tools", - "indexmap 2.7.0", + "indexmap 2.5.0", "rand", "regex", "serde", @@ -3987,7 +3981,7 @@ version = "1.0.134" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.5.0", "itoa", "memchr", "ryu", @@ -4035,7 +4029,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.7.0", + "indexmap 2.5.0", "serde", "serde_derive", "serde_json", @@ -4061,7 +4055,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.5.0", "itoa", "ryu", "serde", @@ -4736,7 +4730,7 @@ version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.5.0", "serde", "serde_spanned", "toml_datetime", @@ -5044,7 +5038,7 @@ checksum = "ab923f719b3048bd1cd2fb738fca978ed2a60756ce15cdad639fc40645adad9c" dependencies = [ "clap", "heck 0.5.0", - "indexmap 2.7.0", + "indexmap 2.5.0", "itertools 0.13.0", "kdl", "log", @@ -5114,7 +5108,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4c44e4ec114bba1eeed55bc3a47ced72545cd2ffa04ce0ec0bdba1fb535807d" dependencies = [ "homedir", - "indexmap 2.7.0", + "indexmap 2.5.0", "itertools 0.13.0", "log", "mlua", @@ -5785,7 +5779,7 @@ dependencies = [ "displaydoc", "flate2", "hmac", - "indexmap 2.7.0", + "indexmap 2.5.0", "lzma-rs", "memchr", "pbkdf2", diff --git a/Cargo.toml b/Cargo.toml index c582127a53..3a1f83ba02 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -96,7 +96,7 @@ once_cell = "1" openssl = { version = "0.10", optional = true } os-release = "0.1" path-absolutize = "3" -petgraph = "0.6" +petgraph = "0.7" rand = "0.8" rayon = "1" regex = "1" From c85385dffcb0ad371a2a6e714754e922bd4d53f8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 5 Jan 2025 14:22:58 -0600 Subject: [PATCH 075/289] fix(deps): update rust crate self_update to 0.42 (#3931) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- Cargo.toml | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bbc1ac6830..587f98e03d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3314,9 +3314,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.23.1" +version = "0.37.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea" +checksum = "165859e9e55f79d67b96c5d96f4e88b6f2695a1972849c15a6a3f5c59fc2c003" dependencies = [ "memchr", ] @@ -3908,9 +3908,9 @@ checksum = "c2fdfc24bc566f839a2da4c4295b82db7d25a24253867d5c64355abb5799bdbe" [[package]] name = "self_update" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469a3970061380c19852269f393e74c0fe607a4e23d85267382cf25486aa8de5" +checksum = "d832c086ece0dacc29fb2947bb4219b8f6e12fe9e40b7108f9e57c4224e47b5c" dependencies = [ "either", "flate2", diff --git a/Cargo.toml b/Cargo.toml index 3a1f83ba02..2c73398cca 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -153,14 +153,14 @@ zstd = "0.13" [target.'cfg(unix)'.dependencies] exec = "0.3" nix = { version = "0.29", features = ["signal", "user"] } -self_update = { version = "0.41", default-features = false, features = [ +self_update = { version = "0.42", default-features = false, features = [ "archive-tar", "compression-flate2", "signatures", ] } [target.'cfg(windows)'.dependencies] -self_update = { version = "0.41", default-features = false, features = [ +self_update = { version = "0.42", default-features = false, features = [ "archive-zip", "signatures", ] } From 09e52524c5d7e47ca9400b3ce5505aff0eebf048 Mon Sep 17 00:00:00 2001 From: MontakOleg Date: Mon, 6 Jan 2025 00:42:52 +0200 Subject: [PATCH 076/289] feat: added allurectl to registry (#3918) * feat: added allurectl to registry * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- docs/registry.md | 1 + registry.toml | 1 + 2 files changed, 2 insertions(+) diff --git a/docs/registry.md b/docs/registry.md index f2b2582842..f526f308e5 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -36,6 +36,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | air | [aqua:air-verse/air](https://github.com/air-verse/air) [asdf:pdemagny/asdf-air](https://github.com/pdemagny/asdf-air) | | aks-engine | [aqua:Azure/aks-engine](https://github.com/Azure/aks-engine) [asdf:robsonpeixoto/asdf-aks-engine](https://github.com/robsonpeixoto/asdf-aks-engine) | | allure | [asdf:comdotlinux/asdf-allure](https://github.com/comdotlinux/asdf-allure) | +| allurectl | [ubi:allure-framework/allurectl](https://github.com/allure-framework/allurectl) | | alp | [aqua:tkuchiki/alp](https://github.com/tkuchiki/alp) [asdf:asdf-community/asdf-alp](https://github.com/asdf-community/asdf-alp) | | amass | [ubi:owasp-amass/amass](https://github.com/owasp-amass/amass) [asdf:dhoeric/asdf-amass](https://github.com/dhoeric/asdf-amass) | | amazon-ecr-credential-helper | [aqua:awslabs/amazon-ecr-credential-helper](https://github.com/awslabs/amazon-ecr-credential-helper) [asdf:dex4er/asdf-amazon-ecr-credential-helper](https://github.com/dex4er/asdf-amazon-ecr-credential-helper) | diff --git a/registry.toml b/registry.toml index c633dcec28..5685ee9c08 100644 --- a/registry.toml +++ b/registry.toml @@ -53,6 +53,7 @@ aks-engine.backends = [ aks-engine.test = ["aks-engine version", "Version: v{{version}}"] allure.backends = ["asdf:comdotlinux/asdf-allure"] allure.test = ["allure --version", "{{version}}"] +allurectl.backends = ["ubi:allure-framework/allurectl"] alp.backends = ["aqua:tkuchiki/alp", "asdf:asdf-community/asdf-alp"] alp.test = ["alp --version", "{{version}}"] amass.backends = ["ubi:owasp-amass/amass", "asdf:dhoeric/asdf-amass"] From ecfc3f645e51dc98cd5a0e1d2f383fd225527081 Mon Sep 17 00:00:00 2001 From: David Glasser Date: Sun, 5 Jan 2025 14:43:06 -0800 Subject: [PATCH 077/289] docs: clarity on relative paths vs config_root in _.path (#3923) Make Node.JS cookbook only recommend one style instead of both. --- docs/environments/index.md | 10 +++++++--- docs/mise-cookbook/nodejs.md | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/environments/index.md b/docs/environments/index.md index 452d49abf6..ab5bb729e7 100644 --- a/docs/environments/index.md +++ b/docs/environments/index.md @@ -90,18 +90,22 @@ See [secrets](/environments/secrets) for ways to read encrypted files with `env. ### `env._.path` -`PATH` is treated specially, it needs to be defined as a string/array in `mise.path`: +`PATH` is treated specially. It needs to be defined as a string/array in `mise.path`: ```toml [env] _.path = [ # adds an absolute path "~/.local/share/bin", - # adds a path relative to the mise.toml, not PWD - "./node_modules/.bin", + # adds paths relative to directory in which this file was found (see below for details), not PWD + "{{config_root}}/node_modules/.bin", + # adds paths relative to the exact file that this is found in (not PWD) + "tools/bin", ] ``` +Adding a relative path like `tools/bin` or `./tools/bin` is similar to adding a path rooted at `{{config_root}}`, but behaves differently if your config file is nested in a subdirectory like `/path/to/project/.config/mise/config.toml`. Including `tools/bin` will add the path `/path/to/project/.config/mise/tools/bin`, whereas including `{{config_root}}/tools/bin` will add the path `/path/to/project/tools/bin`. + ### `env._.source` Source an external bash script and pull exported environment variables out of it: diff --git a/docs/mise-cookbook/nodejs.md b/docs/mise-cookbook/nodejs.md index 078a7f5926..03311b9186 100644 --- a/docs/mise-cookbook/nodejs.md +++ b/docs/mise-cookbook/nodejs.md @@ -8,7 +8,7 @@ A nice trick you can use is to add the node modules binaries to the PATH. This w ```toml [mise.toml] [env] -_.path = ['./node_modules/.bin'] +_.path = ['{{config_root}}/node_modules/.bin'] ``` Example: From 56c300e19a3d4444ef451eca17f7015988b785b7 Mon Sep 17 00:00:00 2001 From: Hugues Verlin Date: Mon, 6 Jan 2025 00:01:42 +0100 Subject: [PATCH 078/289] feat: Add setting description to mise settings --json-extended output (#3919) * feat: Add setting description to mise settings --json-extended output * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: jdx <216188+jdx@users.noreply.github.com> --- e2e/cli/test_settings_ls | 4 ++++ mise.lock | 4 ---- src/cli/settings/ls.rs | 39 +++++++++++++++++++++++++++++++++++++-- 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/e2e/cli/test_settings_ls b/e2e/cli/test_settings_ls index 6df03f1677..694cf63c9a 100644 --- a/e2e/cli/test_settings_ls +++ b/e2e/cli/test_settings_ls @@ -20,6 +20,8 @@ disable_backends = ["rust", "java"]' assert_contains "mise settings --json-extended" "{ \"all_compile\": { \"value\": false, + \"type\": \"boolean\", + \"description\": \"do not use precompiled binaries for any tool\", \"source\": \"$HOME/workdir/mise.toml\" }, \"disable_backends\": { @@ -27,6 +29,8 @@ assert_contains "mise settings --json-extended" "{ \"rust\", \"java\" ], + \"type\": \"array\", + \"description\": \"Backends to disable such as \`asdf\` or \`pipx\`\", \"source\": \"$HOME/workdir/mise.toml\" } }" diff --git a/mise.lock b/mise.lock index 2eb2476f07..97a6232e30 100644 --- a/mise.lock +++ b/mise.lock @@ -29,10 +29,6 @@ backend = "cargo:cargo-edit" version = "1.42.0" backend = "cargo:cargo-insta" -[tools."cargo:cargo-show"] -version = "0.6.0" -backend = "cargo:cargo-show" - [tools."cargo:git-cliff"] version = "2.7.0" backend = "cargo:git-cliff" diff --git a/src/cli/settings/ls.rs b/src/cli/settings/ls.rs index 5a68be17c6..599663471f 100644 --- a/src/cli/settings/ls.rs +++ b/src/cli/settings/ls.rs @@ -1,5 +1,5 @@ use crate::config; -use crate::config::settings::{SettingsPartial, SETTINGS_META}; +use crate::config::settings::{SettingsPartial, SettingsType, SETTINGS_META}; use crate::config::{Settings, ALL_TOML_CONFIG_FILES, SETTINGS}; use crate::file::display_path; use crate::ui::table; @@ -44,6 +44,19 @@ pub struct SettingsLs { toml: bool, } +fn settings_type_to_string(st: &SettingsType) -> String { + match st { + SettingsType::Bool => "boolean".to_string(), + SettingsType::String => "string".to_string(), + SettingsType::Integer => "number".to_string(), + SettingsType::Duration => "number".to_string(), + SettingsType::Path => "string".to_string(), + SettingsType::Url => "string".to_string(), + SettingsType::ListString => "array".to_string(), + SettingsType::ListPath => "array".to_string(), + } +} + impl SettingsLs { pub fn run(self) -> Result<()> { if self.complete { @@ -129,6 +142,10 @@ impl SettingsLs { "value".to_string(), toml_value_to_json_value(row.toml_value), ); + entry.insert("type".to_string(), row.type_.into()); + if let Some(description) = row.description { + entry.insert("description".to_string(), description.into()); + } if let Some(source) = row.source { entry.insert("source".to_string(), source.to_string_lossy().into()); } @@ -187,6 +204,10 @@ struct Row { source: Option, #[tabled(skip)] toml_value: toml::Value, + #[tabled(skip)] + description: Option, + #[tabled(skip)] + type_: String, } impl Row { @@ -206,21 +227,35 @@ impl Row { let mut rows = vec![]; if let Some(table) = v.as_table() { if !table.is_empty() { + rows.reserve(table.len()); + let meta = SETTINGS_META.get(k.as_str()); + let desc = meta.map(|sm| sm.description.to_string()); + let type_str = meta + .map(|sm| settings_type_to_string(&sm.type_)) + .unwrap_or_default(); + for (subkey, subvalue) in table { rows.push(Row { key: format!("{k}.{subkey}"), value: subvalue.to_string(), + type_: type_str.clone(), source: source.clone(), toml_value: subvalue.clone(), + description: desc.clone(), }); } } } else { + let meta = SETTINGS_META.get(k.as_str()); rows.push(Row { - key: k, + key: k.clone(), value: v.to_string(), + type_: meta + .map(|sm| settings_type_to_string(&sm.type_)) + .unwrap_or_default(), source, toml_value: v, + description: meta.map(|sm| sm.description.to_string()), }); } rows From 06cf4361408eae22ea5b365eac0cbcb5fa0edc44 Mon Sep 17 00:00:00 2001 From: mise-en-dev Date: Sun, 5 Jan 2025 19:12:49 -0600 Subject: [PATCH 079/289] chore: release 2025.1.1 (#3913) --- CHANGELOG.md | 42 +++++++++++++++++++++++++++++++++++++++++ Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 2 +- aqua-registry | 2 +- completions/_mise | 6 +++--- completions/mise.bash | 6 +++--- completions/mise.fish | 6 +++--- default.nix | 2 +- packaging/rpm/mise.spec | 2 +- 10 files changed, 57 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34364ae1da..193ab3a66b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,47 @@ # Changelog +## [2025.1.1](https://github.com/jdx/mise/compare/v2025.1.0..v2025.1.1) - 2025-01-06 + +### ๐Ÿš€ Features + +- add databricks-cli to registry by [@benberryallwood](https://github.com/benberryallwood) in [#3937](https://github.com/jdx/mise/pull/3937) +- add navi to registry by [@kit494way](https://github.com/kit494way) in [#3943](https://github.com/jdx/mise/pull/3943) +- added allurectl to registry by [@MontakOleg](https://github.com/MontakOleg) in [#3918](https://github.com/jdx/mise/pull/3918) +- Add setting description to mise settings --json-extended output by [@hverlin](https://github.com/hverlin) in [#3919](https://github.com/jdx/mise/pull/3919) + +### ๐Ÿ› Bug Fixes + +- improve mise generate bootstrap by [@hverlin](https://github.com/hverlin) in [#3939](https://github.com/jdx/mise/pull/3939) + +### ๐Ÿ“š Documentation + +- Fix broken link to environment variables doc by [@xcapaldi](https://github.com/xcapaldi) in [#3938](https://github.com/jdx/mise/pull/3938) +- Add usage property to mise schema by [@hverlin](https://github.com/hverlin) in [#3942](https://github.com/jdx/mise/pull/3942) +- clarity on relative paths vs config_root in _.path by [@glasser](https://github.com/glasser) in [#3923](https://github.com/jdx/mise/pull/3923) + +### ๐Ÿ“ฆ๏ธ Dependency Updates + +- update rust crate itertools to 0.14 by [@renovate[bot]](https://github.com/renovate[bot]) in [#3926](https://github.com/jdx/mise/pull/3926) +- update rust crate petgraph to 0.7 by [@renovate[bot]](https://github.com/renovate[bot]) in [#3927](https://github.com/jdx/mise/pull/3927) +- update rust crate self_update to 0.42 by [@renovate[bot]](https://github.com/renovate[bot]) in [#3931](https://github.com/jdx/mise/pull/3931) + +### Chore + +- upgrade expr by [@jdx](https://github.com/jdx) in [c06a415](https://github.com/jdx/mise/commit/c06a41544e2cb09912244efe6a8f5bcc03eb24d7) +- mise up by [@jdx](https://github.com/jdx) in [678f648](https://github.com/jdx/mise/commit/678f6489a9501b32bf3c36771977771d933f2466) +- cargo-show by [@jdx](https://github.com/jdx) in [69d44fd](https://github.com/jdx/mise/commit/69d44fd064d2fdaae08ff9ea3300a42e560630cd) +- remove cargo-show dependency by [@jdx](https://github.com/jdx) in [ab8e9e9](https://github.com/jdx/mise/commit/ab8e9e9e429beeb23731c356537525f64bc59b28) +- remove cargo-show dependency by [@jdx](https://github.com/jdx) in [ca2f89c](https://github.com/jdx/mise/commit/ca2f89c6cd36d828a9eab2884a3f8c9cc1fe2c19) +- remove cargo-show dependency by [@jdx](https://github.com/jdx) in [82e3390](https://github.com/jdx/mise/commit/82e3390c5fc9a97c942dc407b2073edfcb3974bc) + +### New Contributors + +- @MontakOleg made their first contribution in [#3918](https://github.com/jdx/mise/pull/3918) +- @kit494way made their first contribution in [#3943](https://github.com/jdx/mise/pull/3943) +- @benberryallwood made their first contribution in [#3937](https://github.com/jdx/mise/pull/3937) +- @xcapaldi made their first contribution in [#3938](https://github.com/jdx/mise/pull/3938) +- @auxesis made their first contribution in [#3914](https://github.com/jdx/mise/pull/3914) + ## [2025.1.0](https://github.com/jdx/mise/compare/v2024.12.24..v2025.1.0) - 2025-01-01 ### ๐Ÿš€ Features diff --git a/Cargo.lock b/Cargo.lock index 587f98e03d..c1d74f45d2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2623,7 +2623,7 @@ dependencies = [ [[package]] name = "mise" -version = "2025.1.0" +version = "2025.1.1" dependencies = [ "base64 0.22.1", "built", diff --git a/Cargo.toml b/Cargo.toml index 2c73398cca..c84df0612d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mise" -version = "2025.1.0" +version = "2025.1.1" edition = "2021" description = "The front-end to your dev env" authors = ["Jeff Dickey (@jdx)"] diff --git a/README.md b/README.md index 2297488c86..97f77501d2 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Install mise (other methods [here](https://mise.jdx.dev/getting-started.html)): ```sh-session $ curl https://mise.run | sh $ ~/.local/bin/mise --version -2025.1.0 macos-arm64 (a1b2d3e 2025-01-01) +2025.1.1 macos-arm64 (a1b2d3e 2025-01-06) ``` or install a specific a version: diff --git a/aqua-registry b/aqua-registry index 42c5df96df..367509cba3 160000 --- a/aqua-registry +++ b/aqua-registry @@ -1 +1 @@ -Subproject commit 42c5df96df400c7badf7d2e42b9c2ab8c0a5af1e +Subproject commit 367509cba335d6032c1921cc4d09931ea4e15f73 diff --git a/completions/_mise b/completions/_mise index f595b8ca44..0e05a23d07 100644 --- a/completions/_mise +++ b/completions/_mise @@ -27,11 +27,11 @@ _mise() { zstyle ":completion:${curcontext}:" cache-policy _usage_mise_cache_policy fi - if ( [[ -z "${_usage_spec_mise_2025_1_0:-}" ]] || _cache_invalid _usage_spec_mise_2025_1_0 ) \ - && ! _retrieve_cache _usage_spec_mise_2025_1_0; + if ( [[ -z "${_usage_spec_mise_2025_1_1:-}" ]] || _cache_invalid _usage_spec_mise_2025_1_1 ) \ + && ! _retrieve_cache _usage_spec_mise_2025_1_1; then spec="$(mise usage)" - _store_cache _usage_spec_mise_2025_1_0 spec + _store_cache _usage_spec_mise_2025_1_1 spec fi _arguments "*: :(($(usage complete-word --shell zsh -s "$spec" -- "${words[@]}" )))" diff --git a/completions/mise.bash b/completions/mise.bash index b7243f83b9..6ea052ac4f 100644 --- a/completions/mise.bash +++ b/completions/mise.bash @@ -6,14 +6,14 @@ _mise() { return 1 fi - if [[ -z ${_usage_spec_mise_2025_1_0:-} ]]; then - _usage_spec_mise_2025_1_0="$(mise usage)" + if [[ -z ${_usage_spec_mise_2025_1_1:-} ]]; then + _usage_spec_mise_2025_1_1="$(mise usage)" fi local cur prev words cword was_split comp_args _comp_initialize -n : -- "$@" || return # shellcheck disable=SC2207 - _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2025_1_0}" --cword="$cword" -- "${words[@]}")" + _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2025_1_1}" --cword="$cword" -- "${words[@]}")" _comp_ltrim_colon_completions "$cur" # shellcheck disable=SC2181 if [[ $? -ne 0 ]]; then diff --git a/completions/mise.fish b/completions/mise.fish index db0a8a1eac..7189e5c47e 100644 --- a/completions/mise.fish +++ b/completions/mise.fish @@ -6,7 +6,7 @@ if ! command -v usage &> /dev/null return 1 end -if ! set -q _usage_spec_mise_2025_1_0 - set -g _usage_spec_mise_2025_1_0 (mise usage | string collect) +if ! set -q _usage_spec_mise_2025_1_1 + set -g _usage_spec_mise_2025_1_1 (mise usage | string collect) end -complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_1_0" -- (commandline -cop) (commandline -t))' +complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_1_1" -- (commandline -cop) (commandline -t))' diff --git a/default.nix b/default.nix index 11fc729c8c..a554f8298d 100644 --- a/default.nix +++ b/default.nix @@ -2,7 +2,7 @@ rustPlatform.buildRustPackage { pname = "mise"; - version = "2025.1.0"; + version = "2025.1.1"; src = lib.cleanSource ./.; diff --git a/packaging/rpm/mise.spec b/packaging/rpm/mise.spec index 63e81ef669..225602f42a 100644 --- a/packaging/rpm/mise.spec +++ b/packaging/rpm/mise.spec @@ -1,6 +1,6 @@ Summary: The front-end to your dev env Name: mise -Version: 2025.1.0 +Version: 2025.1.1 Release: 1 URL: https://github.com/jdx/mise/ Group: System From 191ca32e32402c212e03db3060665b240c82c217 Mon Sep 17 00:00:00 2001 From: Nestor Cortina Date: Mon, 6 Jan 2025 02:37:41 -0500 Subject: [PATCH 080/289] fix: update year in copyright to dynamic with current year (#3957) --- docs/.vitepress/config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index efebb23f8e..2e76f37ebc 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -187,7 +187,7 @@ export default defineConfig({ footer: { message: 'Licensed under the MIT License. Maintained by @jdx and friends.', - copyright: 'Copyright ยฉ 2024 @jdx', + copyright: `Copyright ยฉ ${new Date().getFullYear()} @jdx`, }, carbonAds: { code: "CWYIPKQN", From 52ac62a7d7e8439d32b84c4247ee366c28901863 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Mon, 6 Jan 2025 08:44:14 +0100 Subject: [PATCH 081/289] chore: fix release-plz --- xtasks/release-plz | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xtasks/release-plz b/xtasks/release-plz index 29fee4851f..6c8583f68e 100755 --- a/xtasks/release-plz +++ b/xtasks/release-plz @@ -5,7 +5,7 @@ git config user.name mise-en-dev git config user.email release@mise.jdx.dev cur_version="$(cargo pkgid mise | cut -d# -f2)" -if ! cargo info mise | grep 'version:' | head -n1 | awk '{print $2}' | grep -q "^$cur_version$"; then +if ! cargo info mise | grep 'version:' | head -n1 | awk '{print $2}' | grep -q "$cur_version"; then echo "Releasing $cur_version" cargo publish changelog="$(git cliff --tag "v$cur_version" --strip all --unreleased)" From dba7044b4dcce808fd4734e9a284ab2174758be0 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Mon, 6 Jan 2025 09:18:00 +0100 Subject: [PATCH 082/289] chore: fix release-plz --- xtasks/release-plz | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xtasks/release-plz b/xtasks/release-plz index 6c8583f68e..91de136ca2 100755 --- a/xtasks/release-plz +++ b/xtasks/release-plz @@ -5,7 +5,7 @@ git config user.name mise-en-dev git config user.email release@mise.jdx.dev cur_version="$(cargo pkgid mise | cut -d# -f2)" -if ! cargo info mise | grep 'version:' | head -n1 | awk '{print $2}' | grep -q "$cur_version"; then +if ! curl https://crates.io/api/v1/crates/mise | jq -r '.versions[0].num' | grep -q "$cur_version"; then echo "Releasing $cur_version" cargo publish changelog="$(git cliff --tag "v$cur_version" --strip all --unreleased)" From 492f6acc99014cb70f97efdd12700ee365a418ea Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Mon, 6 Jan 2025 11:15:22 +0100 Subject: [PATCH 083/289] test: fix test-plugins CI job for ubuntu-24 --- .github/workflows/test-plugins.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-plugins.yml b/.github/workflows/test-plugins.yml index 6f0ff4ad71..2c80081832 100644 --- a/.github/workflows/test-plugins.yml +++ b/.github/workflows/test-plugins.yml @@ -95,7 +95,7 @@ jobs: command: mise exec postgres@latest -- psql -V steps: - name: apt-get - run: sudo apt-get update; sudo apt-get install zsh fish direnv re2c libcurl4-openssl-dev libgd-dev libonig-dev autoconf bison build-essential curl gettext git libgd-dev libcurl4-openssl-dev libedit-dev libicu-dev libjpeg-dev libmysqlclient-dev libonig-dev libpng-dev libpq-dev libreadline-dev libsqlite3-dev libssl-dev libxml2-dev libzip-dev openssl pkg-config re2c zlib1g-dev libwxgtk-webview3.0-gtk3-dev + run: sudo apt-get update; sudo apt-get install zsh fish direnv re2c libcurl4-openssl-dev libgd-dev libonig-dev autoconf bison build-essential curl gettext git libgd-dev libcurl4-openssl-dev libedit-dev libicu-dev libjpeg-dev libmysqlclient-dev libonig-dev libpng-dev libpq-dev libreadline-dev libsqlite3-dev libssl-dev libxml2-dev libzip-dev openssl pkg-config re2c zlib1g-dev - uses: actions/download-artifact@v4 with: name: tarball-x86_64-unknown-linux-gnu From e28c293bc5a241b043d0b72ec9aa0559e888f97b Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Mon, 6 Jan 2025 11:24:08 +0100 Subject: [PATCH 084/289] fix: correct age keyname --- settings.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.toml b/settings.toml index 537254bea7..3074415c1d 100644 --- a/settings.toml +++ b/settings.toml @@ -914,7 +914,7 @@ description = "The age private key to use for sops secret decryption." env = "MISE_SOPS_AGE_KEY_FILE" type = "Path" optional = true -default_docs = "~/.config/mise/age.key" +default_docs = "~/.config/mise/age.txt" description = "Path to the age private key file to use for sops secret decryption." [sops.age_recipients] From 322735a75bef9c602ffcec4d81914662cac00647 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Mon, 6 Jan 2025 11:26:10 +0100 Subject: [PATCH 085/289] chore: remove deprecated tar syntax --- scripts/build-tarball.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build-tarball.sh b/scripts/build-tarball.sh index 0e6a19dd3c..e1bed8b1ee 100755 --- a/scripts/build-tarball.sh +++ b/scripts/build-tarball.sh @@ -100,7 +100,7 @@ if [[ "$os" == "windows" ]]; then ls -oh "$basename.zip" else XZ_OPT=-9 tar -acf "$basename.tar.xz" mise - GZIP=-9 tar -acf "$basename.tar.gz" mise + tar -I 'gzip -9' -acf "$basename.tar.gz" mise ZSTD_NBTHREADS=0 ZSTD_CLEVEL=19 tar -acf "$basename.tar.zst" mise ls -oh "$basename.tar."* fi From cd0a049ecace47354a931cd364ac2f5915812658 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Mon, 6 Jan 2025 13:11:12 +0100 Subject: [PATCH 086/289] chore: fix tar/gzip syntax --- scripts/build-tarball.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build-tarball.sh b/scripts/build-tarball.sh index e1bed8b1ee..f03f529b55 100755 --- a/scripts/build-tarball.sh +++ b/scripts/build-tarball.sh @@ -100,7 +100,7 @@ if [[ "$os" == "windows" ]]; then ls -oh "$basename.zip" else XZ_OPT=-9 tar -acf "$basename.tar.xz" mise - tar -I 'gzip -9' -acf "$basename.tar.gz" mise + tar -cf - mise | gzip -9 >"$basename.tar.gz" ZSTD_NBTHREADS=0 ZSTD_CLEVEL=19 tar -acf "$basename.tar.zst" mise ls -oh "$basename.tar."* fi From e93bc80a780fd0f7b4619af37c3f646dd622bed4 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Mon, 6 Jan 2025 13:13:42 +0100 Subject: [PATCH 087/289] test: remove postgres test-plugins test --- .github/workflows/test-plugins.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-plugins.yml b/.github/workflows/test-plugins.yml index 2c80081832..2afa3a9a6e 100644 --- a/.github/workflows/test-plugins.yml +++ b/.github/workflows/test-plugins.yml @@ -91,8 +91,9 @@ jobs: command: mise exec php@latest -- php -v php - plugin: rust command: mise exec rust@nightly -- rustc -V - - plugin: postgres - command: mise exec postgres@latest -- psql -V + # TODO: has some sort of readline bug on ubuntu-24 + # - plugin: postgres + # command: mise exec postgres@latest -- psql -V steps: - name: apt-get run: sudo apt-get update; sudo apt-get install zsh fish direnv re2c libcurl4-openssl-dev libgd-dev libonig-dev autoconf bison build-essential curl gettext git libgd-dev libcurl4-openssl-dev libedit-dev libicu-dev libjpeg-dev libmysqlclient-dev libonig-dev libpng-dev libpq-dev libreadline-dev libsqlite3-dev libssl-dev libxml2-dev libzip-dev openssl pkg-config re2c zlib1g-dev From 74a4774a03aab79c77e64c95a7fa5921e04cdd44 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Mon, 6 Jan 2025 14:13:36 +0000 Subject: [PATCH 088/289] feat: migrate asdf plugins to aqua/ubi (#3962) --- docs/registry.md | 74 +++++++++++++-------------- registry.toml | 130 ++++++++++++++++++++++++++++++++--------------- 2 files changed, 123 insertions(+), 81 deletions(-) diff --git a/docs/registry.md b/docs/registry.md index f526f308e5..69114ce8a6 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -324,23 +324,23 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | hamler | [asdf:scudelletti/asdf-hamler](https://github.com/scudelletti/asdf-hamler) | | has | [aqua:kdabir/has](https://github.com/kdabir/has) [asdf:sylvainmetayer/asdf-has](https://github.com/sylvainmetayer/asdf-has) | | haskell | [asdf:asdf-community/asdf-haskell](https://github.com/asdf-community/asdf-haskell) | -| hasura-cli | [asdf:gurukulkarni/asdf-hasura](https://github.com/gurukulkarni/asdf-hasura) | +| hasura-cli | [aqua:hasura/graphql-engine](https://github.com/hasura/graphql-engine) [asdf:gurukulkarni/asdf-hasura](https://github.com/gurukulkarni/asdf-hasura) | | haxe | [asdf:asdf-community/asdf-haxe](https://github.com/asdf-community/asdf-haxe) | | hcl2json | [aqua:tmccombs/hcl2json](https://github.com/tmccombs/hcl2json) [asdf:dex4er/asdf-hcl2json](https://github.com/dex4er/asdf-hcl2json) | -| hcloud | [asdf:chessmango/asdf-hcloud](https://github.com/chessmango/asdf-hcloud) | +| hcloud | [aqua:hetznercloud/cli](https://github.com/hetznercloud/cli) [asdf:chessmango/asdf-hcloud](https://github.com/chessmango/asdf-hcloud) | | helm | [aqua:helm/helm](https://github.com/helm/helm) [asdf:Antiarchitect/asdf-helm](https://github.com/Antiarchitect/asdf-helm) | -| helm-cr | [asdf:Antiarchitect/asdf-helm-cr](https://github.com/Antiarchitect/asdf-helm-cr) | -| helm-ct | [asdf:tablexi/asdf-helm-ct](https://github.com/tablexi/asdf-helm-ct) | +| helm-cr | [aqua:helm/chart-releaser](https://github.com/helm/chart-releaser) [asdf:Antiarchitect/asdf-helm-cr](https://github.com/Antiarchitect/asdf-helm-cr) | +| helm-ct | [aqua:helm/chart-testing](https://github.com/helm/chart-testing) [asdf:tablexi/asdf-helm-ct](https://github.com/tablexi/asdf-helm-ct) | | helm-diff | [asdf:dex4er/asdf-helm-diff](https://github.com/dex4er/asdf-helm-diff) | | helm-docs | [aqua:norwoodj/helm-docs](https://github.com/norwoodj/helm-docs) [asdf:sudermanjr/asdf-helm-docs](https://github.com/sudermanjr/asdf-helm-docs) | | helmfile | [ubi:helmfile/helmfile](https://github.com/helmfile/helmfile) [asdf:feniix/asdf-helmfile](https://github.com/feniix/asdf-helmfile) | | helmsman | [ubi:Praqma/helmsman](https://github.com/Praqma/helmsman) [asdf:luisdavim/asdf-helmsman](https://github.com/luisdavim/asdf-helmsman) | | heroku | [asdf:mise-plugins/mise-heroku-cli](https://github.com/mise-plugins/mise-heroku-cli) | | hey | [asdf:raimon49/asdf-hey](https://github.com/raimon49/asdf-hey) | -| hishtory | [asdf:asdf-community/asdf-hishtory](https://github.com/asdf-community/asdf-hishtory) | +| hishtory | [ubi:ddworken/hishtory](https://github.com/ddworken/hishtory) [asdf:asdf-community/asdf-hishtory](https://github.com/asdf-community/asdf-hishtory) | | hivemind | [ubi:DarthSim/hivemind](https://github.com/DarthSim/hivemind) [go:github.com/DarthSim/hivemind](https://pkg.go.dev/github.com/DarthSim/hivemind) | -| hledger | [asdf:airtonix/asdf-hledger](https://github.com/airtonix/asdf-hledger) | -| hledger-flow | [asdf:airtonix/asdf-hledger-flow](https://github.com/airtonix/asdf-hledger-flow) | +| hledger | [ubi:simonmichael/hledger](https://github.com/simonmichael/hledger) [asdf:airtonix/asdf-hledger](https://github.com/airtonix/asdf-hledger) | +| hledger-flow | [ubi:apauley/hledger-flow](https://github.com/apauley/hledger-flow) [asdf:airtonix/asdf-hledger-flow](https://github.com/airtonix/asdf-hledger-flow) | | hls | [asdf:sestrella/asdf-ghcup](https://github.com/sestrella/asdf-ghcup) | | hostctl | [aqua:guumaster/hostctl](https://github.com/guumaster/hostctl) [asdf:svenluijten/asdf-hostctl](https://github.com/svenluijten/asdf-hostctl) | | httpie-go | [aqua:nojima/httpie-go](https://github.com/nojima/httpie-go) [asdf:abatilo/asdf-httpie-go](https://github.com/abatilo/asdf-httpie-go) | @@ -349,8 +349,8 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | hugo-extended | [aqua:gohugoio/hugo/hugo-extended](https://github.com/gohugoio/hugo/hugo-extended) | | hurl | [aqua:Orange-OpenSource/hurl](https://github.com/Orange-OpenSource/hurl) [asdf:raimon49/asdf-hurl](https://github.com/raimon49/asdf-hurl) | | hwatch | [ubi:blacknon/hwatch](https://github.com/blacknon/hwatch) [asdf:chessmango/asdf-hwatch](https://github.com/chessmango/asdf-hwatch) | -| hygen | [asdf:brentjanderson/asdf-hygen](https://github.com/brentjanderson/asdf-hygen) | -| hyperfine | [ubi:sharkdp/hyperfine](https://github.com/sharkdp/hyperfine) [asdf:volf52/asdf-hyperfine](https://github.com/volf52/asdf-hyperfine) | +| hygen | [ubi:jondot/hygen](https://github.com/jondot/hygen) [asdf:brentjanderson/asdf-hygen](https://github.com/brentjanderson/asdf-hygen) | +| hyperfine | [aqua:sharkdp/hyperfine](https://github.com/sharkdp/hyperfine) [ubi:sharkdp/hyperfine](https://github.com/sharkdp/hyperfine) [asdf:volf52/asdf-hyperfine](https://github.com/volf52/asdf-hyperfine) | | iam-policy-json-to-terraform | [aqua:flosell/iam-policy-json-to-terraform](https://github.com/flosell/iam-policy-json-to-terraform) [asdf:carlduevel/asdf-iam-policy-json-to-terraform](https://github.com/carlduevel/asdf-iam-policy-json-to-terraform) | | iamlive | [aqua:iann0036/iamlive](https://github.com/iann0036/iamlive) [asdf:chessmango/asdf-iamlive](https://github.com/chessmango/asdf-iamlive) | | ibmcloud | [asdf:triangletodd/asdf-ibmcloud](https://github.com/triangletodd/asdf-ibmcloud) | @@ -359,15 +359,14 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | imagemagick | [asdf:mangalakader/asdf-imagemagick](https://github.com/mangalakader/asdf-imagemagick) | | imgpkg | [aqua:carvel-dev/imgpkg](https://github.com/carvel-dev/imgpkg) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | | infracost | [aqua:infracost/infracost](https://github.com/infracost/infracost) [asdf:dex4er/asdf-infracost](https://github.com/dex4er/asdf-infracost) | -| inlets | [asdf:nlamirault/asdf-inlets](https://github.com/nlamirault/asdf-inlets) | +| inlets | [aqua:inlets/inletsctl](https://github.com/inlets/inletsctl) [asdf:nlamirault/asdf-inlets](https://github.com/nlamirault/asdf-inlets) | | io | [asdf:mracos/asdf-io](https://github.com/mracos/asdf-io) | | istioctl | [aqua:istio/istio/istioctl](https://github.com/istio/istio/istioctl) [asdf:virtualstaticvoid/asdf-istioctl](https://github.com/virtualstaticvoid/asdf-istioctl) | | janet | [asdf:Jakski/asdf-janet](https://github.com/Jakski/asdf-janet) | | java | [core:java](https://mise.jdx.dev/lang/java.html) | -| jb | [aqua:jsonnet-bundler/jsonnet-bundler](https://github.com/jsonnet-bundler/jsonnet-bundler) [asdf:beardix/asdf-jb](https://github.com/beardix/asdf-jb) | | jbang | [asdf:jbangdev/jbang-asdf](https://github.com/jbangdev/jbang-asdf) | | jfrog-cli | [asdf:LozanoMatheus/asdf-jfrog-cli](https://github.com/LozanoMatheus/asdf-jfrog-cli) | -| jib | [asdf:joschi/asdf-jib](https://github.com/joschi/asdf-jib) | +| jib | [ubi:GoogleContainerTools/jib](https://github.com/GoogleContainerTools/jib) [asdf:joschi/asdf-jib](https://github.com/joschi/asdf-jib) | | jiq | [aqua:fiatjaf/jiq](https://github.com/fiatjaf/jiq) [asdf:chessmango/asdf-jiq](https://github.com/chessmango/asdf-jiq) | | jj | [aqua:jj-vcs/jj](https://github.com/jj-vcs/jj) [ubi:jj-vcs/jj](https://github.com/jj-vcs/jj) | | jless | [aqua:PaulJuliusMartinez/jless](https://github.com/PaulJuliusMartinez/jless) [asdf:jc00ke/asdf-jless](https://github.com/jc00ke/asdf-jless) | @@ -377,17 +376,16 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | jq | [aqua:jqlang/jq](https://github.com/jqlang/jq) [asdf:mise-plugins/asdf-jq](https://github.com/mise-plugins/asdf-jq) | | jqp | [aqua:noahgorstein/jqp](https://github.com/noahgorstein/jqp) [asdf:https://gitlab.com/wt0f/asdf-jqp](https://gitlab.com/wt0f/asdf-jqp) | | jreleaser | [aqua:jreleaser/jreleaser](https://github.com/jreleaser/jreleaser) [asdf:joschi/asdf-jreleaser](https://github.com/joschi/asdf-jreleaser) | -| jsonnet | [asdf:Banno/asdf-jsonnet](https://github.com/Banno/asdf-jsonnet) | +| jsonnet-bundler | [aqua:jsonnet-bundler/jsonnet-bundler](https://github.com/jsonnet-bundler/jsonnet-bundler) [asdf:beardix/asdf-jb](https://github.com/beardix/asdf-jb) | | julia | [asdf:rkyleg/asdf-julia](https://github.com/rkyleg/asdf-julia) | | just | [ubi:casey/just](https://github.com/casey/just) [asdf:olofvndrhr/asdf-just](https://github.com/olofvndrhr/asdf-just) | | jwt | [ubi:mike-engel/jwt-cli](https://github.com/mike-engel/jwt-cli) [cargo:jwt-cli](https://crates.io/crates/jwt-cli) | | jwtui | [ubi:jwt-rs/jwt-ui](https://github.com/jwt-rs/jwt-ui) [cargo:jwt-ui](https://crates.io/crates/jwt-ui) | | jx | [ubi:jenkins-x/jx](https://github.com/jenkins-x/jx) [asdf:vbehar/asdf-jx](https://github.com/vbehar/asdf-jx) | | k0sctl | [ubi:k0sproject/k0sctl](https://github.com/k0sproject/k0sctl) [asdf:Its-Alex/asdf-plugin-k0sctl](https://github.com/Its-Alex/asdf-plugin-k0sctl) | -| k14s | [asdf:k14s/asdf-k14s](https://github.com/k14s/asdf-k14s) | | k2tf | [ubi:sl1pm4t/k2tf](https://github.com/sl1pm4t/k2tf) [asdf:carlduevel/asdf-k2tf](https://github.com/carlduevel/asdf-k2tf) | | k3d | [ubi:k3d-io/k3d](https://github.com/k3d-io/k3d) [asdf:spencergilbert/asdf-k3d](https://github.com/spencergilbert/asdf-k3d) | -| k3kcli | [asdf:xanmanning/asdf-k3kcli](https://github.com/xanmanning/asdf-k3kcli) | +| k3kcli | [ubi:rancher/k3k](https://github.com/rancher/k3k) [asdf:xanmanning/asdf-k3kcli](https://github.com/xanmanning/asdf-k3kcli) | | k3s | [asdf:dmpe/asdf-k3s](https://github.com/dmpe/asdf-k3s) | | k3sup | [aqua:alexellis/k3sup](https://github.com/alexellis/k3sup) [asdf:cgroschupp/asdf-k3sup](https://github.com/cgroschupp/asdf-k3sup) | | k6 | [ubi:grafana/k6](https://github.com/grafana/k6) [asdf:gr1m0h/asdf-k6](https://github.com/gr1m0h/asdf-k6) | @@ -397,30 +395,29 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | kapp | [aqua:carvel-dev/kapp](https://github.com/carvel-dev/kapp) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | | kbld | [aqua:carvel-dev/kbld](https://github.com/carvel-dev/kbld) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | | kcat | [asdf:douglasdgoulart/asdf-kcat](https://github.com/douglasdgoulart/asdf-kcat) | -| kcctl | [asdf:joschi/asdf-kcctl](https://github.com/joschi/asdf-kcctl) | +| kcctl | [ubi:kcctl/kcctl](https://github.com/kcctl/kcctl) [asdf:joschi/asdf-kcctl](https://github.com/joschi/asdf-kcctl) | | kcl | [asdf:starkers/asdf-kcl](https://github.com/starkers/asdf-kcl) | | kconf | [aqua:particledecay/kconf](https://github.com/particledecay/kconf) [asdf:particledecay/asdf-kconf](https://github.com/particledecay/asdf-kconf) | -| ki | [asdf:comdotlinux/asdf-ki](https://github.com/comdotlinux/asdf-ki) | +| ki | [ubi:Kotlin/kotlin-interactive-shell](https://github.com/Kotlin/kotlin-interactive-shell) [asdf:comdotlinux/asdf-ki](https://github.com/comdotlinux/asdf-ki) | | killport | [ubi:jkfran/killport](https://github.com/jkfran/killport) | | kind | [ubi:kubernetes-sigs/kind](https://github.com/kubernetes-sigs/kind) [asdf:johnlayton/asdf-kind](https://github.com/johnlayton/asdf-kind) | | kiota | [aqua:microsoft/kiota](https://github.com/microsoft/kiota) [asdf:asdf-community/asdf-kiota](https://github.com/asdf-community/asdf-kiota) | | kn | [aqua:knative/client](https://github.com/knative/client) [asdf:joke/asdf-kn](https://github.com/joke/asdf-kn) | | ko | [aqua:ko-build/ko](https://github.com/ko-build/ko) [asdf:zasdaym/asdf-ko](https://github.com/zasdaym/asdf-ko) | -| koka | [asdf:susurri/asdf-koka](https://github.com/susurri/asdf-koka) | +| koka | [ubi:koka-lang/koka](https://github.com/koka-lang/koka) [asdf:susurri/asdf-koka](https://github.com/susurri/asdf-koka) | | kompose | [ubi:kubernetes/kompose](https://github.com/kubernetes/kompose) [asdf:technikhil314/asdf-kompose](https://github.com/technikhil314/asdf-kompose) | | kops | [aqua:kubernetes/kops](https://github.com/kubernetes/kops) [asdf:Antiarchitect/asdf-kops](https://github.com/Antiarchitect/asdf-kops) | | kotlin | [asdf:asdf-community/asdf-kotlin](https://github.com/asdf-community/asdf-kotlin) [vfox:version-fox/vfox-kotlin](https://github.com/version-fox/vfox-kotlin) | | kpack | [ubi:vmware-tanzu/kpack-cli](https://github.com/vmware-tanzu/kpack-cli) [asdf:asdf-community/asdf-kpack-cli](https://github.com/asdf-community/asdf-kpack-cli) | | kpt | [aqua:kptdev/kpt](https://github.com/kptdev/kpt) [asdf:nlamirault/asdf-kpt](https://github.com/nlamirault/asdf-kpt) | -| krab | [asdf:ohkrab/asdf-krab](https://github.com/ohkrab/asdf-krab) | +| krab | [ubi:ohkrab/krab](https://github.com/ohkrab/krab) [asdf:ohkrab/asdf-krab](https://github.com/ohkrab/asdf-krab) | | krew | [aqua:kubernetes-sigs/krew](https://github.com/kubernetes-sigs/krew) [asdf:bjw-s/asdf-krew](https://github.com/bjw-s/asdf-krew) | -| kscript | [asdf:edgelevel/asdf-kscript](https://github.com/edgelevel/asdf-kscript) | -| ksonnet | [asdf:Banno/asdf-ksonnet](https://github.com/Banno/asdf-ksonnet) | -| ksops | [asdf:janpieper/asdf-ksops](https://github.com/janpieper/asdf-ksops) | +| kscript | [ubi:kscripting/kscript](https://github.com/kscripting/kscript) [asdf:edgelevel/asdf-kscript](https://github.com/edgelevel/asdf-kscript) | +| ksops | [ubi:viaduct-ai/kustomize-sops](https://github.com/viaduct-ai/kustomize-sops) [asdf:janpieper/asdf-ksops](https://github.com/janpieper/asdf-ksops) | | ktlint | [asdf:esensar/asdf-ktlint](https://github.com/esensar/asdf-ktlint) | | kube-capacity | [aqua:robscott/kube-capacity](https://github.com/robscott/kube-capacity) [asdf:looztra/asdf-kube-capacity](https://github.com/looztra/asdf-kube-capacity) | | kube-code-generator | [asdf:jimmidyson/asdf-kube-code-generator](https://github.com/jimmidyson/asdf-kube-code-generator) | -| kube-controller-tools | [asdf:jimmidyson/asdf-kube-controller-tools](https://github.com/jimmidyson/asdf-kube-controller-tools) | +| kube-controller-tools | [ubi:kubernetes-sigs/controller-tools](https://github.com/kubernetes-sigs/controller-tools) [asdf:jimmidyson/asdf-kube-controller-tools](https://github.com/jimmidyson/asdf-kube-controller-tools) | | kube-credential-cache | [aqua:ryodocx/kube-credential-cache](https://github.com/ryodocx/kube-credential-cache) [asdf:ryodocx/kube-credential-cache](https://github.com/ryodocx/kube-credential-cache) | | kube-linter | [aqua:stackrox/kube-linter](https://github.com/stackrox/kube-linter) [asdf:devlincashman/asdf-kube-linter](https://github.com/devlincashman/asdf-kube-linter) | | kube-score | [aqua:zegl/kube-score](https://github.com/zegl/kube-score) [asdf:bageljp/asdf-kube-score](https://github.com/bageljp/asdf-kube-score) | @@ -429,14 +426,13 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | kubecolor | [aqua:hidetatz/kubecolor](https://github.com/hidetatz/kubecolor) [asdf:dex4er/asdf-kubecolor](https://github.com/dex4er/asdf-kubecolor) | | kubeconform | [aqua:yannh/kubeconform](https://github.com/yannh/kubeconform) [asdf:lirlia/asdf-kubeconform](https://github.com/lirlia/asdf-kubeconform) | | kubectl | [aqua:kubernetes/kubectl](https://github.com/kubernetes/kubectl) [asdf:asdf-community/asdf-kubectl](https://github.com/asdf-community/asdf-kubectl) | -| kubectl-bindrole | [asdf:looztra/asdf-kubectl-bindrole](https://github.com/looztra/asdf-kubectl-bindrole) | -| kubectl-buildkit | [asdf:ezcater/asdf-kubectl-buildkit](https://github.com/ezcater/asdf-kubectl-buildkit) | | kubectl-convert | [aqua:kubernetes/kubectl-convert](https://github.com/kubernetes/kubectl-convert) [asdf:iul1an/asdf-kubectl-convert](https://github.com/iul1an/asdf-kubectl-convert) | | kubectl-kots | [aqua:replicatedhq/kots](https://github.com/replicatedhq/kots) [asdf:ganta/asdf-kubectl-kots](https://github.com/ganta/asdf-kubectl-kots) | | kubectl-kuttl | [aqua:kudobuilder/kuttl](https://github.com/kudobuilder/kuttl) [asdf:jimmidyson/asdf-kuttl](https://github.com/jimmidyson/asdf-kuttl) | +| kubectl-rolesum | [aqua:Ladicle/kubectl-rolesum](https://github.com/Ladicle/kubectl-rolesum) [asdf:looztra/asdf-kubectl-bindrole](https://github.com/looztra/asdf-kubectl-bindrole) | | kubectx | [aqua:ahmetb/kubectx](https://github.com/ahmetb/kubectx) [asdf:https://gitlab.com/wt0f/asdf-kubectx](https://gitlab.com/wt0f/asdf-kubectx) | | kubefedctl | [aqua:kubernetes-retired/kubefed](https://github.com/kubernetes-retired/kubefed) [asdf:kvokka/asdf-kubefedctl](https://github.com/kvokka/asdf-kubefedctl) | -| kubefirst | [asdf:Claywd/asdf-kubefirst](https://github.com/Claywd/asdf-kubefirst) | +| kubefirst | [ubi:konstructio/kubefirst](https://github.com/konstructio/kubefirst) [asdf:Claywd/asdf-kubefirst](https://github.com/Claywd/asdf-kubefirst) | | kubelogin | [aqua:int128/kubelogin](https://github.com/int128/kubelogin) | | kubemqctl | [aqua:kubemq-io/kubemqctl](https://github.com/kubemq-io/kubemqctl) [asdf:johnlayton/asdf-kubemqctl](https://github.com/johnlayton/asdf-kubemqctl) | | kubent | [aqua:doitintl/kube-no-trouble](https://github.com/doitintl/kube-no-trouble) [asdf:virtualstaticvoid/asdf-kubent](https://github.com/virtualstaticvoid/asdf-kubent) | @@ -452,7 +448,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | kwt | [aqua:carvel-dev/kwt](https://github.com/carvel-dev/kwt) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | | kyverno | [aqua:kyverno/kyverno](https://github.com/kyverno/kyverno) [asdf:https://github.com/hobaen/asdf-kyverno-cli.git](https://github.com/hobaen/asdf-kyverno-cli) | | lab | [aqua:zaquestion/lab](https://github.com/zaquestion/lab) [asdf:particledecay/asdf-lab](https://github.com/particledecay/asdf-lab) | -| lane | [asdf:CodeReaper/asdf-lane](https://github.com/CodeReaper/asdf-lane) | +| lane | [ubi:CodeReaper/lane](https://github.com/CodeReaper/lane) [asdf:CodeReaper/asdf-lane](https://github.com/CodeReaper/asdf-lane) | | lazydocker | [aqua:jesseduffield/lazydocker](https://github.com/jesseduffield/lazydocker) [ubi:jesseduffield/lazydocker](https://github.com/jesseduffield/lazydocker) | | lazygit | [aqua:jesseduffield/lazygit](https://github.com/jesseduffield/lazygit) [asdf:nklmilojevic/asdf-lazygit](https://github.com/nklmilojevic/asdf-lazygit) | | lean | [asdf:asdf-community/asdf-lean](https://github.com/asdf-community/asdf-lean) | @@ -460,29 +456,27 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | leiningen | [asdf:miorimmax/asdf-lein](https://github.com/miorimmax/asdf-lein) | | levant | [aqua:hashicorp/levant](https://github.com/hashicorp/levant) [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | | lfe | [asdf:asdf-community/asdf-lfe](https://github.com/asdf-community/asdf-lfe) | -| libsql-server | [asdf:jonasb/asdf-libsql-server](https://github.com/jonasb/asdf-libsql-server) | -| license-plist | [asdf:MacPaw/asdf-license-plist](https://github.com/MacPaw/asdf-license-plist) | +| libsql-server | [ubi:tursodatabase/libsql](https://github.com/tursodatabase/libsql) [asdf:jonasb/asdf-libsql-server](https://github.com/jonasb/asdf-libsql-server) | +| license-plist | [ubi:mono0926/LicensePlist](https://github.com/mono0926/LicensePlist) [asdf:MacPaw/asdf-license-plist](https://github.com/MacPaw/asdf-license-plist) | | lima | [aqua:lima-vm/lima](https://github.com/lima-vm/lima) [asdf:CrouchingMuppet/asdf-lima](https://github.com/CrouchingMuppet/asdf-lima) | -| link | [asdf:asdf-community/asdf-link](https://github.com/asdf-community/asdf-link) | -| linkerd | [asdf:kforsthoevel/asdf-linkerd](https://github.com/kforsthoevel/asdf-linkerd) | -| liqoctl | [asdf:pdemagny/asdf-liqoctl](https://github.com/pdemagny/asdf-liqoctl) | +| linkerd | [aqua:linkerd/linkerd2](https://github.com/linkerd/linkerd2) [asdf:kforsthoevel/asdf-linkerd](https://github.com/kforsthoevel/asdf-linkerd) | +| liqoctl | [aqua:liqotech/liqo](https://github.com/liqotech/liqo) [asdf:pdemagny/asdf-liqoctl](https://github.com/pdemagny/asdf-liqoctl) | | liquibase | [asdf:saliougaye/asdf-liquibase](https://github.com/saliougaye/asdf-liquibase) | | litestream | [aqua:benbjohnson/litestream](https://github.com/benbjohnson/litestream) [asdf:threkk/asdf-litestream](https://github.com/threkk/asdf-litestream) | | llvm-objcopy | [asdf:higebu/asdf-llvm](https://github.com/higebu/asdf-llvm) | | llvm-objdump | [asdf:higebu/asdf-llvm](https://github.com/higebu/asdf-llvm) | | logtalk | [asdf:LogtalkDotOrg/asdf-logtalk](https://github.com/LogtalkDotOrg/asdf-logtalk) | -| loki-logcli | [asdf:comdotlinux/asdf-loki-logcli](https://github.com/comdotlinux/asdf-loki-logcli) | +| loki-logcli | [aqua:grafana/loki/logcli](https://github.com/grafana/loki/logcli) [asdf:comdotlinux/asdf-loki-logcli](https://github.com/comdotlinux/asdf-loki-logcli) | | ls-lint | [aqua:loeffel-io/ls-lint](https://github.com/loeffel-io/ls-lint) [asdf:Ameausoone/asdf-ls-lint](https://github.com/Ameausoone/asdf-ls-lint) | | lsd | [aqua:lsd-rs/lsd](https://github.com/lsd-rs/lsd) [asdf:mise-plugins/asdf-lsd](https://github.com/mise-plugins/asdf-lsd) | | lua | [asdf:Stratus3D/asdf-lua](https://github.com/Stratus3D/asdf-lua) | | lua-language-server | [aqua:LuaLS/lua-language-server](https://github.com/LuaLS/lua-language-server) [asdf:bellini666/asdf-lua-language-server](https://github.com/bellini666/asdf-lua-language-server) | | luajit | [asdf:smashedtoatoms/asdf-luaJIT](https://github.com/smashedtoatoms/asdf-luaJIT) | -| lucy | [asdf:cometkim/asdf-lucy](https://github.com/cometkim/asdf-lucy) | -| maestro | [asdf:dotanuki-labs/asdf-maestro](https://github.com/dotanuki-labs/asdf-maestro) | +| maestro | [ubi:mobile-dev-inc/maestro](https://github.com/mobile-dev-inc/maestro) [asdf:dotanuki-labs/asdf-maestro](https://github.com/dotanuki-labs/asdf-maestro) | | mage | [aqua:magefile/mage](https://github.com/magefile/mage) [asdf:mathew-fleisch/asdf-mage](https://github.com/mathew-fleisch/asdf-mage) | | make | [asdf:yacchi/asdf-make](https://github.com/yacchi/asdf-make) | -| mani | [asdf:anweber/asdf-mani](https://github.com/anweber/asdf-mani) | -| mark | [asdf:jfreeland/asdf-mark](https://github.com/jfreeland/asdf-mark) | +| mani | [ubi:alajmo/mani](https://github.com/alajmo/mani) [asdf:anweber/asdf-mani](https://github.com/anweber/asdf-mani) | +| mark | [ubi:kovetskiy/mark](https://github.com/kovetskiy/mark) [asdf:jfreeland/asdf-mark](https://github.com/jfreeland/asdf-mark) | | markdownlint-cli2 | [npm:markdownlint-cli2](https://www.npmjs.com/package/markdownlint-cli2) [asdf:paulo-ferraz-oliveira/asdf-markdownlint-cli2](https://github.com/paulo-ferraz-oliveira/asdf-markdownlint-cli2) | | marp-cli | [aqua:marp-team/marp-cli](https://github.com/marp-team/marp-cli) [asdf:xataz/asdf-marp-cli](https://github.com/xataz/asdf-marp-cli) | | mask | [aqua:jacobdeichert/mask](https://github.com/jacobdeichert/mask) [asdf:aaaaninja/asdf-mask](https://github.com/aaaaninja/asdf-mask) | @@ -491,7 +485,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | mdbook | [aqua:rust-lang/mdBook](https://github.com/rust-lang/mdBook) [asdf:cipherstash/asdf-mdbook](https://github.com/cipherstash/asdf-mdbook) | | mdbook-linkcheck | [asdf:cipherstash/asdf-mdbook-linkcheck](https://github.com/cipherstash/asdf-mdbook-linkcheck) | | melange | [aqua:chainguard-dev/melange](https://github.com/chainguard-dev/melange) [asdf:omissis/asdf-melange](https://github.com/omissis/asdf-melange) | -| melt | [asdf:chessmango/asdf-melt](https://github.com/chessmango/asdf-melt) | +| melt | [ubi:charmbracelet/melt](https://github.com/charmbracelet/melt) [asdf:chessmango/asdf-melt](https://github.com/chessmango/asdf-melt) | | memcached | [asdf:furkanural/asdf-memcached](https://github.com/furkanural/asdf-memcached) | | mercury | [asdf:susurri/asdf-mercury](https://github.com/susurri/asdf-mercury) | | meson | [asdf:asdf-community/asdf-meson](https://github.com/asdf-community/asdf-meson) | @@ -503,8 +497,8 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | minio | [asdf:aeons/asdf-minio](https://github.com/aeons/asdf-minio) | | minishift | [aqua:minishift/minishift](https://github.com/minishift/minishift) [asdf:sqtran/asdf-minishift](https://github.com/sqtran/asdf-minishift) | | minisign | [aqua:jedisct1/minisign](https://github.com/jedisct1/minisign) | -| mint | [asdf:mint-lang/asdf-mint](https://github.com/mint-lang/asdf-mint) | -| mirrord | [asdf:metalbear-co/asdf-mirrord](https://github.com/metalbear-co/asdf-mirrord) | +| mint | [ubi:mint-lang/mint](https://github.com/mint-lang/mint) [asdf:mint-lang/asdf-mint](https://github.com/mint-lang/asdf-mint) | +| mirrord | [ubi:metalbear-co/mirrord](https://github.com/metalbear-co/mirrord) [asdf:metalbear-co/asdf-mirrord](https://github.com/metalbear-co/asdf-mirrord) | | mitmproxy | [asdf:NeoHsu/asdf-mitmproxy](https://github.com/NeoHsu/asdf-mitmproxy) | | mkcert | [ubi:FiloSottile/mkcert](https://github.com/FiloSottile/mkcert) [asdf:salasrod/asdf-mkcert](https://github.com/salasrod/asdf-mkcert) | | mlton | [asdf:asdf-community/asdf-mlton](https://github.com/asdf-community/asdf-mlton) | diff --git a/registry.toml b/registry.toml index 5685ee9c08..a16fa874dd 100644 --- a/registry.toml +++ b/registry.toml @@ -800,13 +800,19 @@ has.backends = ["aqua:kdabir/has", "asdf:sylvainmetayer/asdf-has"] has.os = ["linux", "macos"] has.test = ["has --version", "v{{version}}"] haskell.backends = ["asdf:asdf-community/asdf-haskell"] -hasura-cli.backends = ["asdf:gurukulkarni/asdf-hasura"] +hasura-cli.backends = [ + "aqua:hasura/graphql-engine", + "asdf:gurukulkarni/asdf-hasura" +] haxe.backends = ["asdf:asdf-community/asdf-haxe"] hcl2json.backends = ["aqua:tmccombs/hcl2json", "asdf:dex4er/asdf-hcl2json"] -hcloud.backends = ["asdf:chessmango/asdf-hcloud"] +hcloud.backends = ["aqua:hetznercloud/cli", "asdf:chessmango/asdf-hcloud"] helm.backends = ["aqua:helm/helm", "asdf:Antiarchitect/asdf-helm"] -helm-cr.backends = ["asdf:Antiarchitect/asdf-helm-cr"] -helm-ct.backends = ["asdf:tablexi/asdf-helm-ct"] +helm-cr.backends = [ + "aqua:helm/chart-releaser", + "asdf:Antiarchitect/asdf-helm-cr" +] +helm-ct.backends = ["aqua:helm/chart-testing", "asdf:tablexi/asdf-helm-ct"] helm-diff.backends = ["asdf:dex4er/asdf-helm-diff"] helm-docs.backends = [ "aqua:norwoodj/helm-docs", @@ -817,10 +823,16 @@ helmsman.backends = ["ubi:Praqma/helmsman", "asdf:luisdavim/asdf-helmsman"] heroku.aliases = ["heroku-cli"] heroku.backends = ["asdf:mise-plugins/mise-heroku-cli"] hey.backends = ["asdf:raimon49/asdf-hey"] -hishtory.backends = ["asdf:asdf-community/asdf-hishtory"] +hishtory.backends = [ + "ubi:ddworken/hishtory", + "asdf:asdf-community/asdf-hishtory" +] hivemind.backends = ["ubi:DarthSim/hivemind", "go:github.com/DarthSim/hivemind"] -hledger.backends = ["asdf:airtonix/asdf-hledger"] -hledger-flow.backends = ["asdf:airtonix/asdf-hledger-flow"] +hledger.backends = ["ubi:simonmichael/hledger", "asdf:airtonix/asdf-hledger"] +hledger-flow.backends = [ + "ubi:apauley/hledger-flow", + "asdf:airtonix/asdf-hledger-flow" +] # takes forever # ghc.test = ["ghc --version", "The Glorious Glasgow Haskell Compilation System, version {{version}}"] hls.backends = ["asdf:sestrella/asdf-ghcup"] @@ -839,8 +851,12 @@ hugo.backends = [ hugo-extended.backends = ["aqua:gohugoio/hugo/hugo-extended"] hurl.backends = ["aqua:Orange-OpenSource/hurl", "asdf:raimon49/asdf-hurl"] hwatch.backends = ["ubi:blacknon/hwatch", "asdf:chessmango/asdf-hwatch"] -hygen.backends = ["asdf:brentjanderson/asdf-hygen"] -hyperfine.backends = ["ubi:sharkdp/hyperfine", "asdf:volf52/asdf-hyperfine"] +hygen.backends = ["ubi:jondot/hygen", "asdf:brentjanderson/asdf-hygen"] +hyperfine.backends = [ + "aqua:sharkdp/hyperfine", + "ubi:sharkdp/hyperfine", + "asdf:volf52/asdf-hyperfine" +] iam-policy-json-to-terraform.backends = [ "aqua:flosell/iam-policy-json-to-terraform", "asdf:carlduevel/asdf-iam-policy-json-to-terraform" @@ -856,7 +872,7 @@ idris2.backends = ["asdf:asdf-community/asdf-idris2"] imagemagick.backends = ["asdf:mangalakader/asdf-imagemagick"] imgpkg.backends = ["aqua:carvel-dev/imgpkg", "asdf:vmware-tanzu/asdf-carvel"] infracost.backends = ["aqua:infracost/infracost", "asdf:dex4er/asdf-infracost"] -inlets.backends = ["asdf:nlamirault/asdf-inlets"] +inlets.backends = ["aqua:inlets/inletsctl", "asdf:nlamirault/asdf-inlets"] io.backends = ["asdf:mracos/asdf-io"] istioctl.backends = [ "aqua:istio/istio/istioctl", @@ -865,11 +881,12 @@ istioctl.backends = [ istioctl.test = ["istioctl version", "client version: {{version}}"] janet.backends = ["asdf:Jakski/asdf-janet"] java.backends = ["core:java"] -jb.backends = ["aqua:jsonnet-bundler/jsonnet-bundler", "asdf:beardix/asdf-jb"] -jb.test = ["jb --version 2>&1", "v{{version}}"] jbang.backends = ["asdf:jbangdev/jbang-asdf"] jfrog-cli.backends = ["asdf:LozanoMatheus/asdf-jfrog-cli"] -jib.backends = ["asdf:joschi/asdf-jib"] +jib.backends = [ + "ubi:GoogleContainerTools/jib[tag_regex=-cli]", + "asdf:joschi/asdf-jib" +] jiq.backends = ["aqua:fiatjaf/jiq", "asdf:chessmango/asdf-jiq"] jj.aliases = ["jujutsu"] jj.backends = ["aqua:jj-vcs/jj", "ubi:jj-vcs/jj"] @@ -885,17 +902,24 @@ jqp.backends = [ "asdf:https://gitlab.com/wt0f/asdf-jqp" ] jreleaser.backends = ["aqua:jreleaser/jreleaser", "asdf:joschi/asdf-jreleaser"] -jsonnet.backends = ["asdf:Banno/asdf-jsonnet"] +jsonnet-bundler.aliases = ["jb"] +jsonnet-bundler.backends = [ + "aqua:jsonnet-bundler/jsonnet-bundler", + "asdf:beardix/asdf-jb" +] +jsonnet-bundler.test = ["jb --version 2>&1", "v{{version}}"] julia.backends = ["asdf:rkyleg/asdf-julia"] just.backends = ["ubi:casey/just", "asdf:olofvndrhr/asdf-just"] jwt.backends = ["ubi:mike-engel/jwt-cli[exe=jwt]", "cargo:jwt-cli"] jwtui.backends = ["ubi:jwt-rs/jwt-ui[exe=jwtui]", "cargo:jwt-ui"] jx.backends = ["ubi:jenkins-x/jx", "asdf:vbehar/asdf-jx"] k0sctl.backends = ["ubi:k0sproject/k0sctl", "asdf:Its-Alex/asdf-plugin-k0sctl"] -k14s.backends = ["asdf:k14s/asdf-k14s"] k2tf.backends = ["ubi:sl1pm4t/k2tf", "asdf:carlduevel/asdf-k2tf"] k3d.backends = ["ubi:k3d-io/k3d", "asdf:spencergilbert/asdf-k3d"] -k3kcli.backends = ["asdf:xanmanning/asdf-k3kcli"] +k3kcli.backends = [ + "ubi:rancher/k3k[tag_regex=v\\d]", + "asdf:xanmanning/asdf-k3kcli" +] k3s.backends = ["asdf:dmpe/asdf-k3s"] k3sup.backends = ["aqua:alexellis/k3sup", "asdf:cgroschupp/asdf-k3sup"] k6.backends = ["ubi:grafana/k6", "asdf:gr1m0h/asdf-k6"] @@ -908,10 +932,13 @@ kafkactl.backends = [ kapp.backends = ["aqua:carvel-dev/kapp", "asdf:vmware-tanzu/asdf-carvel"] kbld.backends = ["aqua:carvel-dev/kbld", "asdf:vmware-tanzu/asdf-carvel"] kcat.backends = ["asdf:douglasdgoulart/asdf-kcat"] -kcctl.backends = ["asdf:joschi/asdf-kcctl"] +kcctl.backends = ["ubi:kcctl/kcctl", "asdf:joschi/asdf-kcctl"] kcl.backends = ["asdf:starkers/asdf-kcl"] kconf.backends = ["aqua:particledecay/kconf", "asdf:particledecay/asdf-kconf"] -ki.backends = ["asdf:comdotlinux/asdf-ki"] +ki.backends = [ + "ubi:Kotlin/kotlin-interactive-shell[exe=ki]", + "asdf:comdotlinux/asdf-ki" +] killport.backends = ["ubi:jkfran/killport"] kind.backends = ["ubi:kubernetes-sigs/kind", "asdf:johnlayton/asdf-kind"] kiota.backends = ["aqua:microsoft/kiota", "asdf:asdf-community/asdf-kiota"] @@ -919,7 +946,7 @@ kn.backends = ["aqua:knative/client", "asdf:joke/asdf-kn"] kn.test = ["kn version", "Version:"] ko.backends = ["aqua:ko-build/ko", "asdf:zasdaym/asdf-ko"] ko.test = ["ko version", "{{version}}"] -koka.backends = ["asdf:susurri/asdf-koka"] +koka.backends = ["ubi:koka-lang/koka", "asdf:susurri/asdf-koka"] kompose.backends = ["ubi:kubernetes/kompose", "asdf:technikhil314/asdf-kompose"] kops.backends = ["aqua:kubernetes/kops", "asdf:Antiarchitect/asdf-kops"] kotlin.backends = [ @@ -935,18 +962,23 @@ kpack.test = ["kp version", "{{version}}"] kpt.backends = ["aqua:kptdev/kpt", "asdf:nlamirault/asdf-kpt"] kpt.os = ["linux", "macos"] kpt.test = ["kpt version", "{{version}}"] -krab.backends = ["asdf:ohkrab/asdf-krab"] +krab.backends = ["ubi:ohkrab/krab", "asdf:ohkrab/asdf-krab"] krew.backends = ["aqua:kubernetes-sigs/krew", "asdf:bjw-s/asdf-krew"] -kscript.backends = ["asdf:edgelevel/asdf-kscript"] -ksonnet.backends = ["asdf:Banno/asdf-ksonnet"] -ksops.backends = ["asdf:janpieper/asdf-ksops"] +kscript.backends = ["ubi:kscripting/kscript", "asdf:edgelevel/asdf-kscript"] +ksops.backends = [ + "ubi:viaduct-ai/kustomize-sops[exe=ksops]", + "asdf:janpieper/asdf-ksops" +] ktlint.backends = ["asdf:esensar/asdf-ktlint"] kube-capacity.backends = [ "aqua:robscott/kube-capacity", "asdf:looztra/asdf-kube-capacity" ] kube-code-generator.backends = ["asdf:jimmidyson/asdf-kube-code-generator"] -kube-controller-tools.backends = ["asdf:jimmidyson/asdf-kube-controller-tools"] +kube-controller-tools.backends = [ + "ubi:kubernetes-sigs/controller-tools[exe=controller-gen]", + "asdf:jimmidyson/asdf-kube-controller-tools" +] kube-credential-cache.backends = [ "aqua:ryodocx/kube-credential-cache", "asdf:ryodocx/kube-credential-cache" @@ -970,8 +1002,6 @@ kubectl.backends = [ "aqua:kubernetes/kubectl", "asdf:asdf-community/asdf-kubectl" ] -kubectl-bindrole.backends = ["asdf:looztra/asdf-kubectl-bindrole"] -kubectl-buildkit.backends = ["asdf:ezcater/asdf-kubectl-buildkit"] kubectl-convert.backends = [ "aqua:kubernetes/kubectl-convert", "asdf:iul1an/asdf-kubectl-convert" @@ -991,6 +1021,11 @@ kubectl-kuttl.test = [ "kubectl-kuttl --version", "kubectl-kuttl version {{version}}" ] +kubectl-rolesum.aliases = ['kubectl-bindrole'] +kubectl-rolesum.backends = [ + "aqua:Ladicle/kubectl-rolesum", + "asdf:looztra/asdf-kubectl-bindrole" +] kubectx.backends = [ "aqua:ahmetb/kubectx", "asdf:https://gitlab.com/wt0f/asdf-kubectx" @@ -1003,7 +1038,7 @@ kubefedctl.test = [ "kubefedctl version", "kubefedctl version:" ] # may not have version in output -kubefirst.backends = ["asdf:Claywd/asdf-kubefirst"] +kubefirst.backends = ["ubi:konstructio/kubefirst", "asdf:Claywd/asdf-kubefirst"] kubelogin.backends = ["aqua:int128/kubelogin"] kubemqctl.backends = [ "aqua:kubemq-io/kubemqctl", @@ -1050,7 +1085,7 @@ kyverno.backends = [ "asdf:https://github.com/hobaen/asdf-kyverno-cli.git" ] lab.backends = ["aqua:zaquestion/lab", "asdf:particledecay/asdf-lab"] -lane.backends = ["asdf:CodeReaper/asdf-lane"] +lane.backends = ["ubi:CodeReaper/lane", "asdf:CodeReaper/asdf-lane"] lazydocker.backends = [ "aqua:jesseduffield/lazydocker", "ubi:jesseduffield/lazydocker" @@ -1072,12 +1107,17 @@ levant.backends = [ "asdf:asdf-community/asdf-hashicorp" ] lfe.backends = ["asdf:asdf-community/asdf-lfe"] -libsql-server.backends = ["asdf:jonasb/asdf-libsql-server"] -license-plist.backends = ["asdf:MacPaw/asdf-license-plist"] +libsql-server.backends = [ + "ubi:tursodatabase/libsql[tag_regex=libsql-server,exe=sqld]", + "asdf:jonasb/asdf-libsql-server" +] +license-plist.backends = [ + "ubi:mono0926/LicensePlist[exe=license-plist]", + "asdf:MacPaw/asdf-license-plist" +] lima.backends = ["aqua:lima-vm/lima", "asdf:CrouchingMuppet/asdf-lima"] -link.backends = ["asdf:asdf-community/asdf-link"] -linkerd.backends = ["asdf:kforsthoevel/asdf-linkerd"] -liqoctl.backends = ["asdf:pdemagny/asdf-liqoctl"] +linkerd.backends = ["aqua:linkerd/linkerd2", "asdf:kforsthoevel/asdf-linkerd"] +liqoctl.backends = ["aqua:liqotech/liqo", "asdf:pdemagny/asdf-liqoctl"] liquibase.backends = ["asdf:saliougaye/asdf-liquibase"] litestream.backends = [ "aqua:benbjohnson/litestream", @@ -1086,7 +1126,10 @@ litestream.backends = [ llvm-objcopy.backends = ["asdf:higebu/asdf-llvm"] llvm-objdump.backends = ["asdf:higebu/asdf-llvm"] logtalk.backends = ["asdf:LogtalkDotOrg/asdf-logtalk"] -loki-logcli.backends = ["asdf:comdotlinux/asdf-loki-logcli"] +loki-logcli.backends = [ + "aqua:grafana/loki/logcli", + "asdf:comdotlinux/asdf-loki-logcli" +] ls-lint.backends = ["aqua:loeffel-io/ls-lint", "asdf:Ameausoone/asdf-ls-lint"] lsd.backends = ["aqua:lsd-rs/lsd", "asdf:mise-plugins/asdf-lsd"] lua.backends = ["asdf:Stratus3D/asdf-lua"] @@ -1095,12 +1138,14 @@ lua-language-server.backends = [ "asdf:bellini666/asdf-lua-language-server" ] luajit.backends = ["asdf:smashedtoatoms/asdf-luaJIT"] -lucy.backends = ["asdf:cometkim/asdf-lucy"] -maestro.backends = ["asdf:dotanuki-labs/asdf-maestro"] +maestro.backends = [ + "ubi:mobile-dev-inc/maestro", + "asdf:dotanuki-labs/asdf-maestro" +] mage.backends = ["aqua:magefile/mage", "asdf:mathew-fleisch/asdf-mage"] make.backends = ["asdf:yacchi/asdf-make"] -mani.backends = ["asdf:anweber/asdf-mani"] -mark.backends = ["asdf:jfreeland/asdf-mark"] +mani.backends = ["ubi:alajmo/mani", "asdf:anweber/asdf-mani"] +mark.backends = ["ubi:kovetskiy/mark", "asdf:jfreeland/asdf-mark"] markdownlint-cli2.backends = [ "npm:markdownlint-cli2", "asdf:paulo-ferraz-oliveira/asdf-markdownlint-cli2" @@ -1116,7 +1161,7 @@ mdbook-linkcheck.backends = ["asdf:cipherstash/asdf-mdbook-linkcheck"] melange.backends = ["aqua:chainguard-dev/melange", "asdf:omissis/asdf-melange"] melange.os = ["linux", "macos"] # melange.test = ["melange version", "v{{version}}"] sometimes releases without assets -melt.backends = ["asdf:chessmango/asdf-melt"] +melt.backends = ["ubi:charmbracelet/melt", "asdf:chessmango/asdf-melt"] memcached.backends = ["asdf:furkanural/asdf-memcached"] mercury.backends = ["asdf:susurri/asdf-mercury"] meson.backends = ["asdf:asdf-community/asdf-meson"] @@ -1133,8 +1178,11 @@ minikube.backends = ["aqua:kubernetes/minikube", "asdf:alvarobp/asdf-minikube"] minio.backends = ["asdf:aeons/asdf-minio"] minishift.backends = ["aqua:minishift/minishift", "asdf:sqtran/asdf-minishift"] minisign.backends = ["aqua:jedisct1/minisign"] -mint.backends = ["asdf:mint-lang/asdf-mint"] -mirrord.backends = ["asdf:metalbear-co/asdf-mirrord"] +mint.backends = ["ubi:mint-lang/mint", "asdf:mint-lang/asdf-mint"] +mirrord.backends = [ + "ubi:metalbear-co/mirrord", + "asdf:metalbear-co/asdf-mirrord" +] mitmproxy.backends = ["asdf:NeoHsu/asdf-mitmproxy"] mkcert.backends = ["ubi:FiloSottile/mkcert", "asdf:salasrod/asdf-mkcert"] mlton.backends = ["asdf:asdf-community/asdf-mlton"] From da91716c856b0bb1e8bdf70f9f97f74fe09f15ac Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Tue, 7 Jan 2025 16:44:56 +0100 Subject: [PATCH 089/289] docs: style on rustup settings --- schema/mise.json | 4 ++-- settings.toml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/schema/mise.json b/schema/mise.json index 82107f90f7..aec9c50996 100644 --- a/schema/mise.json +++ b/schema/mise.json @@ -773,11 +773,11 @@ "additionalProperties": false, "properties": { "cargo_home": { - "description": "Path to the cargo home directory. Defaults to ~/.cargo or %USERPROFILE%\\.cargo", + "description": "Path to the cargo home directory. Defaults to `~/.cargo` or `%USERPROFILE%\\.cargo`", "type": "string" }, "rustup_home": { - "description": "Path to the rustup home directory. Defaults to ~/.rustup or %USERPROFILE%\\.rustup", + "description": "Path to the rustup home directory. Defaults to `~/.rustup` or `%USERPROFILE%\\.rustup`", "type": "string" } } diff --git a/settings.toml b/settings.toml index 3074415c1d..92ebf46eda 100644 --- a/settings.toml +++ b/settings.toml @@ -868,13 +868,13 @@ description = "Set to true to enable verbose output during ruby installation." env = "MISE_CARGO_HOME" type = "Path" optional = true -description = "Path to the cargo home directory. Defaults to ~/.cargo or %USERPROFILE%\\.cargo" +description = "Path to the cargo home directory. Defaults to `~/.cargo` or `%USERPROFILE%\\.cargo`" [rust.rustup_home] env = "MISE_RUSTUP_HOME" type = "Path" optional = true -description = "Path to the rustup home directory. Defaults to ~/.rustup or %USERPROFILE%\\.rustup" +description = "Path to the rustup home directory. Defaults to `~/.rustup` or `%USERPROFILE%\\.rustup`" [shorthands_file] env = "MISE_SHORTHANDS_FILE" From b6c66a641ad0e74e0ffa79bb9b841b4440e82368 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Tue, 7 Jan 2025 17:11:52 +0000 Subject: [PATCH 090/289] feat: migrate asdf plugins to aqua/ubi (#3978) --- docs/registry.md | 44 ++++++++++++++++---------------- registry.toml | 65 +++++++++++++++++++++++++++++++----------------- 2 files changed, 63 insertions(+), 46 deletions(-) diff --git a/docs/registry.md b/docs/registry.md index 69114ce8a6..132ac93928 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -506,9 +506,8 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | mockolo | [asdf:MontakOleg/asdf-mockolo](https://github.com/MontakOleg/asdf-mockolo) | | mold | [ubi:rui314/mold](https://github.com/rui314/mold) | | monarch | [asdf:nyuyuyu/asdf-monarch](https://github.com/nyuyuyu/asdf-monarch) | -| mongo-tools | [asdf:itspngu/asdf-mongo-tools](https://github.com/itspngu/asdf-mongo-tools) | | mongodb | [asdf:sylph01/asdf-mongodb](https://github.com/sylph01/asdf-mongodb) | -| mongosh | [asdf:itspngu/asdf-mongosh](https://github.com/itspngu/asdf-mongosh) | +| mongosh | [ubi:mongodb-js/mongosh](https://github.com/mongodb-js/mongosh) [asdf:itspngu/asdf-mongosh](https://github.com/itspngu/asdf-mongosh) | | mprocs | [ubi:pvolok/mprocs](https://github.com/pvolok/mprocs) | | mutanus | [asdf:SoriUR/asdf-mutanus](https://github.com/SoriUR/asdf-mutanus) | | mvnd | [asdf:joschi/asdf-mvnd](https://github.com/joschi/asdf-mvnd) | @@ -517,7 +516,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | nano | [asdf:mfakane/asdf-nano](https://github.com/mfakane/asdf-nano) | | nasm | [asdf:Dpbm/asdf-nasm](https://github.com/Dpbm/asdf-nasm) | | navi | [aqua:denisidoro/navi](https://github.com/denisidoro/navi) [ubi:denisidoro/navi](https://github.com/denisidoro/navi) | -| neko | [asdf:asdf-community/asdf-neko](https://github.com/asdf-community/asdf-neko) | +| neko | [ubi:HaxeFoundation/neko](https://github.com/HaxeFoundation/neko) [asdf:asdf-community/asdf-neko](https://github.com/asdf-community/asdf-neko) | | neovim | [aqua:neovim/neovim](https://github.com/neovim/neovim) [asdf:richin13/asdf-neovim](https://github.com/richin13/asdf-neovim) | | nerdctl | [aqua:containerd/nerdctl](https://github.com/containerd/nerdctl) [asdf:dmpe/asdf-nerdctl](https://github.com/dmpe/asdf-nerdctl) | | newrelic | [ubi:newrelic/newrelic-cli](https://github.com/newrelic/newrelic-cli) [asdf:NeoHsu/asdf-newrelic-cli](https://github.com/NeoHsu/asdf-newrelic-cli) | @@ -529,22 +528,22 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | nomad-pack | [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | | notation | [aqua:notaryproject/notation](https://github.com/notaryproject/notation) [asdf:bodgit/asdf-notation](https://github.com/bodgit/asdf-notation) | | nova | [aqua:FairwindsOps/nova](https://github.com/FairwindsOps/nova) [asdf:elementalvoid/asdf-nova](https://github.com/elementalvoid/asdf-nova) | -| nsc | [asdf:dex4er/asdf-nsc](https://github.com/dex4er/asdf-nsc) | -| oapi-codegen | [asdf:dylanrayboss/asdf-oapi-codegen](https://github.com/dylanrayboss/asdf-oapi-codegen) | +| nsc | [ubi:nats-io/nsc](https://github.com/nats-io/nsc) [asdf:dex4er/asdf-nsc](https://github.com/dex4er/asdf-nsc) | +| oapi-codegen | [go:github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen](https://pkg.go.dev/github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen) [asdf:dylanrayboss/asdf-oapi-codegen](https://github.com/dylanrayboss/asdf-oapi-codegen) | | oc | [asdf:sqtran/asdf-oc](https://github.com/sqtran/asdf-oc) | | ocaml | [asdf:asdf-community/asdf-ocaml](https://github.com/asdf-community/asdf-ocaml) | | oci | [asdf:yasn77/asdf-oci](https://github.com/yasn77/asdf-oci) | -| odin | [asdf:jtakakura/asdf-odin](https://github.com/jtakakura/asdf-odin) | +| odin | [ubi:odin-lang/Odin](https://github.com/odin-lang/Odin) [asdf:jtakakura/asdf-odin](https://github.com/jtakakura/asdf-odin) | | odo | [aqua:redhat-developer/odo](https://github.com/redhat-developer/odo) [asdf:rm3l/asdf-odo](https://github.com/rm3l/asdf-odo) | | okta-aws | [aqua:okta/okta-aws-cli](https://github.com/okta/okta-aws-cli) [asdf:bennythejudge/asdf-plugin-okta-aws-cli](https://github.com/bennythejudge/asdf-plugin-okta-aws-cli) | | okteto | [aqua:okteto/okteto](https://github.com/okteto/okteto) [asdf:BradenM/asdf-okteto](https://github.com/BradenM/asdf-okteto) | | ollama | [aqua:ollama/ollama](https://github.com/ollama/ollama) [asdf:virtualstaticvoid/asdf-ollama](https://github.com/virtualstaticvoid/asdf-ollama) | | om | [aqua:pivotal-cf/om](https://github.com/pivotal-cf/om) [asdf:vmware-tanzu/tanzu-plug-in-for-asdf](https://github.com/vmware-tanzu/tanzu-plug-in-for-asdf) | -| onyx | [asdf:jtakakura/asdf-onyx](https://github.com/jtakakura/asdf-onyx) | +| onyx | [ubi:onyx-lang/onyx](https://github.com/onyx-lang/onyx) [asdf:jtakakura/asdf-onyx](https://github.com/jtakakura/asdf-onyx) | | opa | [aqua:open-policy-agent/opa](https://github.com/open-policy-agent/opa) [asdf:tochukwuvictor/asdf-opa](https://github.com/tochukwuvictor/asdf-opa) | -| opam | [asdf:asdf-community/asdf-opam](https://github.com/asdf-community/asdf-opam) | +| opam | [ubi:ocaml/opam](https://github.com/ocaml/opam) [asdf:asdf-community/asdf-opam](https://github.com/asdf-community/asdf-opam) | | openbao | [ubi:openbao/openbao](https://github.com/openbao/openbao) | -| openfaas-faas | [asdf:zekker6/asdf-faas-cli](https://github.com/zekker6/asdf-faas-cli) | +| openfaas-cli | [aqua:openfaas/faas-cli](https://github.com/openfaas/faas-cli) [asdf:zekker6/asdf-faas-cli](https://github.com/zekker6/asdf-faas-cli) | | openresty | [asdf:smashedtoatoms/asdf-openresty](https://github.com/smashedtoatoms/asdf-openresty) | | opensearch | [asdf:randikabanura/asdf-opensearch](https://github.com/randikabanura/asdf-opensearch) | | opensearch-cli | [asdf:iul1an/asdf-opensearch-cli](https://github.com/iul1an/asdf-opensearch-cli) | @@ -553,13 +552,12 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | operator-sdk | [aqua:operator-framework/operator-sdk](https://github.com/operator-framework/operator-sdk) [asdf:Medium/asdf-operator-sdk](https://github.com/Medium/asdf-operator-sdk) | | opsgenie-lamp | [asdf:ORCID/asdf-opsgenie-lamp](https://github.com/ORCID/asdf-opsgenie-lamp) | | oras | [aqua:oras-project/oras](https://github.com/oras-project/oras) [asdf:bodgit/asdf-oras](https://github.com/bodgit/asdf-oras) | -| osm | [asdf:nlamirault/asdf-osm](https://github.com/nlamirault/asdf-osm) | | osqueryi | [asdf:davidecavestro/asdf-osqueryi](https://github.com/davidecavestro/asdf-osqueryi) | | overmind | [ubi:DarthSim/overmind](https://github.com/DarthSim/overmind) [go:github.com/DarthSim/overmind/v2](https://pkg.go.dev/github.com/DarthSim/overmind/v2) | | pachctl | [aqua:pachyderm/pachyderm](https://github.com/pachyderm/pachyderm) [asdf:abatilo/asdf-pachctl](https://github.com/abatilo/asdf-pachctl) | | packer | [aqua:hashicorp/packer](https://github.com/hashicorp/packer) [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | -| pandoc | [asdf:Fbrisset/asdf-pandoc](https://github.com/Fbrisset/asdf-pandoc) | -| patat | [asdf:airtonix/asdf-patat](https://github.com/airtonix/asdf-patat) | +| pandoc | [ubi:jgm/pandoc](https://github.com/jgm/pandoc) [asdf:Fbrisset/asdf-pandoc](https://github.com/Fbrisset/asdf-pandoc) | +| patat | [ubi:jaspervdj/patat](https://github.com/jaspervdj/patat) [asdf:airtonix/asdf-patat](https://github.com/airtonix/asdf-patat) | | pdm | [pipx:pdm](https://pypi.org/project/pdm) [asdf:1oglop1/asdf-pdm](https://github.com/1oglop1/asdf-pdm) | | peco | [aqua:peco/peco](https://github.com/peco/peco) [asdf:asdf-community/asdf-peco](https://github.com/asdf-community/asdf-peco) | | periphery | [asdf:MontakOleg/asdf-periphery](https://github.com/MontakOleg/asdf-periphery) | @@ -576,33 +574,33 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | please | [aqua:thought-machine/please](https://github.com/thought-machine/please) [asdf:asdf-community/asdf-please](https://github.com/asdf-community/asdf-please) | | pluto | [ubi:FairwindsOps/pluto](https://github.com/FairwindsOps/pluto) [asdf:FairwindsOps/asdf-pluto](https://github.com/FairwindsOps/asdf-pluto) | | pnpm | [aqua:pnpm/pnpm](https://github.com/pnpm/pnpm) [asdf:jonathanmorley/asdf-pnpm](https://github.com/jonathanmorley/asdf-pnpm) | -| podman | [asdf:tvon/asdf-podman](https://github.com/tvon/asdf-podman) | +| podman | [ubi:containers/podman](https://github.com/containers/podman) [asdf:tvon/asdf-podman](https://github.com/tvon/asdf-podman) | | poetry | [asdf:mise-plugins/mise-poetry](https://github.com/mise-plugins/mise-poetry) | | polaris | [aqua:FairwindsOps/polaris](https://github.com/FairwindsOps/polaris) [asdf:particledecay/asdf-polaris](https://github.com/particledecay/asdf-polaris) | | popeye | [aqua:derailed/popeye](https://github.com/derailed/popeye) [asdf:nlamirault/asdf-popeye](https://github.com/nlamirault/asdf-popeye) | | postgis | [asdf:knu/asdf-postgis](https://github.com/knu/asdf-postgis) | | postgres | [asdf:smashedtoatoms/asdf-postgres](https://github.com/smashedtoatoms/asdf-postgres) | -| powerline-go | [asdf:dex4er/asdf-powerline-go](https://github.com/dex4er/asdf-powerline-go) | +| powerline-go | [ubi:justjanne/powerline-go](https://github.com/justjanne/powerline-go) [asdf:dex4er/asdf-powerline-go](https://github.com/dex4er/asdf-powerline-go) | | powerpipe | [aqua:turbot/powerpipe](https://github.com/turbot/powerpipe) [asdf:jc00ke/asdf-powerpipe](https://github.com/jc00ke/asdf-powerpipe) | -| powershell-core | [asdf:daveneeley/asdf-powershell-core](https://github.com/daveneeley/asdf-powershell-core) | +| powershell-core | [aqua:PowerShell/PowerShell](https://github.com/PowerShell/PowerShell) [asdf:daveneeley/asdf-powershell-core](https://github.com/daveneeley/asdf-powershell-core) | | pre-commit | [aqua:pre-commit/pre-commit](https://github.com/pre-commit/pre-commit) [asdf:jonathanmorley/asdf-pre-commit](https://github.com/jonathanmorley/asdf-pre-commit) | | promtool | [aqua:prometheus/prometheus](https://github.com/prometheus/prometheus) [asdf:asdf-community/asdf-promtool](https://github.com/asdf-community/asdf-promtool) | | protobuf | [vfox:ahai-code/vfox-protobuf](https://github.com/ahai-code/vfox-protobuf) | | protoc | [aqua:protocolbuffers/protobuf/protoc](https://github.com/protocolbuffers/protobuf/protoc) [asdf:paxosglobal/asdf-protoc](https://github.com/paxosglobal/asdf-protoc) | -| protoc-gen-connect-go | [asdf:dylanrayboss/asdf-protoc-gen-connect-go](https://github.com/dylanrayboss/asdf-protoc-gen-connect-go) | +| protoc-gen-connect-go | [go:connectrpc.com/connect/cmd/protoc-gen-connect-go](https://pkg.go.dev/connectrpc.com/connect/cmd/protoc-gen-connect-go) [asdf:dylanrayboss/asdf-protoc-gen-connect-go](https://github.com/dylanrayboss/asdf-protoc-gen-connect-go) | | protoc-gen-go | [aqua:protocolbuffers/protobuf-go/protoc-gen-go](https://github.com/protocolbuffers/protobuf-go/protoc-gen-go) [asdf:pbr0ck3r/asdf-protoc-gen-go](https://github.com/pbr0ck3r/asdf-protoc-gen-go) | | protoc-gen-go-grpc | [aqua:grpc/grpc-go/protoc-gen-go-grpc](https://github.com/grpc/grpc-go/protoc-gen-go-grpc) [asdf:pbr0ck3r/asdf-protoc-gen-go-grpc](https://github.com/pbr0ck3r/asdf-protoc-gen-go-grpc) | | protoc-gen-grpc-web | [asdf:pbr0ck3r/asdf-protoc-gen-grpc-web](https://github.com/pbr0ck3r/asdf-protoc-gen-grpc-web) | -| protoc-gen-js | [asdf:pbr0ck3r/asdf-protoc-gen-js](https://github.com/pbr0ck3r/asdf-protoc-gen-js) | +| protoc-gen-js | [ubi:protocolbuffers/protobuf-javascript](https://github.com/protocolbuffers/protobuf-javascript) [asdf:pbr0ck3r/asdf-protoc-gen-js](https://github.com/pbr0ck3r/asdf-protoc-gen-js) | | protolint | [aqua:yoheimuta/protolint](https://github.com/yoheimuta/protolint) [asdf:spencergilbert/asdf-protolint](https://github.com/spencergilbert/asdf-protolint) | | protonge | [asdf:augustobmoura/asdf-protonge](https://github.com/augustobmoura/asdf-protonge) | -| psc-package | [asdf:nsaunders/asdf-psc-package](https://github.com/nsaunders/asdf-psc-package) | +| psc-package | [ubi:purescript/psc-package](https://github.com/purescript/psc-package) [asdf:nsaunders/asdf-psc-package](https://github.com/nsaunders/asdf-psc-package) | | pulumi | [aqua:pulumi/pulumi](https://github.com/pulumi/pulumi) [asdf:canha/asdf-pulumi](https://github.com/canha/asdf-pulumi) | -| purerl | [asdf:GoNZooo/asdf-purerl](https://github.com/GoNZooo/asdf-purerl) | -| purescript | [asdf:jrrom/asdf-purescript](https://github.com/jrrom/asdf-purescript) | +| purerl | [ubi:purerl/purerl](https://github.com/purerl/purerl) [asdf:GoNZooo/asdf-purerl](https://github.com/GoNZooo/asdf-purerl) | +| purescript | [ubi:purescript/purescript](https://github.com/purescript/purescript) [asdf:jrrom/asdf-purescript](https://github.com/jrrom/asdf-purescript) | | purty | [asdf:nsaunders/asdf-purty](https://github.com/nsaunders/asdf-purty) | | python | [core:python](https://mise.jdx.dev/lang/python.html) | -| qdns | [asdf:moritz-makandra/asdf-plugin-qdns](https://github.com/moritz-makandra/asdf-plugin-qdns) | +| qdns | [ubi:natesales/q](https://github.com/natesales/q) [asdf:moritz-makandra/asdf-plugin-qdns](https://github.com/moritz-makandra/asdf-plugin-qdns) | | quarkus | [asdf:asdf-community/asdf-quarkus](https://github.com/asdf-community/asdf-quarkus) | | r | [asdf:asdf-community/asdf-r](https://github.com/asdf-community/asdf-r) | | rabbitmq | [asdf:mise-plugins/asdf-rabbitmq](https://github.com/mise-plugins/asdf-rabbitmq) | @@ -612,10 +610,10 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | rbac-lookup | [aqua:FairwindsOps/rbac-lookup](https://github.com/FairwindsOps/rbac-lookup) [asdf:looztra/asdf-rbac-lookup](https://github.com/looztra/asdf-rbac-lookup) | | rclone | [ubi:rclone/rclone](https://github.com/rclone/rclone) [asdf:johnlayton/asdf-rclone](https://github.com/johnlayton/asdf-rclone) | | rebar | [asdf:Stratus3D/asdf-rebar](https://github.com/Stratus3D/asdf-rebar) | -| reckoner | [asdf:FairwindsOps/asdf-reckoner](https://github.com/FairwindsOps/asdf-reckoner) | +| reckoner | [ubi:FairwindsOps/reckoner](https://github.com/FairwindsOps/reckoner) [asdf:FairwindsOps/asdf-reckoner](https://github.com/FairwindsOps/asdf-reckoner) | | redis | [asdf:smashedtoatoms/asdf-redis](https://github.com/smashedtoatoms/asdf-redis) | | redis-cli | [asdf:NeoHsu/asdf-redis-cli](https://github.com/NeoHsu/asdf-redis-cli) | -| redo | [asdf:chessmango/asdf-redo](https://github.com/chessmango/asdf-redo) | +| redo | [ubi:barthr/redo](https://github.com/barthr/redo) [asdf:chessmango/asdf-redo](https://github.com/chessmango/asdf-redo) | | redskyctl | [asdf:sudermanjr/asdf-redskyctl](https://github.com/sudermanjr/asdf-redskyctl) | | reg | [aqua:genuinetools/reg](https://github.com/genuinetools/reg) [asdf:looztra/asdf-reg](https://github.com/looztra/asdf-reg) | | regal | [aqua:StyraInc/regal](https://github.com/StyraInc/regal) [asdf:asdf-community/asdf-regal](https://github.com/asdf-community/asdf-regal) | diff --git a/registry.toml b/registry.toml index a16fa874dd..5bad1395c6 100644 --- a/registry.toml +++ b/registry.toml @@ -1190,9 +1190,8 @@ mockery.backends = ["aqua:vektra/mockery", "asdf:cabify/asdf-mockery"] mockolo.backends = ["asdf:MontakOleg/asdf-mockolo"] mold.backends = ["ubi:rui314/mold"] monarch.backends = ["asdf:nyuyuyu/asdf-monarch"] -mongo-tools.backends = ["asdf:itspngu/asdf-mongo-tools"] mongodb.backends = ["asdf:sylph01/asdf-mongodb"] -mongosh.backends = ["asdf:itspngu/asdf-mongosh"] +mongosh.backends = ["ubi:mongodb-js/mongosh", "asdf:itspngu/asdf-mongosh"] mprocs.backends = ["ubi:pvolok/mprocs"] mutanus.backends = ["asdf:SoriUR/asdf-mutanus"] mvnd.backends = ["asdf:joschi/asdf-mvnd"] @@ -1205,7 +1204,7 @@ nano.backends = ["asdf:mfakane/asdf-nano"] nasm.backends = ["asdf:Dpbm/asdf-nasm"] navi.backends = ["aqua:denisidoro/navi", "ubi:denisidoro/navi"] navi.test = ["navi --version", "navi {{version}}"] -neko.backends = ["asdf:asdf-community/asdf-neko"] +neko.backends = ["ubi:HaxeFoundation/neko", "asdf:asdf-community/asdf-neko"] neovim.backends = ["aqua:neovim/neovim", "asdf:richin13/asdf-neovim"] nerdctl.backends = ["aqua:containerd/nerdctl", "asdf:dmpe/asdf-nerdctl"] nerdctl.test = ["nerdctl --version", "nerdctl version {{version}}"] @@ -1227,12 +1226,15 @@ nomad.backends = ["aqua:hashicorp/nomad", "asdf:asdf-community/asdf-hashicorp"] nomad-pack.backends = ["asdf:asdf-community/asdf-hashicorp"] notation.backends = ["aqua:notaryproject/notation", "asdf:bodgit/asdf-notation"] nova.backends = ["aqua:FairwindsOps/nova", "asdf:elementalvoid/asdf-nova"] -nsc.backends = ["asdf:dex4er/asdf-nsc"] -oapi-codegen.backends = ["asdf:dylanrayboss/asdf-oapi-codegen"] +nsc.backends = ["ubi:nats-io/nsc", "asdf:dex4er/asdf-nsc"] +oapi-codegen.backends = [ + "go:github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen", + "asdf:dylanrayboss/asdf-oapi-codegen" +] oc.backends = ["asdf:sqtran/asdf-oc"] ocaml.backends = ["asdf:asdf-community/asdf-ocaml"] oci.backends = ["asdf:yasn77/asdf-oci"] -odin.backends = ["asdf:jtakakura/asdf-odin"] +odin.backends = ["ubi:odin-lang/Odin[exe=odin]", "asdf:jtakakura/asdf-odin"] odo.backends = ["aqua:redhat-developer/odo", "asdf:rm3l/asdf-odo"] okta-aws.aliases = ["okta-aws-cli"] okta-aws.backends = [ @@ -1243,12 +1245,11 @@ okteto.backends = ["aqua:okteto/okteto", "asdf:BradenM/asdf-okteto"] ollama.backends = ["aqua:ollama/ollama", "asdf:virtualstaticvoid/asdf-ollama"] om.backends = ["aqua:pivotal-cf/om", "asdf:vmware-tanzu/tanzu-plug-in-for-asdf"] om.test = ["om version", "{{version}}"] -onyx.backends = ["asdf:jtakakura/asdf-onyx"] +onyx.backends = ["ubi:onyx-lang/onyx", "asdf:jtakakura/asdf-onyx"] opa.backends = ["aqua:open-policy-agent/opa", "asdf:tochukwuvictor/asdf-opa"] -opam.backends = ["asdf:asdf-community/asdf-opam"] +opam.backends = ["ubi:ocaml/opam", "asdf:asdf-community/asdf-opam"] openbao.backends = ["ubi:openbao/openbao[exe=bao]"] -openfaas-faas.aliases = ["openfaas-cli"] -openfaas-faas.backends = ["asdf:zekker6/asdf-faas-cli"] +openfaas-cli.backends = ["aqua:openfaas/faas-cli", "asdf:zekker6/asdf-faas-cli"] openresty.backends = ["asdf:smashedtoatoms/asdf-openresty"] opensearch.backends = ["asdf:randikabanura/asdf-opensearch"] opensearch-cli.backends = ["asdf:iul1an/asdf-opensearch-cli"] @@ -1263,7 +1264,6 @@ operator-sdk.backends = [ ] opsgenie-lamp.backends = ["asdf:ORCID/asdf-opsgenie-lamp"] oras.backends = ["aqua:oras-project/oras", "asdf:bodgit/asdf-oras"] -osm.backends = ["asdf:nlamirault/asdf-osm"] osqueryi.backends = ["asdf:davidecavestro/asdf-osqueryi"] overmind.backends = [ "ubi:DarthSim/overmind", @@ -1275,8 +1275,8 @@ packer.backends = [ "aqua:hashicorp/packer", "asdf:asdf-community/asdf-hashicorp" ] -pandoc.backends = ["asdf:Fbrisset/asdf-pandoc"] -patat.backends = ["asdf:airtonix/asdf-patat"] +pandoc.backends = ["ubi:jgm/pandoc", "asdf:Fbrisset/asdf-pandoc"] +patat.backends = ["ubi:jaspervdj/patat", "asdf:airtonix/asdf-patat"] pdm.backends = ["pipx:pdm", "asdf:1oglop1/asdf-pdm"] pdm.test = ["pdm --version", "PDM, version {{version}}"] peco.backends = ["aqua:peco/peco", "asdf:asdf-community/asdf-peco"] @@ -1307,7 +1307,7 @@ please.backends = [ ] pluto.backends = ["ubi:FairwindsOps/pluto", "asdf:FairwindsOps/asdf-pluto"] pnpm.backends = ["aqua:pnpm/pnpm", "asdf:jonathanmorley/asdf-pnpm"] -podman.backends = ["asdf:tvon/asdf-podman"] +podman.backends = ["ubi:containers/podman", "asdf:tvon/asdf-podman"] poetry.backends = ["asdf:mise-plugins/mise-poetry"] poetry.depends = ["python"] polaris.backends = [ @@ -1317,9 +1317,15 @@ polaris.backends = [ popeye.backends = ["aqua:derailed/popeye", "asdf:nlamirault/asdf-popeye"] postgis.backends = ["asdf:knu/asdf-postgis"] postgres.backends = ["asdf:smashedtoatoms/asdf-postgres"] -powerline-go.backends = ["asdf:dex4er/asdf-powerline-go"] +powerline-go.backends = [ + "ubi:justjanne/powerline-go", + "asdf:dex4er/asdf-powerline-go" +] powerpipe.backends = ["aqua:turbot/powerpipe", "asdf:jc00ke/asdf-powerpipe"] -powershell-core.backends = ["asdf:daveneeley/asdf-powershell-core"] +powershell-core.backends = [ + "aqua:PowerShell/PowerShell", + "asdf:daveneeley/asdf-powershell-core" +] pre-commit.backends = [ "aqua:pre-commit/pre-commit", "asdf:jonathanmorley/asdf-pre-commit" @@ -1336,6 +1342,7 @@ protoc.backends = [ "asdf:paxosglobal/asdf-protoc" ] protoc-gen-connect-go.backends = [ + "go:connectrpc.com/connect/cmd/protoc-gen-connect-go", "asdf:dylanrayboss/asdf-protoc-gen-connect-go" ] protoc-gen-go.backends = [ @@ -1351,19 +1358,28 @@ protoc-gen-go-grpc.test = [ "protoc-gen-go-grpc" ] # TODO: use version_prefix and put version back in protoc-gen-grpc-web.backends = ["asdf:pbr0ck3r/asdf-protoc-gen-grpc-web"] -protoc-gen-js.backends = ["asdf:pbr0ck3r/asdf-protoc-gen-js"] +protoc-gen-js.backends = [ + "ubi:protocolbuffers/protobuf-javascript[exe=protoc-gen-js]", + "asdf:pbr0ck3r/asdf-protoc-gen-js" +] protolint.backends = [ "aqua:yoheimuta/protolint", "asdf:spencergilbert/asdf-protolint" ] protonge.backends = ["asdf:augustobmoura/asdf-protonge"] -psc-package.backends = ["asdf:nsaunders/asdf-psc-package"] +psc-package.backends = [ + "ubi:purescript/psc-package", + "asdf:nsaunders/asdf-psc-package" +] pulumi.backends = ["aqua:pulumi/pulumi", "asdf:canha/asdf-pulumi"] -purerl.backends = ["asdf:GoNZooo/asdf-purerl"] -purescript.backends = ["asdf:jrrom/asdf-purescript"] +purerl.backends = ["ubi:purerl/purerl", "asdf:GoNZooo/asdf-purerl"] +purescript.backends = [ + "ubi:purescript/purescript[exe=purs]", + "asdf:jrrom/asdf-purescript" +] purty.backends = ["asdf:nsaunders/asdf-purty"] python.backends = ["core:python"] -qdns.backends = ["asdf:moritz-makandra/asdf-plugin-qdns"] +qdns.backends = ["ubi:natesales/q", "asdf:moritz-makandra/asdf-plugin-qdns"] quarkus.backends = ["asdf:asdf-community/asdf-quarkus"] r.backends = ["asdf:asdf-community/asdf-r"] rabbitmq.backends = ["asdf:mise-plugins/asdf-rabbitmq"] @@ -1378,10 +1394,13 @@ rbac-lookup.backends = [ rclone.backends = ["ubi:rclone/rclone", "asdf:johnlayton/asdf-rclone"] rebar.backends = ["asdf:Stratus3D/asdf-rebar"] rebar.depends = ["erlang"] -reckoner.backends = ["asdf:FairwindsOps/asdf-reckoner"] +reckoner.backends = [ + "ubi:FairwindsOps/reckoner", + "asdf:FairwindsOps/asdf-reckoner" +] redis.backends = ["asdf:smashedtoatoms/asdf-redis"] redis-cli.backends = ["asdf:NeoHsu/asdf-redis-cli"] -redo.backends = ["asdf:chessmango/asdf-redo"] +redo.backends = ["ubi:barthr/redo", "asdf:chessmango/asdf-redo"] redskyctl.backends = ["asdf:sudermanjr/asdf-redskyctl"] reg.backends = ["aqua:genuinetools/reg", "asdf:looztra/asdf-reg"] regal.backends = ["aqua:StyraInc/regal", "asdf:asdf-community/asdf-regal"] From 8e794426a80c253b4ce47301e911a6b663a52a14 Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Tue, 7 Jan 2025 23:19:40 +0100 Subject: [PATCH 091/289] fix: mise install rust failed on windows (#3969) --- e2e-win/go.Tests.ps1 | 2 +- e2e-win/python.Tests.ps1 | 2 +- e2e-win/rust.Tests.ps1 | 10 +++++++++- src/plugins/core/rust.rs | 13 ++++++++++++- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/e2e-win/go.Tests.ps1 b/e2e-win/go.Tests.ps1 index 1347f6cc1e..226293b9e6 100644 --- a/e2e-win/go.Tests.ps1 +++ b/e2e-win/go.Tests.ps1 @@ -1,5 +1,5 @@ -Describe 'node' { +Describe 'go' { It 'executes go 1.23.3' { mise x go@1.23.3 -- where go mise x go@1.23.3 -- go version | Should -BeLike "go version go1.23.3 windows/*" diff --git a/e2e-win/python.Tests.ps1 b/e2e-win/python.Tests.ps1 index 66520e465f..b2ea6d80ad 100644 --- a/e2e-win/python.Tests.ps1 +++ b/e2e-win/python.Tests.ps1 @@ -1,5 +1,5 @@ -Describe 'node' { +Describe 'python' { It 'executes python 3.12.0' { mise x python@3.12.0 -- where python mise x python@3.12.0 -- python --version | Should -Be "Python 3.12.0" diff --git a/e2e-win/rust.Tests.ps1 b/e2e-win/rust.Tests.ps1 index 4a900f874a..293acbd5d3 100644 --- a/e2e-win/rust.Tests.ps1 +++ b/e2e-win/rust.Tests.ps1 @@ -1,5 +1,13 @@ -Describe 'node' { +Describe 'rust' { + It 'installs rust 1.83.0' { + $env:MISE_CARGO_HOME = "%TEMP%\.cargo" + $env:MISE_RUSTUP_HOME = "%TEMP%\.rustup" + mise x rust@1.83.0 -- rustc -V | Should -BeLike "rustc 1.83.0*" + Remove-Item Env:MISE_CARGO_HOME + Remove-Item Env:MISE_RUSTUP_HOME + } + It 'executes rust 1.82.0' { mise x rust@1.82.0 -- rustc -V | Should -BeLike "rustc 1.82.0*" } diff --git a/src/plugins/core/rust.rs b/src/plugins/core/rust.rs index 90de2ad029..61401b30ef 100644 --- a/src/plugins/core/rust.rs +++ b/src/plugins/core/rust.rs @@ -32,7 +32,7 @@ impl RustPlugin { return Ok(()); } ctx.pr.set_message("Downloading rustup-init".into()); - HTTP.download_file("https://sh.rustup.rs", &rustup_path(), Some(&ctx.pr))?; + HTTP.download_file(rustup_url(), &rustup_path(), Some(&ctx.pr))?; file::make_executable(rustup_path())?; file::create_dir_all(rustup_home())?; let cmd = CmdLineRunner::new(rustup_path()) @@ -203,6 +203,17 @@ const CARGO_BIN: &str = "cargo"; #[cfg(windows)] const CARGO_BIN: &str = "cargo.exe"; +#[cfg(unix)] +fn rustup_url() -> String { + "https://sh.rustup.rs".to_string() +} + +#[cfg(windows)] +fn rustup_url() -> String { + let arch = &*SETTINGS.arch(); + format!("https://win.rustup.rs/{arch}") +} + fn rustup_path() -> PathBuf { dirs::CACHE.join("rust").join(RUSTUP_INIT_BIN) } From 34c5ed63bdac03466926cf14b399050c8c17d483 Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Wed, 8 Jan 2025 12:32:55 +0100 Subject: [PATCH 092/289] fix: maven-mvnd does not install with aqua (#3982) --- src/aqua/aqua_registry.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/aqua/aqua_registry.rs b/src/aqua/aqua_registry.rs index d89e483a11..b5bdc4d0ce 100644 --- a/src/aqua/aqua_registry.rs +++ b/src/aqua/aqua_registry.rs @@ -322,7 +322,13 @@ impl AquaPackage { } pub fn asset(&self, v: &str) -> Result { - self.parse_aqua_str(&self.asset, v, &Default::default()) + // derive asset from url if not set and url contains a path + if self.asset.is_empty() && self.url.split("/").count() > "//".len() { + let asset = self.url.rsplit("/").next().unwrap_or(""); + self.parse_aqua_str(asset, v, &Default::default()) + } else { + self.parse_aqua_str(&self.asset, v, &Default::default()) + } } pub fn asset_strs(&self, v: &str) -> Result> { From ef714c46f7eae1f0408aec9786a4f052ad253a2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henr=C3=A9=20Botha?= Date: Wed, 8 Jan 2025 13:32:56 +0100 Subject: [PATCH 093/289] docs: Escape template examples (#3987) --- docs/environments/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/environments/index.md b/docs/environments/index.md index ab5bb729e7..40ad405611 100644 --- a/docs/environments/index.md +++ b/docs/environments/index.md @@ -104,7 +104,7 @@ _.path = [ ] ``` -Adding a relative path like `tools/bin` or `./tools/bin` is similar to adding a path rooted at `{{config_root}}`, but behaves differently if your config file is nested in a subdirectory like `/path/to/project/.config/mise/config.toml`. Including `tools/bin` will add the path `/path/to/project/.config/mise/tools/bin`, whereas including `{{config_root}}/tools/bin` will add the path `/path/to/project/tools/bin`. +Adding a relative path like `tools/bin` or `./tools/bin` is similar to adding a path rooted at `{{config_root}}`, but behaves differently if your config file is nested in a subdirectory like `/path/to/project/.config/mise/config.toml`. Including `tools/bin` will add the path `/path/to/project/.config/mise/tools/bin`, whereas including `{{config_root}}/tools/bin` will add the path `/path/to/project/tools/bin`. ### `env._.source` From fd924f7a2f14dff16efdd319d592ff7919445289 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 8 Jan 2025 13:43:18 +0000 Subject: [PATCH 094/289] feat: migrate asdf plugins to aqua/ubi (#3991) --- docs/registry.md | 70 ++++++++++++++--------------- registry.toml | 113 +++++++++++++++++++++++++++++++---------------- 2 files changed, 106 insertions(+), 77 deletions(-) diff --git a/docs/registry.md b/docs/registry.md index 132ac93928..560fb0ff13 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -509,9 +509,11 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | mongodb | [asdf:sylph01/asdf-mongodb](https://github.com/sylph01/asdf-mongodb) | | mongosh | [ubi:mongodb-js/mongosh](https://github.com/mongodb-js/mongosh) [asdf:itspngu/asdf-mongosh](https://github.com/itspngu/asdf-mongosh) | | mprocs | [ubi:pvolok/mprocs](https://github.com/pvolok/mprocs) | +| mssqldef | [aqua:sqldef/sqldef/mssqldef](https://github.com/sqldef/sqldef/mssqldef) | | mutanus | [asdf:SoriUR/asdf-mutanus](https://github.com/SoriUR/asdf-mutanus) | -| mvnd | [asdf:joschi/asdf-mvnd](https://github.com/joschi/asdf-mvnd) | +| mvnd | [aqua:apache/maven-mvnd](https://github.com/apache/maven-mvnd) [asdf:joschi/asdf-mvnd](https://github.com/joschi/asdf-mvnd) | | mysql | [asdf:iroddis/asdf-mysql](https://github.com/iroddis/asdf-mysql) | +| mysqldef | [aqua:sqldef/sqldef/mysqldef](https://github.com/sqldef/sqldef/mysqldef) | | nancy | [aqua:sonatype-nexus-community/nancy](https://github.com/sonatype-nexus-community/nancy) [asdf:iilyak/asdf-nancy](https://github.com/iilyak/asdf-nancy) | | nano | [asdf:mfakane/asdf-nano](https://github.com/mfakane/asdf-nano) | | nasm | [asdf:Dpbm/asdf-nasm](https://github.com/Dpbm/asdf-nasm) | @@ -595,6 +597,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | protolint | [aqua:yoheimuta/protolint](https://github.com/yoheimuta/protolint) [asdf:spencergilbert/asdf-protolint](https://github.com/spencergilbert/asdf-protolint) | | protonge | [asdf:augustobmoura/asdf-protonge](https://github.com/augustobmoura/asdf-protonge) | | psc-package | [ubi:purescript/psc-package](https://github.com/purescript/psc-package) [asdf:nsaunders/asdf-psc-package](https://github.com/nsaunders/asdf-psc-package) | +| psqldef | [aqua:sqldef/sqldef/psqldef](https://github.com/sqldef/sqldef/psqldef) | | pulumi | [aqua:pulumi/pulumi](https://github.com/pulumi/pulumi) [asdf:canha/asdf-pulumi](https://github.com/canha/asdf-pulumi) | | purerl | [ubi:purerl/purerl](https://github.com/purerl/purerl) [asdf:GoNZooo/asdf-purerl](https://github.com/GoNZooo/asdf-purerl) | | purescript | [ubi:purescript/purescript](https://github.com/purescript/purescript) [asdf:jrrom/asdf-purescript](https://github.com/jrrom/asdf-purescript) | @@ -614,7 +617,6 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | redis | [asdf:smashedtoatoms/asdf-redis](https://github.com/smashedtoatoms/asdf-redis) | | redis-cli | [asdf:NeoHsu/asdf-redis-cli](https://github.com/NeoHsu/asdf-redis-cli) | | redo | [ubi:barthr/redo](https://github.com/barthr/redo) [asdf:chessmango/asdf-redo](https://github.com/chessmango/asdf-redo) | -| redskyctl | [asdf:sudermanjr/asdf-redskyctl](https://github.com/sudermanjr/asdf-redskyctl) | | reg | [aqua:genuinetools/reg](https://github.com/genuinetools/reg) [asdf:looztra/asdf-reg](https://github.com/looztra/asdf-reg) | | regal | [aqua:StyraInc/regal](https://github.com/StyraInc/regal) [asdf:asdf-community/asdf-regal](https://github.com/asdf-community/asdf-regal) | | regctl | [aqua:regclient/regclient/regctl](https://github.com/regclient/regclient/regctl) [asdf:ORCID/asdf-regctl](https://github.com/ORCID/asdf-regctl) | @@ -623,15 +625,12 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | restish | [ubi:danielgtaylor/restish](https://github.com/danielgtaylor/restish) [go:github.com/danielgtaylor/restish](https://pkg.go.dev/github.com/danielgtaylor/restish) | | revive | [aqua:mgechev/revive](https://github.com/mgechev/revive) [asdf:bjw-s/asdf-revive](https://github.com/bjw-s/asdf-revive) | | richgo | [aqua:kyoh86/richgo](https://github.com/kyoh86/richgo) [asdf:paxosglobal/asdf-richgo](https://github.com/paxosglobal/asdf-richgo) | -| riff | [asdf:abinet/asdf-riff](https://github.com/abinet/asdf-riff) | | ripgrep | [aqua:BurntSushi/ripgrep](https://github.com/BurntSushi/ripgrep) [ubi:BurntSushi/ripgrep](https://github.com/BurntSushi/ripgrep) [asdf:https://gitlab.com/wt0f/asdf-ripgrep](https://gitlab.com/wt0f/asdf-ripgrep) | | ripgrep-all | [aqua:phiresky/ripgrep-all](https://github.com/phiresky/ripgrep-all) | | ripsecret | [aqua:sirwart/ripsecrets](https://github.com/sirwart/ripsecrets) [asdf:https://github.com/boris-smidt-klarrio/asdf-ripsecrets](https://github.com/boris-smidt-klarrio/asdf-ripsecrets) | | ripsecrets | [aqua:sirwart/ripsecrets](https://github.com/sirwart/ripsecrets) [asdf:https://github.com/boris-smidt-klarrio/asdf-ripsecrets](https://github.com/boris-smidt-klarrio/asdf-ripsecrets) | | rke | [aqua:rancher/rke](https://github.com/rancher/rke) [asdf:particledecay/asdf-rke](https://github.com/particledecay/asdf-rke) | | rlwrap | [asdf:asdf-community/asdf-rlwrap](https://github.com/asdf-community/asdf-rlwrap) | -| rome | [asdf:kichiemon/asdf-rome](https://github.com/kichiemon/asdf-rome) | -| rstash | [asdf:carlduevel/asdf-rstash](https://github.com/carlduevel/asdf-rstash) | | ruby | [core:ruby](https://mise.jdx.dev/lang/ruby.html) | | ruff | [aqua:astral-sh/ruff](https://github.com/astral-sh/ruff) [ubi:astral-sh/ruff](https://github.com/astral-sh/ruff) [asdf:simhem/asdf-ruff](https://github.com/simhem/asdf-ruff) | | rust | [core:rust](https://mise.jdx.dev/lang/rust.html) [asdf:code-lever/asdf-rust](https://github.com/code-lever/asdf-rust) | @@ -642,18 +641,17 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | sbcl | [asdf:smashedtoatoms/asdf-sbcl](https://github.com/smashedtoatoms/asdf-sbcl) | | sbt | [asdf:bram2000/asdf-sbt](https://github.com/bram2000/asdf-sbt) | | scala | [asdf:asdf-community/asdf-scala](https://github.com/asdf-community/asdf-scala) [vfox:version-fox/vfox-scala](https://github.com/version-fox/vfox-scala) | -| scala-cli | [asdf:asdf-community/asdf-scala-cli](https://github.com/asdf-community/asdf-scala-cli) | +| scala-cli | [ubi:VirtusLab/scala-cli](https://github.com/VirtusLab/scala-cli) [asdf:asdf-community/asdf-scala-cli](https://github.com/asdf-community/asdf-scala-cli) | | scaleway | [aqua:scaleway/scaleway-cli](https://github.com/scaleway/scaleway-cli) [asdf:albarralnunez/asdf-plugin-scaleway-cli](https://github.com/albarralnunez/asdf-plugin-scaleway-cli) | -| scalingo-cli | [asdf:brandon-welsch/asdf-scalingo-cli](https://github.com/brandon-welsch/asdf-scalingo-cli) | -| scarb | [asdf:software-mansion/asdf-scarb](https://github.com/software-mansion/asdf-scarb) | +| scalingo-cli | [aqua:Scalingo/cli](https://github.com/Scalingo/cli) [asdf:brandon-welsch/asdf-scalingo-cli](https://github.com/brandon-welsch/asdf-scalingo-cli) | +| scarb | [ubi:software-mansion/scarb](https://github.com/software-mansion/scarb) [asdf:software-mansion/asdf-scarb](https://github.com/software-mansion/asdf-scarb) | | sccache | [ubi:mozilla/sccache](https://github.com/mozilla/sccache) [asdf:emersonmx/asdf-sccache](https://github.com/emersonmx/asdf-sccache) | -| scenery | [asdf:skyzyx/asdf-scenery](https://github.com/skyzyx/asdf-scenery) | | schemacrawler | [asdf:davidecavestro/asdf-schemacrawler](https://github.com/davidecavestro/asdf-schemacrawler) | -| scie-pants | [asdf:robzr/asdf-scie-pants](https://github.com/robzr/asdf-scie-pants) | +| scie-pants | [ubi:pantsbuild/scie-pants](https://github.com/pantsbuild/scie-pants) [asdf:robzr/asdf-scie-pants](https://github.com/robzr/asdf-scie-pants) | | seed7 | [asdf:susurri/asdf-seed7](https://github.com/susurri/asdf-seed7) | | semgrep | [asdf:brentjanderson/asdf-semgrep](https://github.com/brentjanderson/asdf-semgrep) | | semtag | [asdf:junminahn/asdf-semtag](https://github.com/junminahn/asdf-semtag) | -| semver | [asdf:mathew-fleisch/asdf-semver](https://github.com/mathew-fleisch/asdf-semver) | +| semver | [aqua:fsaintjacques/semver-tool](https://github.com/fsaintjacques/semver-tool) [asdf:mathew-fleisch/asdf-semver](https://github.com/mathew-fleisch/asdf-semver) | | sentinel | [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | | sentry | [ubi:getsentry/sentry-cli](https://github.com/getsentry/sentry-cli) | | serf | [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | @@ -672,35 +670,35 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | smithy | [asdf:aws/asdf-smithy](https://github.com/aws/asdf-smithy) | | smlnj | [asdf:samontea/asdf-smlnj](https://github.com/samontea/asdf-smlnj) | | snyk | [aqua:snyk/cli](https://github.com/snyk/cli) [asdf:nirfuchs/asdf-snyk](https://github.com/nirfuchs/asdf-snyk) | -| soft-serve | [asdf:chessmango/asdf-soft-serve](https://github.com/chessmango/asdf-soft-serve) | -| solidity | [asdf:diegodorado/asdf-solidity](https://github.com/diegodorado/asdf-solidity) | -| sonobuoy | [asdf:Nick-Triller/asdf-sonobuoy](https://github.com/Nick-Triller/asdf-sonobuoy) | +| soft-serve | [ubi:charmbracelet/soft-serve](https://github.com/charmbracelet/soft-serve) [asdf:chessmango/asdf-soft-serve](https://github.com/chessmango/asdf-soft-serve) | +| solidity | [ubi:ethereum/solidity](https://github.com/ethereum/solidity) [asdf:diegodorado/asdf-solidity](https://github.com/diegodorado/asdf-solidity) | +| sonobuoy | [ubi:vmware-tanzu/sonobuoy](https://github.com/vmware-tanzu/sonobuoy) [asdf:Nick-Triller/asdf-sonobuoy](https://github.com/Nick-Triller/asdf-sonobuoy) | | sops | [ubi:getsops/sops](https://github.com/getsops/sops) [asdf:mise-plugins/mise-sops](https://github.com/mise-plugins/mise-sops) | | sopstool | [aqua:ibotta/sopstool](https://github.com/ibotta/sopstool) [asdf:elementalvoid/asdf-sopstool](https://github.com/elementalvoid/asdf-sopstool) | -| soracom | [asdf:gr1m0h/asdf-soracom](https://github.com/gr1m0h/asdf-soracom) | +| soracom | [ubi:soracom/soracom-cli](https://github.com/soracom/soracom-cli) [asdf:gr1m0h/asdf-soracom](https://github.com/gr1m0h/asdf-soracom) | | sourcery | [asdf:younke/asdf-sourcery](https://github.com/younke/asdf-sourcery) | | spacectl | [aqua:spacelift-io/spacectl](https://github.com/spacelift-io/spacectl) [asdf:bodgit/asdf-spacectl](https://github.com/bodgit/asdf-spacectl) | -| spago | [asdf:jrrom/asdf-spago](https://github.com/jrrom/asdf-spago) | +| spago | [ubi:purescript/spago](https://github.com/purescript/spago) [asdf:jrrom/asdf-spago](https://github.com/jrrom/asdf-spago) | | spark | [asdf:joshuaballoch/asdf-spark](https://github.com/joshuaballoch/asdf-spark) | | spectral | [aqua:stoplightio/spectral](https://github.com/stoplightio/spectral) [asdf:vbyrd/asdf-spectral](https://github.com/vbyrd/asdf-spectral) | | spin | [aqua:spinnaker/spin](https://github.com/spinnaker/spin) [asdf:pavloos/asdf-spin](https://github.com/pavloos/asdf-spin) | | spring-boot | [asdf:joschi/asdf-spring-boot](https://github.com/joschi/asdf-spring-boot) | | spruce | [aqua:geofffranks/spruce](https://github.com/geofffranks/spruce) [asdf:woneill/asdf-spruce](https://github.com/woneill/asdf-spruce) | -| sqldef | [asdf:cometkim/asdf-sqldef](https://github.com/cometkim/asdf-sqldef) | | sqlite | [asdf:cLupus/asdf-sqlite](https://github.com/cLupus/asdf-sqlite) | +| sqlite3def | [aqua:sqldef/sqldef/sqlite3def](https://github.com/sqldef/sqldef/sqlite3def) | | sshuttle | [asdf:xanmanning/asdf-sshuttle](https://github.com/xanmanning/asdf-sshuttle) | | stack | [aqua:commercialhaskell/stack](https://github.com/commercialhaskell/stack) [asdf:sestrella/asdf-ghcup](https://github.com/sestrella/asdf-ghcup) | | starboard | [aqua:aquasecurity/starboard](https://github.com/aquasecurity/starboard) [asdf:zufardhiyaulhaq/asdf-starboard](https://github.com/zufardhiyaulhaq/asdf-starboard) | -| starknet-foundry | [asdf:foundry-rs/asdf-starknet-foundry](https://github.com/foundry-rs/asdf-starknet-foundry) | -| starport | [asdf:nikever/asdf-starport](https://github.com/nikever/asdf-starport) | +| starknet-foundry | [ubi:foundry-rs/starknet-foundry](https://github.com/foundry-rs/starknet-foundry) | +| starknet-foundry-sncast | [ubi:foundry-rs/starknet-foundry](https://github.com/foundry-rs/starknet-foundry) | | starship | [ubi:starship/starship](https://github.com/starship/starship) [asdf:gr1m0h/asdf-starship](https://github.com/gr1m0h/asdf-starship) | | staticcheck | [aqua:dominikh/go-tools/staticcheck](https://github.com/dominikh/go-tools/staticcheck) [asdf:pbr0ck3r/asdf-staticcheck](https://github.com/pbr0ck3r/asdf-staticcheck) | | steampipe | [aqua:turbot/steampipe](https://github.com/turbot/steampipe) [asdf:carnei-ro/asdf-steampipe](https://github.com/carnei-ro/asdf-steampipe) | -| step | [asdf:log2/asdf-step](https://github.com/log2/asdf-step) | +| step | [aqua:smallstep/cli](https://github.com/smallstep/cli) [asdf:log2/asdf-step](https://github.com/log2/asdf-step) | | stern | [aqua:stern/stern](https://github.com/stern/stern) [asdf:looztra/asdf-stern](https://github.com/looztra/asdf-stern) | | stripe | [aqua:stripe/stripe-cli](https://github.com/stripe/stripe-cli) [asdf:offbyone/asdf-stripe](https://github.com/offbyone/asdf-stripe) | | stylua | [aqua:JohnnyMorganz/StyLua](https://github.com/JohnnyMorganz/StyLua) [asdf:jc00ke/asdf-stylua](https://github.com/jc00ke/asdf-stylua) | -| sui | [asdf:placeholder-soft/asdf-sui](https://github.com/placeholder-soft/asdf-sui) | +| sui | [ubi:MystenLabs/sui](https://github.com/MystenLabs/sui) [asdf:placeholder-soft/asdf-sui](https://github.com/placeholder-soft/asdf-sui) | | superfile | [aqua:yorukot/superfile](https://github.com/yorukot/superfile) | | sver | [aqua:mitoma/sver](https://github.com/mitoma/sver) [asdf:robzr/asdf-sver](https://github.com/robzr/asdf-sver) | | svu | [aqua:caarlos0/svu](https://github.com/caarlos0/svu) [asdf:asdf-community/asdf-svu](https://github.com/asdf-community/asdf-svu) | @@ -712,7 +710,6 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | swiftlint | [asdf:klundberg/asdf-swiftlint](https://github.com/klundberg/asdf-swiftlint) | | swiprolog | [asdf:mracos/asdf-swiprolog](https://github.com/mracos/asdf-swiprolog) | | syft | [aqua:anchore/syft](https://github.com/anchore/syft) [asdf:davidgp1701/asdf-syft](https://github.com/davidgp1701/asdf-syft) | -| syncher | [asdf:nwillc/syncher](https://github.com/nwillc/syncher) | | talhelper | [aqua:budimanjojo/talhelper](https://github.com/budimanjojo/talhelper) [asdf:bjw-s/asdf-talhelper](https://github.com/bjw-s/asdf-talhelper) | | talos | [ubi:siderolabs/talos](https://github.com/siderolabs/talos) [asdf:particledecay/asdf-talos](https://github.com/particledecay/asdf-talos) | | talosctl | [ubi:siderolabs/talos](https://github.com/siderolabs/talos) [asdf:bjw-s/asdf-talosctl](https://github.com/bjw-s/asdf-talosctl) | @@ -721,13 +718,12 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | taplo | [ubi:tamasfe/taplo](https://github.com/tamasfe/taplo) [cargo:taplo-cli](https://crates.io/crates/taplo-cli) | | task | [ubi:go-task/task](https://github.com/go-task/task) [asdf:particledecay/asdf-task](https://github.com/particledecay/asdf-task) | | tctl | [aqua:temporalio/tctl](https://github.com/temporalio/tctl) [asdf:eko/asdf-tctl](https://github.com/eko/asdf-tctl) | -| tekton | [asdf:johnhamelink/asdf-tekton-cli](https://github.com/johnhamelink/asdf-tekton-cli) | +| tekton | [aqua:tektoncd/cli](https://github.com/tektoncd/cli) [asdf:johnhamelink/asdf-tekton-cli](https://github.com/johnhamelink/asdf-tekton-cli) | | teleport-community | [asdf:MaloPolese/asdf-teleport-community](https://github.com/MaloPolese/asdf-teleport-community) | | teleport-ent | [asdf:highb/asdf-teleport-ent](https://github.com/highb/asdf-teleport-ent) | | telepresence | [aqua:telepresenceio/telepresence](https://github.com/telepresenceio/telepresence) [asdf:pirackr/asdf-telepresence](https://github.com/pirackr/asdf-telepresence) | | teller | [aqua:tellerops/teller](https://github.com/tellerops/teller) [asdf:pdemagny/asdf-teller](https://github.com/pdemagny/asdf-teller) | | temporal | [aqua:temporalio/temporal](https://github.com/temporalio/temporal) [asdf:asdf-community/asdf-temporal](https://github.com/asdf-community/asdf-temporal) | -| temporalite | [asdf:eko/asdf-temporalite](https://github.com/eko/asdf-temporalite) | | terradozer | [aqua:jckuester/terradozer](https://github.com/jckuester/terradozer) [asdf:chessmango/asdf-terradozer](https://github.com/chessmango/asdf-terradozer) | | terraform | [aqua:hashicorp/terraform](https://github.com/hashicorp/terraform) [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) [vfox:enochchau/vfox-terraform](https://github.com/enochchau/vfox-terraform) | | terraform-docs | [aqua:terraform-docs/terraform-docs](https://github.com/terraform-docs/terraform-docs) [asdf:looztra/asdf-terraform-docs](https://github.com/looztra/asdf-terraform-docs) | @@ -747,35 +743,35 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | tfnotify | [aqua:mercari/tfnotify](https://github.com/mercari/tfnotify) [asdf:jnavarrof/asdf-tfnotify](https://github.com/jnavarrof/asdf-tfnotify) | | tfsec | [aqua:aquasecurity/tfsec](https://github.com/aquasecurity/tfsec) [asdf:woneill/asdf-tfsec](https://github.com/woneill/asdf-tfsec) | | tfstate-lookup | [aqua:fujiwara/tfstate-lookup](https://github.com/fujiwara/tfstate-lookup) [asdf:carnei-ro/asdf-tfstate-lookup](https://github.com/carnei-ro/asdf-tfstate-lookup) | -| tfswitch | [asdf:iul1an/asdf-tfswitch](https://github.com/iul1an/asdf-tfswitch) | +| tfswitch | [ubi:warrensbox/terraform-switcher](https://github.com/warrensbox/terraform-switcher) [asdf:iul1an/asdf-tfswitch](https://github.com/iul1an/asdf-tfswitch) | | tfupdate | [aqua:minamijoyo/tfupdate](https://github.com/minamijoyo/tfupdate) [asdf:yuokada/asdf-tfupdate](https://github.com/yuokada/asdf-tfupdate) | | thrift | [asdf:alisaifee/asdf-thrift](https://github.com/alisaifee/asdf-thrift) | | tilt | [aqua:tilt-dev/tilt](https://github.com/tilt-dev/tilt) [asdf:eaceaser/asdf-tilt](https://github.com/eaceaser/asdf-tilt) | | timoni | [aqua:stefanprodan/timoni](https://github.com/stefanprodan/timoni) [asdf:Smana/asdf-timoni](https://github.com/Smana/asdf-timoni) | | tiny | [asdf:mise-plugins/mise-tiny](https://github.com/mise-plugins/mise-tiny) | | tinytex | [asdf:Fbrisset/asdf-tinytex](https://github.com/Fbrisset/asdf-tinytex) | -| titan | [asdf:gabitchov/asdf-titan](https://github.com/gabitchov/asdf-titan) | +| titan | [ubi:titan-data/titan](https://github.com/titan-data/titan) [asdf:gabitchov/asdf-titan](https://github.com/gabitchov/asdf-titan) | | tmux | [asdf:Dabolus/asdf-tmux](https://github.com/Dabolus/asdf-tmux) | | tokei | [ubi:XAMPPRocky/tokei](https://github.com/XAMPPRocky/tokei) [asdf:gasuketsu/asdf-tokei](https://github.com/gasuketsu/asdf-tokei) | | tomcat | [asdf:mbutov/asdf-tomcat](https://github.com/mbutov/asdf-tomcat) | -| tonnage | [asdf:elementalvoid/asdf-tonnage](https://github.com/elementalvoid/asdf-tonnage) | -| traefik | [asdf:Dabolus/asdf-traefik](https://github.com/Dabolus/asdf-traefik) | +| tonnage | [ubi:elementalvoid/tonnage](https://github.com/elementalvoid/tonnage) [asdf:elementalvoid/asdf-tonnage](https://github.com/elementalvoid/asdf-tonnage) | +| traefik | [ubi:traefik/traefik](https://github.com/traefik/traefik) [asdf:Dabolus/asdf-traefik](https://github.com/Dabolus/asdf-traefik) | +| transifex | [ubi:transifex/cli](https://github.com/transifex/cli) [asdf:ORCID/asdf-transifex](https://github.com/ORCID/asdf-transifex) | | trdsql | [aqua:noborus/trdsql](https://github.com/noborus/trdsql) [asdf:johnlayton/asdf-trdsql](https://github.com/johnlayton/asdf-trdsql) | | tree-sitter | [aqua:tree-sitter/tree-sitter](https://github.com/tree-sitter/tree-sitter) [asdf:ivanvc/asdf-tree-sitter](https://github.com/ivanvc/asdf-tree-sitter) | | tridentctl | [aqua:NetApp/trident/tridentctl](https://github.com/NetApp/trident/tridentctl) [asdf:asdf-community/asdf-tridentctl](https://github.com/asdf-community/asdf-tridentctl) | | trivy | [aqua:aquasecurity/trivy](https://github.com/aquasecurity/trivy) [asdf:zufardhiyaulhaq/asdf-trivy](https://github.com/zufardhiyaulhaq/asdf-trivy) | -| tsuru | [asdf:virtualstaticvoid/asdf-tsuru](https://github.com/virtualstaticvoid/asdf-tsuru) | +| tsuru | [ubi:tsuru/tsuru-client](https://github.com/tsuru/tsuru-client) [asdf:virtualstaticvoid/asdf-tsuru](https://github.com/virtualstaticvoid/asdf-tsuru) | | ttyd | [aqua:tsl0922/ttyd](https://github.com/tsl0922/ttyd) [asdf:ivanvc/asdf-ttyd](https://github.com/ivanvc/asdf-ttyd) | | tuist | [asdf:asdf-community/asdf-tuist](https://github.com/asdf-community/asdf-tuist) | -| tx | [asdf:ORCID/asdf-transifex](https://github.com/ORCID/asdf-transifex) | | typos | [aqua:crate-ci/typos](https://github.com/crate-ci/typos) [asdf:aschiavon91/asdf-typos](https://github.com/aschiavon91/asdf-typos) | | typst | [aqua:typst/typst](https://github.com/typst/typst) [asdf:stephane-klein/asdf-typst](https://github.com/stephane-klein/asdf-typst) | | uaa | [ubi:cloudfoundry/uaa-cli](https://github.com/cloudfoundry/uaa-cli) [asdf:vmware-tanzu/tanzu-plug-in-for-asdf](https://github.com/vmware-tanzu/tanzu-plug-in-for-asdf) | | ubi | [ubi:houseabsolute/ubi](https://github.com/houseabsolute/ubi) | -| unison | [asdf:susurri/asdf-unison](https://github.com/susurri/asdf-unison) | +| unison | [ubi:unisonweb/unison](https://github.com/unisonweb/unison) [asdf:susurri/asdf-unison](https://github.com/susurri/asdf-unison) | | upctl | [aqua:UpCloudLtd/upcloud-cli](https://github.com/UpCloudLtd/upcloud-cli) | | updatecli | [aqua:updatecli/updatecli](https://github.com/updatecli/updatecli) [asdf:updatecli/asdf-updatecli](https://github.com/updatecli/asdf-updatecli) | -| upt | [asdf:ORCID/asdf-upt](https://github.com/ORCID/asdf-upt) | +| upt | [ubi:sigoden/upt](https://github.com/sigoden/upt) [asdf:ORCID/asdf-upt](https://github.com/ORCID/asdf-upt) | | upx | [aqua:upx/upx](https://github.com/upx/upx) [asdf:jimmidyson/asdf-upx](https://github.com/jimmidyson/asdf-upx) | | usage | [ubi:jdx/usage](https://github.com/jdx/usage) [asdf:jdx/mise-usage](https://github.com/jdx/mise-usage) | | usql | [aqua:xo/usql](https://github.com/xo/usql) [asdf:itspngu/asdf-usql](https://github.com/itspngu/asdf-usql) | @@ -786,7 +782,6 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | vals | [aqua:helmfile/vals](https://github.com/helmfile/vals) [asdf:dex4er/asdf-vals](https://github.com/dex4er/asdf-vals) | | vault | [aqua:hashicorp/vault](https://github.com/hashicorp/vault) [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | | vcluster | [aqua:loft-sh/vcluster](https://github.com/loft-sh/vcluster) [asdf:https://gitlab.com/wt0f/asdf-vcluster](https://gitlab.com/wt0f/asdf-vcluster) | -| vela | [asdf:pdemagny/asdf-vela](https://github.com/pdemagny/asdf-vela) | | velad | [asdf:pdemagny/asdf-velad](https://github.com/pdemagny/asdf-velad) | | velero | [aqua:vmware-tanzu/velero](https://github.com/vmware-tanzu/velero) [asdf:looztra/asdf-velero](https://github.com/looztra/asdf-velero) | | vendir | [aqua:carvel-dev/vendir](https://github.com/carvel-dev/vendir) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | @@ -807,16 +802,15 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | wasmtime | [aqua:bytecodealliance/wasmtime](https://github.com/bytecodealliance/wasmtime) [asdf:tachyonicbytes/asdf-wasmtime](https://github.com/tachyonicbytes/asdf-wasmtime) | | watchexec | [ubi:watchexec/watchexec](https://github.com/watchexec/watchexec) [asdf:nyrst/asdf-watchexec](https://github.com/nyrst/asdf-watchexec) | | waypoint | [aqua:hashicorp/waypoint](https://github.com/hashicorp/waypoint) [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | -| weave-gitops | [asdf:deas/asdf-weave-gitops](https://github.com/deas/asdf-weave-gitops) | +| weave-gitops | [ubi:weaveworks/weave-gitops](https://github.com/weaveworks/weave-gitops) [asdf:deas/asdf-weave-gitops](https://github.com/deas/asdf-weave-gitops) | | websocat | [aqua:vi/websocat](https://github.com/vi/websocat) [asdf:bdellegrazie/asdf-websocat](https://github.com/bdellegrazie/asdf-websocat) | | wren | [ubi:wren-lang/wren-cli](https://github.com/wren-lang/wren-cli) [asdf:jtakakura/asdf-wren-cli](https://github.com/jtakakura/asdf-wren-cli) | | wrk | [asdf:ivanvc/asdf-wrk](https://github.com/ivanvc/asdf-wrk) | | wtfutil | [aqua:wtfutil/wtf](https://github.com/wtfutil/wtf) [asdf:NeoHsu/asdf-wtfutil](https://github.com/NeoHsu/asdf-wtfutil) | | xc | [aqua:joerdav/xc](https://github.com/joerdav/xc) [asdf:airtonix/asdf-xc](https://github.com/airtonix/asdf-xc) | -| xcbeautify | [asdf:mise-plugins/asdf-xcbeautify](https://github.com/mise-plugins/asdf-xcbeautify) | +| xcbeautify | [ubi:cpisciotta/xcbeautify](https://github.com/cpisciotta/xcbeautify) [asdf:mise-plugins/asdf-xcbeautify](https://github.com/mise-plugins/asdf-xcbeautify) | | xchtmlreport | [asdf:younke/asdf-xchtmlreport](https://github.com/younke/asdf-xchtmlreport) | | xcodegen | [asdf:younke/asdf-xcodegen](https://github.com/younke/asdf-xcodegen) | -| xcodes | [asdf:younke/asdf-xcodes](https://github.com/younke/asdf-xcodes) | | xcresultparser | [asdf:MacPaw/asdf-xcresultparser](https://github.com/MacPaw/asdf-xcresultparser) | | xh | [aqua:ducaale/xh](https://github.com/ducaale/xh) [ubi:ducaale/xh](https://github.com/ducaale/xh) [asdf:NeoHsu/asdf-xh](https://github.com/NeoHsu/asdf-xh) | | yadm | [asdf:particledecay/asdf-yadm](https://github.com/particledecay/asdf-yadm) | @@ -830,11 +824,11 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | yor | [aqua:bridgecrewio/yor](https://github.com/bridgecrewio/yor) [asdf:ordinaryexperts/asdf-yor](https://github.com/ordinaryexperts/asdf-yor) | | youtube-dl | [asdf:iul1an/asdf-youtube-dl](https://github.com/iul1an/asdf-youtube-dl) | | yq | [ubi:mikefarah/yq](https://github.com/mikefarah/yq) [asdf:sudermanjr/asdf-yq](https://github.com/sudermanjr/asdf-yq) | -| yt-dlp | [asdf:duhow/asdf-yt-dlp](https://github.com/duhow/asdf-yt-dlp) | +| yt-dlp | [ubi:yt-dlp/yt-dlp](https://github.com/yt-dlp/yt-dlp) [asdf:duhow/asdf-yt-dlp](https://github.com/duhow/asdf-yt-dlp) | | ytt | [aqua:carvel-dev/ytt](https://github.com/carvel-dev/ytt) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | | zbctl | [asdf:camunda-community-hub/asdf-zbctl](https://github.com/camunda-community-hub/asdf-zbctl) | | zellij | [ubi:zellij-org/zellij](https://github.com/zellij-org/zellij) [asdf:chessmango/asdf-zellij](https://github.com/chessmango/asdf-zellij) | -| zephyr | [asdf:nsaunders/asdf-zephyr](https://github.com/nsaunders/asdf-zephyr) | +| zephyr | [ubi:MaybeJustJames/zephyr](https://github.com/MaybeJustJames/zephyr) [asdf:nsaunders/asdf-zephyr](https://github.com/nsaunders/asdf-zephyr) | | zig | [core:zig](https://mise.jdx.dev/lang/zig.html) | | zigmod | [ubi:nektro/zigmod](https://github.com/nektro/zigmod) [asdf:mise-plugins/asdf-zigmod](https://github.com/mise-plugins/asdf-zigmod) | | zls | [aqua:zigtools/zls](https://github.com/zigtools/zls) [ubi:zigtools/zls](https://github.com/zigtools/zls) | diff --git a/registry.toml b/registry.toml index 5bad1395c6..22b32b7573 100644 --- a/registry.toml +++ b/registry.toml @@ -552,7 +552,7 @@ editorconfig-checker.backends = [ "asdf:gabitchov/asdf-editorconfig-checker" ] editorconfig-checker.os = ["linux", "macos"] -editorconfig-checker.test = ["ec --version", "v{{version}}"] +# editorconfig-checker.test = ["ec --version", "v{{version}}"] # TODO: failing from https://github.com/editorconfig-checker/editorconfig-checker/issues/409 ejson.backends = ["aqua:Shopify/ejson", "asdf:cipherstash/asdf-ejson"] eksctl.backends = ["aqua:eksctl-io/eksctl", "asdf:elementalvoid/asdf-eksctl"] elasticsearch.backends = ["asdf:asdf-community/asdf-elasticsearch"] @@ -1193,9 +1193,11 @@ monarch.backends = ["asdf:nyuyuyu/asdf-monarch"] mongodb.backends = ["asdf:sylph01/asdf-mongodb"] mongosh.backends = ["ubi:mongodb-js/mongosh", "asdf:itspngu/asdf-mongosh"] mprocs.backends = ["ubi:pvolok/mprocs"] +mssqldef.backends = ["aqua:sqldef/sqldef/mssqldef"] mutanus.backends = ["asdf:SoriUR/asdf-mutanus"] -mvnd.backends = ["asdf:joschi/asdf-mvnd"] +mvnd.backends = ["aqua:apache/maven-mvnd", "asdf:joschi/asdf-mvnd"] mysql.backends = ["asdf:iroddis/asdf-mysql"] +mysqldef.backends = ["aqua:sqldef/sqldef/mysqldef"] nancy.backends = [ "aqua:sonatype-nexus-community/nancy", "asdf:iilyak/asdf-nancy" @@ -1371,6 +1373,7 @@ psc-package.backends = [ "ubi:purescript/psc-package", "asdf:nsaunders/asdf-psc-package" ] +psqldef.backends = ["aqua:sqldef/sqldef/psqldef"] pulumi.backends = ["aqua:pulumi/pulumi", "asdf:canha/asdf-pulumi"] purerl.backends = ["ubi:purerl/purerl", "asdf:GoNZooo/asdf-purerl"] purescript.backends = [ @@ -1401,7 +1404,6 @@ reckoner.backends = [ redis.backends = ["asdf:smashedtoatoms/asdf-redis"] redis-cli.backends = ["asdf:NeoHsu/asdf-redis-cli"] redo.backends = ["ubi:barthr/redo", "asdf:chessmango/asdf-redo"] -redskyctl.backends = ["asdf:sudermanjr/asdf-redskyctl"] reg.backends = ["aqua:genuinetools/reg", "asdf:looztra/asdf-reg"] regal.backends = ["aqua:StyraInc/regal", "asdf:asdf-community/asdf-regal"] regctl.backends = ["aqua:regclient/regclient/regctl", "asdf:ORCID/asdf-regctl"] @@ -1417,7 +1419,6 @@ restish.backends = [ ] revive.backends = ["aqua:mgechev/revive", "asdf:bjw-s/asdf-revive"] richgo.backends = ["aqua:kyoh86/richgo", "asdf:paxosglobal/asdf-richgo"] -riff.backends = ["asdf:abinet/asdf-riff"] ripgrep.aliases = ["rg"] ripgrep.backends = [ "aqua:BurntSushi/ripgrep", @@ -1440,8 +1441,6 @@ ripsecrets.backends = [ ripsecrets.test = ["ripsecrets --version", "ripsecrets {{version}}"] rke.backends = ["aqua:rancher/rke", "asdf:particledecay/asdf-rke"] rlwrap.backends = ["asdf:asdf-community/asdf-rlwrap"] -rome.backends = ["asdf:kichiemon/asdf-rome"] -rstash.backends = ["asdf:carlduevel/asdf-rstash"] ruby.backends = ["core:ruby"] ruff.backends = [ "aqua:astral-sh/ruff", @@ -1465,22 +1464,36 @@ scala.backends = [ "asdf:asdf-community/asdf-scala", "vfox:version-fox/vfox-scala" ] -scala-cli.backends = ["asdf:asdf-community/asdf-scala-cli"] +scala-cli.backends = [ + "ubi:VirtusLab/scala-cli", + "asdf:asdf-community/asdf-scala-cli" +] scaleway.aliases = ["scaleway-cli"] scaleway.backends = [ "aqua:scaleway/scaleway-cli", "asdf:albarralnunez/asdf-plugin-scaleway-cli" ] -scalingo-cli.backends = ["asdf:brandon-welsch/asdf-scalingo-cli"] -scarb.backends = ["asdf:software-mansion/asdf-scarb"] +scalingo-cli.backends = [ + "aqua:Scalingo/cli", + "asdf:brandon-welsch/asdf-scalingo-cli" +] +scarb.backends = [ + "ubi:software-mansion/scarb", + "asdf:software-mansion/asdf-scarb" +] sccache.backends = ["ubi:mozilla/sccache", "asdf:emersonmx/asdf-sccache"] -scenery.backends = ["asdf:skyzyx/asdf-scenery"] schemacrawler.backends = ["asdf:davidecavestro/asdf-schemacrawler"] -scie-pants.backends = ["asdf:robzr/asdf-scie-pants"] +scie-pants.backends = [ + "ubi:pantsbuild/scie-pants", + "asdf:robzr/asdf-scie-pants" +] seed7.backends = ["asdf:susurri/asdf-seed7"] semgrep.backends = ["asdf:brentjanderson/asdf-semgrep"] semtag.backends = ["asdf:junminahn/asdf-semtag"] -semver.backends = ["asdf:mathew-fleisch/asdf-semver"] +semver.backends = [ + "aqua:fsaintjacques/semver-tool", + "asdf:mathew-fleisch/asdf-semver" +] sentinel.backends = ["asdf:asdf-community/asdf-hashicorp"] sentry.aliases = ["sentry-cli"] sentry.backends = ["ubi:getsentry/sentry-cli"] @@ -1514,22 +1527,31 @@ slsa-verifier.test = ["slsa-verifier version", "{{version}}"] smithy.backends = ["asdf:aws/asdf-smithy"] smlnj.backends = ["asdf:samontea/asdf-smlnj"] snyk.backends = ["aqua:snyk/cli", "asdf:nirfuchs/asdf-snyk"] -soft-serve.backends = ["asdf:chessmango/asdf-soft-serve"] -solidity.backends = ["asdf:diegodorado/asdf-solidity"] -sonobuoy.backends = ["asdf:Nick-Triller/asdf-sonobuoy"] +soft-serve.backends = [ + "ubi:charmbracelet/soft-serve[exe=soft]", + "asdf:chessmango/asdf-soft-serve" +] +solidity.backends = [ + "ubi:ethereum/solidity[exe=solc]", + "asdf:diegodorado/asdf-solidity" +] +sonobuoy.backends = [ + "ubi:vmware-tanzu/sonobuoy", + "asdf:Nick-Triller/asdf-sonobuoy" +] sops.backends = ["ubi:getsops/sops", "asdf:mise-plugins/mise-sops"] sopstool.backends = ["aqua:ibotta/sopstool", "asdf:elementalvoid/asdf-sopstool"] -soracom.backends = ["asdf:gr1m0h/asdf-soracom"] +soracom.backends = ["ubi:soracom/soracom-cli", "asdf:gr1m0h/asdf-soracom"] sourcery.backends = ["asdf:younke/asdf-sourcery"] spacectl.backends = ["aqua:spacelift-io/spacectl", "asdf:bodgit/asdf-spacectl"] -spago.backends = ["asdf:jrrom/asdf-spago"] +spago.backends = ["ubi:purescript/spago", "asdf:jrrom/asdf-spago"] spark.backends = ["asdf:joshuaballoch/asdf-spark"] spectral.backends = ["aqua:stoplightio/spectral", "asdf:vbyrd/asdf-spectral"] spin.backends = ["aqua:spinnaker/spin", "asdf:pavloos/asdf-spin"] spring-boot.backends = ["asdf:joschi/asdf-spring-boot"] spruce.backends = ["aqua:geofffranks/spruce", "asdf:woneill/asdf-spruce"] -sqldef.backends = ["asdf:cometkim/asdf-sqldef"] sqlite.backends = ["asdf:cLupus/asdf-sqlite"] +sqlite3def.backends = ["aqua:sqldef/sqldef/sqlite3def"] sshuttle.backends = ["asdf:xanmanning/asdf-sshuttle"] stack.backends = ["aqua:commercialhaskell/stack", "asdf:sestrella/asdf-ghcup"] # stack.test = ["stack --version", "Version {{version}}"] # flaky @@ -1537,21 +1559,23 @@ starboard.backends = [ "aqua:aquasecurity/starboard", "asdf:zufardhiyaulhaq/asdf-starboard" ] -starknet-foundry.backends = ["asdf:foundry-rs/asdf-starknet-foundry"] -starport.backends = ["asdf:nikever/asdf-starport"] +starknet-foundry.backends = ["ubi:foundry-rs/starknet-foundry[exe=snforge]"] +starknet-foundry-sncast.backends = [ + "ubi:foundry-rs/starknet-foundry[exe=sncast]" +] starship.backends = ["ubi:starship/starship", "asdf:gr1m0h/asdf-starship"] staticcheck.backends = [ "aqua:dominikh/go-tools/staticcheck", "asdf:pbr0ck3r/asdf-staticcheck" ] steampipe.backends = ["aqua:turbot/steampipe", "asdf:carnei-ro/asdf-steampipe"] -step.backends = ["asdf:log2/asdf-step"] +step.backends = ["aqua:smallstep/cli", "asdf:log2/asdf-step"] stern.backends = ["aqua:stern/stern", "asdf:looztra/asdf-stern"] stripe.aliases = ["stripe-cli"] stripe.backends = ["aqua:stripe/stripe-cli", "asdf:offbyone/asdf-stripe"] stylua.backends = ["aqua:JohnnyMorganz/StyLua", "asdf:jc00ke/asdf-stylua"] stylua.test = ["stylua --version", "stylua {{version}}"] -sui.backends = ["asdf:placeholder-soft/asdf-sui"] +sui.backends = ["ubi:MystenLabs/sui", "asdf:placeholder-soft/asdf-sui"] superfile.backends = ["aqua:yorukot/superfile"] superfile.test = ["spf --version", "superfile version v{{version}}"] superfile.description = "Pretty fancy and modern terminal file manager" @@ -1566,7 +1590,6 @@ swiftgen.backends = ["asdf:younke/asdf-swiftgen"] swiftlint.backends = ["asdf:klundberg/asdf-swiftlint"] swiprolog.backends = ["asdf:mracos/asdf-swiprolog"] syft.backends = ["aqua:anchore/syft", "asdf:davidgp1701/asdf-syft"] -syncher.backends = ["asdf:nwillc/syncher"] talhelper.backends = ["aqua:budimanjojo/talhelper", "asdf:bjw-s/asdf-talhelper"] talos.backends = [ "ubi:siderolabs/talos[exe=talosctl]", @@ -1582,7 +1605,7 @@ taplo.backends = ["ubi:tamasfe/taplo[matching=full]", "cargo:taplo-cli"] task.backends = ["ubi:go-task/task", "asdf:particledecay/asdf-task"] tctl.backends = ["aqua:temporalio/tctl", "asdf:eko/asdf-tctl"] tekton.aliases = ["tekton-cli"] -tekton.backends = ["asdf:johnhamelink/asdf-tekton-cli"] +tekton.backends = ["aqua:tektoncd/cli", "asdf:johnhamelink/asdf-tekton-cli"] teleport-community.backends = ["asdf:MaloPolese/asdf-teleport-community"] teleport-ent.backends = ["asdf:highb/asdf-teleport-ent"] telepresence.backends = [ @@ -1594,7 +1617,6 @@ temporal.backends = [ "aqua:temporalio/temporal", "asdf:asdf-community/asdf-temporal" ] -temporalite.backends = ["asdf:eko/asdf-temporalite"] terradozer.backends = [ "aqua:jckuester/terradozer", "asdf:chessmango/asdf-terradozer" @@ -1655,19 +1677,26 @@ tfstate-lookup.backends = [ "aqua:fujiwara/tfstate-lookup", "asdf:carnei-ro/asdf-tfstate-lookup" ] -tfswitch.backends = ["asdf:iul1an/asdf-tfswitch"] +tfswitch.backends = [ + "ubi:warrensbox/terraform-switcher[exe=tfswitch]", + "asdf:iul1an/asdf-tfswitch" +] tfupdate.backends = ["aqua:minamijoyo/tfupdate", "asdf:yuokada/asdf-tfupdate"] thrift.backends = ["asdf:alisaifee/asdf-thrift"] tilt.backends = ["aqua:tilt-dev/tilt", "asdf:eaceaser/asdf-tilt"] timoni.backends = ["aqua:stefanprodan/timoni", "asdf:Smana/asdf-timoni"] tiny.backends = ["asdf:mise-plugins/mise-tiny"] tinytex.backends = ["asdf:Fbrisset/asdf-tinytex"] -titan.backends = ["asdf:gabitchov/asdf-titan"] +titan.backends = ["ubi:titan-data/titan", "asdf:gabitchov/asdf-titan"] tmux.backends = ["asdf:Dabolus/asdf-tmux"] tokei.backends = ["ubi:XAMPPRocky/tokei", "asdf:gasuketsu/asdf-tokei"] tomcat.backends = ["asdf:mbutov/asdf-tomcat"] -tonnage.backends = ["asdf:elementalvoid/asdf-tonnage"] -traefik.backends = ["asdf:Dabolus/asdf-traefik"] +tonnage.backends = [ + "ubi:elementalvoid/tonnage", + "asdf:elementalvoid/asdf-tonnage" +] +traefik.backends = ["ubi:traefik/traefik", "asdf:Dabolus/asdf-traefik"] +transifex.backends = ["ubi:transifex/cli[exe=tx]", "asdf:ORCID/asdf-transifex"] trdsql.backends = ["aqua:noborus/trdsql", "asdf:johnlayton/asdf-trdsql"] tree-sitter.backends = [ "aqua:tree-sitter/tree-sitter", @@ -1678,10 +1707,12 @@ tridentctl.backends = [ "asdf:asdf-community/asdf-tridentctl" ] trivy.backends = ["aqua:aquasecurity/trivy", "asdf:zufardhiyaulhaq/asdf-trivy"] -tsuru.backends = ["asdf:virtualstaticvoid/asdf-tsuru"] +tsuru.backends = [ + "ubi:tsuru/tsuru-client[exe=tsuru]", + "asdf:virtualstaticvoid/asdf-tsuru" +] ttyd.backends = ["aqua:tsl0922/ttyd", "asdf:ivanvc/asdf-ttyd"] tuist.backends = ["asdf:asdf-community/asdf-tuist"] -tx.backends = ["asdf:ORCID/asdf-transifex"] typos.backends = ["aqua:crate-ci/typos", "asdf:aschiavon91/asdf-typos"] typst.backends = ["aqua:typst/typst", "asdf:stephane-klein/asdf-typst"] uaa.aliases = ["uaa-cli"] @@ -1691,14 +1722,14 @@ uaa.backends = [ ] uaa.test = ["uaa version", "{{version}}"] ubi.backends = ["ubi:houseabsolute/ubi"] -unison.backends = ["asdf:susurri/asdf-unison"] +unison.backends = ["ubi:unisonweb/unison", "asdf:susurri/asdf-unison"] upctl.backends = ["aqua:UpCloudLtd/upcloud-cli"] upctl.test = ["upctl version", "{{version}}"] updatecli.backends = [ "aqua:updatecli/updatecli", "asdf:updatecli/asdf-updatecli" ] -upt.backends = ["asdf:ORCID/asdf-upt"] +upt.backends = ["ubi:sigoden/upt", "asdf:ORCID/asdf-upt"] upx.backends = ["aqua:upx/upx", "asdf:jimmidyson/asdf-upx"] usage.backends = ["ubi:jdx/usage", "asdf:jdx/mise-usage"] usage.os = ["linux", "macos"] @@ -1715,7 +1746,6 @@ vcluster.backends = [ "aqua:loft-sh/vcluster", "asdf:https://gitlab.com/wt0f/asdf-vcluster" ] -vela.backends = ["asdf:pdemagny/asdf-vela"] velad.backends = ["asdf:pdemagny/asdf-velad"] velero.backends = ["aqua:vmware-tanzu/velero", "asdf:looztra/asdf-velero"] vendir.backends = ["aqua:carvel-dev/vendir", "asdf:vmware-tanzu/asdf-carvel"] @@ -1745,7 +1775,10 @@ waypoint.backends = [ "aqua:hashicorp/waypoint", "asdf:asdf-community/asdf-hashicorp" ] -weave-gitops.backends = ["asdf:deas/asdf-weave-gitops"] +weave-gitops.backends = [ + "ubi:weaveworks/weave-gitops[exe=gitops]", + "asdf:deas/asdf-weave-gitops" +] websocat.backends = ["aqua:vi/websocat", "asdf:bdellegrazie/asdf-websocat"] wren.aliases = ["wren-cli"] wren.backends = [ @@ -1757,10 +1790,12 @@ wrk.backends = ["asdf:ivanvc/asdf-wrk"] wtfutil.backends = ["aqua:wtfutil/wtf", "asdf:NeoHsu/asdf-wtfutil"] wtfutil.test = ["wtfutil --help", "wtfutil "] # may not have version in output xc.backends = ["aqua:joerdav/xc", "asdf:airtonix/asdf-xc"] -xcbeautify.backends = ["asdf:mise-plugins/asdf-xcbeautify"] +xcbeautify.backends = [ + "ubi:cpisciotta/xcbeautify", + "asdf:mise-plugins/asdf-xcbeautify" +] xchtmlreport.backends = ["asdf:younke/asdf-xchtmlreport"] xcodegen.backends = ["asdf:younke/asdf-xcodegen"] -xcodes.backends = ["asdf:younke/asdf-xcodes"] xcresultparser.backends = ["asdf:MacPaw/asdf-xcresultparser"] xh.backends = ["aqua:ducaale/xh", "ubi:ducaale/xh", "asdf:NeoHsu/asdf-xh"] xh.test = ["xh -V", "xh {{version}}"] @@ -1779,11 +1814,11 @@ yj.backends = ["ubi:sclevine/yj", "asdf:ryodocx/asdf-yj"] yor.backends = ["aqua:bridgecrewio/yor", "asdf:ordinaryexperts/asdf-yor"] youtube-dl.backends = ["asdf:iul1an/asdf-youtube-dl"] yq.backends = ["ubi:mikefarah/yq", "asdf:sudermanjr/asdf-yq"] -yt-dlp.backends = ["asdf:duhow/asdf-yt-dlp"] +yt-dlp.backends = ["ubi:yt-dlp/yt-dlp", "asdf:duhow/asdf-yt-dlp"] ytt.backends = ["aqua:carvel-dev/ytt", "asdf:vmware-tanzu/asdf-carvel"] zbctl.backends = ["asdf:camunda-community-hub/asdf-zbctl"] zellij.backends = ["ubi:zellij-org/zellij", "asdf:chessmango/asdf-zellij"] -zephyr.backends = ["asdf:nsaunders/asdf-zephyr"] +zephyr.backends = ["ubi:MaybeJustJames/zephyr", "asdf:nsaunders/asdf-zephyr"] zig.backends = ["core:zig"] zigmod.backends = ["ubi:nektro/zigmod", "asdf:mise-plugins/asdf-zigmod"] zigmod.test = ["zigmod version", "{{version}}"] From de32f037bc399c98c9b772741d859a0e8fc70eef Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Wed, 8 Jan 2025 16:15:17 +0100 Subject: [PATCH 095/289] fix: maven-mvnd does not install with aqua (#3993) --- src/aqua/aqua_registry.rs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/aqua/aqua_registry.rs b/src/aqua/aqua_registry.rs index b5bdc4d0ce..a1731fb4c8 100644 --- a/src/aqua/aqua_registry.rs +++ b/src/aqua/aqua_registry.rs @@ -322,13 +322,7 @@ impl AquaPackage { } pub fn asset(&self, v: &str) -> Result { - // derive asset from url if not set and url contains a path - if self.asset.is_empty() && self.url.split("/").count() > "//".len() { - let asset = self.url.rsplit("/").next().unwrap_or(""); - self.parse_aqua_str(asset, v, &Default::default()) - } else { - self.parse_aqua_str(&self.asset, v, &Default::default()) - } + self.parse_aqua_str(&self.asset, v, &Default::default()) } pub fn asset_strs(&self, v: &str) -> Result> { @@ -450,6 +444,9 @@ impl AquaFile { } fn apply_override(mut orig: AquaPackage, avo: &AquaPackage) -> AquaPackage { + if orig.r#type != avo.r#type { + orig.r#type = avo.r#type.clone(); + } if !avo.repo_owner.is_empty() { orig.repo_owner = avo.repo_owner.clone(); } From 0c9f23a980bbd325f6acf5eed77a7a91eece94af Mon Sep 17 00:00:00 2001 From: Risu <79110363+risu729@users.noreply.github.com> Date: Thu, 9 Jan 2025 00:21:27 +0900 Subject: [PATCH 096/289] fix(schema): fix task sources and outputs schema (#3988) --- schema/mise-task.json | 52 +++++++++++++++++++++++++++++++++---------- schema/mise.json | 52 +++++++++++++++++++++++++++++++++---------- 2 files changed, 80 insertions(+), 24 deletions(-) diff --git a/schema/mise-task.json b/schema/mise-task.json index 0fc8c58d5e..a3f25755de 100644 --- a/schema/mise-task.json +++ b/schema/mise-task.json @@ -161,12 +161,32 @@ "type": "boolean" }, "outputs": { - "description": "files created by this task", - "items": { - "description": "glob pattern or path to files created by this task", - "type": "string" - }, - "type": "array" + "oneOf": [ + { + "description": "files created by this task", + "items": { + "description": "glob pattern or path to files created by this task", + "type": "string" + }, + "type": "array" + }, + { + "description": "glob pattern or path to files created by this task", + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "auto": { + "description": "automatically touch an internal tracked file instead of specifying outputs", + "enum": [true], + "type": "boolean" + } + }, + "required": ["auto"], + "type": "object" + } + ] }, "quiet": { "description": "do not display mise information for this task", @@ -213,12 +233,20 @@ "type": "string" }, "sources": { - "description": "files that this task depends on", - "items": { - "description": "glob pattern or path to files that this task depends on", - "type": "string" - }, - "type": "array" + "oneOf": [ + { + "description": "files that this task depends on", + "items": { + "description": "glob pattern or path to files that this task depends on", + "type": "string" + }, + "type": "array" + }, + { + "description": "glob pattern or path to files that this task depends on", + "type": "string" + } + ] }, "shell": { "description": "specify a shell command to run the script with", diff --git a/schema/mise.json b/schema/mise.json index aec9c50996..e850ac190e 100644 --- a/schema/mise.json +++ b/schema/mise.json @@ -1110,12 +1110,32 @@ "type": "boolean" }, "outputs": { - "description": "files created by this task", - "items": { - "description": "glob pattern or path to files created by this task", - "type": "string" - }, - "type": "array" + "oneOf": [ + { + "description": "files created by this task", + "items": { + "description": "glob pattern or path to files created by this task", + "type": "string" + }, + "type": "array" + }, + { + "description": "glob pattern or path to files created by this task", + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "auto": { + "description": "automatically touch an internal tracked file instead of specifying outputs", + "enum": [true], + "type": "boolean" + } + }, + "required": ["auto"], + "type": "object" + } + ] }, "quiet": { "description": "do not display mise information for this task", @@ -1162,12 +1182,20 @@ "type": "string" }, "sources": { - "description": "files that this task depends on", - "items": { - "description": "glob pattern or path to files that this task depends on", - "type": "string" - }, - "type": "array" + "oneOf": [ + { + "description": "files that this task depends on", + "items": { + "description": "glob pattern or path to files that this task depends on", + "type": "string" + }, + "type": "array" + }, + { + "description": "glob pattern or path to files that this task depends on", + "type": "string" + } + ] }, "shell": { "description": "specify a shell command to run the script with", From 63a6b3a86029e7441187ed55ea4c853871ee1ebc Mon Sep 17 00:00:00 2001 From: Ben Berry-Allwood <71074961+benberryallwood@users.noreply.github.com> Date: Wed, 8 Jan 2025 15:24:33 +0000 Subject: [PATCH 097/289] feat: replace asdf-spark plugin with mise-spark plugin (#3994) asdf-spark is broken and mise-spark can be moved into mise-plugins org --- docs/registry.md | 2 +- registry.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/registry.md b/docs/registry.md index 560fb0ff13..6d5b673082 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -679,7 +679,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | sourcery | [asdf:younke/asdf-sourcery](https://github.com/younke/asdf-sourcery) | | spacectl | [aqua:spacelift-io/spacectl](https://github.com/spacelift-io/spacectl) [asdf:bodgit/asdf-spacectl](https://github.com/bodgit/asdf-spacectl) | | spago | [ubi:purescript/spago](https://github.com/purescript/spago) [asdf:jrrom/asdf-spago](https://github.com/jrrom/asdf-spago) | -| spark | [asdf:joshuaballoch/asdf-spark](https://github.com/joshuaballoch/asdf-spark) | +| spark | [asdf:mise-plugins/mise-spark](https://github.com/mise-plugins/mise-spark) | | spectral | [aqua:stoplightio/spectral](https://github.com/stoplightio/spectral) [asdf:vbyrd/asdf-spectral](https://github.com/vbyrd/asdf-spectral) | | spin | [aqua:spinnaker/spin](https://github.com/spinnaker/spin) [asdf:pavloos/asdf-spin](https://github.com/pavloos/asdf-spin) | | spring-boot | [asdf:joschi/asdf-spring-boot](https://github.com/joschi/asdf-spring-boot) | diff --git a/registry.toml b/registry.toml index 22b32b7573..92dfd47bd8 100644 --- a/registry.toml +++ b/registry.toml @@ -1545,7 +1545,7 @@ soracom.backends = ["ubi:soracom/soracom-cli", "asdf:gr1m0h/asdf-soracom"] sourcery.backends = ["asdf:younke/asdf-sourcery"] spacectl.backends = ["aqua:spacelift-io/spacectl", "asdf:bodgit/asdf-spacectl"] spago.backends = ["ubi:purescript/spago", "asdf:jrrom/asdf-spago"] -spark.backends = ["asdf:joshuaballoch/asdf-spark"] +spark.backends = ["asdf:mise-plugins/mise-spark"] spectral.backends = ["aqua:stoplightio/spectral", "asdf:vbyrd/asdf-spectral"] spin.backends = ["aqua:spinnaker/spin", "asdf:pavloos/asdf-spin"] spring-boot.backends = ["asdf:joschi/asdf-spring-boot"] From 5c892e14b373f6d3df14ad6177756b118a5718bc Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Wed, 8 Jan 2025 16:30:23 +0100 Subject: [PATCH 098/289] feat: add kubectx/kubens to registry (#3992) --- docs/registry.md | 1 + registry.toml | 1 + 2 files changed, 2 insertions(+) diff --git a/docs/registry.md b/docs/registry.md index 6d5b673082..de051d8750 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -435,6 +435,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | kubefirst | [ubi:konstructio/kubefirst](https://github.com/konstructio/kubefirst) [asdf:Claywd/asdf-kubefirst](https://github.com/Claywd/asdf-kubefirst) | | kubelogin | [aqua:int128/kubelogin](https://github.com/int128/kubelogin) | | kubemqctl | [aqua:kubemq-io/kubemqctl](https://github.com/kubemq-io/kubemqctl) [asdf:johnlayton/asdf-kubemqctl](https://github.com/johnlayton/asdf-kubemqctl) | +| kubens | [aqua:ahmetb/kubectx/kubens](https://github.com/ahmetb/kubectx/kubens) | | kubent | [aqua:doitintl/kube-no-trouble](https://github.com/doitintl/kube-no-trouble) [asdf:virtualstaticvoid/asdf-kubent](https://github.com/virtualstaticvoid/asdf-kubent) | | kubergrunt | [aqua:gruntwork-io/kubergrunt](https://github.com/gruntwork-io/kubergrunt) [asdf:NeoHsu/asdf-kubergrunt](https://github.com/NeoHsu/asdf-kubergrunt) | | kubeseal | [aqua:bitnami-labs/sealed-secrets](https://github.com/bitnami-labs/sealed-secrets) [asdf:stefansedich/asdf-kubeseal](https://github.com/stefansedich/asdf-kubeseal) | diff --git a/registry.toml b/registry.toml index 92dfd47bd8..cdf0b153fa 100644 --- a/registry.toml +++ b/registry.toml @@ -1044,6 +1044,7 @@ kubemqctl.backends = [ "aqua:kubemq-io/kubemqctl", "asdf:johnlayton/asdf-kubemqctl" ] +kubens.backends = ["aqua:ahmetb/kubectx/kubens"] kubent.backends = [ "aqua:doitintl/kube-no-trouble", "asdf:virtualstaticvoid/asdf-kubent" From 38e556f10e79338dec2f2064378f37499b2c2cd5 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 8 Jan 2025 17:02:58 +0000 Subject: [PATCH 099/289] fix: use friendly error in `mise run` (#3998) Fixes #3976 --- src/cli/run.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/cli/run.rs b/src/cli/run.rs index 8991a4d996..debf646962 100644 --- a/src/cli/run.rs +++ b/src/cli/run.rs @@ -321,11 +321,12 @@ impl Run { // only show this if it's the first failure, or we haven't killed all the remaining tasks // otherwise we'll get unhelpful error messages about being killed by mise which we expect let prefix = task.estyled_prefix(); - self.eprint( - &task, - &prefix, - &format!("{} {err:?}", style::ered("ERROR")), - ); + let err_body = if SETTINGS.verbose { + format!("{} {err:?}", style::ered("ERROR")) + } else { + format!("{} {err}", style::ered("ERROR")) + }; + self.eprint(&task, &prefix, &err_body); } let _ = tx_err.send((task.clone(), status)); } From e9eaf119514653cb22b9cf44a6bb5d8328d952c2 Mon Sep 17 00:00:00 2001 From: Risu <79110363+risu729@users.noreply.github.com> Date: Thu, 9 Jan 2025 02:26:09 +0900 Subject: [PATCH 100/289] fix(schema): update task schema (#3999) --- schema/mise-task.json | 96 +++++++++++++++++++++++++------------------ schema/mise.json | 96 +++++++++++++++++++++++++------------------ 2 files changed, 112 insertions(+), 80 deletions(-) diff --git a/schema/mise-task.json b/schema/mise-task.json index a3f25755de..650dcc5172 100644 --- a/schema/mise-task.json +++ b/schema/mise-task.json @@ -38,58 +38,59 @@ ] }, "depends": { - "description": "other tasks to run before this task", - "items": { - "oneOf": [ - { - "description": "task with args to run before this task", + "oneOf": [ + { + "description": "task with args to run before this task", + "type": "string" + }, + { + "description": "task with args to run before this task", + "items": { + "description": "task name and args", "type": "string" }, - { - "description": "task with args to run before this task", - "items": { - "description": "task name and args", - "type": "string" - }, - "type": "array" - } - ] - }, - "type": "array" + "type": "array" + } + ] }, "depends_post": { - "description": "other tasks to run after this task", - "items": { - "oneOf": [ - { - "description": "task with args to run after this task", + "oneOf": [ + { + "description": "task with args to run after this task", + "type": "string" + }, + { + "description": "task with args to run after this task", + "items": { + "description": "task name and args", "type": "string" }, - { - "description": "task with args to run after this task", - "items": { - "description": "task name and args", - "type": "string" - }, - "type": "array" - } - ] - }, - "type": "array" + "type": "array" + } + ] }, "wait_for": { - "description": "if these tasks run, wait for them to complete first", - "items": { - "description": "task to run before this task", - "type": "string" - }, - "type": "array" + "oneOf": [ + { + "description": "task with args to wait for completion first", + "type": "string" + }, + { + "description": "task with args to wait for completion first", + "items": { + "description": "task name and args", + "type": "string" + }, + "type": "array" + } + ] }, "description": { "description": "description of task", "type": "string" }, "dir": { + "default": "{{ config_root }}", "description": "directory to run script in, default is current working directory", "type": "string" }, @@ -157,6 +158,7 @@ "type": "object" }, "hide": { + "default": false, "description": "do not display this task", "type": "boolean" }, @@ -189,10 +191,25 @@ ] }, "quiet": { + "default": false, "description": "do not display mise information for this task", "type": "boolean" }, + "silent": { + "default": false, + "description": "suppress all output for this task", + "oneOf": [ + { + "type": "boolean" + }, + { + "enum": ["stdout", "stderr"], + "type": "string" + } + ] + }, "raw": { + "default": false, "description": "directly connect task to stdin/stdout/stderr", "type": "boolean" }, @@ -250,8 +267,7 @@ }, "shell": { "description": "specify a shell command to run the script with", - "type": "string", - "default": "sh -c" + "type": "string" }, "usage": { "description": "Specify usage (https://usage.jdx.dev/) specs for the task", diff --git a/schema/mise.json b/schema/mise.json index e850ac190e..479774024f 100644 --- a/schema/mise.json +++ b/schema/mise.json @@ -987,58 +987,59 @@ ] }, "depends": { - "description": "other tasks to run before this task", - "items": { - "oneOf": [ - { - "description": "task with args to run before this task", + "oneOf": [ + { + "description": "task with args to run before this task", + "type": "string" + }, + { + "description": "task with args to run before this task", + "items": { + "description": "task name and args", "type": "string" }, - { - "description": "task with args to run before this task", - "items": { - "description": "task name and args", - "type": "string" - }, - "type": "array" - } - ] - }, - "type": "array" + "type": "array" + } + ] }, "depends_post": { - "description": "other tasks to run after this task", - "items": { - "oneOf": [ - { - "description": "task with args to run after this task", + "oneOf": [ + { + "description": "task with args to run after this task", + "type": "string" + }, + { + "description": "task with args to run after this task", + "items": { + "description": "task name and args", "type": "string" }, - { - "description": "task with args to run after this task", - "items": { - "description": "task name and args", - "type": "string" - }, - "type": "array" - } - ] - }, - "type": "array" + "type": "array" + } + ] }, "wait_for": { - "description": "if these tasks run, wait for them to complete first", - "items": { - "description": "task to run before this task", - "type": "string" - }, - "type": "array" + "oneOf": [ + { + "description": "task with args to wait for completion first", + "type": "string" + }, + { + "description": "task with args to wait for completion first", + "items": { + "description": "task name and args", + "type": "string" + }, + "type": "array" + } + ] }, "description": { "description": "description of task", "type": "string" }, "dir": { + "default": "{{ config_root }}", "description": "directory to run script in, default is current working directory", "type": "string" }, @@ -1106,6 +1107,7 @@ "type": "object" }, "hide": { + "default": false, "description": "do not display this task", "type": "boolean" }, @@ -1138,10 +1140,25 @@ ] }, "quiet": { + "default": false, "description": "do not display mise information for this task", "type": "boolean" }, + "silent": { + "default": false, + "description": "suppress all output for this task", + "oneOf": [ + { + "type": "boolean" + }, + { + "enum": ["stdout", "stderr"], + "type": "string" + } + ] + }, "raw": { + "default": false, "description": "directly connect task to stdin/stdout/stderr", "type": "boolean" }, @@ -1199,8 +1216,7 @@ }, "shell": { "description": "specify a shell command to run the script with", - "type": "string", - "default": "sh -c" + "type": "string" }, "usage": { "description": "Specify usage (https://usage.jdx.dev/) specs for the task", From 5ca72270e2ae96bcf18e24519a47882046e1cb7f Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 8 Jan 2025 17:47:46 +0000 Subject: [PATCH 101/289] chore: fork remaining asdf plugins to mise-plugins (#3996) * chore: fork remaining asdf plugins to mise-plugins * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- docs/registry.md | 462 +++++++++++++++++++++--------------------- registry.toml | 506 +++++++++++++++++++++++----------------------- src/shorthands.rs | 2 +- 3 files changed, 488 insertions(+), 482 deletions(-) diff --git a/docs/registry.md b/docs/registry.md index de051d8750..e1c55a08bb 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -23,27 +23,27 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | Short | Full | | ----------- | --------------- | -| 1password | [asdf:NeoHsu/asdf-1password-cli](https://github.com/NeoHsu/asdf-1password-cli) [aqua:1password/cli](https://github.com/1password/cli) | -| aapt2 | [asdf:ronnnnn/asdf-aapt2](https://github.com/ronnnnn/asdf-aapt2) | +| 1password | [asdf:mise-plugins/mise-1password-cli](https://github.com/mise-plugins/mise-1password-cli) [aqua:1password/cli](https://github.com/1password/cli) | +| aapt2 | [asdf:mise-plugins/mise-aapt2](https://github.com/mise-plugins/mise-aapt2) | | act | [aqua:nektos/act](https://github.com/nektos/act) [ubi:nektos/act](https://github.com/nektos/act) [asdf:gr1m0h/asdf-act](https://github.com/gr1m0h/asdf-act) | | action-validator | [aqua:mpalmer/action-validator](https://github.com/mpalmer/action-validator) [ubi:mpalmer/action-validator](https://github.com/mpalmer/action-validator) [asdf:mpalmer/action-validator](https://github.com/mpalmer/action-validator) | | actionlint | [aqua:rhysd/actionlint](https://github.com/rhysd/actionlint) [ubi:rhysd/actionlint](https://github.com/rhysd/actionlint) [asdf:crazy-matt/asdf-actionlint](https://github.com/crazy-matt/asdf-actionlint) | | adr-tools | [aqua:npryce/adr-tools](https://github.com/npryce/adr-tools) [asdf:https://gitlab.com/td7x/asdf/adr-tools](https://gitlab.com/td7x/asdf/adr-tools) | -| ag | [asdf:koketani/asdf-ag](https://github.com/koketani/asdf-ag) | +| ag | [asdf:mise-plugins/mise-ag](https://github.com/mise-plugins/mise-ag) | | age | [aqua:FiloSottile/age](https://github.com/FiloSottile/age) [asdf:threkk/asdf-age](https://github.com/threkk/asdf-age) | | age-plugin-yubikey | [ubi:str4d/age-plugin-yubikey](https://github.com/str4d/age-plugin-yubikey) [asdf:joke/asdf-age-plugin-yubikey](https://github.com/joke/asdf-age-plugin-yubikey) | | agebox | [ubi:slok/agebox](https://github.com/slok/agebox) [asdf:slok/asdf-agebox](https://github.com/slok/asdf-agebox) | | air | [aqua:air-verse/air](https://github.com/air-verse/air) [asdf:pdemagny/asdf-air](https://github.com/pdemagny/asdf-air) | | aks-engine | [aqua:Azure/aks-engine](https://github.com/Azure/aks-engine) [asdf:robsonpeixoto/asdf-aks-engine](https://github.com/robsonpeixoto/asdf-aks-engine) | -| allure | [asdf:comdotlinux/asdf-allure](https://github.com/comdotlinux/asdf-allure) | +| allure | [asdf:mise-plugins/mise-allure](https://github.com/mise-plugins/mise-allure) | | allurectl | [ubi:allure-framework/allurectl](https://github.com/allure-framework/allurectl) | | alp | [aqua:tkuchiki/alp](https://github.com/tkuchiki/alp) [asdf:asdf-community/asdf-alp](https://github.com/asdf-community/asdf-alp) | | amass | [ubi:owasp-amass/amass](https://github.com/owasp-amass/amass) [asdf:dhoeric/asdf-amass](https://github.com/dhoeric/asdf-amass) | | amazon-ecr-credential-helper | [aqua:awslabs/amazon-ecr-credential-helper](https://github.com/awslabs/amazon-ecr-credential-helper) [asdf:dex4er/asdf-amazon-ecr-credential-helper](https://github.com/dex4er/asdf-amazon-ecr-credential-helper) | -| ansible-base | [asdf:amrox/asdf-pyapp](https://github.com/amrox/asdf-pyapp) | -| ant | [asdf:jackboespflug/asdf-ant](https://github.com/jackboespflug/asdf-ant) | +| ansible-base | [asdf:mise-plugins/mise-pyapp](https://github.com/mise-plugins/mise-pyapp) | +| ant | [asdf:mise-plugins/mise-ant](https://github.com/mise-plugins/mise-ant) | | apko | [aqua:chainguard-dev/apko](https://github.com/chainguard-dev/apko) [ubi:chainguard-dev/apko](https://github.com/chainguard-dev/apko) [asdf:omissis/asdf-apko](https://github.com/omissis/asdf-apko) | -| apollo-ios | [asdf:MacPaw/asdf-apollo-ios-cli](https://github.com/MacPaw/asdf-apollo-ios-cli) | +| apollo-ios | [asdf:mise-plugins/mise-apollo-ios-cli](https://github.com/mise-plugins/mise-apollo-ios-cli) | | apollo-router | [ubi:apollographql/router](https://github.com/apollographql/router) [asdf:safx/asdf-apollo-router](https://github.com/safx/asdf-apollo-router) | | apollo-rover | [ubi:apollographql/rover](https://github.com/apollographql/rover) | | arduino | [aqua:arduino/arduino-cli](https://github.com/arduino/arduino-cli) [asdf:egnor/asdf-arduino-cli](https://github.com/egnor/asdf-arduino-cli) | @@ -51,53 +51,53 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | argo | [aqua:argoproj/argo-workflows](https://github.com/argoproj/argo-workflows) [asdf:sudermanjr/asdf-argo](https://github.com/sudermanjr/asdf-argo) | | argo-rollouts | [aqua:argoproj/argo-rollouts](https://github.com/argoproj/argo-rollouts) [asdf:abatilo/asdf-argo-rollouts](https://github.com/abatilo/asdf-argo-rollouts) | | argocd | [aqua:argoproj/argo-cd](https://github.com/argoproj/argo-cd) [ubi:argoproj/argo-cd](https://github.com/argoproj/argo-cd) [asdf:beardix/asdf-argocd](https://github.com/beardix/asdf-argocd) | -| asciidoctorj | [asdf:gliwka/asdf-asciidoctorj](https://github.com/gliwka/asdf-asciidoctorj) | -| assh | [asdf:zekker6/asdf-assh](https://github.com/zekker6/asdf-assh) | +| asciidoctorj | [asdf:mise-plugins/mise-asciidoctorj](https://github.com/mise-plugins/mise-asciidoctorj) | +| assh | [asdf:mise-plugins/mise-assh](https://github.com/mise-plugins/mise-assh) | | atlas | [aqua:ariga/atlas](https://github.com/ariga/atlas) [asdf:komi1230/asdf-atlas](https://github.com/komi1230/asdf-atlas) | | atmos | [aqua:cloudposse/atmos](https://github.com/cloudposse/atmos) [asdf:cloudposse/asdf-atmos](https://github.com/cloudposse/asdf-atmos) | -| auto-doc | [asdf:looztra/asdf-auto-doc](https://github.com/looztra/asdf-auto-doc) | +| auto-doc | [asdf:mise-plugins/mise-auto-doc](https://github.com/mise-plugins/mise-auto-doc) | | aws-amplify | [ubi:aws-amplify/amplify-cli](https://github.com/aws-amplify/amplify-cli) [asdf:LozanoMatheus/asdf-aws-amplify-cli](https://github.com/LozanoMatheus/asdf-aws-amplify-cli) | | aws-cli | [aqua:aws/aws-cli](https://github.com/aws/aws-cli) [asdf:MetricMike/asdf-awscli](https://github.com/MetricMike/asdf-awscli) | | aws-copilot | [aqua:aws/copilot-cli](https://github.com/aws/copilot-cli) [asdf:NeoHsu/asdf-copilot](https://github.com/NeoHsu/asdf-copilot) | | aws-iam-authenticator | [aqua:kubernetes-sigs/aws-iam-authenticator](https://github.com/kubernetes-sigs/aws-iam-authenticator) [asdf:zekker6/asdf-aws-iam-authenticator](https://github.com/zekker6/asdf-aws-iam-authenticator) | | aws-nuke | [aqua:rebuy-de/aws-nuke](https://github.com/rebuy-de/aws-nuke) [asdf:bersalazar/asdf-aws-nuke](https://github.com/bersalazar/asdf-aws-nuke) | -| aws-sam | [pipx:aws-sam-cli](https://pypi.org/project/aws-sam-cli) [asdf:amrox/asdf-pyapp](https://github.com/amrox/asdf-pyapp) | +| aws-sam | [pipx:aws-sam-cli](https://pypi.org/project/aws-sam-cli) [asdf:mise-plugins/mise-pyapp](https://github.com/mise-plugins/mise-pyapp) | | aws-sso | [aqua:synfinatic/aws-sso-cli](https://github.com/synfinatic/aws-sso-cli) [asdf:adamcrews/asdf-aws-sso-cli](https://github.com/adamcrews/asdf-aws-sso-cli) | | aws-vault | [aqua:99designs/aws-vault](https://github.com/99designs/aws-vault) [asdf:karancode/asdf-aws-vault](https://github.com/karancode/asdf-aws-vault) | -| awscli-local | [asdf:paulo-ferraz-oliveira/asdf-awscli-local](https://github.com/paulo-ferraz-oliveira/asdf-awscli-local) | -| awsebcli | [pipx:awsebcli](https://pypi.org/project/awsebcli) [asdf:amrox/asdf-pyapp](https://github.com/amrox/asdf-pyapp) | +| awscli-local | [asdf:mise-plugins/mise-awscli-local](https://github.com/mise-plugins/mise-awscli-local) | +| awsebcli | [pipx:awsebcli](https://pypi.org/project/awsebcli) [asdf:mise-plugins/mise-pyapp](https://github.com/mise-plugins/mise-pyapp) | | awsls | [ubi:jckuester/awsls](https://github.com/jckuester/awsls) [asdf:chessmango/asdf-awsls](https://github.com/chessmango/asdf-awsls) | | awsrm | [ubi:jckuester/awsrm](https://github.com/jckuester/awsrm) [asdf:chessmango/asdf-awsrm](https://github.com/chessmango/asdf-awsrm) | | awsweeper | [ubi:jckuester/awsweeper](https://github.com/jckuester/awsweeper) [asdf:chessmango/asdf-awsweeper](https://github.com/chessmango/asdf-awsweeper) | -| azure | [asdf:EcoMind/asdf-azure-cli](https://github.com/EcoMind/asdf-azure-cli) | -| azure-functions-core-tools | [asdf:daveneeley/asdf-azure-functions-core-tools](https://github.com/daveneeley/asdf-azure-functions-core-tools) | +| azure | [asdf:mise-plugins/mise-azure-cli](https://github.com/mise-plugins/mise-azure-cli) | +| azure-functions-core-tools | [asdf:mise-plugins/mise-azure-functions-core-tools](https://github.com/mise-plugins/mise-azure-functions-core-tools) | | azure-kubelogin | [aqua:Azure/kubelogin](https://github.com/Azure/kubelogin) [asdf:sechmann/asdf-kubelogin](https://github.com/sechmann/asdf-kubelogin) | | babashka | [ubi:babashka/babashka](https://github.com/babashka/babashka) [asdf:pitch-io/asdf-babashka](https://github.com/pitch-io/asdf-babashka) | | balena | [ubi:balena-io/balena-cli](https://github.com/balena-io/balena-cli) [asdf:boatkit-io/asdf-balena-cli](https://github.com/boatkit-io/asdf-balena-cli) | | bashbot | [aqua:mathew-fleisch/bashbot](https://github.com/mathew-fleisch/bashbot) [asdf:mathew-fleisch/asdf-bashbot](https://github.com/mathew-fleisch/asdf-bashbot) | -| bashly | [asdf:pcrockett/asdf-bashly](https://github.com/pcrockett/asdf-bashly) | +| bashly | [asdf:mise-plugins/mise-bashly](https://github.com/mise-plugins/mise-bashly) | | bat | [ubi:sharkdp/bat](https://github.com/sharkdp/bat) [cargo:bat](https://crates.io/crates/bat) [asdf:https://gitlab.com/wt0f/asdf-bat](https://gitlab.com/wt0f/asdf-bat) | -| bat-extras | [asdf:vhdirk/asdf-bat-extras](https://github.com/vhdirk/asdf-bat-extras) | +| bat-extras | [asdf:mise-plugins/mise-bat-extras](https://github.com/mise-plugins/mise-bat-extras) | | bats | [aqua:bats-core/bats-core](https://github.com/bats-core/bats-core) [asdf:timgluz/asdf-bats](https://github.com/timgluz/asdf-bats) | | bazel | [ubi:bazelbuild/bazel](https://github.com/bazelbuild/bazel) [asdf:rajatvig/asdf-bazel](https://github.com/rajatvig/asdf-bazel) | | bazelisk | [aqua:bazelbuild/bazelisk](https://github.com/bazelbuild/bazelisk) [asdf:josephtate/asdf-bazelisk](https://github.com/josephtate/asdf-bazelisk) | -| bbr-s3-config-validator | [asdf:vmware-tanzu/tanzu-plug-in-for-asdf](https://github.com/vmware-tanzu/tanzu-plug-in-for-asdf) | +| bbr-s3-config-validator | [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | | benthos | [aqua:benthosdev/benthos](https://github.com/benthosdev/benthos) [asdf:benthosdev/benthos-asdf](https://github.com/benthosdev/benthos-asdf) | -| bfs | [asdf:virtualroot/asdf-bfs](https://github.com/virtualroot/asdf-bfs) | +| bfs | [asdf:mise-plugins/mise-bfs](https://github.com/mise-plugins/mise-bfs) | | binnacle | [aqua:Traackr/binnacle](https://github.com/Traackr/binnacle) [asdf:Traackr/asdf-binnacle](https://github.com/Traackr/asdf-binnacle) | | bitwarden | [aqua:bitwarden/clients](https://github.com/bitwarden/clients) [asdf:vixus0/asdf-bitwarden](https://github.com/vixus0/asdf-bitwarden) | | bitwarden-secrets-manager | [ubi:bitwarden/sdk](https://github.com/bitwarden/sdk) [asdf:asdf-community/asdf-bitwarden-secrets-manager](https://github.com/asdf-community/asdf-bitwarden-secrets-manager) | | black | [aqua:psf/black](https://github.com/psf/black) | | bombardier | [aqua:codesenberg/bombardier](https://github.com/codesenberg/bombardier) [asdf:NeoHsu/asdf-bombardier](https://github.com/NeoHsu/asdf-bombardier) | | borg | [aqua:borgbackup/borg](https://github.com/borgbackup/borg) [asdf:lwiechec/asdf-borg](https://github.com/lwiechec/asdf-borg) | -| bosh | [aqua:cloudfoundry/bosh-cli](https://github.com/cloudfoundry/bosh-cli) [asdf:vmware-tanzu/tanzu-plug-in-for-asdf](https://github.com/vmware-tanzu/tanzu-plug-in-for-asdf) | -| bosh-backup-and-restore | [ubi:cloudfoundry-incubator/bosh-backup-and-restore](https://github.com/cloudfoundry-incubator/bosh-backup-and-restore) [asdf:vmware-tanzu/tanzu-plug-in-for-asdf](https://github.com/vmware-tanzu/tanzu-plug-in-for-asdf) | +| bosh | [aqua:cloudfoundry/bosh-cli](https://github.com/cloudfoundry/bosh-cli) [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | +| bosh-backup-and-restore | [ubi:cloudfoundry-incubator/bosh-backup-and-restore](https://github.com/cloudfoundry-incubator/bosh-backup-and-restore) [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | | bottom | [aqua:ClementTsang/bottom](https://github.com/ClementTsang/bottom) [asdf:carbonteq/asdf-btm](https://github.com/carbonteq/asdf-btm) | -| boundary | [aqua:hashicorp/boundary](https://github.com/hashicorp/boundary) [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | -| bpkg | [asdf:bpkg/asdf-bpkg](https://github.com/bpkg/asdf-bpkg) | +| boundary | [aqua:hashicorp/boundary](https://github.com/hashicorp/boundary) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | +| bpkg | [asdf:mise-plugins/mise-bpkg](https://github.com/mise-plugins/mise-bpkg) | | brig | [aqua:brigadecore/brigade](https://github.com/brigadecore/brigade) [asdf:Ibotta/asdf-brig](https://github.com/Ibotta/asdf-brig) | | btop | [ubi:aristocratos/btop](https://github.com/aristocratos/btop) | -| btrace | [asdf:joschi/asdf-btrace](https://github.com/joschi/asdf-btrace) | +| btrace | [asdf:mise-plugins/mise-btrace](https://github.com/mise-plugins/mise-btrace) | | buf | [aqua:bufbuild/buf](https://github.com/bufbuild/buf) [ubi:bufbuild/buf](https://github.com/bufbuild/buf) [asdf:truepay/asdf-buf](https://github.com/truepay/asdf-buf) | | buildpack | [aqua:buildpacks/pack](https://github.com/buildpacks/pack) [asdf:johnlayton/asdf-buildpack](https://github.com/johnlayton/asdf-buildpack) | | bun | [core:bun](https://mise.jdx.dev/lang/bun.html) | @@ -109,80 +109,80 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | cargo-insta | [aqua:mitsuhiko/insta](https://github.com/mitsuhiko/insta) [ubi:mitsuhiko/insta](https://github.com/mitsuhiko/insta) | | cargo-make | [ubi:sagiegurari/cargo-make](https://github.com/sagiegurari/cargo-make) [asdf:mise-plugins/asdf-cargo-make](https://github.com/mise-plugins/asdf-cargo-make) | | carp | [ubi:carp-lang/Carp](https://github.com/carp-lang/Carp) [asdf:susurri/asdf-carp](https://github.com/susurri/asdf-carp) | -| carthage | [asdf:younke/asdf-carthage](https://github.com/younke/asdf-carthage) | +| carthage | [asdf:mise-plugins/mise-carthage](https://github.com/mise-plugins/mise-carthage) | | ccache | [ubi:ccache/ccache](https://github.com/ccache/ccache) [asdf:asdf-community/asdf-ccache](https://github.com/asdf-community/asdf-ccache) | | certstrap | [ubi:square/certstrap](https://github.com/square/certstrap) [asdf:carnei-ro/asdf-certstrap](https://github.com/carnei-ro/asdf-certstrap) | -| cf | [asdf:mattysweeps/asdf-cf](https://github.com/mattysweeps/asdf-cf) | +| cf | [asdf:mise-plugins/mise-cf](https://github.com/mise-plugins/mise-cf) | | cfssl | [aqua:cloudflare/cfssl/cfssl](https://github.com/cloudflare/cfssl/cfssl) [asdf:mathew-fleisch/asdf-cfssl](https://github.com/mathew-fleisch/asdf-cfssl) | | chamber | [ubi:segmentio/chamber](https://github.com/segmentio/chamber) [asdf:mintel/asdf-chamber](https://github.com/mintel/asdf-chamber) | | changie | [ubi:miniscruff/changie](https://github.com/miniscruff/changie) [asdf:pdemagny/asdf-changie](https://github.com/pdemagny/asdf-changie) | | cheat | [aqua:cheat/cheat](https://github.com/cheat/cheat) [asdf:jmoratilla/asdf-cheat-plugin](https://github.com/jmoratilla/asdf-cheat-plugin) | | checkov | [ubi:bridgecrewio/checkov](https://github.com/bridgecrewio/checkov) [asdf:bosmak/asdf-checkov](https://github.com/bosmak/asdf-checkov) | | chezmoi | [ubi:twpayne/chezmoi](https://github.com/twpayne/chezmoi) [asdf:joke/asdf-chezmoi](https://github.com/joke/asdf-chezmoi) | -| chezscheme | [asdf:asdf-community/asdf-chezscheme](https://github.com/asdf-community/asdf-chezscheme) | -| chicken | [asdf:evhan/asdf-chicken](https://github.com/evhan/asdf-chicken) | +| chezscheme | [asdf:mise-plugins/mise-chezscheme](https://github.com/mise-plugins/mise-chezscheme) | +| chicken | [asdf:mise-plugins/mise-chicken](https://github.com/mise-plugins/mise-chicken) | | chisel | [ubi:jpillora/chisel](https://github.com/jpillora/chisel) [go:github.com/jpillora/chisel](https://pkg.go.dev/github.com/jpillora/chisel) [asdf:lwiechec/asdf-chisel](https://github.com/lwiechec/asdf-chisel) | | choose | [ubi:theryangeary/choose](https://github.com/theryangeary/choose) [cargo:choose](https://crates.io/crates/choose) [asdf:carbonteq/asdf-choose](https://github.com/carbonteq/asdf-choose) | -| chromedriver | [asdf:schinckel/asdf-chromedriver](https://github.com/schinckel/asdf-chromedriver) | +| chromedriver | [asdf:mise-plugins/mise-chromedriver](https://github.com/mise-plugins/mise-chromedriver) | | cidr-merger | [ubi:zhanhb/cidr-merger](https://github.com/zhanhb/cidr-merger) [asdf:ORCID/asdf-cidr-merger](https://github.com/ORCID/asdf-cidr-merger) | | cidrchk | [ubi:mhausenblas/cidrchk](https://github.com/mhausenblas/cidrchk) [asdf:ORCID/asdf-cidrchk](https://github.com/ORCID/asdf-cidrchk) | | cilium-cli | [ubi:cilium/cilium-cli](https://github.com/cilium/cilium-cli) [asdf:carnei-ro/asdf-cilium-cli](https://github.com/carnei-ro/asdf-cilium-cli) | | cilium-hubble | [ubi:cilium/hubble](https://github.com/cilium/hubble) [asdf:NitriKx/asdf-cilium-hubble](https://github.com/NitriKx/asdf-cilium-hubble) | | circleci | [ubi:CircleCI-Public/circleci-cli](https://github.com/CircleCI-Public/circleci-cli) [asdf:ucpr/asdf-circleci-cli](https://github.com/ucpr/asdf-circleci-cli) | -| clang | [asdf:higebu/asdf-llvm](https://github.com/higebu/asdf-llvm) [vfox:jdx/vfox-clang](https://github.com/jdx/vfox-clang) | -| clang-format | [asdf:higebu/asdf-llvm](https://github.com/higebu/asdf-llvm) | -| clangd | [asdf:higebu/asdf-llvm](https://github.com/higebu/asdf-llvm) | +| clang | [asdf:mise-plugins/mise-llvm](https://github.com/mise-plugins/mise-llvm) [vfox:mise-plugins/vfox-clang](https://github.com/mise-plugins/vfox-clang) | +| clang-format | [asdf:mise-plugins/mise-llvm](https://github.com/mise-plugins/mise-llvm) | +| clangd | [asdf:mise-plugins/mise-llvm](https://github.com/mise-plugins/mise-llvm) | | clarinet | [ubi:hirosystems/clarinet](https://github.com/hirosystems/clarinet) [asdf:alexgo-io/asdf-clarinet](https://github.com/alexgo-io/asdf-clarinet) | -| clickhouse | [asdf:tinybirdco/asdf-clickhouse](https://github.com/tinybirdco/asdf-clickhouse) | +| clickhouse | [asdf:mise-plugins/mise-clickhouse](https://github.com/mise-plugins/mise-clickhouse) | | clj-kondo | [ubi:clj-kondo/clj-kondo](https://github.com/clj-kondo/clj-kondo) [asdf:rynkowsg/asdf-clj-kondo](https://github.com/rynkowsg/asdf-clj-kondo) | | cljstyle | [ubi:greglook/cljstyle](https://github.com/greglook/cljstyle) [asdf:abogoyavlensky/asdf-cljstyle](https://github.com/abogoyavlensky/asdf-cljstyle) | -| clojure | [asdf:asdf-community/asdf-clojure](https://github.com/asdf-community/asdf-clojure) | +| clojure | [asdf:mise-plugins/mise-clojure](https://github.com/mise-plugins/mise-clojure) | | cloud-sql-proxy | [aqua:GoogleCloudPlatform/cloud-sql-proxy](https://github.com/GoogleCloudPlatform/cloud-sql-proxy) [asdf:pbr0ck3r/asdf-cloud-sql-proxy](https://github.com/pbr0ck3r/asdf-cloud-sql-proxy) | | cloudflared | [aqua:cloudflare/cloudflared](https://github.com/cloudflare/cloudflared) [asdf:threkk/asdf-cloudflared](https://github.com/threkk/asdf-cloudflared) | | clusterawsadm | [ubi:kubernetes-sigs/cluster-api-provider-aws](https://github.com/kubernetes-sigs/cluster-api-provider-aws) [asdf:kahun/asdf-clusterawsadm](https://github.com/kahun/asdf-clusterawsadm) | | clusterctl | [aqua:kubernetes-sigs/cluster-api](https://github.com/kubernetes-sigs/cluster-api) [asdf:pfnet-research/asdf-clusterctl](https://github.com/pfnet-research/asdf-clusterctl) | -| cmake | [asdf:asdf-community/asdf-cmake](https://github.com/asdf-community/asdf-cmake) [vfox:version-fox/vfox-cmake](https://github.com/version-fox/vfox-cmake) | +| cmake | [asdf:mise-plugins/mise-cmake](https://github.com/mise-plugins/mise-cmake) [vfox:mise-plugins/vfox-cmake](https://github.com/mise-plugins/vfox-cmake) | | cmctl | [aqua:cert-manager/cmctl](https://github.com/cert-manager/cmctl) [asdf:asdf-community/asdf-cmctl](https://github.com/asdf-community/asdf-cmctl) | | cockroach | [aqua:cockroachdb/cockroach](https://github.com/cockroachdb/cockroach) [asdf:salasrod/asdf-cockroach](https://github.com/salasrod/asdf-cockroach) | -| cocoapods | [asdf:ronnnnn/asdf-cocoapods](https://github.com/ronnnnn/asdf-cocoapods) | +| cocoapods | [asdf:mise-plugins/mise-cocoapods](https://github.com/mise-plugins/mise-cocoapods) | | codefresh | [ubi:codefresh-io/cli](https://github.com/codefresh-io/cli) [asdf:gurukulkarni/asdf-codefresh](https://github.com/gurukulkarni/asdf-codefresh) | -| codeql | [asdf:bored-engineer/asdf-codeql](https://github.com/bored-engineer/asdf-codeql) | +| codeql | [asdf:mise-plugins/mise-codeql](https://github.com/mise-plugins/mise-codeql) | | coder | [aqua:coder/coder](https://github.com/coder/coder) [asdf:mise-plugins/asdf-coder](https://github.com/mise-plugins/asdf-coder) | | colima | [ubi:abiosoft/colima](https://github.com/abiosoft/colima) [asdf:CrouchingMuppet/asdf-colima](https://github.com/CrouchingMuppet/asdf-colima) | | committed | [aqua:crate-ci/committed](https://github.com/crate-ci/committed) | -| conan | [pipx:conan](https://pypi.org/project/conan) [asdf:amrox/asdf-pyapp](https://github.com/amrox/asdf-pyapp) | +| conan | [pipx:conan](https://pypi.org/project/conan) [asdf:mise-plugins/mise-pyapp](https://github.com/mise-plugins/mise-pyapp) | | concourse | [aqua:concourse/concourse/concourse](https://github.com/concourse/concourse/concourse) [asdf:mattysweeps/asdf-concourse](https://github.com/mattysweeps/asdf-concourse) | | conduit | [ubi:ConduitIO/conduit](https://github.com/ConduitIO/conduit) [asdf:gmcabrita/asdf-conduit](https://github.com/gmcabrita/asdf-conduit) | | conform | [aqua:siderolabs/conform](https://github.com/siderolabs/conform) [asdf:skyzyx/asdf-conform](https://github.com/skyzyx/asdf-conform) | | conftest | [aqua:open-policy-agent/conftest](https://github.com/open-policy-agent/conftest) [asdf:looztra/asdf-conftest](https://github.com/looztra/asdf-conftest) | -| consul | [aqua:hashicorp/consul](https://github.com/hashicorp/consul) [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | +| consul | [aqua:hashicorp/consul](https://github.com/hashicorp/consul) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | | container-structure-test | [aqua:GoogleContainerTools/container-structure-test](https://github.com/GoogleContainerTools/container-structure-test) [asdf:FeryET/asdf-container-structure-test](https://github.com/FeryET/asdf-container-structure-test) | | cookiecutter | [pipx:cookiecutter](https://pypi.org/project/cookiecutter) [asdf:shawon-crosen/asdf-cookiecutter](https://github.com/shawon-crosen/asdf-cookiecutter) | | copper | [ubi:cloud66-oss/copper](https://github.com/cloud66-oss/copper) [asdf:vladlosev/asdf-copper](https://github.com/vladlosev/asdf-copper) | -| coq | [asdf:gingerhot/asdf-coq](https://github.com/gingerhot/asdf-coq) | +| coq | [asdf:mise-plugins/mise-coq](https://github.com/mise-plugins/mise-coq) | | coredns | [ubi:coredns/coredns](https://github.com/coredns/coredns) [asdf:s3than/asdf-coredns](https://github.com/s3than/asdf-coredns) | | cosign | [aqua:sigstore/cosign](https://github.com/sigstore/cosign) [asdf:https://gitlab.com/wt0f/asdf-cosign](https://gitlab.com/wt0f/asdf-cosign) | | coursier | [ubi:coursier/coursier](https://github.com/coursier/coursier) [asdf:jiahuili430/asdf-coursier](https://github.com/jiahuili430/asdf-coursier) | | cowsay | [npm:cowsay](https://www.npmjs.com/package/cowsay) | | crane | [aqua:google/go-containerregistry](https://github.com/google/go-containerregistry) [ubi:google/go-containerregistry](https://github.com/google/go-containerregistry) [asdf:dmpe/asdf-crane](https://github.com/dmpe/asdf-crane) | -| crc | [asdf:sqtran/asdf-crc](https://github.com/sqtran/asdf-crc) | -| credhub | [aqua:cloudfoundry/credhub-cli](https://github.com/cloudfoundry/credhub-cli) [asdf:vmware-tanzu/tanzu-plug-in-for-asdf](https://github.com/vmware-tanzu/tanzu-plug-in-for-asdf) | +| crc | [asdf:mise-plugins/mise-crc](https://github.com/mise-plugins/mise-crc) | +| credhub | [aqua:cloudfoundry/credhub-cli](https://github.com/cloudfoundry/credhub-cli) [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | | crictl | [aqua:kubernetes-sigs/cri-tools/crictl](https://github.com/kubernetes-sigs/cri-tools/crictl) [asdf:FairwindsOps/asdf-crictl](https://github.com/FairwindsOps/asdf-crictl) | | crossplane | [aqua:crossplane/crossplane](https://github.com/crossplane/crossplane) [asdf:joke/asdf-crossplane-cli](https://github.com/joke/asdf-crossplane-cli) | -| crystal | [asdf:asdf-community/asdf-crystal](https://github.com/asdf-community/asdf-crystal) [vfox:yanecc/vfox-crystal](https://github.com/yanecc/vfox-crystal) | +| crystal | [asdf:mise-plugins/mise-crystal](https://github.com/mise-plugins/mise-crystal) [vfox:mise-plugins/vfox-crystal](https://github.com/mise-plugins/vfox-crystal) | | ctlptl | [aqua:tilt-dev/ctlptl](https://github.com/tilt-dev/ctlptl) [asdf:ezcater/asdf-ctlptl](https://github.com/ezcater/asdf-ctlptl) | | ctop | [ubi:bcicen/ctop](https://github.com/bcicen/ctop) [asdf:NeoHsu/asdf-ctop](https://github.com/NeoHsu/asdf-ctop) | | cue | [aqua:cue-lang/cue](https://github.com/cue-lang/cue) [asdf:asdf-community/asdf-cue](https://github.com/asdf-community/asdf-cue) | | cyclonedx | [aqua:CycloneDX/cyclonedx-cli](https://github.com/CycloneDX/cyclonedx-cli) [asdf:xeedio/asdf-cyclonedx](https://github.com/xeedio/asdf-cyclonedx) | | dagger | [aqua:dagger/dagger](https://github.com/dagger/dagger) [asdf:virtualstaticvoid/asdf-dagger](https://github.com/virtualstaticvoid/asdf-dagger) | -| danger-js | [asdf:MontakOleg/asdf-danger-js](https://github.com/MontakOleg/asdf-danger-js) | +| danger-js | [asdf:mise-plugins/mise-danger-js](https://github.com/mise-plugins/mise-danger-js) | | danger-swift | [spm:danger/swift](https://github.com/danger/swift) | | dapr | [aqua:dapr/cli](https://github.com/dapr/cli) [asdf:asdf-community/asdf-dapr-cli](https://github.com/asdf-community/asdf-dapr-cli) | -| dart | [asdf:PatOConnor43/asdf-dart](https://github.com/PatOConnor43/asdf-dart) [vfox:version-fox/vfox-dart](https://github.com/version-fox/vfox-dart) | +| dart | [asdf:mise-plugins/mise-dart](https://github.com/mise-plugins/mise-dart) [vfox:mise-plugins/vfox-dart](https://github.com/mise-plugins/vfox-dart) | | dasel | [aqua:TomWright/dasel](https://github.com/TomWright/dasel) [asdf:asdf-community/asdf-dasel](https://github.com/asdf-community/asdf-dasel) | | databricks-cli | [ubi:databricks/cli](https://github.com/databricks/cli) | | datree | [aqua:datreeio/datree](https://github.com/datreeio/datree) [asdf:lukeab/asdf-datree](https://github.com/lukeab/asdf-datree) | -| daytona | [asdf:CrouchingMuppet/asdf-daytona](https://github.com/CrouchingMuppet/asdf-daytona) | +| daytona | [asdf:mise-plugins/mise-daytona](https://github.com/mise-plugins/mise-daytona) | | dbmate | [aqua:amacneil/dbmate](https://github.com/amacneil/dbmate) [asdf:juusujanar/asdf-dbmate](https://github.com/juusujanar/asdf-dbmate) | | deck | [aqua:Kong/deck](https://github.com/Kong/deck) [asdf:nutellinoit/asdf-deck](https://github.com/nutellinoit/asdf-deck) | | delta | [ubi:dandavison/delta](https://github.com/dandavison/delta) [asdf:andweeb/asdf-delta](https://github.com/andweeb/asdf-delta) | @@ -190,25 +190,25 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | depot | [ubi:depot/cli](https://github.com/depot/cli) [asdf:depot/asdf-depot](https://github.com/depot/asdf-depot) | | desk | [aqua:jamesob/desk](https://github.com/jamesob/desk) [asdf:endorama/asdf-desk](https://github.com/endorama/asdf-desk) | | devspace | [aqua:devspace-sh/devspace](https://github.com/devspace-sh/devspace) [asdf:NeoHsu/asdf-devspace](https://github.com/NeoHsu/asdf-devspace) | -| dhall | [asdf:aaaaninja/asdf-dhall](https://github.com/aaaaninja/asdf-dhall) | +| dhall | [asdf:mise-plugins/mise-dhall](https://github.com/mise-plugins/mise-dhall) | | difftastic | [ubi:wilfred/difftastic](https://github.com/wilfred/difftastic) [asdf:volf52/asdf-difftastic](https://github.com/volf52/asdf-difftastic) | -| digdag | [asdf:jtakakura/asdf-digdag](https://github.com/jtakakura/asdf-digdag) | +| digdag | [asdf:mise-plugins/mise-digdag](https://github.com/mise-plugins/mise-digdag) | | direnv | [aqua:direnv/direnv](https://github.com/direnv/direnv) [asdf:asdf-community/asdf-direnv](https://github.com/asdf-community/asdf-direnv) | | dive | [ubi:wagoodman/dive](https://github.com/wagoodman/dive) [asdf:looztra/asdf-dive](https://github.com/looztra/asdf-dive) | | djinni | [ubi:cross-language-cpp/djinni-generator](https://github.com/cross-language-cpp/djinni-generator) [asdf:cross-language-cpp/asdf-djinni](https://github.com/cross-language-cpp/asdf-djinni) | -| dmd | [asdf:sylph01/asdf-dmd](https://github.com/sylph01/asdf-dmd) | +| dmd | [asdf:mise-plugins/mise-dmd](https://github.com/mise-plugins/mise-dmd) | | docker-compose | [aqua:docker/compose](https://github.com/docker/compose) | | docker-slim | [ubi:slimtoolkit/slim](https://github.com/slimtoolkit/slim) [asdf:xataz/asdf-docker-slim](https://github.com/xataz/asdf-docker-slim) | | dockle | [aqua:goodwithtech/dockle](https://github.com/goodwithtech/dockle) [asdf:mathew-fleisch/asdf-dockle](https://github.com/mathew-fleisch/asdf-dockle) | | doctl | [ubi:digitalocean/doctl](https://github.com/digitalocean/doctl) [asdf:maristgeek/asdf-doctl](https://github.com/maristgeek/asdf-doctl) | -| doctoolchain | [asdf:joschi/asdf-doctoolchain](https://github.com/joschi/asdf-doctoolchain) | +| doctoolchain | [asdf:mise-plugins/mise-doctoolchain](https://github.com/mise-plugins/mise-doctoolchain) | | docuum | [ubi:stepchowfun/docuum](https://github.com/stepchowfun/docuum) [cargo:docuum](https://crates.io/crates/docuum) [asdf:bradym/asdf-docuum](https://github.com/bradym/asdf-docuum) | -| dome | [asdf:jtakakura/asdf-dome](https://github.com/jtakakura/asdf-dome) | +| dome | [asdf:mise-plugins/mise-dome](https://github.com/mise-plugins/mise-dome) | | doppler | [ubi:DopplerHQ/cli](https://github.com/DopplerHQ/cli) [asdf:takutakahashi/asdf-doppler](https://github.com/takutakahashi/asdf-doppler) | | dotenv-linter | [ubi:dotenv-linter/dotenv-linter](https://github.com/dotenv-linter/dotenv-linter) [asdf:wesleimp/asdf-dotenv-linter](https://github.com/wesleimp/asdf-dotenv-linter) | -| dotnet | [asdf:hensou/asdf-dotnet](https://github.com/hensou/asdf-dotnet) [vfox:version-fox/vfox-dotnet](https://github.com/version-fox/vfox-dotnet) | -| dotnet-core | [asdf:emersonsoares/asdf-dotnet-core](https://github.com/emersonsoares/asdf-dotnet-core) | -| dotty | [asdf:asdf-community/asdf-dotty](https://github.com/asdf-community/asdf-dotty) | +| dotnet | [asdf:mise-plugins/mise-dotnet](https://github.com/mise-plugins/mise-dotnet) [vfox:mise-plugins/vfox-dotnet](https://github.com/mise-plugins/vfox-dotnet) | +| dotnet-core | [asdf:mise-plugins/mise-dotnet-core](https://github.com/mise-plugins/mise-dotnet-core) | +| dotty | [asdf:mise-plugins/mise-dotty](https://github.com/mise-plugins/mise-dotty) | | dprint | [aqua:dprint/dprint](https://github.com/dprint/dprint) [asdf:asdf-community/asdf-dprint](https://github.com/asdf-community/asdf-dprint) | | draft | [aqua:Azure/draft](https://github.com/Azure/draft) [asdf:kristoflemmens/asdf-draft](https://github.com/kristoflemmens/asdf-draft) | | driftctl | [aqua:snyk/driftctl](https://github.com/snyk/driftctl) [asdf:nlamirault/asdf-driftctl](https://github.com/nlamirault/asdf-driftctl) | @@ -217,7 +217,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | dtm | [ubi:devstream-io/devstream](https://github.com/devstream-io/devstream) [asdf:zhenyuanlau/asdf-dtm](https://github.com/zhenyuanlau/asdf-dtm) | | duf | [aqua:muesli/duf](https://github.com/muesli/duf) [asdf:NeoHsu/asdf-duf](https://github.com/NeoHsu/asdf-duf) | | dust | [ubi:bootandy/dust](https://github.com/bootandy/dust) [asdf:looztra/asdf-dust](https://github.com/looztra/asdf-dust) | -| dvc | [asdf:fwfurtado/asdf-dvc](https://github.com/fwfurtado/asdf-dvc) | +| dvc | [asdf:mise-plugins/mise-dvc](https://github.com/mise-plugins/mise-dvc) | | dyff | [aqua:homeport/dyff](https://github.com/homeport/dyff) [asdf:https://gitlab.com/wt0f/asdf-dyff](https://gitlab.com/wt0f/asdf-dyff) | | dynatrace-monaco | [ubi:Dynatrace/dynatrace-configuration-as-code](https://github.com/Dynatrace/dynatrace-configuration-as-code) [asdf:nsaputro/asdf-monaco](https://github.com/nsaputro/asdf-monaco) | | earthly | [aqua:earthly/earthly](https://github.com/earthly/earthly) [asdf:YR-ZR0/asdf-earthly](https://github.com/YR-ZR0/asdf-earthly) | @@ -225,22 +225,22 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | editorconfig-checker | [aqua:editorconfig-checker/editorconfig-checker](https://github.com/editorconfig-checker/editorconfig-checker) [asdf:gabitchov/asdf-editorconfig-checker](https://github.com/gabitchov/asdf-editorconfig-checker) | | ejson | [aqua:Shopify/ejson](https://github.com/Shopify/ejson) [asdf:cipherstash/asdf-ejson](https://github.com/cipherstash/asdf-ejson) | | eksctl | [aqua:eksctl-io/eksctl](https://github.com/eksctl-io/eksctl) [asdf:elementalvoid/asdf-eksctl](https://github.com/elementalvoid/asdf-eksctl) | -| elasticsearch | [asdf:asdf-community/asdf-elasticsearch](https://github.com/asdf-community/asdf-elasticsearch) | +| elasticsearch | [asdf:mise-plugins/mise-elasticsearch](https://github.com/mise-plugins/mise-elasticsearch) | | elixir | [core:elixir](https://mise.jdx.dev/lang/elixir.html) | -| elixir-ls | [asdf:juantascon/asdf-elixir-ls](https://github.com/juantascon/asdf-elixir-ls) | +| elixir-ls | [asdf:mise-plugins/mise-elixir-ls](https://github.com/mise-plugins/mise-elixir-ls) | | elm | [ubi:elm/compiler](https://github.com/elm/compiler) [asdf:asdf-community/asdf-elm](https://github.com/asdf-community/asdf-elm) | -| emsdk | [asdf:RobLoach/asdf-emsdk](https://github.com/RobLoach/asdf-emsdk) | +| emsdk | [asdf:mise-plugins/mise-emsdk](https://github.com/mise-plugins/mise-emsdk) | | envcli | [ubi:EnvCLI/EnvCLI](https://github.com/EnvCLI/EnvCLI) [asdf:zekker6/asdf-envcli](https://github.com/zekker6/asdf-envcli) | | envsubst | [aqua:a8m/envsubst](https://github.com/a8m/envsubst) [asdf:dex4er/asdf-envsubst](https://github.com/dex4er/asdf-envsubst) | -| ephemeral-postgres | [asdf:smashedtoatoms/asdf-ephemeral-postgres](https://github.com/smashedtoatoms/asdf-ephemeral-postgres) | +| ephemeral-postgres | [asdf:mise-plugins/mise-ephemeral-postgres](https://github.com/mise-plugins/mise-ephemeral-postgres) | | erlang | [core:erlang](https://mise.jdx.dev/lang/erlang.html) | | esc | [ubi:pulumi/esc](https://github.com/pulumi/esc) [asdf:fxsalazar/asdf-esc](https://github.com/fxsalazar/asdf-esc) | -| esy | [asdf:asdf-community/asdf-esy](https://github.com/asdf-community/asdf-esy) | -| etcd | [aqua:etcd-io/etcd](https://github.com/etcd-io/etcd) [asdf:particledecay/asdf-etcd](https://github.com/particledecay/asdf-etcd) [vfox:version-fox/vfox-etcd](https://github.com/version-fox/vfox-etcd) | +| esy | [asdf:mise-plugins/mise-esy](https://github.com/mise-plugins/mise-esy) | +| etcd | [aqua:etcd-io/etcd](https://github.com/etcd-io/etcd) [asdf:particledecay/asdf-etcd](https://github.com/particledecay/asdf-etcd) [vfox:mise-plugins/vfox-etcd](https://github.com/mise-plugins/vfox-etcd) | | evans | [aqua:ktr0731/evans](https://github.com/ktr0731/evans) [asdf:goki90210/asdf-evans](https://github.com/goki90210/asdf-evans) | -| eza | [asdf:lwiechec/asdf-eza](https://github.com/lwiechec/asdf-eza) | +| eza | [asdf:mise-plugins/mise-eza](https://github.com/mise-plugins/mise-eza) | | fd | [aqua:sharkdp/fd](https://github.com/sharkdp/fd) [ubi:sharkdp/fd](https://github.com/sharkdp/fd) [asdf:https://gitlab.com/wt0f/asdf-fd](https://gitlab.com/wt0f/asdf-fd) | -| ffmpeg | [asdf:acj/asdf-ffmpeg](https://github.com/acj/asdf-ffmpeg) | +| ffmpeg | [asdf:mise-plugins/mise-ffmpeg](https://github.com/mise-plugins/mise-ffmpeg) | | figma-export | [ubi:RedMadRobot/figma-export](https://github.com/RedMadRobot/figma-export) [asdf:younke/asdf-figma-export](https://github.com/younke/asdf-figma-export) | | fillin | [aqua:itchyny/fillin](https://github.com/itchyny/fillin) [asdf:ouest/asdf-fillin](https://github.com/ouest/asdf-fillin) | | firebase | [aqua:firebase/firebase-tools](https://github.com/firebase/firebase-tools) [asdf:jthegedus/asdf-firebase](https://github.com/jthegedus/asdf-firebase) | @@ -248,29 +248,29 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | flamingo | [ubi:flux-subsystem-argo/flamingo](https://github.com/flux-subsystem-argo/flamingo) [asdf:log2/asdf-flamingo](https://github.com/log2/asdf-flamingo) | | flarectl | [ubi:cloudflare/cloudflare-go](https://github.com/cloudflare/cloudflare-go) [asdf:mise-plugins/asdf-flarectl](https://github.com/mise-plugins/asdf-flarectl) | | flatc | [ubi:google/flatbuffers](https://github.com/google/flatbuffers) [asdf:TheOpenDictionary/asdf-flatc](https://github.com/TheOpenDictionary/asdf-flatc) | -| flutter | [asdf:oae/asdf-flutter](https://github.com/oae/asdf-flutter) [vfox:version-fox/vfox-flutter](https://github.com/version-fox/vfox-flutter) | +| flutter | [asdf:mise-plugins/mise-flutter](https://github.com/mise-plugins/mise-flutter) [vfox:mise-plugins/vfox-flutter](https://github.com/mise-plugins/vfox-flutter) | | fluttergen | [ubi:FlutterGen/flutter_gen](https://github.com/FlutterGen/flutter_gen) [asdf:FlutterGen/asdf-fluttergen](https://github.com/FlutterGen/asdf-fluttergen) | | flux2 | [aqua:fluxcd/flux2](https://github.com/fluxcd/flux2) [asdf:tablexi/asdf-flux2](https://github.com/tablexi/asdf-flux2) | -| fly | [aqua:concourse/concourse/fly](https://github.com/concourse/concourse/fly) [asdf:vmware-tanzu/tanzu-plug-in-for-asdf](https://github.com/vmware-tanzu/tanzu-plug-in-for-asdf) | +| fly | [aqua:concourse/concourse/fly](https://github.com/concourse/concourse/fly) [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | | flyctl | [aqua:superfly/flyctl](https://github.com/superfly/flyctl) [ubi:superfly/flyctl](https://github.com/superfly/flyctl) [asdf:chessmango/asdf-flyctl](https://github.com/chessmango/asdf-flyctl) | -| flyway | [asdf:junminahn/asdf-flyway](https://github.com/junminahn/asdf-flyway) | -| func-e | [asdf:carnei-ro/asdf-func-e](https://github.com/carnei-ro/asdf-func-e) | +| flyway | [asdf:mise-plugins/mise-flyway](https://github.com/mise-plugins/mise-flyway) | +| func-e | [asdf:mise-plugins/mise-func-e](https://github.com/mise-plugins/mise-func-e) | | furyctl | [ubi:sighupio/furyctl](https://github.com/sighupio/furyctl) [asdf:sighupio/asdf-furyctl](https://github.com/sighupio/asdf-furyctl) | | fx | [aqua:antonmedv/fx](https://github.com/antonmedv/fx) [asdf:https://gitlab.com/wt0f/asdf-fx](https://gitlab.com/wt0f/asdf-fx) | | fzf | [aqua:junegunn/fzf](https://github.com/junegunn/fzf) [ubi:junegunn/fzf](https://github.com/junegunn/fzf) [asdf:kompiro/asdf-fzf](https://github.com/kompiro/asdf-fzf) | -| gallery-dl | [asdf:iul1an/asdf-gallery-dl](https://github.com/iul1an/asdf-gallery-dl) | +| gallery-dl | [asdf:mise-plugins/mise-gallery-dl](https://github.com/mise-plugins/mise-gallery-dl) | | gam | [ubi:GAM-team/GAM](https://github.com/GAM-team/GAM) [asdf:offbyone/asdf-gam](https://github.com/offbyone/asdf-gam) | | gator | [ubi:open-policy-agent/gatekeeper](https://github.com/open-policy-agent/gatekeeper) [asdf:MxNxPx/asdf-gator](https://github.com/MxNxPx/asdf-gator) | -| gauche | [asdf:sakuro/asdf-gauche](https://github.com/sakuro/asdf-gauche) | -| gcc-arm-none-eabi | [asdf:dlech/asdf-gcc-arm-none-eabi](https://github.com/dlech/asdf-gcc-arm-none-eabi) | -| gcloud | [asdf:jthegedus/asdf-gcloud](https://github.com/jthegedus/asdf-gcloud) | -| getenvoy | [asdf:asdf-community/asdf-getenvoy](https://github.com/asdf-community/asdf-getenvoy) | -| ghc | [asdf:sestrella/asdf-ghcup](https://github.com/sestrella/asdf-ghcup) | -| ghcup | [ubi:haskell/ghcup-hs](https://github.com/haskell/ghcup-hs) [asdf:sestrella/asdf-ghcup](https://github.com/sestrella/asdf-ghcup) | -| ghidra | [asdf:Honeypot95/asdf-ghidra](https://github.com/Honeypot95/asdf-ghidra) | +| gauche | [asdf:mise-plugins/mise-gauche](https://github.com/mise-plugins/mise-gauche) | +| gcc-arm-none-eabi | [asdf:mise-plugins/mise-gcc-arm-none-eabi](https://github.com/mise-plugins/mise-gcc-arm-none-eabi) | +| gcloud | [asdf:mise-plugins/mise-gcloud](https://github.com/mise-plugins/mise-gcloud) | +| getenvoy | [asdf:mise-plugins/mise-getenvoy](https://github.com/mise-plugins/mise-getenvoy) | +| ghc | [asdf:mise-plugins/mise-ghcup](https://github.com/mise-plugins/mise-ghcup) | +| ghcup | [ubi:haskell/ghcup-hs](https://github.com/haskell/ghcup-hs) [asdf:mise-plugins/mise-ghcup](https://github.com/mise-plugins/mise-ghcup) | +| ghidra | [asdf:mise-plugins/mise-ghidra](https://github.com/mise-plugins/mise-ghidra) | | ghorg | [aqua:gabrie30/ghorg](https://github.com/gabrie30/ghorg) [asdf:gbloquel/asdf-ghorg](https://github.com/gbloquel/asdf-ghorg) | | ghq | [aqua:x-motemen/ghq](https://github.com/x-motemen/ghq) [asdf:kajisha/asdf-ghq](https://github.com/kajisha/asdf-ghq) | -| ginkgo | [asdf:jimmidyson/asdf-ginkgo](https://github.com/jimmidyson/asdf-ginkgo) | +| ginkgo | [asdf:mise-plugins/mise-ginkgo](https://github.com/mise-plugins/mise-ginkgo) | | git-chglog | [aqua:git-chglog/git-chglog](https://github.com/git-chglog/git-chglog) [asdf:GoodwayGroup/asdf-git-chglog](https://github.com/GoodwayGroup/asdf-git-chglog) | | git-cliff | [aqua:orhun/git-cliff](https://github.com/orhun/git-cliff) [asdf:jylenhof/asdf-git-cliff](https://github.com/jylenhof/asdf-git-cliff) | | gitconfig | [ubi:0ghny/gitconfig](https://github.com/0ghny/gitconfig) [asdf:0ghny/asdf-gitconfig](https://github.com/0ghny/asdf-gitconfig) | @@ -280,20 +280,20 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | gitsign | [aqua:sigstore/gitsign](https://github.com/sigstore/gitsign) [asdf:spencergilbert/asdf-gitsign](https://github.com/spencergilbert/asdf-gitsign) | | gitu | [ubi:altsem/gitu](https://github.com/altsem/gitu) [cargo:gitu](https://crates.io/crates/gitu) | | gitui | [aqua:extrawurst/gitui](https://github.com/extrawurst/gitui) [asdf:looztra/asdf-gitui](https://github.com/looztra/asdf-gitui) | -| glab | [asdf:particledecay/asdf-glab](https://github.com/particledecay/asdf-glab) | +| glab | [asdf:mise-plugins/mise-glab](https://github.com/mise-plugins/mise-glab) | | gleam | [aqua:gleam-lang/gleam](https://github.com/gleam-lang/gleam) [asdf:asdf-community/asdf-gleam](https://github.com/asdf-community/asdf-gleam) | | glen | [ubi:lingrino/glen](https://github.com/lingrino/glen) [asdf:bradym/asdf-glen](https://github.com/bradym/asdf-glen) | | glooctl | [ubi:solo-io/gloo](https://github.com/solo-io/gloo) [asdf:halilkaya/asdf-glooctl](https://github.com/halilkaya/asdf-glooctl) | | glow | [aqua:charmbracelet/glow](https://github.com/charmbracelet/glow) [asdf:mise-plugins/asdf-glow](https://github.com/mise-plugins/asdf-glow) | | go | [core:go](https://mise.jdx.dev/lang/go.html) | | go-containerregistry | [aqua:google/go-containerregistry](https://github.com/google/go-containerregistry) [asdf:dex4er/asdf-go-containerregistry](https://github.com/dex4er/asdf-go-containerregistry) | -| go-getter | [asdf:ryodocx/asdf-go-getter](https://github.com/ryodocx/asdf-go-getter) | +| go-getter | [asdf:mise-plugins/mise-go-getter](https://github.com/mise-plugins/mise-go-getter) | | go-jira | [aqua:go-jira/jira](https://github.com/go-jira/jira) [asdf:dguihal/asdf-go-jira](https://github.com/dguihal/asdf-go-jira) | | go-jsonnet | [aqua:google/go-jsonnet](https://github.com/google/go-jsonnet) [asdf:https://gitlab.com/craigfurman/asdf-go-jsonnet](https://gitlab.com/craigfurman/asdf-go-jsonnet) | | go-junit-report | [ubi:jstemmer/go-junit-report](https://github.com/jstemmer/go-junit-report) [asdf:jwillker/asdf-go-junit-report](https://github.com/jwillker/asdf-go-junit-report) | -| go-sdk | [asdf:yacchi/asdf-go-sdk](https://github.com/yacchi/asdf-go-sdk) | +| go-sdk | [asdf:mise-plugins/mise-go-sdk](https://github.com/mise-plugins/mise-go-sdk) | | go-swagger | [aqua:go-swagger/go-swagger](https://github.com/go-swagger/go-swagger) [asdf:jfreeland/asdf-go-swagger](https://github.com/jfreeland/asdf-go-swagger) | -| goconvey | [asdf:therounds-contrib/asdf-goconvey](https://github.com/therounds-contrib/asdf-goconvey) | +| goconvey | [asdf:mise-plugins/mise-goconvey](https://github.com/mise-plugins/mise-goconvey) | | gocryptfs | [aqua:rfjakob/gocryptfs](https://github.com/rfjakob/gocryptfs) [ubi:rfjakob/gocryptfs](https://github.com/rfjakob/gocryptfs) | | gofumpt | [ubi:mvdan/gofumpt](https://github.com/mvdan/gofumpt) [asdf:looztra/asdf-gofumpt](https://github.com/looztra/asdf-gofumpt) | | gojq | [aqua:itchyny/gojq](https://github.com/itchyny/gojq) [asdf:jimmidyson/asdf-gojq](https://github.com/jimmidyson/asdf-gojq) | @@ -306,42 +306,42 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | goreleaser | [aqua:goreleaser/goreleaser](https://github.com/goreleaser/goreleaser) [ubi:goreleaser/goreleaser](https://github.com/goreleaser/goreleaser) [asdf:kforsthoevel/asdf-goreleaser](https://github.com/kforsthoevel/asdf-goreleaser) | | goss | [aqua:goss-org/goss](https://github.com/goss-org/goss) [asdf:raimon49/asdf-goss](https://github.com/raimon49/asdf-goss) | | gotestsum | [aqua:gotestyourself/gotestsum](https://github.com/gotestyourself/gotestsum) [asdf:pmalek/mise-gotestsum](https://github.com/pmalek/mise-gotestsum) | -| graalvm | [asdf:asdf-community/asdf-graalvm](https://github.com/asdf-community/asdf-graalvm) | -| gradle | [aqua:gradle/gradle](https://github.com/gradle/gradle) [vfox:version-fox/vfox-gradle](https://github.com/version-fox/vfox-gradle) | -| gradle-profiler | [asdf:joschi/asdf-gradle-profiler](https://github.com/joschi/asdf-gradle-profiler) | -| grails | [asdf:weibemoura/asdf-grails](https://github.com/weibemoura/asdf-grails) | -| grain | [asdf:cometkim/asdf-grain](https://github.com/cometkim/asdf-grain) | +| graalvm | [asdf:mise-plugins/mise-graalvm](https://github.com/mise-plugins/mise-graalvm) | +| gradle | [aqua:gradle/gradle](https://github.com/gradle/gradle) [vfox:mise-plugins/vfox-gradle](https://github.com/mise-plugins/vfox-gradle) | +| gradle-profiler | [asdf:mise-plugins/mise-gradle-profiler](https://github.com/mise-plugins/mise-gradle-profiler) | +| grails | [asdf:mise-plugins/mise-grails](https://github.com/mise-plugins/mise-grails) | +| grain | [asdf:mise-plugins/mise-grain](https://github.com/mise-plugins/mise-grain) | | granted | [aqua:common-fate/granted](https://github.com/common-fate/granted) [asdf:dex4er/asdf-granted](https://github.com/dex4er/asdf-granted) | | grex | [aqua:pemistahl/grex](https://github.com/pemistahl/grex) [asdf:ouest/asdf-grex](https://github.com/ouest/asdf-grex) | -| groovy | [asdf:weibemoura/asdf-groovy](https://github.com/weibemoura/asdf-groovy) [vfox:version-fox/vfox-groovy](https://github.com/version-fox/vfox-groovy) | +| groovy | [asdf:mise-plugins/mise-groovy](https://github.com/mise-plugins/mise-groovy) [vfox:mise-plugins/vfox-groovy](https://github.com/mise-plugins/vfox-groovy) | | grpc-health-probe | [aqua:grpc-ecosystem/grpc-health-probe](https://github.com/grpc-ecosystem/grpc-health-probe) [asdf:zufardhiyaulhaq/asdf-grpc-health-probe](https://github.com/zufardhiyaulhaq/asdf-grpc-health-probe) | | grpcurl | [aqua:fullstorydev/grpcurl](https://github.com/fullstorydev/grpcurl) [asdf:asdf-community/asdf-grpcurl](https://github.com/asdf-community/asdf-grpcurl) | | grype | [ubi:anchore/grype](https://github.com/anchore/grype) [asdf:poikilotherm/asdf-grype](https://github.com/poikilotherm/asdf-grype) | -| guile | [asdf:indiebrain/asdf-guile](https://github.com/indiebrain/asdf-guile) | +| guile | [asdf:mise-plugins/mise-guile](https://github.com/mise-plugins/mise-guile) | | gum | [aqua:charmbracelet/gum](https://github.com/charmbracelet/gum) [asdf:lwiechec/asdf-gum](https://github.com/lwiechec/asdf-gum) | | gwvault | [aqua:GoodwayGroup/gwvault](https://github.com/GoodwayGroup/gwvault) [asdf:GoodwayGroup/asdf-gwvault](https://github.com/GoodwayGroup/asdf-gwvault) | | hadolint | [ubi:hadolint/hadolint](https://github.com/hadolint/hadolint) [asdf:devlincashman/asdf-hadolint](https://github.com/devlincashman/asdf-hadolint) | -| hamler | [asdf:scudelletti/asdf-hamler](https://github.com/scudelletti/asdf-hamler) | +| hamler | [asdf:mise-plugins/mise-hamler](https://github.com/mise-plugins/mise-hamler) | | has | [aqua:kdabir/has](https://github.com/kdabir/has) [asdf:sylvainmetayer/asdf-has](https://github.com/sylvainmetayer/asdf-has) | -| haskell | [asdf:asdf-community/asdf-haskell](https://github.com/asdf-community/asdf-haskell) | +| haskell | [asdf:mise-plugins/mise-haskell](https://github.com/mise-plugins/mise-haskell) | | hasura-cli | [aqua:hasura/graphql-engine](https://github.com/hasura/graphql-engine) [asdf:gurukulkarni/asdf-hasura](https://github.com/gurukulkarni/asdf-hasura) | -| haxe | [asdf:asdf-community/asdf-haxe](https://github.com/asdf-community/asdf-haxe) | +| haxe | [asdf:mise-plugins/mise-haxe](https://github.com/mise-plugins/mise-haxe) | | hcl2json | [aqua:tmccombs/hcl2json](https://github.com/tmccombs/hcl2json) [asdf:dex4er/asdf-hcl2json](https://github.com/dex4er/asdf-hcl2json) | | hcloud | [aqua:hetznercloud/cli](https://github.com/hetznercloud/cli) [asdf:chessmango/asdf-hcloud](https://github.com/chessmango/asdf-hcloud) | | helm | [aqua:helm/helm](https://github.com/helm/helm) [asdf:Antiarchitect/asdf-helm](https://github.com/Antiarchitect/asdf-helm) | | helm-cr | [aqua:helm/chart-releaser](https://github.com/helm/chart-releaser) [asdf:Antiarchitect/asdf-helm-cr](https://github.com/Antiarchitect/asdf-helm-cr) | | helm-ct | [aqua:helm/chart-testing](https://github.com/helm/chart-testing) [asdf:tablexi/asdf-helm-ct](https://github.com/tablexi/asdf-helm-ct) | -| helm-diff | [asdf:dex4er/asdf-helm-diff](https://github.com/dex4er/asdf-helm-diff) | +| helm-diff | [asdf:mise-plugins/mise-helm-diff](https://github.com/mise-plugins/mise-helm-diff) | | helm-docs | [aqua:norwoodj/helm-docs](https://github.com/norwoodj/helm-docs) [asdf:sudermanjr/asdf-helm-docs](https://github.com/sudermanjr/asdf-helm-docs) | | helmfile | [ubi:helmfile/helmfile](https://github.com/helmfile/helmfile) [asdf:feniix/asdf-helmfile](https://github.com/feniix/asdf-helmfile) | | helmsman | [ubi:Praqma/helmsman](https://github.com/Praqma/helmsman) [asdf:luisdavim/asdf-helmsman](https://github.com/luisdavim/asdf-helmsman) | | heroku | [asdf:mise-plugins/mise-heroku-cli](https://github.com/mise-plugins/mise-heroku-cli) | -| hey | [asdf:raimon49/asdf-hey](https://github.com/raimon49/asdf-hey) | +| hey | [asdf:mise-plugins/mise-hey](https://github.com/mise-plugins/mise-hey) | | hishtory | [ubi:ddworken/hishtory](https://github.com/ddworken/hishtory) [asdf:asdf-community/asdf-hishtory](https://github.com/asdf-community/asdf-hishtory) | | hivemind | [ubi:DarthSim/hivemind](https://github.com/DarthSim/hivemind) [go:github.com/DarthSim/hivemind](https://pkg.go.dev/github.com/DarthSim/hivemind) | | hledger | [ubi:simonmichael/hledger](https://github.com/simonmichael/hledger) [asdf:airtonix/asdf-hledger](https://github.com/airtonix/asdf-hledger) | | hledger-flow | [ubi:apauley/hledger-flow](https://github.com/apauley/hledger-flow) [asdf:airtonix/asdf-hledger-flow](https://github.com/airtonix/asdf-hledger-flow) | -| hls | [asdf:sestrella/asdf-ghcup](https://github.com/sestrella/asdf-ghcup) | +| hls | [asdf:mise-plugins/mise-ghcup](https://github.com/mise-plugins/mise-ghcup) | | hostctl | [aqua:guumaster/hostctl](https://github.com/guumaster/hostctl) [asdf:svenluijten/asdf-hostctl](https://github.com/svenluijten/asdf-hostctl) | | httpie-go | [aqua:nojima/httpie-go](https://github.com/nojima/httpie-go) [asdf:abatilo/asdf-httpie-go](https://github.com/abatilo/asdf-httpie-go) | | hub | [aqua:mislav/hub](https://github.com/mislav/hub) [asdf:mise-plugins/asdf-hub](https://github.com/mise-plugins/asdf-hub) | @@ -353,31 +353,31 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | hyperfine | [aqua:sharkdp/hyperfine](https://github.com/sharkdp/hyperfine) [ubi:sharkdp/hyperfine](https://github.com/sharkdp/hyperfine) [asdf:volf52/asdf-hyperfine](https://github.com/volf52/asdf-hyperfine) | | iam-policy-json-to-terraform | [aqua:flosell/iam-policy-json-to-terraform](https://github.com/flosell/iam-policy-json-to-terraform) [asdf:carlduevel/asdf-iam-policy-json-to-terraform](https://github.com/carlduevel/asdf-iam-policy-json-to-terraform) | | iamlive | [aqua:iann0036/iamlive](https://github.com/iann0036/iamlive) [asdf:chessmango/asdf-iamlive](https://github.com/chessmango/asdf-iamlive) | -| ibmcloud | [asdf:triangletodd/asdf-ibmcloud](https://github.com/triangletodd/asdf-ibmcloud) | -| idris | [asdf:asdf-community/asdf-idris](https://github.com/asdf-community/asdf-idris) | -| idris2 | [asdf:asdf-community/asdf-idris2](https://github.com/asdf-community/asdf-idris2) | -| imagemagick | [asdf:mangalakader/asdf-imagemagick](https://github.com/mangalakader/asdf-imagemagick) | +| ibmcloud | [asdf:mise-plugins/mise-ibmcloud](https://github.com/mise-plugins/mise-ibmcloud) | +| idris | [asdf:mise-plugins/mise-idris](https://github.com/mise-plugins/mise-idris) | +| idris2 | [asdf:mise-plugins/mise-idris2](https://github.com/mise-plugins/mise-idris2) | +| imagemagick | [asdf:mise-plugins/mise-imagemagick](https://github.com/mise-plugins/mise-imagemagick) | | imgpkg | [aqua:carvel-dev/imgpkg](https://github.com/carvel-dev/imgpkg) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | | infracost | [aqua:infracost/infracost](https://github.com/infracost/infracost) [asdf:dex4er/asdf-infracost](https://github.com/dex4er/asdf-infracost) | | inlets | [aqua:inlets/inletsctl](https://github.com/inlets/inletsctl) [asdf:nlamirault/asdf-inlets](https://github.com/nlamirault/asdf-inlets) | -| io | [asdf:mracos/asdf-io](https://github.com/mracos/asdf-io) | +| io | [asdf:mise-plugins/mise-io](https://github.com/mise-plugins/mise-io) | | istioctl | [aqua:istio/istio/istioctl](https://github.com/istio/istio/istioctl) [asdf:virtualstaticvoid/asdf-istioctl](https://github.com/virtualstaticvoid/asdf-istioctl) | -| janet | [asdf:Jakski/asdf-janet](https://github.com/Jakski/asdf-janet) | +| janet | [asdf:mise-plugins/mise-janet](https://github.com/mise-plugins/mise-janet) | | java | [core:java](https://mise.jdx.dev/lang/java.html) | -| jbang | [asdf:jbangdev/jbang-asdf](https://github.com/jbangdev/jbang-asdf) | -| jfrog-cli | [asdf:LozanoMatheus/asdf-jfrog-cli](https://github.com/LozanoMatheus/asdf-jfrog-cli) | +| jbang | [asdf:mise-plugins/jbang-asdf](https://github.com/mise-plugins/jbang-asdf) | +| jfrog-cli | [asdf:mise-plugins/mise-jfrog-cli](https://github.com/mise-plugins/mise-jfrog-cli) | | jib | [ubi:GoogleContainerTools/jib](https://github.com/GoogleContainerTools/jib) [asdf:joschi/asdf-jib](https://github.com/joschi/asdf-jib) | | jiq | [aqua:fiatjaf/jiq](https://github.com/fiatjaf/jiq) [asdf:chessmango/asdf-jiq](https://github.com/chessmango/asdf-jiq) | | jj | [aqua:jj-vcs/jj](https://github.com/jj-vcs/jj) [ubi:jj-vcs/jj](https://github.com/jj-vcs/jj) | | jless | [aqua:PaulJuliusMartinez/jless](https://github.com/PaulJuliusMartinez/jless) [asdf:jc00ke/asdf-jless](https://github.com/jc00ke/asdf-jless) | | jmespath | [aqua:jmespath/jp](https://github.com/jmespath/jp) [asdf:skyzyx/asdf-jmespath](https://github.com/skyzyx/asdf-jmespath) | -| jmeter | [asdf:comdotlinux/asdf-jmeter](https://github.com/comdotlinux/asdf-jmeter) | +| jmeter | [asdf:mise-plugins/mise-jmeter](https://github.com/mise-plugins/mise-jmeter) | | jnv | [aqua:ynqa/jnv](https://github.com/ynqa/jnv) [asdf:raimon49/asdf-jnv](https://github.com/raimon49/asdf-jnv) | | jq | [aqua:jqlang/jq](https://github.com/jqlang/jq) [asdf:mise-plugins/asdf-jq](https://github.com/mise-plugins/asdf-jq) | | jqp | [aqua:noahgorstein/jqp](https://github.com/noahgorstein/jqp) [asdf:https://gitlab.com/wt0f/asdf-jqp](https://gitlab.com/wt0f/asdf-jqp) | | jreleaser | [aqua:jreleaser/jreleaser](https://github.com/jreleaser/jreleaser) [asdf:joschi/asdf-jreleaser](https://github.com/joschi/asdf-jreleaser) | | jsonnet-bundler | [aqua:jsonnet-bundler/jsonnet-bundler](https://github.com/jsonnet-bundler/jsonnet-bundler) [asdf:beardix/asdf-jb](https://github.com/beardix/asdf-jb) | -| julia | [asdf:rkyleg/asdf-julia](https://github.com/rkyleg/asdf-julia) | +| julia | [asdf:mise-plugins/mise-julia](https://github.com/mise-plugins/mise-julia) | | just | [ubi:casey/just](https://github.com/casey/just) [asdf:olofvndrhr/asdf-just](https://github.com/olofvndrhr/asdf-just) | | jwt | [ubi:mike-engel/jwt-cli](https://github.com/mike-engel/jwt-cli) [cargo:jwt-cli](https://crates.io/crates/jwt-cli) | | jwtui | [ubi:jwt-rs/jwt-ui](https://github.com/jwt-rs/jwt-ui) [cargo:jwt-ui](https://crates.io/crates/jwt-ui) | @@ -386,17 +386,17 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | k2tf | [ubi:sl1pm4t/k2tf](https://github.com/sl1pm4t/k2tf) [asdf:carlduevel/asdf-k2tf](https://github.com/carlduevel/asdf-k2tf) | | k3d | [ubi:k3d-io/k3d](https://github.com/k3d-io/k3d) [asdf:spencergilbert/asdf-k3d](https://github.com/spencergilbert/asdf-k3d) | | k3kcli | [ubi:rancher/k3k](https://github.com/rancher/k3k) [asdf:xanmanning/asdf-k3kcli](https://github.com/xanmanning/asdf-k3kcli) | -| k3s | [asdf:dmpe/asdf-k3s](https://github.com/dmpe/asdf-k3s) | +| k3s | [asdf:mise-plugins/mise-k3s](https://github.com/mise-plugins/mise-k3s) | | k3sup | [aqua:alexellis/k3sup](https://github.com/alexellis/k3sup) [asdf:cgroschupp/asdf-k3sup](https://github.com/cgroschupp/asdf-k3sup) | | k6 | [ubi:grafana/k6](https://github.com/grafana/k6) [asdf:gr1m0h/asdf-k6](https://github.com/gr1m0h/asdf-k6) | | k9s | [ubi:derailed/k9s](https://github.com/derailed/k9s) [asdf:looztra/asdf-k9s](https://github.com/looztra/asdf-k9s) | -| kafka | [asdf:ueisele/asdf-kafka](https://github.com/ueisele/asdf-kafka) | +| kafka | [asdf:mise-plugins/mise-kafka](https://github.com/mise-plugins/mise-kafka) | | kafkactl | [aqua:deviceinsight/kafkactl](https://github.com/deviceinsight/kafkactl) [asdf:anweber/asdf-kafkactl](https://github.com/anweber/asdf-kafkactl) | | kapp | [aqua:carvel-dev/kapp](https://github.com/carvel-dev/kapp) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | | kbld | [aqua:carvel-dev/kbld](https://github.com/carvel-dev/kbld) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | -| kcat | [asdf:douglasdgoulart/asdf-kcat](https://github.com/douglasdgoulart/asdf-kcat) | +| kcat | [asdf:mise-plugins/mise-kcat](https://github.com/mise-plugins/mise-kcat) | | kcctl | [ubi:kcctl/kcctl](https://github.com/kcctl/kcctl) [asdf:joschi/asdf-kcctl](https://github.com/joschi/asdf-kcctl) | -| kcl | [asdf:starkers/asdf-kcl](https://github.com/starkers/asdf-kcl) | +| kcl | [asdf:mise-plugins/mise-kcl](https://github.com/mise-plugins/mise-kcl) | | kconf | [aqua:particledecay/kconf](https://github.com/particledecay/kconf) [asdf:particledecay/asdf-kconf](https://github.com/particledecay/asdf-kconf) | | ki | [ubi:Kotlin/kotlin-interactive-shell](https://github.com/Kotlin/kotlin-interactive-shell) [asdf:comdotlinux/asdf-ki](https://github.com/comdotlinux/asdf-ki) | | killport | [ubi:jkfran/killport](https://github.com/jkfran/killport) | @@ -407,16 +407,16 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | koka | [ubi:koka-lang/koka](https://github.com/koka-lang/koka) [asdf:susurri/asdf-koka](https://github.com/susurri/asdf-koka) | | kompose | [ubi:kubernetes/kompose](https://github.com/kubernetes/kompose) [asdf:technikhil314/asdf-kompose](https://github.com/technikhil314/asdf-kompose) | | kops | [aqua:kubernetes/kops](https://github.com/kubernetes/kops) [asdf:Antiarchitect/asdf-kops](https://github.com/Antiarchitect/asdf-kops) | -| kotlin | [asdf:asdf-community/asdf-kotlin](https://github.com/asdf-community/asdf-kotlin) [vfox:version-fox/vfox-kotlin](https://github.com/version-fox/vfox-kotlin) | +| kotlin | [asdf:mise-plugins/mise-kotlin](https://github.com/mise-plugins/mise-kotlin) [vfox:mise-plugins/vfox-kotlin](https://github.com/mise-plugins/vfox-kotlin) | | kpack | [ubi:vmware-tanzu/kpack-cli](https://github.com/vmware-tanzu/kpack-cli) [asdf:asdf-community/asdf-kpack-cli](https://github.com/asdf-community/asdf-kpack-cli) | | kpt | [aqua:kptdev/kpt](https://github.com/kptdev/kpt) [asdf:nlamirault/asdf-kpt](https://github.com/nlamirault/asdf-kpt) | | krab | [ubi:ohkrab/krab](https://github.com/ohkrab/krab) [asdf:ohkrab/asdf-krab](https://github.com/ohkrab/asdf-krab) | | krew | [aqua:kubernetes-sigs/krew](https://github.com/kubernetes-sigs/krew) [asdf:bjw-s/asdf-krew](https://github.com/bjw-s/asdf-krew) | | kscript | [ubi:kscripting/kscript](https://github.com/kscripting/kscript) [asdf:edgelevel/asdf-kscript](https://github.com/edgelevel/asdf-kscript) | | ksops | [ubi:viaduct-ai/kustomize-sops](https://github.com/viaduct-ai/kustomize-sops) [asdf:janpieper/asdf-ksops](https://github.com/janpieper/asdf-ksops) | -| ktlint | [asdf:esensar/asdf-ktlint](https://github.com/esensar/asdf-ktlint) | +| ktlint | [asdf:mise-plugins/mise-ktlint](https://github.com/mise-plugins/mise-ktlint) | | kube-capacity | [aqua:robscott/kube-capacity](https://github.com/robscott/kube-capacity) [asdf:looztra/asdf-kube-capacity](https://github.com/looztra/asdf-kube-capacity) | -| kube-code-generator | [asdf:jimmidyson/asdf-kube-code-generator](https://github.com/jimmidyson/asdf-kube-code-generator) | +| kube-code-generator | [asdf:mise-plugins/mise-kube-code-generator](https://github.com/mise-plugins/mise-kube-code-generator) | | kube-controller-tools | [ubi:kubernetes-sigs/controller-tools](https://github.com/kubernetes-sigs/controller-tools) [asdf:jimmidyson/asdf-kube-controller-tools](https://github.com/jimmidyson/asdf-kube-controller-tools) | | kube-credential-cache | [aqua:ryodocx/kube-credential-cache](https://github.com/ryodocx/kube-credential-cache) [asdf:ryodocx/kube-credential-cache](https://github.com/ryodocx/kube-credential-cache) | | kube-linter | [aqua:stackrox/kube-linter](https://github.com/stackrox/kube-linter) [asdf:devlincashman/asdf-kube-linter](https://github.com/devlincashman/asdf-kube-linter) | @@ -452,72 +452,72 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | lane | [ubi:CodeReaper/lane](https://github.com/CodeReaper/lane) [asdf:CodeReaper/asdf-lane](https://github.com/CodeReaper/asdf-lane) | | lazydocker | [aqua:jesseduffield/lazydocker](https://github.com/jesseduffield/lazydocker) [ubi:jesseduffield/lazydocker](https://github.com/jesseduffield/lazydocker) | | lazygit | [aqua:jesseduffield/lazygit](https://github.com/jesseduffield/lazygit) [asdf:nklmilojevic/asdf-lazygit](https://github.com/nklmilojevic/asdf-lazygit) | -| lean | [asdf:asdf-community/asdf-lean](https://github.com/asdf-community/asdf-lean) | +| lean | [asdf:mise-plugins/mise-lean](https://github.com/mise-plugins/mise-lean) | | lefthook | [aqua:evilmartians/lefthook](https://github.com/evilmartians/lefthook) [ubi:evilmartians/lefthook](https://github.com/evilmartians/lefthook) [asdf:jtzero/asdf-lefthook](https://github.com/jtzero/asdf-lefthook) | -| leiningen | [asdf:miorimmax/asdf-lein](https://github.com/miorimmax/asdf-lein) | -| levant | [aqua:hashicorp/levant](https://github.com/hashicorp/levant) [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | -| lfe | [asdf:asdf-community/asdf-lfe](https://github.com/asdf-community/asdf-lfe) | +| leiningen | [asdf:mise-plugins/mise-lein](https://github.com/mise-plugins/mise-lein) | +| levant | [aqua:hashicorp/levant](https://github.com/hashicorp/levant) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | +| lfe | [asdf:mise-plugins/mise-lfe](https://github.com/mise-plugins/mise-lfe) | | libsql-server | [ubi:tursodatabase/libsql](https://github.com/tursodatabase/libsql) [asdf:jonasb/asdf-libsql-server](https://github.com/jonasb/asdf-libsql-server) | | license-plist | [ubi:mono0926/LicensePlist](https://github.com/mono0926/LicensePlist) [asdf:MacPaw/asdf-license-plist](https://github.com/MacPaw/asdf-license-plist) | | lima | [aqua:lima-vm/lima](https://github.com/lima-vm/lima) [asdf:CrouchingMuppet/asdf-lima](https://github.com/CrouchingMuppet/asdf-lima) | | linkerd | [aqua:linkerd/linkerd2](https://github.com/linkerd/linkerd2) [asdf:kforsthoevel/asdf-linkerd](https://github.com/kforsthoevel/asdf-linkerd) | | liqoctl | [aqua:liqotech/liqo](https://github.com/liqotech/liqo) [asdf:pdemagny/asdf-liqoctl](https://github.com/pdemagny/asdf-liqoctl) | -| liquibase | [asdf:saliougaye/asdf-liquibase](https://github.com/saliougaye/asdf-liquibase) | +| liquibase | [asdf:mise-plugins/mise-liquibase](https://github.com/mise-plugins/mise-liquibase) | | litestream | [aqua:benbjohnson/litestream](https://github.com/benbjohnson/litestream) [asdf:threkk/asdf-litestream](https://github.com/threkk/asdf-litestream) | -| llvm-objcopy | [asdf:higebu/asdf-llvm](https://github.com/higebu/asdf-llvm) | -| llvm-objdump | [asdf:higebu/asdf-llvm](https://github.com/higebu/asdf-llvm) | -| logtalk | [asdf:LogtalkDotOrg/asdf-logtalk](https://github.com/LogtalkDotOrg/asdf-logtalk) | +| llvm-objcopy | [asdf:mise-plugins/mise-llvm](https://github.com/mise-plugins/mise-llvm) | +| llvm-objdump | [asdf:mise-plugins/mise-llvm](https://github.com/mise-plugins/mise-llvm) | +| logtalk | [asdf:mise-plugins/mise-logtalk](https://github.com/mise-plugins/mise-logtalk) | | loki-logcli | [aqua:grafana/loki/logcli](https://github.com/grafana/loki/logcli) [asdf:comdotlinux/asdf-loki-logcli](https://github.com/comdotlinux/asdf-loki-logcli) | | ls-lint | [aqua:loeffel-io/ls-lint](https://github.com/loeffel-io/ls-lint) [asdf:Ameausoone/asdf-ls-lint](https://github.com/Ameausoone/asdf-ls-lint) | | lsd | [aqua:lsd-rs/lsd](https://github.com/lsd-rs/lsd) [asdf:mise-plugins/asdf-lsd](https://github.com/mise-plugins/asdf-lsd) | -| lua | [asdf:Stratus3D/asdf-lua](https://github.com/Stratus3D/asdf-lua) | +| lua | [asdf:mise-plugins/mise-lua](https://github.com/mise-plugins/mise-lua) | | lua-language-server | [aqua:LuaLS/lua-language-server](https://github.com/LuaLS/lua-language-server) [asdf:bellini666/asdf-lua-language-server](https://github.com/bellini666/asdf-lua-language-server) | -| luajit | [asdf:smashedtoatoms/asdf-luaJIT](https://github.com/smashedtoatoms/asdf-luaJIT) | +| luajit | [asdf:mise-plugins/mise-luaJIT](https://github.com/mise-plugins/mise-luaJIT) | | maestro | [ubi:mobile-dev-inc/maestro](https://github.com/mobile-dev-inc/maestro) [asdf:dotanuki-labs/asdf-maestro](https://github.com/dotanuki-labs/asdf-maestro) | | mage | [aqua:magefile/mage](https://github.com/magefile/mage) [asdf:mathew-fleisch/asdf-mage](https://github.com/mathew-fleisch/asdf-mage) | -| make | [asdf:yacchi/asdf-make](https://github.com/yacchi/asdf-make) | +| make | [asdf:mise-plugins/mise-make](https://github.com/mise-plugins/mise-make) | | mani | [ubi:alajmo/mani](https://github.com/alajmo/mani) [asdf:anweber/asdf-mani](https://github.com/anweber/asdf-mani) | | mark | [ubi:kovetskiy/mark](https://github.com/kovetskiy/mark) [asdf:jfreeland/asdf-mark](https://github.com/jfreeland/asdf-mark) | | markdownlint-cli2 | [npm:markdownlint-cli2](https://www.npmjs.com/package/markdownlint-cli2) [asdf:paulo-ferraz-oliveira/asdf-markdownlint-cli2](https://github.com/paulo-ferraz-oliveira/asdf-markdownlint-cli2) | | marp-cli | [aqua:marp-team/marp-cli](https://github.com/marp-team/marp-cli) [asdf:xataz/asdf-marp-cli](https://github.com/xataz/asdf-marp-cli) | | mask | [aqua:jacobdeichert/mask](https://github.com/jacobdeichert/mask) [asdf:aaaaninja/asdf-mask](https://github.com/aaaaninja/asdf-mask) | -| maven | [asdf:mise-plugins/asdf-maven](https://github.com/mise-plugins/asdf-maven) [vfox:version-fox/vfox-maven](https://github.com/version-fox/vfox-maven) | -| mc | [asdf:penpyt/asdf-mc](https://github.com/penpyt/asdf-mc) | +| maven | [asdf:mise-plugins/mise-maven](https://github.com/mise-plugins/mise-maven) [vfox:mise-plugins/vfox-maven](https://github.com/mise-plugins/vfox-maven) | +| mc | [asdf:mise-plugins/mise-mc](https://github.com/mise-plugins/mise-mc) | | mdbook | [aqua:rust-lang/mdBook](https://github.com/rust-lang/mdBook) [asdf:cipherstash/asdf-mdbook](https://github.com/cipherstash/asdf-mdbook) | -| mdbook-linkcheck | [asdf:cipherstash/asdf-mdbook-linkcheck](https://github.com/cipherstash/asdf-mdbook-linkcheck) | +| mdbook-linkcheck | [asdf:mise-plugins/mise-mdbook-linkcheck](https://github.com/mise-plugins/mise-mdbook-linkcheck) | | melange | [aqua:chainguard-dev/melange](https://github.com/chainguard-dev/melange) [asdf:omissis/asdf-melange](https://github.com/omissis/asdf-melange) | | melt | [ubi:charmbracelet/melt](https://github.com/charmbracelet/melt) [asdf:chessmango/asdf-melt](https://github.com/chessmango/asdf-melt) | -| memcached | [asdf:furkanural/asdf-memcached](https://github.com/furkanural/asdf-memcached) | -| mercury | [asdf:susurri/asdf-mercury](https://github.com/susurri/asdf-mercury) | -| meson | [asdf:asdf-community/asdf-meson](https://github.com/asdf-community/asdf-meson) | -| micronaut | [asdf:weibemoura/asdf-micronaut](https://github.com/weibemoura/asdf-micronaut) | -| mill | [asdf:asdf-community/asdf-mill](https://github.com/asdf-community/asdf-mill) | +| memcached | [asdf:mise-plugins/mise-memcached](https://github.com/mise-plugins/mise-memcached) | +| mercury | [asdf:mise-plugins/mise-mercury](https://github.com/mise-plugins/mise-mercury) | +| meson | [asdf:mise-plugins/mise-meson](https://github.com/mise-plugins/mise-meson) | +| micronaut | [asdf:mise-plugins/mise-micronaut](https://github.com/mise-plugins/mise-micronaut) | +| mill | [asdf:mise-plugins/mise-mill](https://github.com/mise-plugins/mise-mill) | | mimirtool | [aqua:grafana/mimir/mimirtool](https://github.com/grafana/mimir/mimirtool) [asdf:asdf-community/asdf-mimirtool](https://github.com/asdf-community/asdf-mimirtool) | | minify | [aqua:tdewolff/minify](https://github.com/tdewolff/minify) [asdf:axilleas/asdf-minify](https://github.com/axilleas/asdf-minify) | | minikube | [aqua:kubernetes/minikube](https://github.com/kubernetes/minikube) [asdf:alvarobp/asdf-minikube](https://github.com/alvarobp/asdf-minikube) | -| minio | [asdf:aeons/asdf-minio](https://github.com/aeons/asdf-minio) | +| minio | [asdf:mise-plugins/mise-minio](https://github.com/mise-plugins/mise-minio) | | minishift | [aqua:minishift/minishift](https://github.com/minishift/minishift) [asdf:sqtran/asdf-minishift](https://github.com/sqtran/asdf-minishift) | | minisign | [aqua:jedisct1/minisign](https://github.com/jedisct1/minisign) | | mint | [ubi:mint-lang/mint](https://github.com/mint-lang/mint) [asdf:mint-lang/asdf-mint](https://github.com/mint-lang/asdf-mint) | | mirrord | [ubi:metalbear-co/mirrord](https://github.com/metalbear-co/mirrord) [asdf:metalbear-co/asdf-mirrord](https://github.com/metalbear-co/asdf-mirrord) | -| mitmproxy | [asdf:NeoHsu/asdf-mitmproxy](https://github.com/NeoHsu/asdf-mitmproxy) | +| mitmproxy | [asdf:mise-plugins/mise-mitmproxy](https://github.com/mise-plugins/mise-mitmproxy) | | mkcert | [ubi:FiloSottile/mkcert](https://github.com/FiloSottile/mkcert) [asdf:salasrod/asdf-mkcert](https://github.com/salasrod/asdf-mkcert) | -| mlton | [asdf:asdf-community/asdf-mlton](https://github.com/asdf-community/asdf-mlton) | +| mlton | [asdf:mise-plugins/mise-mlton](https://github.com/mise-plugins/mise-mlton) | | mockery | [aqua:vektra/mockery](https://github.com/vektra/mockery) [asdf:cabify/asdf-mockery](https://github.com/cabify/asdf-mockery) | -| mockolo | [asdf:MontakOleg/asdf-mockolo](https://github.com/MontakOleg/asdf-mockolo) | +| mockolo | [asdf:mise-plugins/mise-mockolo](https://github.com/mise-plugins/mise-mockolo) | | mold | [ubi:rui314/mold](https://github.com/rui314/mold) | -| monarch | [asdf:nyuyuyu/asdf-monarch](https://github.com/nyuyuyu/asdf-monarch) | -| mongodb | [asdf:sylph01/asdf-mongodb](https://github.com/sylph01/asdf-mongodb) | +| monarch | [asdf:mise-plugins/mise-monarch](https://github.com/mise-plugins/mise-monarch) | +| mongodb | [asdf:mise-plugins/mise-mongodb](https://github.com/mise-plugins/mise-mongodb) | | mongosh | [ubi:mongodb-js/mongosh](https://github.com/mongodb-js/mongosh) [asdf:itspngu/asdf-mongosh](https://github.com/itspngu/asdf-mongosh) | | mprocs | [ubi:pvolok/mprocs](https://github.com/pvolok/mprocs) | | mssqldef | [aqua:sqldef/sqldef/mssqldef](https://github.com/sqldef/sqldef/mssqldef) | -| mutanus | [asdf:SoriUR/asdf-mutanus](https://github.com/SoriUR/asdf-mutanus) | +| mutanus | [asdf:mise-plugins/mise-mutanus](https://github.com/mise-plugins/mise-mutanus) | | mvnd | [aqua:apache/maven-mvnd](https://github.com/apache/maven-mvnd) [asdf:joschi/asdf-mvnd](https://github.com/joschi/asdf-mvnd) | -| mysql | [asdf:iroddis/asdf-mysql](https://github.com/iroddis/asdf-mysql) | +| mysql | [asdf:mise-plugins/mise-mysql](https://github.com/mise-plugins/mise-mysql) | | mysqldef | [aqua:sqldef/sqldef/mysqldef](https://github.com/sqldef/sqldef/mysqldef) | | nancy | [aqua:sonatype-nexus-community/nancy](https://github.com/sonatype-nexus-community/nancy) [asdf:iilyak/asdf-nancy](https://github.com/iilyak/asdf-nancy) | -| nano | [asdf:mfakane/asdf-nano](https://github.com/mfakane/asdf-nano) | -| nasm | [asdf:Dpbm/asdf-nasm](https://github.com/Dpbm/asdf-nasm) | +| nano | [asdf:mise-plugins/mise-nano](https://github.com/mise-plugins/mise-nano) | +| nasm | [asdf:mise-plugins/mise-nasm](https://github.com/mise-plugins/mise-nasm) | | navi | [aqua:denisidoro/navi](https://github.com/denisidoro/navi) [ubi:denisidoro/navi](https://github.com/denisidoro/navi) | | neko | [ubi:HaxeFoundation/neko](https://github.com/HaxeFoundation/neko) [asdf:asdf-community/asdf-neko](https://github.com/asdf-community/asdf-neko) | | neovim | [aqua:neovim/neovim](https://github.com/neovim/neovim) [asdf:richin13/asdf-neovim](https://github.com/richin13/asdf-neovim) | @@ -527,52 +527,52 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | nim | [asdf:mise-plugins/mise-nim](https://github.com/mise-plugins/mise-nim) | | ninja | [aqua:ninja-build/ninja](https://github.com/ninja-build/ninja) [asdf:asdf-community/asdf-ninja](https://github.com/asdf-community/asdf-ninja) | | node | [core:node](https://mise.jdx.dev/lang/node.html) | -| nomad | [aqua:hashicorp/nomad](https://github.com/hashicorp/nomad) [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | -| nomad-pack | [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | +| nomad | [aqua:hashicorp/nomad](https://github.com/hashicorp/nomad) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | +| nomad-pack | [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | | notation | [aqua:notaryproject/notation](https://github.com/notaryproject/notation) [asdf:bodgit/asdf-notation](https://github.com/bodgit/asdf-notation) | | nova | [aqua:FairwindsOps/nova](https://github.com/FairwindsOps/nova) [asdf:elementalvoid/asdf-nova](https://github.com/elementalvoid/asdf-nova) | | nsc | [ubi:nats-io/nsc](https://github.com/nats-io/nsc) [asdf:dex4er/asdf-nsc](https://github.com/dex4er/asdf-nsc) | | oapi-codegen | [go:github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen](https://pkg.go.dev/github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen) [asdf:dylanrayboss/asdf-oapi-codegen](https://github.com/dylanrayboss/asdf-oapi-codegen) | -| oc | [asdf:sqtran/asdf-oc](https://github.com/sqtran/asdf-oc) | -| ocaml | [asdf:asdf-community/asdf-ocaml](https://github.com/asdf-community/asdf-ocaml) | -| oci | [asdf:yasn77/asdf-oci](https://github.com/yasn77/asdf-oci) | +| oc | [asdf:mise-plugins/mise-oc](https://github.com/mise-plugins/mise-oc) | +| ocaml | [asdf:mise-plugins/mise-ocaml](https://github.com/mise-plugins/mise-ocaml) | +| oci | [asdf:mise-plugins/mise-oci](https://github.com/mise-plugins/mise-oci) | | odin | [ubi:odin-lang/Odin](https://github.com/odin-lang/Odin) [asdf:jtakakura/asdf-odin](https://github.com/jtakakura/asdf-odin) | | odo | [aqua:redhat-developer/odo](https://github.com/redhat-developer/odo) [asdf:rm3l/asdf-odo](https://github.com/rm3l/asdf-odo) | | okta-aws | [aqua:okta/okta-aws-cli](https://github.com/okta/okta-aws-cli) [asdf:bennythejudge/asdf-plugin-okta-aws-cli](https://github.com/bennythejudge/asdf-plugin-okta-aws-cli) | | okteto | [aqua:okteto/okteto](https://github.com/okteto/okteto) [asdf:BradenM/asdf-okteto](https://github.com/BradenM/asdf-okteto) | | ollama | [aqua:ollama/ollama](https://github.com/ollama/ollama) [asdf:virtualstaticvoid/asdf-ollama](https://github.com/virtualstaticvoid/asdf-ollama) | -| om | [aqua:pivotal-cf/om](https://github.com/pivotal-cf/om) [asdf:vmware-tanzu/tanzu-plug-in-for-asdf](https://github.com/vmware-tanzu/tanzu-plug-in-for-asdf) | +| om | [aqua:pivotal-cf/om](https://github.com/pivotal-cf/om) [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | | onyx | [ubi:onyx-lang/onyx](https://github.com/onyx-lang/onyx) [asdf:jtakakura/asdf-onyx](https://github.com/jtakakura/asdf-onyx) | | opa | [aqua:open-policy-agent/opa](https://github.com/open-policy-agent/opa) [asdf:tochukwuvictor/asdf-opa](https://github.com/tochukwuvictor/asdf-opa) | | opam | [ubi:ocaml/opam](https://github.com/ocaml/opam) [asdf:asdf-community/asdf-opam](https://github.com/asdf-community/asdf-opam) | | openbao | [ubi:openbao/openbao](https://github.com/openbao/openbao) | | openfaas-cli | [aqua:openfaas/faas-cli](https://github.com/openfaas/faas-cli) [asdf:zekker6/asdf-faas-cli](https://github.com/zekker6/asdf-faas-cli) | -| openresty | [asdf:smashedtoatoms/asdf-openresty](https://github.com/smashedtoatoms/asdf-openresty) | -| opensearch | [asdf:randikabanura/asdf-opensearch](https://github.com/randikabanura/asdf-opensearch) | -| opensearch-cli | [asdf:iul1an/asdf-opensearch-cli](https://github.com/iul1an/asdf-opensearch-cli) | -| openshift-install | [asdf:hhemied/asdf-openshift-install](https://github.com/hhemied/asdf-openshift-install) | +| openresty | [asdf:mise-plugins/mise-openresty](https://github.com/mise-plugins/mise-openresty) | +| opensearch | [asdf:mise-plugins/mise-opensearch](https://github.com/mise-plugins/mise-opensearch) | +| opensearch-cli | [asdf:mise-plugins/mise-opensearch-cli](https://github.com/mise-plugins/mise-opensearch-cli) | +| openshift-install | [asdf:mise-plugins/mise-openshift-install](https://github.com/mise-plugins/mise-openshift-install) | | opentofu | [ubi:opentofu/opentofu](https://github.com/opentofu/opentofu) [asdf:virtualroot/asdf-opentofu](https://github.com/virtualroot/asdf-opentofu) | | operator-sdk | [aqua:operator-framework/operator-sdk](https://github.com/operator-framework/operator-sdk) [asdf:Medium/asdf-operator-sdk](https://github.com/Medium/asdf-operator-sdk) | -| opsgenie-lamp | [asdf:ORCID/asdf-opsgenie-lamp](https://github.com/ORCID/asdf-opsgenie-lamp) | +| opsgenie-lamp | [asdf:mise-plugins/mise-opsgenie-lamp](https://github.com/mise-plugins/mise-opsgenie-lamp) | | oras | [aqua:oras-project/oras](https://github.com/oras-project/oras) [asdf:bodgit/asdf-oras](https://github.com/bodgit/asdf-oras) | -| osqueryi | [asdf:davidecavestro/asdf-osqueryi](https://github.com/davidecavestro/asdf-osqueryi) | +| osqueryi | [asdf:mise-plugins/mise-osqueryi](https://github.com/mise-plugins/mise-osqueryi) | | overmind | [ubi:DarthSim/overmind](https://github.com/DarthSim/overmind) [go:github.com/DarthSim/overmind/v2](https://pkg.go.dev/github.com/DarthSim/overmind/v2) | | pachctl | [aqua:pachyderm/pachyderm](https://github.com/pachyderm/pachyderm) [asdf:abatilo/asdf-pachctl](https://github.com/abatilo/asdf-pachctl) | -| packer | [aqua:hashicorp/packer](https://github.com/hashicorp/packer) [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | +| packer | [aqua:hashicorp/packer](https://github.com/hashicorp/packer) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | | pandoc | [ubi:jgm/pandoc](https://github.com/jgm/pandoc) [asdf:Fbrisset/asdf-pandoc](https://github.com/Fbrisset/asdf-pandoc) | | patat | [ubi:jaspervdj/patat](https://github.com/jaspervdj/patat) [asdf:airtonix/asdf-patat](https://github.com/airtonix/asdf-patat) | | pdm | [pipx:pdm](https://pypi.org/project/pdm) [asdf:1oglop1/asdf-pdm](https://github.com/1oglop1/asdf-pdm) | | peco | [aqua:peco/peco](https://github.com/peco/peco) [asdf:asdf-community/asdf-peco](https://github.com/asdf-community/asdf-peco) | -| periphery | [asdf:MontakOleg/asdf-periphery](https://github.com/MontakOleg/asdf-periphery) | +| periphery | [asdf:mise-plugins/mise-periphery](https://github.com/mise-plugins/mise-periphery) | | perl | [aqua:skaji/relocatable-perl](https://github.com/skaji/relocatable-perl) [asdf:ouest/asdf-perl](https://github.com/ouest/asdf-perl) | -| php | [asdf:asdf-community/asdf-php](https://github.com/asdf-community/asdf-php) [vfox:version-fox/vfox-php](https://github.com/version-fox/vfox-php) | +| php | [asdf:mise-plugins/mise-php](https://github.com/mise-plugins/mise-php) [vfox:mise-plugins/vfox-php](https://github.com/mise-plugins/vfox-php) | | pint | [aqua:cloudflare/pint](https://github.com/cloudflare/pint) [asdf:sam-burrell/asdf-pint](https://github.com/sam-burrell/asdf-pint) | | pipectl | [aqua:pipe-cd/pipecd/pipectl](https://github.com/pipe-cd/pipecd/pipectl) [asdf:pipe-cd/asdf-pipectl](https://github.com/pipe-cd/asdf-pipectl) | -| pipelight | [asdf:kogeletey/asdf-pipelight](https://github.com/kogeletey/asdf-pipelight) | +| pipelight | [asdf:mise-plugins/mise-pipelight](https://github.com/mise-plugins/mise-pipelight) | | pipenv | [asdf:mise-plugins/mise-pipenv](https://github.com/mise-plugins/mise-pipenv) | -| pipx | [asdf:yozachar/asdf-pipx](https://github.com/yozachar/asdf-pipx) | +| pipx | [asdf:mise-plugins/mise-pipx](https://github.com/mise-plugins/mise-pipx) | | pitchfork | [ubi:jdx/pitchfork](https://github.com/jdx/pitchfork) | -| pivnet | [aqua:pivotal-cf/pivnet-cli](https://github.com/pivotal-cf/pivnet-cli) [asdf:vmware-tanzu/tanzu-plug-in-for-asdf](https://github.com/vmware-tanzu/tanzu-plug-in-for-asdf) | +| pivnet | [aqua:pivotal-cf/pivnet-cli](https://github.com/pivotal-cf/pivnet-cli) [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | | pkl | [aqua:apple/pkl](https://github.com/apple/pkl) [asdf:mise-plugins/asdf-pkl](https://github.com/mise-plugins/asdf-pkl) | | please | [aqua:thought-machine/please](https://github.com/thought-machine/please) [asdf:asdf-community/asdf-please](https://github.com/asdf-community/asdf-please) | | pluto | [ubi:FairwindsOps/pluto](https://github.com/FairwindsOps/pluto) [asdf:FairwindsOps/asdf-pluto](https://github.com/FairwindsOps/asdf-pluto) | @@ -581,45 +581,45 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | poetry | [asdf:mise-plugins/mise-poetry](https://github.com/mise-plugins/mise-poetry) | | polaris | [aqua:FairwindsOps/polaris](https://github.com/FairwindsOps/polaris) [asdf:particledecay/asdf-polaris](https://github.com/particledecay/asdf-polaris) | | popeye | [aqua:derailed/popeye](https://github.com/derailed/popeye) [asdf:nlamirault/asdf-popeye](https://github.com/nlamirault/asdf-popeye) | -| postgis | [asdf:knu/asdf-postgis](https://github.com/knu/asdf-postgis) | -| postgres | [asdf:smashedtoatoms/asdf-postgres](https://github.com/smashedtoatoms/asdf-postgres) | +| postgis | [asdf:mise-plugins/mise-postgis](https://github.com/mise-plugins/mise-postgis) | +| postgres | [asdf:mise-plugins/mise-postgres](https://github.com/mise-plugins/mise-postgres) | | powerline-go | [ubi:justjanne/powerline-go](https://github.com/justjanne/powerline-go) [asdf:dex4er/asdf-powerline-go](https://github.com/dex4er/asdf-powerline-go) | | powerpipe | [aqua:turbot/powerpipe](https://github.com/turbot/powerpipe) [asdf:jc00ke/asdf-powerpipe](https://github.com/jc00ke/asdf-powerpipe) | | powershell-core | [aqua:PowerShell/PowerShell](https://github.com/PowerShell/PowerShell) [asdf:daveneeley/asdf-powershell-core](https://github.com/daveneeley/asdf-powershell-core) | | pre-commit | [aqua:pre-commit/pre-commit](https://github.com/pre-commit/pre-commit) [asdf:jonathanmorley/asdf-pre-commit](https://github.com/jonathanmorley/asdf-pre-commit) | | promtool | [aqua:prometheus/prometheus](https://github.com/prometheus/prometheus) [asdf:asdf-community/asdf-promtool](https://github.com/asdf-community/asdf-promtool) | -| protobuf | [vfox:ahai-code/vfox-protobuf](https://github.com/ahai-code/vfox-protobuf) | +| protobuf | [vfox:mise-plugins/vfox-protobuf](https://github.com/mise-plugins/vfox-protobuf) | | protoc | [aqua:protocolbuffers/protobuf/protoc](https://github.com/protocolbuffers/protobuf/protoc) [asdf:paxosglobal/asdf-protoc](https://github.com/paxosglobal/asdf-protoc) | | protoc-gen-connect-go | [go:connectrpc.com/connect/cmd/protoc-gen-connect-go](https://pkg.go.dev/connectrpc.com/connect/cmd/protoc-gen-connect-go) [asdf:dylanrayboss/asdf-protoc-gen-connect-go](https://github.com/dylanrayboss/asdf-protoc-gen-connect-go) | | protoc-gen-go | [aqua:protocolbuffers/protobuf-go/protoc-gen-go](https://github.com/protocolbuffers/protobuf-go/protoc-gen-go) [asdf:pbr0ck3r/asdf-protoc-gen-go](https://github.com/pbr0ck3r/asdf-protoc-gen-go) | | protoc-gen-go-grpc | [aqua:grpc/grpc-go/protoc-gen-go-grpc](https://github.com/grpc/grpc-go/protoc-gen-go-grpc) [asdf:pbr0ck3r/asdf-protoc-gen-go-grpc](https://github.com/pbr0ck3r/asdf-protoc-gen-go-grpc) | -| protoc-gen-grpc-web | [asdf:pbr0ck3r/asdf-protoc-gen-grpc-web](https://github.com/pbr0ck3r/asdf-protoc-gen-grpc-web) | +| protoc-gen-grpc-web | [asdf:mise-plugins/mise-protoc-gen-grpc-web](https://github.com/mise-plugins/mise-protoc-gen-grpc-web) | | protoc-gen-js | [ubi:protocolbuffers/protobuf-javascript](https://github.com/protocolbuffers/protobuf-javascript) [asdf:pbr0ck3r/asdf-protoc-gen-js](https://github.com/pbr0ck3r/asdf-protoc-gen-js) | | protolint | [aqua:yoheimuta/protolint](https://github.com/yoheimuta/protolint) [asdf:spencergilbert/asdf-protolint](https://github.com/spencergilbert/asdf-protolint) | -| protonge | [asdf:augustobmoura/asdf-protonge](https://github.com/augustobmoura/asdf-protonge) | +| protonge | [asdf:mise-plugins/mise-protonge](https://github.com/mise-plugins/mise-protonge) | | psc-package | [ubi:purescript/psc-package](https://github.com/purescript/psc-package) [asdf:nsaunders/asdf-psc-package](https://github.com/nsaunders/asdf-psc-package) | | psqldef | [aqua:sqldef/sqldef/psqldef](https://github.com/sqldef/sqldef/psqldef) | | pulumi | [aqua:pulumi/pulumi](https://github.com/pulumi/pulumi) [asdf:canha/asdf-pulumi](https://github.com/canha/asdf-pulumi) | | purerl | [ubi:purerl/purerl](https://github.com/purerl/purerl) [asdf:GoNZooo/asdf-purerl](https://github.com/GoNZooo/asdf-purerl) | | purescript | [ubi:purescript/purescript](https://github.com/purescript/purescript) [asdf:jrrom/asdf-purescript](https://github.com/jrrom/asdf-purescript) | -| purty | [asdf:nsaunders/asdf-purty](https://github.com/nsaunders/asdf-purty) | +| purty | [asdf:mise-plugins/mise-purty](https://github.com/mise-plugins/mise-purty) | | python | [core:python](https://mise.jdx.dev/lang/python.html) | | qdns | [ubi:natesales/q](https://github.com/natesales/q) [asdf:moritz-makandra/asdf-plugin-qdns](https://github.com/moritz-makandra/asdf-plugin-qdns) | -| quarkus | [asdf:asdf-community/asdf-quarkus](https://github.com/asdf-community/asdf-quarkus) | -| r | [asdf:asdf-community/asdf-r](https://github.com/asdf-community/asdf-r) | -| rabbitmq | [asdf:mise-plugins/asdf-rabbitmq](https://github.com/mise-plugins/asdf-rabbitmq) | -| racket | [asdf:asdf-community/asdf-racket](https://github.com/asdf-community/asdf-racket) | -| raku | [asdf:m-dango/asdf-raku](https://github.com/m-dango/asdf-raku) | +| quarkus | [asdf:mise-plugins/mise-quarkus](https://github.com/mise-plugins/mise-quarkus) | +| r | [asdf:mise-plugins/mise-r](https://github.com/mise-plugins/mise-r) | +| rabbitmq | [asdf:mise-plugins/mise-rabbitmq](https://github.com/mise-plugins/mise-rabbitmq) | +| racket | [asdf:mise-plugins/mise-racket](https://github.com/mise-plugins/mise-racket) | +| raku | [asdf:mise-plugins/mise-raku](https://github.com/mise-plugins/mise-raku) | | rancher | [aqua:rancher/cli](https://github.com/rancher/cli) [asdf:abinet/asdf-rancher](https://github.com/abinet/asdf-rancher) | | rbac-lookup | [aqua:FairwindsOps/rbac-lookup](https://github.com/FairwindsOps/rbac-lookup) [asdf:looztra/asdf-rbac-lookup](https://github.com/looztra/asdf-rbac-lookup) | | rclone | [ubi:rclone/rclone](https://github.com/rclone/rclone) [asdf:johnlayton/asdf-rclone](https://github.com/johnlayton/asdf-rclone) | -| rebar | [asdf:Stratus3D/asdf-rebar](https://github.com/Stratus3D/asdf-rebar) | +| rebar | [asdf:mise-plugins/mise-rebar](https://github.com/mise-plugins/mise-rebar) | | reckoner | [ubi:FairwindsOps/reckoner](https://github.com/FairwindsOps/reckoner) [asdf:FairwindsOps/asdf-reckoner](https://github.com/FairwindsOps/asdf-reckoner) | -| redis | [asdf:smashedtoatoms/asdf-redis](https://github.com/smashedtoatoms/asdf-redis) | -| redis-cli | [asdf:NeoHsu/asdf-redis-cli](https://github.com/NeoHsu/asdf-redis-cli) | +| redis | [asdf:mise-plugins/mise-redis](https://github.com/mise-plugins/mise-redis) | +| redis-cli | [asdf:mise-plugins/mise-redis-cli](https://github.com/mise-plugins/mise-redis-cli) | | redo | [ubi:barthr/redo](https://github.com/barthr/redo) [asdf:chessmango/asdf-redo](https://github.com/chessmango/asdf-redo) | | reg | [aqua:genuinetools/reg](https://github.com/genuinetools/reg) [asdf:looztra/asdf-reg](https://github.com/looztra/asdf-reg) | -| regal | [aqua:StyraInc/regal](https://github.com/StyraInc/regal) [asdf:asdf-community/asdf-regal](https://github.com/asdf-community/asdf-regal) | +| regal | [aqua:StyraInc/regal](https://github.com/StyraInc/regal) [asdf:mise-plugins/mise-regal](https://github.com/mise-plugins/mise-regal) | | regctl | [aqua:regclient/regclient/regctl](https://github.com/regclient/regclient/regctl) [asdf:ORCID/asdf-regctl](https://github.com/ORCID/asdf-regctl) | | regsync | [aqua:regclient/regclient/regsync](https://github.com/regclient/regclient/regsync) [asdf:rsrchboy/asdf-regsync](https://github.com/rsrchboy/asdf-regsync) | | restic | [aqua:restic/restic](https://github.com/restic/restic) [asdf:xataz/asdf-restic](https://github.com/xataz/asdf-restic) | @@ -631,7 +631,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | ripsecret | [aqua:sirwart/ripsecrets](https://github.com/sirwart/ripsecrets) [asdf:https://github.com/boris-smidt-klarrio/asdf-ripsecrets](https://github.com/boris-smidt-klarrio/asdf-ripsecrets) | | ripsecrets | [aqua:sirwart/ripsecrets](https://github.com/sirwart/ripsecrets) [asdf:https://github.com/boris-smidt-klarrio/asdf-ripsecrets](https://github.com/boris-smidt-klarrio/asdf-ripsecrets) | | rke | [aqua:rancher/rke](https://github.com/rancher/rke) [asdf:particledecay/asdf-rke](https://github.com/particledecay/asdf-rke) | -| rlwrap | [asdf:asdf-community/asdf-rlwrap](https://github.com/asdf-community/asdf-rlwrap) | +| rlwrap | [asdf:mise-plugins/mise-rlwrap](https://github.com/mise-plugins/mise-rlwrap) | | ruby | [core:ruby](https://mise.jdx.dev/lang/ruby.html) | | ruff | [aqua:astral-sh/ruff](https://github.com/astral-sh/ruff) [ubi:astral-sh/ruff](https://github.com/astral-sh/ruff) [asdf:simhem/asdf-ruff](https://github.com/simhem/asdf-ruff) | | rust | [core:rust](https://mise.jdx.dev/lang/rust.html) [asdf:code-lever/asdf-rust](https://github.com/code-lever/asdf-rust) | @@ -639,37 +639,37 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | rustic | [ubi:rustic-rs/rustic](https://github.com/rustic-rs/rustic) | | rye | [aqua:astral-sh/rye](https://github.com/astral-sh/rye) [asdf:Azuki-bar/asdf-rye](https://github.com/Azuki-bar/asdf-rye) | | saml2aws | [aqua:Versent/saml2aws](https://github.com/Versent/saml2aws) [asdf:elementalvoid/asdf-saml2aws](https://github.com/elementalvoid/asdf-saml2aws) | -| sbcl | [asdf:smashedtoatoms/asdf-sbcl](https://github.com/smashedtoatoms/asdf-sbcl) | -| sbt | [asdf:bram2000/asdf-sbt](https://github.com/bram2000/asdf-sbt) | -| scala | [asdf:asdf-community/asdf-scala](https://github.com/asdf-community/asdf-scala) [vfox:version-fox/vfox-scala](https://github.com/version-fox/vfox-scala) | -| scala-cli | [ubi:VirtusLab/scala-cli](https://github.com/VirtusLab/scala-cli) [asdf:asdf-community/asdf-scala-cli](https://github.com/asdf-community/asdf-scala-cli) | +| sbcl | [asdf:mise-plugins/mise-sbcl](https://github.com/mise-plugins/mise-sbcl) | +| sbt | [asdf:mise-plugins/mise-sbt](https://github.com/mise-plugins/mise-sbt) | +| scala | [asdf:mise-plugins/mise-scala](https://github.com/mise-plugins/mise-scala) [vfox:mise-plugins/vfox-scala](https://github.com/mise-plugins/vfox-scala) | +| scala-cli | [ubi:VirtusLab/scala-cli](https://github.com/VirtusLab/scala-cli) [asdf:mise-plugins/mise-scala-cli](https://github.com/mise-plugins/mise-scala-cli) | | scaleway | [aqua:scaleway/scaleway-cli](https://github.com/scaleway/scaleway-cli) [asdf:albarralnunez/asdf-plugin-scaleway-cli](https://github.com/albarralnunez/asdf-plugin-scaleway-cli) | | scalingo-cli | [aqua:Scalingo/cli](https://github.com/Scalingo/cli) [asdf:brandon-welsch/asdf-scalingo-cli](https://github.com/brandon-welsch/asdf-scalingo-cli) | | scarb | [ubi:software-mansion/scarb](https://github.com/software-mansion/scarb) [asdf:software-mansion/asdf-scarb](https://github.com/software-mansion/asdf-scarb) | | sccache | [ubi:mozilla/sccache](https://github.com/mozilla/sccache) [asdf:emersonmx/asdf-sccache](https://github.com/emersonmx/asdf-sccache) | -| schemacrawler | [asdf:davidecavestro/asdf-schemacrawler](https://github.com/davidecavestro/asdf-schemacrawler) | +| schemacrawler | [asdf:mise-plugins/mise-schemacrawler](https://github.com/mise-plugins/mise-schemacrawler) | | scie-pants | [ubi:pantsbuild/scie-pants](https://github.com/pantsbuild/scie-pants) [asdf:robzr/asdf-scie-pants](https://github.com/robzr/asdf-scie-pants) | -| seed7 | [asdf:susurri/asdf-seed7](https://github.com/susurri/asdf-seed7) | -| semgrep | [asdf:brentjanderson/asdf-semgrep](https://github.com/brentjanderson/asdf-semgrep) | -| semtag | [asdf:junminahn/asdf-semtag](https://github.com/junminahn/asdf-semtag) | +| seed7 | [asdf:mise-plugins/mise-seed7](https://github.com/mise-plugins/mise-seed7) | +| semgrep | [asdf:mise-plugins/mise-semgrep](https://github.com/mise-plugins/mise-semgrep) | +| semtag | [asdf:mise-plugins/mise-semtag](https://github.com/mise-plugins/mise-semtag) | | semver | [aqua:fsaintjacques/semver-tool](https://github.com/fsaintjacques/semver-tool) [asdf:mathew-fleisch/asdf-semver](https://github.com/mathew-fleisch/asdf-semver) | -| sentinel | [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | +| sentinel | [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | | sentry | [ubi:getsentry/sentry-cli](https://github.com/getsentry/sentry-cli) | -| serf | [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | -| serverless | [asdf:pdemagny/asdf-serverless](https://github.com/pdemagny/asdf-serverless) | -| setup-envtest | [asdf:pmalek/mise-setup-envtest](https://github.com/pmalek/mise-setup-envtest) | +| serf | [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | +| serverless | [asdf:mise-plugins/mise-serverless](https://github.com/mise-plugins/mise-serverless) | +| setup-envtest | [asdf:mise-plugins/mise-setup-envtest](https://github.com/mise-plugins/mise-setup-envtest) | | shell2http | [aqua:msoap/shell2http](https://github.com/msoap/shell2http) [asdf:ORCID/asdf-shell2http](https://github.com/ORCID/asdf-shell2http) | | shellcheck | [aqua:koalaman/shellcheck](https://github.com/koalaman/shellcheck) [ubi:koalaman/shellcheck](https://github.com/koalaman/shellcheck) [asdf:luizm/asdf-shellcheck](https://github.com/luizm/asdf-shellcheck) | | shellspec | [aqua:shellspec/shellspec](https://github.com/shellspec/shellspec) [asdf:poikilotherm/asdf-shellspec](https://github.com/poikilotherm/asdf-shellspec) | | shfmt | [aqua:mvdan/sh](https://github.com/mvdan/sh) [asdf:luizm/asdf-shfmt](https://github.com/luizm/asdf-shfmt) | -| shorebird | [asdf:valian-ca/asdf-shorebird](https://github.com/valian-ca/asdf-shorebird) | +| shorebird | [asdf:mise-plugins/mise-shorebird](https://github.com/mise-plugins/mise-shorebird) | | sinker | [aqua:plexsystems/sinker](https://github.com/plexsystems/sinker) [asdf:elementalvoid/asdf-sinker](https://github.com/elementalvoid/asdf-sinker) | | skaffold | [aqua:GoogleContainerTools/skaffold](https://github.com/GoogleContainerTools/skaffold) [asdf:nklmilojevic/asdf-skaffold](https://github.com/nklmilojevic/asdf-skaffold) | | skate | [aqua:charmbracelet/skate](https://github.com/charmbracelet/skate) [asdf:chessmango/asdf-skate](https://github.com/chessmango/asdf-skate) | | sloth | [aqua:slok/sloth](https://github.com/slok/sloth) [asdf:slok/asdf-sloth](https://github.com/slok/asdf-sloth) | | slsa-verifier | [ubi:slsa-framework/slsa-verifier](https://github.com/slsa-framework/slsa-verifier) | -| smithy | [asdf:aws/asdf-smithy](https://github.com/aws/asdf-smithy) | -| smlnj | [asdf:samontea/asdf-smlnj](https://github.com/samontea/asdf-smlnj) | +| smithy | [asdf:mise-plugins/mise-smithy](https://github.com/mise-plugins/mise-smithy) | +| smlnj | [asdf:mise-plugins/mise-smlnj](https://github.com/mise-plugins/mise-smlnj) | | snyk | [aqua:snyk/cli](https://github.com/snyk/cli) [asdf:nirfuchs/asdf-snyk](https://github.com/nirfuchs/asdf-snyk) | | soft-serve | [ubi:charmbracelet/soft-serve](https://github.com/charmbracelet/soft-serve) [asdf:chessmango/asdf-soft-serve](https://github.com/chessmango/asdf-soft-serve) | | solidity | [ubi:ethereum/solidity](https://github.com/ethereum/solidity) [asdf:diegodorado/asdf-solidity](https://github.com/diegodorado/asdf-solidity) | @@ -677,18 +677,18 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | sops | [ubi:getsops/sops](https://github.com/getsops/sops) [asdf:mise-plugins/mise-sops](https://github.com/mise-plugins/mise-sops) | | sopstool | [aqua:ibotta/sopstool](https://github.com/ibotta/sopstool) [asdf:elementalvoid/asdf-sopstool](https://github.com/elementalvoid/asdf-sopstool) | | soracom | [ubi:soracom/soracom-cli](https://github.com/soracom/soracom-cli) [asdf:gr1m0h/asdf-soracom](https://github.com/gr1m0h/asdf-soracom) | -| sourcery | [asdf:younke/asdf-sourcery](https://github.com/younke/asdf-sourcery) | +| sourcery | [asdf:mise-plugins/mise-sourcery](https://github.com/mise-plugins/mise-sourcery) | | spacectl | [aqua:spacelift-io/spacectl](https://github.com/spacelift-io/spacectl) [asdf:bodgit/asdf-spacectl](https://github.com/bodgit/asdf-spacectl) | | spago | [ubi:purescript/spago](https://github.com/purescript/spago) [asdf:jrrom/asdf-spago](https://github.com/jrrom/asdf-spago) | | spark | [asdf:mise-plugins/mise-spark](https://github.com/mise-plugins/mise-spark) | | spectral | [aqua:stoplightio/spectral](https://github.com/stoplightio/spectral) [asdf:vbyrd/asdf-spectral](https://github.com/vbyrd/asdf-spectral) | | spin | [aqua:spinnaker/spin](https://github.com/spinnaker/spin) [asdf:pavloos/asdf-spin](https://github.com/pavloos/asdf-spin) | -| spring-boot | [asdf:joschi/asdf-spring-boot](https://github.com/joschi/asdf-spring-boot) | +| spring-boot | [asdf:mise-plugins/mise-spring-boot](https://github.com/mise-plugins/mise-spring-boot) | | spruce | [aqua:geofffranks/spruce](https://github.com/geofffranks/spruce) [asdf:woneill/asdf-spruce](https://github.com/woneill/asdf-spruce) | -| sqlite | [asdf:cLupus/asdf-sqlite](https://github.com/cLupus/asdf-sqlite) | +| sqlite | [asdf:mise-plugins/mise-sqlite](https://github.com/mise-plugins/mise-sqlite) | | sqlite3def | [aqua:sqldef/sqldef/sqlite3def](https://github.com/sqldef/sqldef/sqlite3def) | -| sshuttle | [asdf:xanmanning/asdf-sshuttle](https://github.com/xanmanning/asdf-sshuttle) | -| stack | [aqua:commercialhaskell/stack](https://github.com/commercialhaskell/stack) [asdf:sestrella/asdf-ghcup](https://github.com/sestrella/asdf-ghcup) | +| sshuttle | [asdf:mise-plugins/mise-sshuttle](https://github.com/mise-plugins/mise-sshuttle) | +| stack | [aqua:commercialhaskell/stack](https://github.com/commercialhaskell/stack) [asdf:mise-plugins/mise-ghcup](https://github.com/mise-plugins/mise-ghcup) | | starboard | [aqua:aquasecurity/starboard](https://github.com/aquasecurity/starboard) [asdf:zufardhiyaulhaq/asdf-starboard](https://github.com/zufardhiyaulhaq/asdf-starboard) | | starknet-foundry | [ubi:foundry-rs/starknet-foundry](https://github.com/foundry-rs/starknet-foundry) | | starknet-foundry-sncast | [ubi:foundry-rs/starknet-foundry](https://github.com/foundry-rs/starknet-foundry) | @@ -705,30 +705,30 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | svu | [aqua:caarlos0/svu](https://github.com/caarlos0/svu) [asdf:asdf-community/asdf-svu](https://github.com/asdf-community/asdf-svu) | | swag | [aqua:swaggo/swag](https://github.com/swaggo/swag) [asdf:behoof4mind/asdf-swag](https://github.com/behoof4mind/asdf-swag) | | swift | [core:swift](https://mise.jdx.dev/lang/swift.html) | -| swift-package-list | [asdf:MacPaw/asdf-swift-package-list](https://github.com/MacPaw/asdf-swift-package-list) | -| swiftformat | [asdf:younke/asdf-swiftformat](https://github.com/younke/asdf-swiftformat) | -| swiftgen | [asdf:younke/asdf-swiftgen](https://github.com/younke/asdf-swiftgen) | -| swiftlint | [asdf:klundberg/asdf-swiftlint](https://github.com/klundberg/asdf-swiftlint) | -| swiprolog | [asdf:mracos/asdf-swiprolog](https://github.com/mracos/asdf-swiprolog) | +| swift-package-list | [asdf:mise-plugins/mise-swift-package-list](https://github.com/mise-plugins/mise-swift-package-list) | +| swiftformat | [asdf:mise-plugins/mise-swiftformat](https://github.com/mise-plugins/mise-swiftformat) | +| swiftgen | [asdf:mise-plugins/mise-swiftgen](https://github.com/mise-plugins/mise-swiftgen) | +| swiftlint | [asdf:mise-plugins/mise-swiftlint](https://github.com/mise-plugins/mise-swiftlint) | +| swiprolog | [asdf:mise-plugins/mise-swiprolog](https://github.com/mise-plugins/mise-swiprolog) | | syft | [aqua:anchore/syft](https://github.com/anchore/syft) [asdf:davidgp1701/asdf-syft](https://github.com/davidgp1701/asdf-syft) | | talhelper | [aqua:budimanjojo/talhelper](https://github.com/budimanjojo/talhelper) [asdf:bjw-s/asdf-talhelper](https://github.com/bjw-s/asdf-talhelper) | | talos | [ubi:siderolabs/talos](https://github.com/siderolabs/talos) [asdf:particledecay/asdf-talos](https://github.com/particledecay/asdf-talos) | | talosctl | [ubi:siderolabs/talos](https://github.com/siderolabs/talos) [asdf:bjw-s/asdf-talosctl](https://github.com/bjw-s/asdf-talosctl) | | tanka | [aqua:grafana/tanka](https://github.com/grafana/tanka) [asdf:trotttrotttrott/asdf-tanka](https://github.com/trotttrotttrott/asdf-tanka) | -| tanzu | [asdf:vmware-tanzu/tanzu-plug-in-for-asdf](https://github.com/vmware-tanzu/tanzu-plug-in-for-asdf) | +| tanzu | [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | | taplo | [ubi:tamasfe/taplo](https://github.com/tamasfe/taplo) [cargo:taplo-cli](https://crates.io/crates/taplo-cli) | | task | [ubi:go-task/task](https://github.com/go-task/task) [asdf:particledecay/asdf-task](https://github.com/particledecay/asdf-task) | | tctl | [aqua:temporalio/tctl](https://github.com/temporalio/tctl) [asdf:eko/asdf-tctl](https://github.com/eko/asdf-tctl) | | tekton | [aqua:tektoncd/cli](https://github.com/tektoncd/cli) [asdf:johnhamelink/asdf-tekton-cli](https://github.com/johnhamelink/asdf-tekton-cli) | -| teleport-community | [asdf:MaloPolese/asdf-teleport-community](https://github.com/MaloPolese/asdf-teleport-community) | -| teleport-ent | [asdf:highb/asdf-teleport-ent](https://github.com/highb/asdf-teleport-ent) | +| teleport-community | [asdf:mise-plugins/mise-teleport-community](https://github.com/mise-plugins/mise-teleport-community) | +| teleport-ent | [asdf:mise-plugins/mise-teleport-ent](https://github.com/mise-plugins/mise-teleport-ent) | | telepresence | [aqua:telepresenceio/telepresence](https://github.com/telepresenceio/telepresence) [asdf:pirackr/asdf-telepresence](https://github.com/pirackr/asdf-telepresence) | | teller | [aqua:tellerops/teller](https://github.com/tellerops/teller) [asdf:pdemagny/asdf-teller](https://github.com/pdemagny/asdf-teller) | | temporal | [aqua:temporalio/temporal](https://github.com/temporalio/temporal) [asdf:asdf-community/asdf-temporal](https://github.com/asdf-community/asdf-temporal) | | terradozer | [aqua:jckuester/terradozer](https://github.com/jckuester/terradozer) [asdf:chessmango/asdf-terradozer](https://github.com/chessmango/asdf-terradozer) | -| terraform | [aqua:hashicorp/terraform](https://github.com/hashicorp/terraform) [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) [vfox:enochchau/vfox-terraform](https://github.com/enochchau/vfox-terraform) | +| terraform | [aqua:hashicorp/terraform](https://github.com/hashicorp/terraform) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) [vfox:mise-plugins/vfox-terraform](https://github.com/mise-plugins/vfox-terraform) | | terraform-docs | [aqua:terraform-docs/terraform-docs](https://github.com/terraform-docs/terraform-docs) [asdf:looztra/asdf-terraform-docs](https://github.com/looztra/asdf-terraform-docs) | -| terraform-ls | [aqua:hashicorp/terraform-ls](https://github.com/hashicorp/terraform-ls) [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | +| terraform-ls | [aqua:hashicorp/terraform-ls](https://github.com/hashicorp/terraform-ls) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | | terraform-lsp | [aqua:juliosueiras/terraform-lsp](https://github.com/juliosueiras/terraform-lsp) [asdf:bartlomiejdanek/asdf-terraform-lsp](https://github.com/bartlomiejdanek/asdf-terraform-lsp) | | terraform-validator | [aqua:thazelart/terraform-validator](https://github.com/thazelart/terraform-validator) [asdf:looztra/asdf-terraform-validator](https://github.com/looztra/asdf-terraform-validator) | | terraformer | [aqua:GoogleCloudPlatform/terraformer](https://github.com/GoogleCloudPlatform/terraformer) [asdf:gr1m0h/asdf-terraformer](https://github.com/gr1m0h/asdf-terraformer) | @@ -736,7 +736,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | terramate | [aqua:terramate-io/terramate](https://github.com/terramate-io/terramate) [asdf:martinlindner/asdf-terramate](https://github.com/martinlindner/asdf-terramate) | | terrascan | [aqua:tenable/terrascan](https://github.com/tenable/terrascan) [asdf:hpdobrica/asdf-terrascan](https://github.com/hpdobrica/asdf-terrascan) | | tf-summarize | [aqua:dineshba/tf-summarize](https://github.com/dineshba/tf-summarize) [asdf:adamcrews/asdf-tf-summarize](https://github.com/adamcrews/asdf-tf-summarize) | -| tfc-agent | [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | +| tfc-agent | [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | | tfctl | [aqua:flux-iac/tofu-controller/tfctl](https://github.com/flux-iac/tofu-controller/tfctl) [asdf:deas/asdf-tfctl](https://github.com/deas/asdf-tfctl) | | tfenv | [aqua:tfutils/tfenv](https://github.com/tfutils/tfenv) [asdf:carlduevel/asdf-tfenv](https://github.com/carlduevel/asdf-tfenv) | | tflint | [aqua:terraform-linters/tflint](https://github.com/terraform-linters/tflint) [ubi:terraform-linters/tflint](https://github.com/terraform-linters/tflint) [asdf:skyzyx/asdf-tflint](https://github.com/skyzyx/asdf-tflint) | @@ -746,15 +746,15 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | tfstate-lookup | [aqua:fujiwara/tfstate-lookup](https://github.com/fujiwara/tfstate-lookup) [asdf:carnei-ro/asdf-tfstate-lookup](https://github.com/carnei-ro/asdf-tfstate-lookup) | | tfswitch | [ubi:warrensbox/terraform-switcher](https://github.com/warrensbox/terraform-switcher) [asdf:iul1an/asdf-tfswitch](https://github.com/iul1an/asdf-tfswitch) | | tfupdate | [aqua:minamijoyo/tfupdate](https://github.com/minamijoyo/tfupdate) [asdf:yuokada/asdf-tfupdate](https://github.com/yuokada/asdf-tfupdate) | -| thrift | [asdf:alisaifee/asdf-thrift](https://github.com/alisaifee/asdf-thrift) | +| thrift | [asdf:mise-plugins/mise-thrift](https://github.com/mise-plugins/mise-thrift) | | tilt | [aqua:tilt-dev/tilt](https://github.com/tilt-dev/tilt) [asdf:eaceaser/asdf-tilt](https://github.com/eaceaser/asdf-tilt) | | timoni | [aqua:stefanprodan/timoni](https://github.com/stefanprodan/timoni) [asdf:Smana/asdf-timoni](https://github.com/Smana/asdf-timoni) | | tiny | [asdf:mise-plugins/mise-tiny](https://github.com/mise-plugins/mise-tiny) | -| tinytex | [asdf:Fbrisset/asdf-tinytex](https://github.com/Fbrisset/asdf-tinytex) | +| tinytex | [asdf:mise-plugins/mise-tinytex](https://github.com/mise-plugins/mise-tinytex) | | titan | [ubi:titan-data/titan](https://github.com/titan-data/titan) [asdf:gabitchov/asdf-titan](https://github.com/gabitchov/asdf-titan) | -| tmux | [asdf:Dabolus/asdf-tmux](https://github.com/Dabolus/asdf-tmux) | +| tmux | [asdf:mise-plugins/mise-tmux](https://github.com/mise-plugins/mise-tmux) | | tokei | [ubi:XAMPPRocky/tokei](https://github.com/XAMPPRocky/tokei) [asdf:gasuketsu/asdf-tokei](https://github.com/gasuketsu/asdf-tokei) | -| tomcat | [asdf:mbutov/asdf-tomcat](https://github.com/mbutov/asdf-tomcat) | +| tomcat | [asdf:mise-plugins/mise-tomcat](https://github.com/mise-plugins/mise-tomcat) | | tonnage | [ubi:elementalvoid/tonnage](https://github.com/elementalvoid/tonnage) [asdf:elementalvoid/asdf-tonnage](https://github.com/elementalvoid/asdf-tonnage) | | traefik | [ubi:traefik/traefik](https://github.com/traefik/traefik) [asdf:Dabolus/asdf-traefik](https://github.com/Dabolus/asdf-traefik) | | transifex | [ubi:transifex/cli](https://github.com/transifex/cli) [asdf:ORCID/asdf-transifex](https://github.com/ORCID/asdf-transifex) | @@ -764,10 +764,10 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | trivy | [aqua:aquasecurity/trivy](https://github.com/aquasecurity/trivy) [asdf:zufardhiyaulhaq/asdf-trivy](https://github.com/zufardhiyaulhaq/asdf-trivy) | | tsuru | [ubi:tsuru/tsuru-client](https://github.com/tsuru/tsuru-client) [asdf:virtualstaticvoid/asdf-tsuru](https://github.com/virtualstaticvoid/asdf-tsuru) | | ttyd | [aqua:tsl0922/ttyd](https://github.com/tsl0922/ttyd) [asdf:ivanvc/asdf-ttyd](https://github.com/ivanvc/asdf-ttyd) | -| tuist | [asdf:asdf-community/asdf-tuist](https://github.com/asdf-community/asdf-tuist) | +| tuist | [asdf:mise-plugins/mise-tuist](https://github.com/mise-plugins/mise-tuist) | | typos | [aqua:crate-ci/typos](https://github.com/crate-ci/typos) [asdf:aschiavon91/asdf-typos](https://github.com/aschiavon91/asdf-typos) | | typst | [aqua:typst/typst](https://github.com/typst/typst) [asdf:stephane-klein/asdf-typst](https://github.com/stephane-klein/asdf-typst) | -| uaa | [ubi:cloudfoundry/uaa-cli](https://github.com/cloudfoundry/uaa-cli) [asdf:vmware-tanzu/tanzu-plug-in-for-asdf](https://github.com/vmware-tanzu/tanzu-plug-in-for-asdf) | +| uaa | [ubi:cloudfoundry/uaa-cli](https://github.com/cloudfoundry/uaa-cli) [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | | ubi | [ubi:houseabsolute/ubi](https://github.com/houseabsolute/ubi) | | unison | [ubi:unisonweb/unison](https://github.com/unisonweb/unison) [asdf:susurri/asdf-unison](https://github.com/susurri/asdf-unison) | | upctl | [aqua:UpCloudLtd/upcloud-cli](https://github.com/UpCloudLtd/upcloud-cli) | @@ -777,57 +777,57 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | usage | [ubi:jdx/usage](https://github.com/jdx/usage) [asdf:jdx/mise-usage](https://github.com/jdx/mise-usage) | | usql | [aqua:xo/usql](https://github.com/xo/usql) [asdf:itspngu/asdf-usql](https://github.com/itspngu/asdf-usql) | | uv | [aqua:astral-sh/uv](https://github.com/astral-sh/uv) [asdf:asdf-community/asdf-uv](https://github.com/asdf-community/asdf-uv) | -| v | [asdf:jthegedus/asdf-v](https://github.com/jthegedus/asdf-v) | +| v | [asdf:mise-plugins/mise-v](https://github.com/mise-plugins/mise-v) | | vacuum | [aqua:daveshanley/vacuum](https://github.com/daveshanley/vacuum) | | vale | [aqua:errata-ai/vale](https://github.com/errata-ai/vale) [asdf:pdemagny/asdf-vale](https://github.com/pdemagny/asdf-vale) | | vals | [aqua:helmfile/vals](https://github.com/helmfile/vals) [asdf:dex4er/asdf-vals](https://github.com/dex4er/asdf-vals) | -| vault | [aqua:hashicorp/vault](https://github.com/hashicorp/vault) [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | +| vault | [aqua:hashicorp/vault](https://github.com/hashicorp/vault) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | | vcluster | [aqua:loft-sh/vcluster](https://github.com/loft-sh/vcluster) [asdf:https://gitlab.com/wt0f/asdf-vcluster](https://gitlab.com/wt0f/asdf-vcluster) | -| velad | [asdf:pdemagny/asdf-velad](https://github.com/pdemagny/asdf-velad) | +| velad | [asdf:mise-plugins/mise-velad](https://github.com/mise-plugins/mise-velad) | | velero | [aqua:vmware-tanzu/velero](https://github.com/vmware-tanzu/velero) [asdf:looztra/asdf-velero](https://github.com/looztra/asdf-velero) | | vendir | [aqua:carvel-dev/vendir](https://github.com/carvel-dev/vendir) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | | venom | [aqua:ovh/venom](https://github.com/ovh/venom) [asdf:aabouzaid/asdf-venom](https://github.com/aabouzaid/asdf-venom) | | vhs | [aqua:charmbracelet/vhs](https://github.com/charmbracelet/vhs) [asdf:chessmango/asdf-vhs](https://github.com/chessmango/asdf-vhs) | | viddy | [aqua:sachaos/viddy](https://github.com/sachaos/viddy) [asdf:ryodocx/asdf-viddy](https://github.com/ryodocx/asdf-viddy) | -| vim | [asdf:tsuyoshicho/asdf-vim](https://github.com/tsuyoshicho/asdf-vim) | -| virtualos | [asdf:tuist/asdf-virtualos](https://github.com/tuist/asdf-virtualos) | +| vim | [asdf:mise-plugins/mise-vim](https://github.com/mise-plugins/mise-vim) | +| virtualos | [asdf:mise-plugins/mise-virtualos](https://github.com/mise-plugins/mise-virtualos) | | vivid | [ubi:sharkdp/vivid](https://github.com/sharkdp/vivid) | -| vlang | [vfox:ahai-code/vfox-vlang](https://github.com/ahai-code/vfox-vlang) | -| vlt | [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | +| vlang | [vfox:mise-plugins/vfox-vlang](https://github.com/mise-plugins/vfox-vlang) | +| vlt | [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | | vultr | [ubi:vultr/vultr-cli](https://github.com/vultr/vultr-cli) [asdf:ikuradon/asdf-vultr-cli](https://github.com/ikuradon/asdf-vultr-cli) | | wait-for-gh-rate-limit | [ubi:jdx/wait-for-gh-rate-limit](https://github.com/jdx/wait-for-gh-rate-limit) | -| wasi-sdk | [asdf:coolreader18/asdf-wasi-sdk](https://github.com/coolreader18/asdf-wasi-sdk) | -| wasm3 | [asdf:tachyonicbytes/asdf-wasm3](https://github.com/tachyonicbytes/asdf-wasm3) | +| wasi-sdk | [asdf:mise-plugins/mise-wasi-sdk](https://github.com/mise-plugins/mise-wasi-sdk) | +| wasm3 | [asdf:mise-plugins/mise-wasm3](https://github.com/mise-plugins/mise-wasm3) | | wasm4 | [ubi:aduros/wasm4](https://github.com/aduros/wasm4) [asdf:jtakakura/asdf-wasm4](https://github.com/jtakakura/asdf-wasm4) | | wasmer | [aqua:wasmerio/wasmer](https://github.com/wasmerio/wasmer) [asdf:tachyonicbytes/asdf-wasmer](https://github.com/tachyonicbytes/asdf-wasmer) | | wasmtime | [aqua:bytecodealliance/wasmtime](https://github.com/bytecodealliance/wasmtime) [asdf:tachyonicbytes/asdf-wasmtime](https://github.com/tachyonicbytes/asdf-wasmtime) | | watchexec | [ubi:watchexec/watchexec](https://github.com/watchexec/watchexec) [asdf:nyrst/asdf-watchexec](https://github.com/nyrst/asdf-watchexec) | -| waypoint | [aqua:hashicorp/waypoint](https://github.com/hashicorp/waypoint) [asdf:asdf-community/asdf-hashicorp](https://github.com/asdf-community/asdf-hashicorp) | +| waypoint | [aqua:hashicorp/waypoint](https://github.com/hashicorp/waypoint) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | | weave-gitops | [ubi:weaveworks/weave-gitops](https://github.com/weaveworks/weave-gitops) [asdf:deas/asdf-weave-gitops](https://github.com/deas/asdf-weave-gitops) | | websocat | [aqua:vi/websocat](https://github.com/vi/websocat) [asdf:bdellegrazie/asdf-websocat](https://github.com/bdellegrazie/asdf-websocat) | | wren | [ubi:wren-lang/wren-cli](https://github.com/wren-lang/wren-cli) [asdf:jtakakura/asdf-wren-cli](https://github.com/jtakakura/asdf-wren-cli) | -| wrk | [asdf:ivanvc/asdf-wrk](https://github.com/ivanvc/asdf-wrk) | +| wrk | [asdf:mise-plugins/mise-wrk](https://github.com/mise-plugins/mise-wrk) | | wtfutil | [aqua:wtfutil/wtf](https://github.com/wtfutil/wtf) [asdf:NeoHsu/asdf-wtfutil](https://github.com/NeoHsu/asdf-wtfutil) | | xc | [aqua:joerdav/xc](https://github.com/joerdav/xc) [asdf:airtonix/asdf-xc](https://github.com/airtonix/asdf-xc) | | xcbeautify | [ubi:cpisciotta/xcbeautify](https://github.com/cpisciotta/xcbeautify) [asdf:mise-plugins/asdf-xcbeautify](https://github.com/mise-plugins/asdf-xcbeautify) | -| xchtmlreport | [asdf:younke/asdf-xchtmlreport](https://github.com/younke/asdf-xchtmlreport) | -| xcodegen | [asdf:younke/asdf-xcodegen](https://github.com/younke/asdf-xcodegen) | -| xcresultparser | [asdf:MacPaw/asdf-xcresultparser](https://github.com/MacPaw/asdf-xcresultparser) | +| xchtmlreport | [asdf:mise-plugins/mise-xchtmlreport](https://github.com/mise-plugins/mise-xchtmlreport) | +| xcodegen | [asdf:mise-plugins/mise-xcodegen](https://github.com/mise-plugins/mise-xcodegen) | +| xcresultparser | [asdf:mise-plugins/mise-xcresultparser](https://github.com/mise-plugins/mise-xcresultparser) | | xh | [aqua:ducaale/xh](https://github.com/ducaale/xh) [ubi:ducaale/xh](https://github.com/ducaale/xh) [asdf:NeoHsu/asdf-xh](https://github.com/NeoHsu/asdf-xh) | -| yadm | [asdf:particledecay/asdf-yadm](https://github.com/particledecay/asdf-yadm) | +| yadm | [asdf:mise-plugins/mise-yadm](https://github.com/mise-plugins/mise-yadm) | | yamlfmt | [aqua:google/yamlfmt](https://github.com/google/yamlfmt) [asdf:mise-plugins/asdf-yamlfmt](https://github.com/mise-plugins/asdf-yamlfmt) | | yamllint | [pipx:yamllint](https://pypi.org/project/yamllint) [asdf:ericcornelissen/asdf-yamllint](https://github.com/ericcornelissen/asdf-yamllint) | -| yamlscript | [asdf:FeryET/asdf-yamlscript](https://github.com/FeryET/asdf-yamlscript) | -| yarn | [asdf:mise-plugins/asdf-yarn](https://github.com/mise-plugins/asdf-yarn) | -| yay | [asdf:aaaaninja/asdf-yay](https://github.com/aaaaninja/asdf-yay) | +| yamlscript | [asdf:mise-plugins/mise-yamlscript](https://github.com/mise-plugins/mise-yamlscript) | +| yarn | [asdf:mise-plugins/mise-yarn](https://github.com/mise-plugins/mise-yarn) | +| yay | [asdf:mise-plugins/mise-yay](https://github.com/mise-plugins/mise-yay) | | yazi | [aqua:sxyazi/yazi](https://github.com/sxyazi/yazi) | | yj | [ubi:sclevine/yj](https://github.com/sclevine/yj) [asdf:ryodocx/asdf-yj](https://github.com/ryodocx/asdf-yj) | | yor | [aqua:bridgecrewio/yor](https://github.com/bridgecrewio/yor) [asdf:ordinaryexperts/asdf-yor](https://github.com/ordinaryexperts/asdf-yor) | -| youtube-dl | [asdf:iul1an/asdf-youtube-dl](https://github.com/iul1an/asdf-youtube-dl) | +| youtube-dl | [asdf:mise-plugins/mise-youtube-dl](https://github.com/mise-plugins/mise-youtube-dl) | | yq | [ubi:mikefarah/yq](https://github.com/mikefarah/yq) [asdf:sudermanjr/asdf-yq](https://github.com/sudermanjr/asdf-yq) | | yt-dlp | [ubi:yt-dlp/yt-dlp](https://github.com/yt-dlp/yt-dlp) [asdf:duhow/asdf-yt-dlp](https://github.com/duhow/asdf-yt-dlp) | | ytt | [aqua:carvel-dev/ytt](https://github.com/carvel-dev/ytt) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | -| zbctl | [asdf:camunda-community-hub/asdf-zbctl](https://github.com/camunda-community-hub/asdf-zbctl) | +| zbctl | [asdf:mise-plugins/mise-zbctl](https://github.com/mise-plugins/mise-zbctl) | | zellij | [ubi:zellij-org/zellij](https://github.com/zellij-org/zellij) [asdf:chessmango/asdf-zellij](https://github.com/chessmango/asdf-zellij) | | zephyr | [ubi:MaybeJustJames/zephyr](https://github.com/MaybeJustJames/zephyr) [asdf:nsaunders/asdf-zephyr](https://github.com/nsaunders/asdf-zephyr) | | zig | [core:zig](https://mise.jdx.dev/lang/zig.html) | @@ -835,4 +835,4 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | zls | [aqua:zigtools/zls](https://github.com/zigtools/zls) [ubi:zigtools/zls](https://github.com/zigtools/zls) | | zola | [ubi:getzola/zola](https://github.com/getzola/zola) [asdf:salasrod/asdf-zola](https://github.com/salasrod/asdf-zola) | | zoxide | [ubi:ajeetdsouza/zoxide](https://github.com/ajeetdsouza/zoxide) [asdf:nyrst/asdf-zoxide](https://github.com/nyrst/asdf-zoxide) | -| zprint | [asdf:carlduevel/asdf-zprint](https://github.com/carlduevel/asdf-zprint) | +| zprint | [asdf:mise-plugins/mise-zprint](https://github.com/mise-plugins/mise-zprint) | diff --git a/registry.toml b/registry.toml index cdf0b153fa..405a901443 100644 --- a/registry.toml +++ b/registry.toml @@ -6,9 +6,12 @@ [tools] 1password.aliases = ["1password-cli", "op"] -1password.backends = ["asdf:NeoHsu/asdf-1password-cli", "aqua:1password/cli"] +1password.backends = [ + "asdf:mise-plugins/mise-1password-cli", + "aqua:1password/cli" +] # 1password.test = ["op --version", "{{version}}"] fails on CI for some reason -aapt2.backends = ["asdf:ronnnnn/asdf-aapt2"] +aapt2.backends = ["asdf:mise-plugins/mise-aapt2"] aapt2.test = ["aapt2 version 2>&1", "Android Asset Packaging Tool (aapt)"] act.backends = ["aqua:nektos/act", "ubi:nektos/act", "asdf:gr1m0h/asdf-act"] act.test = ["act --version", "act version {{version}}"] @@ -33,7 +36,7 @@ adr-tools.backends = [ "asdf:https://gitlab.com/td7x/asdf/adr-tools" ] adr-tools.test = ["which adr", "adr"] -ag.backends = ["asdf:koketani/asdf-ag"] +ag.backends = ["asdf:mise-plugins/mise-ag"] age.backends = ["aqua:FiloSottile/age", "asdf:threkk/asdf-age"] age.test = ["age --version", "v{{version}}"] age-plugin-yubikey.backends = [ @@ -51,7 +54,7 @@ aks-engine.backends = [ "asdf:robsonpeixoto/asdf-aks-engine" ] aks-engine.test = ["aks-engine version", "Version: v{{version}}"] -allure.backends = ["asdf:comdotlinux/asdf-allure"] +allure.backends = ["asdf:mise-plugins/mise-allure"] allure.test = ["allure --version", "{{version}}"] allurectl.backends = ["ubi:allure-framework/allurectl"] alp.backends = ["aqua:tkuchiki/alp", "asdf:asdf-community/asdf-alp"] @@ -63,16 +66,16 @@ amazon-ecr-credential-helper.backends = [ "asdf:dex4er/asdf-amazon-ecr-credential-helper" ] # this isn't working with pipx yet since it is missing ansible -# ansible-base.backends = ["pipx:ansible-base[with=ansible]", "asdf:amrox/asdf-pyapp"] -ansible-base.backends = ["asdf:amrox/asdf-pyapp"] -ant.backends = ["asdf:jackboespflug/asdf-ant"] +# ansible-base.backends = ["pipx:ansible-base[with=ansible]", "asdf:mise-plugins/mise-pyapp"] +ansible-base.backends = ["asdf:mise-plugins/mise-pyapp"] +ant.backends = ["asdf:mise-plugins/mise-ant"] apko.backends = [ "aqua:chainguard-dev/apko", "ubi:chainguard-dev/apko", "asdf:omissis/asdf-apko" ] apollo-ios.aliases = ["apollo-ios-cli"] -apollo-ios.backends = ["asdf:MacPaw/asdf-apollo-ios-cli"] +apollo-ios.backends = ["asdf:mise-plugins/mise-apollo-ios-cli"] apollo-router.backends = [ "ubi:apollographql/router", "asdf:safx/asdf-apollo-router" @@ -91,11 +94,11 @@ argocd.backends = [ "ubi:argoproj/argo-cd[exe=argocd]", "asdf:beardix/asdf-argocd" ] -asciidoctorj.backends = ["asdf:gliwka/asdf-asciidoctorj"] -assh.backends = ["asdf:zekker6/asdf-assh"] +asciidoctorj.backends = ["asdf:mise-plugins/mise-asciidoctorj"] +assh.backends = ["asdf:mise-plugins/mise-assh"] atlas.backends = ["aqua:ariga/atlas", "asdf:komi1230/asdf-atlas"] atmos.backends = ["aqua:cloudposse/atmos", "asdf:cloudposse/asdf-atmos"] -auto-doc.backends = ["asdf:looztra/asdf-auto-doc"] +auto-doc.backends = ["asdf:mise-plugins/mise-auto-doc"] aws-amplify.aliases = ["amplify"] aws-amplify.backends = [ "ubi:aws-amplify/amplify-cli[exe=amplify]", @@ -112,7 +115,7 @@ aws-iam-authenticator.backends = [ ] aws-nuke.backends = ["aqua:rebuy-de/aws-nuke", "asdf:bersalazar/asdf-aws-nuke"] aws-sam.aliases = ["aws-sam-cli"] -aws-sam.backends = ["pipx:aws-sam-cli", "asdf:amrox/asdf-pyapp"] +aws-sam.backends = ["pipx:aws-sam-cli", "asdf:mise-plugins/mise-pyapp"] # aws-sam.test = ["sam --version", "SAM CLI, version {{version}}"] # takes forever on windows in CI aws-sso.backends = [ "aqua:synfinatic/aws-sso-cli", @@ -122,8 +125,8 @@ aws-vault.backends = [ "aqua:99designs/aws-vault", "asdf:karancode/asdf-aws-vault" ] -awscli-local.backends = ["asdf:paulo-ferraz-oliveira/asdf-awscli-local"] -awsebcli.backends = ["pipx:awsebcli", "asdf:amrox/asdf-pyapp"] +awscli-local.backends = ["asdf:mise-plugins/mise-awscli-local"] +awsebcli.backends = ["pipx:awsebcli", "asdf:mise-plugins/mise-pyapp"] awsebcli.test = ["eb --version", "EB CLI {{version}}"] awsls.backends = ["ubi:jckuester/awsls", "asdf:chessmango/asdf-awsls"] awsls.test = ["awsls --version", "version: {{version}}"] @@ -135,9 +138,9 @@ awsweeper.backends = [ ] awsweeper.test = ["awsweeper --version", "version: {{version}}"] azure.aliases = ["azure-cli"] -azure.backends = ["asdf:EcoMind/asdf-azure-cli"] +azure.backends = ["asdf:mise-plugins/mise-azure-cli"] azure-functions-core-tools.backends = [ - "asdf:daveneeley/asdf-azure-functions-core-tools" + "asdf:mise-plugins/mise-azure-functions-core-tools" ] azure-kubelogin.backends = [ "aqua:Azure/kubelogin", @@ -158,7 +161,7 @@ bashbot.backends = [ "aqua:mathew-fleisch/bashbot", "asdf:mathew-fleisch/asdf-bashbot" ] -bashly.backends = ["asdf:pcrockett/asdf-bashly"] +bashly.backends = ["asdf:mise-plugins/mise-bashly"] # aqua is available but uses cargo bat.backends = [ {full = "ubi:sharkdp/bat", platforms = [ @@ -170,7 +173,7 @@ bat.backends = [ "asdf:https://gitlab.com/wt0f/asdf-bat" ] bat.test = ["bat --version", "bat {{version}}"] -bat-extras.backends = ["asdf:vhdirk/asdf-bat-extras"] +bat-extras.backends = ["asdf:mise-plugins/mise-bat-extras"] bats.backends = ["aqua:bats-core/bats-core", "asdf:timgluz/asdf-bats"] bats.os = ["linux", "macos"] bats.test = ["bats -v", "Bats"] @@ -180,13 +183,13 @@ bazelisk.backends = [ "aqua:bazelbuild/bazelisk", "asdf:josephtate/asdf-bazelisk" ] -bbr-s3-config-validator.backends = ["asdf:vmware-tanzu/tanzu-plug-in-for-asdf"] +bbr-s3-config-validator.backends = ["asdf:mise-plugins/tanzu-plug-in-for-asdf"] # not working right with ubi -# bbr-s3-config-validator.backends = ["ubi:cloudfoundry-incubator/bosh-backup-and-restore[matching=bbr-s3-config-validator,exe=bbr-s3-config-validator]", "asdf:vmware-tanzu/tanzu-plug-in-for-asdf"] +# bbr-s3-config-validator.backends = ["ubi:cloudfoundry-incubator/bosh-backup-and-restore[matching=bbr-s3-config-validator,exe=bbr-s3-config-validator]", "asdf:mise-plugins/tanzu-plug-in-for-asdf"] # bbr-s3-config-validator.os = ["linux"] # bbr-s3-config-validator.test = ["bbr-s3-config-validator --help", "{{version}}"] benthos.backends = ["aqua:benthosdev/benthos", "asdf:benthosdev/benthos-asdf"] -bfs.backends = ["asdf:virtualroot/asdf-bfs"] +bfs.backends = ["asdf:mise-plugins/mise-bfs"] binnacle.backends = ["aqua:Traackr/binnacle", "asdf:Traackr/asdf-binnacle"] bitwarden.backends = ["aqua:bitwarden/clients", "asdf:vixus0/asdf-bitwarden"] bitwarden.test = [ @@ -207,13 +210,13 @@ bombardier.backends = [ borg.backends = ["aqua:borgbackup/borg", "asdf:lwiechec/asdf-borg"] bosh.backends = [ "aqua:cloudfoundry/bosh-cli", - "asdf:vmware-tanzu/tanzu-plug-in-for-asdf" + "asdf:mise-plugins/tanzu-plug-in-for-asdf" ] bosh.test = ["bosh --version", "version {{version}}"] bosh-backup-and-restore.aliases = ["bbr"] bosh-backup-and-restore.backends = [ "ubi:cloudfoundry-incubator/bosh-backup-and-restore[matching=bbr-1]", - "asdf:vmware-tanzu/tanzu-plug-in-for-asdf" + "asdf:mise-plugins/tanzu-plug-in-for-asdf" ] bosh-backup-and-restore.os = ["linux", "macos"] bosh-backup-and-restore.test = [ @@ -224,14 +227,14 @@ bottom.backends = ["aqua:ClementTsang/bottom", "asdf:carbonteq/asdf-btm"] bottom.test = ["btm --version", "bottom {{version}}"] boundary.backends = [ "aqua:hashicorp/boundary", - "asdf:asdf-community/asdf-hashicorp" + "asdf:mise-plugins/mise-hashicorp" ] -bpkg.backends = ["asdf:bpkg/asdf-bpkg"] +bpkg.backends = ["asdf:mise-plugins/mise-bpkg"] brig.backends = ["aqua:brigadecore/brigade", "asdf:Ibotta/asdf-brig"] brig.test = ["brig version", "Brigade client: version v{{version}}"] btop.backends = ['ubi:aristocratos/btop'] btop.test = ["btop --version", "btop version: {{version}}"] -btrace.backends = ["asdf:joschi/asdf-btrace"] +btrace.backends = ["asdf:mise-plugins/mise-btrace"] buf.backends = [ "aqua:bufbuild/buf", "ubi:bufbuild/buf", @@ -269,12 +272,12 @@ cargo-make.backends = [ "asdf:mise-plugins/asdf-cargo-make" ] carp.backends = ["ubi:carp-lang/Carp[exe=carp]", "asdf:susurri/asdf-carp"] -carthage.backends = ["asdf:younke/asdf-carthage"] +carthage.backends = ["asdf:mise-plugins/mise-carthage"] ccache.backends = ["ubi:ccache/ccache", "asdf:asdf-community/asdf-ccache"] ccache.test = ["ccache --version", "ccache version {{version}}"] certstrap.backends = ["ubi:square/certstrap", "asdf:carnei-ro/asdf-certstrap"] certstrap.test = ["certstrap --version", "certstrap version {{version}}"] -cf.backends = ["asdf:mattysweeps/asdf-cf"] +cf.backends = ["asdf:mise-plugins/mise-cf"] cfssl.backends = [ "aqua:cloudflare/cfssl/cfssl", "asdf:mathew-fleisch/asdf-cfssl" @@ -285,8 +288,8 @@ cheat.backends = ["aqua:cheat/cheat", "asdf:jmoratilla/asdf-cheat-plugin"] checkov.backends = ["ubi:bridgecrewio/checkov", "asdf:bosmak/asdf-checkov"] # checkov.test = ["checkov -v", "{{version}}"] missing assets on latest release chezmoi.backends = ["ubi:twpayne/chezmoi", "asdf:joke/asdf-chezmoi"] -chezscheme.backends = ["asdf:asdf-community/asdf-chezscheme"] -chicken.backends = ["asdf:evhan/asdf-chicken"] +chezscheme.backends = ["asdf:mise-plugins/mise-chezscheme"] +chicken.backends = ["asdf:mise-plugins/mise-chicken"] chisel.backends = [ "ubi:jpillora/chisel", "go:github.com/jpillora/chisel", @@ -297,7 +300,7 @@ choose.backends = [ "cargo:choose", "asdf:carbonteq/asdf-choose" ] -chromedriver.backends = ["asdf:schinckel/asdf-chromedriver"] +chromedriver.backends = ["asdf:mise-plugins/mise-chromedriver"] cidr-merger.backends = ["ubi:zhanhb/cidr-merger", "asdf:ORCID/asdf-cidr-merger"] cidr-merger.test = ["cidr-merger --version 2>&1", "cidr merger {{version}}"] cidrchk.backends = ["ubi:mhausenblas/cidrchk", "asdf:ORCID/asdf-cidrchk"] @@ -316,17 +319,17 @@ circleci.backends = [ "ubi:CircleCI-Public/circleci-cli[exe=circleci]", "asdf:ucpr/asdf-circleci-cli" ] -clang.backends = ["asdf:higebu/asdf-llvm", "vfox:jdx/vfox-clang"] -clang-format.backends = ["asdf:higebu/asdf-llvm"] -clangd.backends = ["asdf:higebu/asdf-llvm"] +clang.backends = ["asdf:mise-plugins/mise-llvm", "vfox:mise-plugins/vfox-clang"] +clang-format.backends = ["asdf:mise-plugins/mise-llvm"] +clangd.backends = ["asdf:mise-plugins/mise-llvm"] clarinet.backends = ["ubi:hirosystems/clarinet", "asdf:alexgo-io/asdf-clarinet"] clarinet.os = ["linux", "macos"] clarinet.test = ["clarinet --version", "clarinet {{version}}"] # ubi not working on linux -# clickhouse.backends = ["ubi:ClickHouse/ClickHouse", "asdf:tinybirdco/asdf-clickhouse"] +# clickhouse.backends = ["ubi:ClickHouse/ClickHouse", "asdf:mise-plugins/mise-clickhouse"] # clickhouse.os = ["linux", "macos"] # clickhouse.test = ["ClickHouse --version", "ClickHouse local version"] -clickhouse.backends = ["asdf:tinybirdco/asdf-clickhouse"] +clickhouse.backends = ["asdf:mise-plugins/mise-clickhouse"] clj-kondo.backends = ["ubi:clj-kondo/clj-kondo", "asdf:rynkowsg/asdf-clj-kondo"] clj-kondo.test = ["clj-kondo --version", "{{version}}"] cljstyle.backends = [ @@ -335,7 +338,7 @@ cljstyle.backends = [ ] cljstyle.os = ["linux", "macos"] cljstyle.test = ["cljstyle version", "mvxcvi/cljstyle {{version}}"] -clojure.backends = ["asdf:asdf-community/asdf-clojure"] +clojure.backends = ["asdf:mise-plugins/mise-clojure"] cloud-sql-proxy.backends = [ "aqua:GoogleCloudPlatform/cloud-sql-proxy", "asdf:pbr0ck3r/asdf-cloud-sql-proxy" @@ -359,8 +362,8 @@ clusterctl.backends = [ ] clusterctl.test = ["clusterctl version", "{{version}}"] cmake.backends = [ - "asdf:asdf-community/asdf-cmake", - "vfox:version-fox/vfox-cmake" + "asdf:mise-plugins/mise-cmake", + "vfox:mise-plugins/vfox-cmake" ] cmctl.backends = ["aqua:cert-manager/cmctl", "asdf:asdf-community/asdf-cmctl"] cockroach.backends = [ @@ -368,16 +371,16 @@ cockroach.backends = [ "asdf:salasrod/asdf-cockroach" ] cockroach.test = ["cockroach version", "v{{version}}"] -cocoapods.backends = ["asdf:ronnnnn/asdf-cocoapods"] +cocoapods.backends = ["asdf:mise-plugins/mise-cocoapods"] codefresh.backends = [ "ubi:codefresh-io/cli[exe=codefresh]", "asdf:gurukulkarni/asdf-codefresh" ] -codeql.backends = ["asdf:bored-engineer/asdf-codeql"] +codeql.backends = ["asdf:mise-plugins/mise-codeql"] coder.backends = ["aqua:coder/coder", "asdf:mise-plugins/asdf-coder"] colima.backends = ["ubi:abiosoft/colima", "asdf:CrouchingMuppet/asdf-colima"] committed.backends = ["aqua:crate-ci/committed"] -conan.backends = ["pipx:conan", "asdf:amrox/asdf-pyapp"] +conan.backends = ["pipx:conan", "asdf:mise-plugins/mise-pyapp"] conan.test = ["conan --version", "Conan version {{version}}"] concourse.backends = [ "aqua:concourse/concourse/concourse", @@ -392,10 +395,7 @@ conftest.backends = [ "aqua:open-policy-agent/conftest", "asdf:looztra/asdf-conftest" ] -consul.backends = [ - "aqua:hashicorp/consul", - "asdf:asdf-community/asdf-hashicorp" -] +consul.backends = ["aqua:hashicorp/consul", "asdf:mise-plugins/mise-hashicorp"] container-structure-test.backends = [ "aqua:GoogleContainerTools/container-structure-test", "asdf:FeryET/asdf-container-structure-test" @@ -407,7 +407,7 @@ cookiecutter.backends = [ copper.backends = ["ubi:cloud66-oss/copper", "asdf:vladlosev/asdf-copper"] copper.os = ["linux", "macos"] copper.test = ["copper version", ""] -coq.backends = ["asdf:gingerhot/asdf-coq"] +coq.backends = ["asdf:mise-plugins/mise-coq"] coredns.backends = ["ubi:coredns/coredns", "asdf:s3than/asdf-coredns"] coredns.test = ["coredns --version", "CoreDNS-{{version}}"] cosign.backends = [ @@ -428,10 +428,10 @@ crane.backends = [ "asdf:dmpe/asdf-crane" ] crane.test = ["crane version", "{{version}}"] -crc.backends = ["asdf:sqtran/asdf-crc"] +crc.backends = ["asdf:mise-plugins/mise-crc"] credhub.backends = [ "aqua:cloudfoundry/credhub-cli", - "asdf:vmware-tanzu/tanzu-plug-in-for-asdf" + "asdf:mise-plugins/tanzu-plug-in-for-asdf" ] credhub.test = ["credhub --version", "CLI Version: {{version}}"] crictl.backends = [ @@ -444,8 +444,8 @@ crossplane.backends = [ "asdf:joke/asdf-crossplane-cli" ] crystal.backends = [ - "asdf:asdf-community/asdf-crystal", - "vfox:yanecc/vfox-crystal" + "asdf:mise-plugins/mise-crystal", + "vfox:mise-plugins/vfox-crystal" ] ctlptl.backends = ["aqua:tilt-dev/ctlptl", "asdf:ezcater/asdf-ctlptl"] ctop.backends = ["ubi:bcicen/ctop", "asdf:NeoHsu/asdf-ctop"] @@ -456,16 +456,16 @@ cyclonedx.backends = [ ] cyclonedx.test = ["cyclonedx --version", "{{version}}"] dagger.backends = ["aqua:dagger/dagger", "asdf:virtualstaticvoid/asdf-dagger"] -danger-js.backends = ["asdf:MontakOleg/asdf-danger-js"] +danger-js.backends = ["asdf:mise-plugins/mise-danger-js"] danger-swift.backends = ["spm:danger/swift"] dapr.backends = ["aqua:dapr/cli", "asdf:asdf-community/asdf-dapr-cli"] dapr.test = ["dapr --version", "CLI version: {{version}}"] -dart.backends = ["asdf:PatOConnor43/asdf-dart", "vfox:version-fox/vfox-dart"] +dart.backends = ["asdf:mise-plugins/mise-dart", "vfox:mise-plugins/vfox-dart"] dasel.backends = ["aqua:TomWright/dasel", "asdf:asdf-community/asdf-dasel"] databricks-cli.backends = ["ubi:databricks/cli[exe=databricks]"] databricks-cli.test = ["databricks --version", "Databricks CLI v{{version}}"] datree.backends = ["aqua:datreeio/datree", "asdf:lukeab/asdf-datree"] -daytona.backends = ["asdf:CrouchingMuppet/asdf-daytona"] +daytona.backends = ["asdf:mise-plugins/mise-daytona"] dbmate.backends = ["aqua:amacneil/dbmate", "asdf:juusujanar/asdf-dbmate"] deck.backends = ["aqua:Kong/deck", "asdf:nutellinoit/asdf-deck"] delta.backends = ["ubi:dandavison/delta", "asdf:andweeb/asdf-delta"] @@ -477,13 +477,13 @@ desk.os = ["linux", "macos"] desk.test = ["desk version", "desk {{version}}"] devspace.backends = ["aqua:devspace-sh/devspace", "asdf:NeoHsu/asdf-devspace"] # dhall seems to not provide any releases in the latest -# dhall.backends = ["aqua:dhall-lang/dhall-haskell", "asdf:aaaaninja/asdf-dhall"] -dhall.backends = ["asdf:aaaaninja/asdf-dhall"] +# dhall.backends = ["aqua:dhall-lang/dhall-haskell", "asdf:mise-plugins/mise-dhall"] +dhall.backends = ["asdf:mise-plugins/mise-dhall"] difftastic.backends = [ "ubi:wilfred/difftastic[exe=difft]", "asdf:volf52/asdf-difftastic" ] -digdag.backends = ["asdf:jtakakura/asdf-digdag"] +digdag.backends = ["asdf:mise-plugins/mise-digdag"] direnv.backends = ["aqua:direnv/direnv", "asdf:asdf-community/asdf-direnv"] dive.backends = ["ubi:wagoodman/dive", "asdf:looztra/asdf-dive"] djinni.backends = [ @@ -491,7 +491,7 @@ djinni.backends = [ "asdf:cross-language-cpp/asdf-djinni" ] # djinni.test = ["djinni-generator --version", "djinni generator version {{version}}"] # test fails on windows -dmd.backends = ["asdf:sylph01/asdf-dmd"] +dmd.backends = ["asdf:mise-plugins/mise-dmd"] docker-compose.backends = ["aqua:docker/compose"] docker-compose.test = [ "docker-cli-plugin-docker-compose --version", @@ -505,13 +505,13 @@ dockle.backends = [ "asdf:mathew-fleisch/asdf-dockle" ] doctl.backends = ["ubi:digitalocean/doctl", "asdf:maristgeek/asdf-doctl"] -doctoolchain.backends = ["asdf:joschi/asdf-doctoolchain"] +doctoolchain.backends = ["asdf:mise-plugins/mise-doctoolchain"] docuum.backends = [ "ubi:stepchowfun/docuum", "cargo:docuum", "asdf:bradym/asdf-docuum" ] -dome.backends = ["asdf:jtakakura/asdf-dome"] +dome.backends = ["asdf:mise-plugins/mise-dome"] doppler.backends = [ "ubi:DopplerHQ/cli[exe=doppler]", "asdf:takutakahashi/asdf-doppler" @@ -521,9 +521,12 @@ dotenv-linter.backends = [ "ubi:dotenv-linter/dotenv-linter", "asdf:wesleimp/asdf-dotenv-linter" ] -dotnet.backends = ["asdf:hensou/asdf-dotnet", "vfox:version-fox/vfox-dotnet"] -dotnet-core.backends = ["asdf:emersonsoares/asdf-dotnet-core"] -dotty.backends = ["asdf:asdf-community/asdf-dotty"] +dotnet.backends = [ + "asdf:mise-plugins/mise-dotnet", + "vfox:mise-plugins/vfox-dotnet" +] +dotnet-core.backends = ["asdf:mise-plugins/mise-dotnet-core"] +dotty.backends = ["asdf:mise-plugins/mise-dotty"] dprint.backends = ["aqua:dprint/dprint", "asdf:asdf-community/asdf-dprint"] draft.backends = ["aqua:Azure/draft", "asdf:kristoflemmens/asdf-draft"] driftctl.backends = ["aqua:snyk/driftctl", "asdf:nlamirault/asdf-driftctl"] @@ -538,7 +541,7 @@ dtm.backends = [ ] duf.backends = ["aqua:muesli/duf", "asdf:NeoHsu/asdf-duf"] dust.backends = ["ubi:bootandy/dust", "asdf:looztra/asdf-dust"] -dvc.backends = ["asdf:fwfurtado/asdf-dvc"] +dvc.backends = ["asdf:mise-plugins/mise-dvc"] dyff.backends = ["aqua:homeport/dyff", "asdf:https://gitlab.com/wt0f/asdf-dyff"] dynatrace-monaco.backends = [ "ubi:Dynatrace/dynatrace-configuration-as-code[exe=monaco]", @@ -555,36 +558,36 @@ editorconfig-checker.os = ["linux", "macos"] # editorconfig-checker.test = ["ec --version", "v{{version}}"] # TODO: failing from https://github.com/editorconfig-checker/editorconfig-checker/issues/409 ejson.backends = ["aqua:Shopify/ejson", "asdf:cipherstash/asdf-ejson"] eksctl.backends = ["aqua:eksctl-io/eksctl", "asdf:elementalvoid/asdf-eksctl"] -elasticsearch.backends = ["asdf:asdf-community/asdf-elasticsearch"] +elasticsearch.backends = ["asdf:mise-plugins/mise-elasticsearch"] elixir.backends = ["core:elixir"] elixir.depends = ["erlang"] -elixir-ls.backends = ["asdf:juantascon/asdf-elixir-ls"] +elixir-ls.backends = ["asdf:mise-plugins/mise-elixir-ls"] elm.backends = ["ubi:elm/compiler[exe=elm]", "asdf:asdf-community/asdf-elm"] elm.test = ["elm --version", "{{version}}"] -emsdk.backends = ["asdf:RobLoach/asdf-emsdk"] +emsdk.backends = ["asdf:mise-plugins/mise-emsdk"] envcli.backends = ["ubi:EnvCLI/EnvCLI[exe=envcli]", "asdf:zekker6/asdf-envcli"] envcli.test = ["envcli --version", "EnvCLI version {{version}}"] envsubst.backends = ["aqua:a8m/envsubst", "asdf:dex4er/asdf-envsubst"] -ephemeral-postgres.backends = ["asdf:smashedtoatoms/asdf-ephemeral-postgres"] +ephemeral-postgres.backends = ["asdf:mise-plugins/mise-ephemeral-postgres"] erlang.backends = ["core:erlang"] esc.backends = ["ubi:pulumi/esc", "asdf:fxsalazar/asdf-esc"] esc.test = ["esc version", "v{{version}}"] -esy.backends = ["asdf:asdf-community/asdf-esy"] +esy.backends = ["asdf:mise-plugins/mise-esy"] etcd.backends = [ "aqua:etcd-io/etcd", "asdf:particledecay/asdf-etcd", - "vfox:version-fox/vfox-etcd" + "vfox:mise-plugins/vfox-etcd" ] etcd.test = ["etcd --version", "etcd Version: {{version}}"] evans.backends = ["aqua:ktr0731/evans", "asdf:goki90210/asdf-evans"] -eza.backends = ["asdf:lwiechec/asdf-eza"] +eza.backends = ["asdf:mise-plugins/mise-eza"] fd.backends = [ "aqua:sharkdp/fd", "ubi:sharkdp/fd", "asdf:https://gitlab.com/wt0f/asdf-fd" ] fd.test = ["fd --version", "fd {{version}}"] -ffmpeg.backends = ["asdf:acj/asdf-ffmpeg"] +ffmpeg.backends = ["asdf:mise-plugins/mise-ffmpeg"] figma-export.backends = [ "ubi:RedMadRobot/figma-export", "asdf:younke/asdf-figma-export" @@ -615,7 +618,10 @@ flatc.backends = [ "asdf:TheOpenDictionary/asdf-flatc" ] flatc.test = ["flatc --version", "flatc version {{version}}"] -flutter.backends = ["asdf:oae/asdf-flutter", "vfox:version-fox/vfox-flutter"] +flutter.backends = [ + "asdf:mise-plugins/mise-flutter", + "vfox:mise-plugins/vfox-flutter" +] fluttergen.backends = [ "ubi:FlutterGen/flutter_gen[exe=fluttergen]", "asdf:FlutterGen/asdf-fluttergen" @@ -626,15 +632,15 @@ flux2.backends = ["aqua:fluxcd/flux2", "asdf:tablexi/asdf-flux2"] flux2.test = ["flux --version", "flux version {{version}}"] fly.backends = [ "aqua:concourse/concourse/fly", - "asdf:vmware-tanzu/tanzu-plug-in-for-asdf" + "asdf:mise-plugins/tanzu-plug-in-for-asdf" ] flyctl.backends = [ "aqua:superfly/flyctl", "ubi:superfly/flyctl", "asdf:chessmango/asdf-flyctl" ] -flyway.backends = ["asdf:junminahn/asdf-flyway"] -func-e.backends = ["tetratelabs/func-e", "asdf:carnei-ro/asdf-func-e"] +flyway.backends = ["asdf:mise-plugins/mise-flyway"] +func-e.backends = ["tetratelabs/func-e", "asdf:mise-plugins/mise-func-e"] func-e.test = ["func-e --version", "func-e version {{version}}"] furyctl.backends = ["ubi:sighupio/furyctl", "asdf:sighupio/asdf-furyctl"] furyctl.os = ["linux", "macos"] @@ -646,30 +652,30 @@ fzf.backends = [ "asdf:kompiro/asdf-fzf" ] fzf.test = ["fzf --version", "{{version}}"] -gallery-dl.backends = ["asdf:iul1an/asdf-gallery-dl"] +gallery-dl.backends = ["asdf:mise-plugins/mise-gallery-dl"] gam.backends = ["ubi:GAM-team/GAM[exe=gam]", "asdf:offbyone/asdf-gam"] gator.backends = [ "ubi:open-policy-agent/gatekeeper[exe=gator]", "asdf:MxNxPx/asdf-gator" ] -gauche.backends = ["asdf:sakuro/asdf-gauche"] -gcc-arm-none-eabi.backends = ["asdf:dlech/asdf-gcc-arm-none-eabi"] -gcloud.backends = ["asdf:jthegedus/asdf-gcloud"] -getenvoy.backends = ["asdf:asdf-community/asdf-getenvoy"] -ghc.backends = ["asdf:sestrella/asdf-ghcup"] +gauche.backends = ["asdf:mise-plugins/mise-gauche"] +gcc-arm-none-eabi.backends = ["asdf:mise-plugins/mise-gcc-arm-none-eabi"] +gcloud.backends = ["asdf:mise-plugins/mise-gcloud"] +getenvoy.backends = ["asdf:mise-plugins/mise-getenvoy"] +ghc.backends = ["asdf:mise-plugins/mise-ghcup"] ghcup.backends = [ "ubi:haskell/ghcup-hs[exe=ghcup]", - "asdf:sestrella/asdf-ghcup" + "asdf:mise-plugins/mise-ghcup" ] ghcup.os = ["linux", "macos"] ghcup.test = [ "ghcup --version", "The GHCup Haskell installer, version {{version}}" ] -ghidra.backends = ["asdf:Honeypot95/asdf-ghidra"] +ghidra.backends = ["asdf:mise-plugins/mise-ghidra"] ghorg.backends = ["aqua:gabrie30/ghorg", "asdf:gbloquel/asdf-ghorg"] ghq.backends = ["aqua:x-motemen/ghq", "asdf:kajisha/asdf-ghq"] -ginkgo.backends = ["asdf:jimmidyson/asdf-ginkgo"] +ginkgo.backends = ["asdf:mise-plugins/mise-ginkgo"] git-chglog.backends = [ "aqua:git-chglog/git-chglog", "asdf:GoodwayGroup/asdf-git-chglog" @@ -697,7 +703,7 @@ gitsign.os = ["linux", "macos"] gitsign.test = ["gitsign --version", "gitsign version v{{version}}"] gitu.backends = ["ubi:altsem/gitu", "cargo:gitu"] gitui.backends = ["aqua:extrawurst/gitui", "asdf:looztra/asdf-gitui"] -glab.backends = ["asdf:particledecay/asdf-glab"] +glab.backends = ["asdf:mise-plugins/mise-glab"] gleam.backends = ["aqua:gleam-lang/gleam", "asdf:asdf-community/asdf-gleam"] # gleam.test = ["gleam --version", "gleam {{version}}"] reporting wrong version glen.backends = ["ubi:lingrino/glen", "asdf:bradym/asdf-glen"] @@ -709,7 +715,7 @@ go-containerregistry.backends = [ "aqua:google/go-containerregistry", "asdf:dex4er/asdf-go-containerregistry" ] -go-getter.backends = ["asdf:ryodocx/asdf-go-getter"] +go-getter.backends = ["asdf:mise-plugins/mise-go-getter"] go-jira.backends = ["aqua:go-jira/jira", "asdf:dguihal/asdf-go-jira"] go-jsonnet.backends = [ "aqua:google/go-jsonnet", @@ -719,14 +725,14 @@ go-junit-report.backends = [ "ubi:jstemmer/go-junit-report", "asdf:jwillker/asdf-go-junit-report" ] -go-sdk.backends = ["asdf:yacchi/asdf-go-sdk"] +go-sdk.backends = ["asdf:mise-plugins/mise-go-sdk"] go-swagger.backends = [ "aqua:go-swagger/go-swagger", "asdf:jfreeland/asdf-go-swagger" ] go-swagger.os = ["linux", "macos"] go-swagger.test = ["swagger version", "version: v{{version}}"] -goconvey.backends = ["asdf:therounds-contrib/asdf-goconvey"] +goconvey.backends = ["asdf:mise-plugins/mise-goconvey"] gocryptfs.backends = ["aqua:rfjakob/gocryptfs", "ubi:rfjakob/gocryptfs"] gofumpt.backends = ["ubi:mvdan/gofumpt", "asdf:looztra/asdf-gofumpt"] gojq.backends = ["aqua:itchyny/gojq", "asdf:jimmidyson/asdf-gojq"] @@ -760,19 +766,19 @@ gotestsum.backends = [ "aqua:gotestyourself/gotestsum", "asdf:pmalek/mise-gotestsum" ] -graalvm.backends = ["asdf:asdf-community/asdf-graalvm"] -gradle.backends = ["aqua:gradle/gradle", "vfox:version-fox/vfox-gradle"] +graalvm.backends = ["asdf:mise-plugins/mise-graalvm"] +gradle.backends = ["aqua:gradle/gradle", "vfox:mise-plugins/vfox-gradle"] gradle.depends = ["java"] gradle.test = ["gradle -V", "Gradle"] -gradle-profiler.backends = ["asdf:joschi/asdf-gradle-profiler"] -grails.backends = ["asdf:weibemoura/asdf-grails"] -grain.backends = ["asdf:cometkim/asdf-grain"] +gradle-profiler.backends = ["asdf:mise-plugins/mise-gradle-profiler"] +grails.backends = ["asdf:mise-plugins/mise-grails"] +grain.backends = ["asdf:mise-plugins/mise-grain"] granted.backends = ["aqua:common-fate/granted", "asdf:dex4er/asdf-granted"] grex.backends = ["aqua:pemistahl/grex", "asdf:ouest/asdf-grex"] grex.test = ["grex --version", "grex {{version}}"] groovy.backends = [ - "asdf:weibemoura/asdf-groovy", - "vfox:version-fox/vfox-groovy" + "asdf:mise-plugins/mise-groovy", + "vfox:mise-plugins/vfox-groovy" ] grpc-health-probe.backends = [ "aqua:grpc-ecosystem/grpc-health-probe", @@ -785,7 +791,7 @@ grpcurl.backends = [ "asdf:asdf-community/asdf-grpcurl" ] grype.backends = ["ubi:anchore/grype", "asdf:poikilotherm/asdf-grype"] -guile.backends = ["asdf:indiebrain/asdf-guile"] +guile.backends = ["asdf:mise-plugins/mise-guile"] gum.backends = ["aqua:charmbracelet/gum", "asdf:lwiechec/asdf-gum"] gwvault.backends = [ "aqua:GoodwayGroup/gwvault", @@ -795,16 +801,16 @@ hadolint.backends = [ "ubi:hadolint/hadolint", "asdf:devlincashman/asdf-hadolint" ] -hamler.backends = ["asdf:scudelletti/asdf-hamler"] +hamler.backends = ["asdf:mise-plugins/mise-hamler"] has.backends = ["aqua:kdabir/has", "asdf:sylvainmetayer/asdf-has"] has.os = ["linux", "macos"] has.test = ["has --version", "v{{version}}"] -haskell.backends = ["asdf:asdf-community/asdf-haskell"] +haskell.backends = ["asdf:mise-plugins/mise-haskell"] hasura-cli.backends = [ "aqua:hasura/graphql-engine", "asdf:gurukulkarni/asdf-hasura" ] -haxe.backends = ["asdf:asdf-community/asdf-haxe"] +haxe.backends = ["asdf:mise-plugins/mise-haxe"] hcl2json.backends = ["aqua:tmccombs/hcl2json", "asdf:dex4er/asdf-hcl2json"] hcloud.backends = ["aqua:hetznercloud/cli", "asdf:chessmango/asdf-hcloud"] helm.backends = ["aqua:helm/helm", "asdf:Antiarchitect/asdf-helm"] @@ -813,7 +819,7 @@ helm-cr.backends = [ "asdf:Antiarchitect/asdf-helm-cr" ] helm-ct.backends = ["aqua:helm/chart-testing", "asdf:tablexi/asdf-helm-ct"] -helm-diff.backends = ["asdf:dex4er/asdf-helm-diff"] +helm-diff.backends = ["asdf:mise-plugins/mise-helm-diff"] helm-docs.backends = [ "aqua:norwoodj/helm-docs", "asdf:sudermanjr/asdf-helm-docs" @@ -822,7 +828,7 @@ helmfile.backends = ["ubi:helmfile/helmfile", "asdf:feniix/asdf-helmfile"] helmsman.backends = ["ubi:Praqma/helmsman", "asdf:luisdavim/asdf-helmsman"] heroku.aliases = ["heroku-cli"] heroku.backends = ["asdf:mise-plugins/mise-heroku-cli"] -hey.backends = ["asdf:raimon49/asdf-hey"] +hey.backends = ["asdf:mise-plugins/mise-hey"] hishtory.backends = [ "ubi:ddworken/hishtory", "asdf:asdf-community/asdf-hishtory" @@ -835,7 +841,7 @@ hledger-flow.backends = [ ] # takes forever # ghc.test = ["ghc --version", "The Glorious Glasgow Haskell Compilation System, version {{version}}"] -hls.backends = ["asdf:sestrella/asdf-ghcup"] +hls.backends = ["asdf:mise-plugins/mise-ghcup"] # hls.test = ["hls --version", "haskell-language-server version {{version}}"] hostctl.backends = ["aqua:guumaster/hostctl", "asdf:svenluijten/asdf-hostctl"] httpie-go.backends = ["aqua:nojima/httpie-go", "asdf:abatilo/asdf-httpie-go"] @@ -866,23 +872,23 @@ iam-policy-json-to-terraform.test = [ "" ] # version is wrong for some reason iamlive.backends = ["aqua:iann0036/iamlive", "asdf:chessmango/asdf-iamlive"] -ibmcloud.backends = ["asdf:triangletodd/asdf-ibmcloud"] -idris.backends = ["asdf:asdf-community/asdf-idris"] -idris2.backends = ["asdf:asdf-community/asdf-idris2"] -imagemagick.backends = ["asdf:mangalakader/asdf-imagemagick"] +ibmcloud.backends = ["asdf:mise-plugins/mise-ibmcloud"] +idris.backends = ["asdf:mise-plugins/mise-idris"] +idris2.backends = ["asdf:mise-plugins/mise-idris2"] +imagemagick.backends = ["asdf:mise-plugins/mise-imagemagick"] imgpkg.backends = ["aqua:carvel-dev/imgpkg", "asdf:vmware-tanzu/asdf-carvel"] infracost.backends = ["aqua:infracost/infracost", "asdf:dex4er/asdf-infracost"] inlets.backends = ["aqua:inlets/inletsctl", "asdf:nlamirault/asdf-inlets"] -io.backends = ["asdf:mracos/asdf-io"] +io.backends = ["asdf:mise-plugins/mise-io"] istioctl.backends = [ "aqua:istio/istio/istioctl", "asdf:virtualstaticvoid/asdf-istioctl" ] istioctl.test = ["istioctl version", "client version: {{version}}"] -janet.backends = ["asdf:Jakski/asdf-janet"] +janet.backends = ["asdf:mise-plugins/mise-janet"] java.backends = ["core:java"] -jbang.backends = ["asdf:jbangdev/jbang-asdf"] -jfrog-cli.backends = ["asdf:LozanoMatheus/asdf-jfrog-cli"] +jbang.backends = ["asdf:mise-plugins/jbang-asdf"] +jfrog-cli.backends = ["asdf:mise-plugins/mise-jfrog-cli"] jib.backends = [ "ubi:GoogleContainerTools/jib[tag_regex=-cli]", "asdf:joschi/asdf-jib" @@ -893,7 +899,7 @@ jj.backends = ["aqua:jj-vcs/jj", "ubi:jj-vcs/jj"] jless.backends = ["aqua:PaulJuliusMartinez/jless", "asdf:jc00ke/asdf-jless"] jmespath.backends = ["aqua:jmespath/jp", "asdf:skyzyx/asdf-jmespath"] jmespath.test = ["jp --version", "jp version {{version}}"] -jmeter.backends = ["asdf:comdotlinux/asdf-jmeter"] +jmeter.backends = ["asdf:mise-plugins/mise-jmeter"] jnv.backends = ["aqua:ynqa/jnv", "asdf:raimon49/asdf-jnv"] jq.backends = ["aqua:jqlang/jq", "asdf:mise-plugins/asdf-jq"] jq.description = "Command-line JSON processor" @@ -908,7 +914,7 @@ jsonnet-bundler.backends = [ "asdf:beardix/asdf-jb" ] jsonnet-bundler.test = ["jb --version 2>&1", "v{{version}}"] -julia.backends = ["asdf:rkyleg/asdf-julia"] +julia.backends = ["asdf:mise-plugins/mise-julia"] just.backends = ["ubi:casey/just", "asdf:olofvndrhr/asdf-just"] jwt.backends = ["ubi:mike-engel/jwt-cli[exe=jwt]", "cargo:jwt-cli"] jwtui.backends = ["ubi:jwt-rs/jwt-ui[exe=jwtui]", "cargo:jwt-ui"] @@ -920,20 +926,20 @@ k3kcli.backends = [ "ubi:rancher/k3k[tag_regex=v\\d]", "asdf:xanmanning/asdf-k3kcli" ] -k3s.backends = ["asdf:dmpe/asdf-k3s"] +k3s.backends = ["asdf:mise-plugins/mise-k3s"] k3sup.backends = ["aqua:alexellis/k3sup", "asdf:cgroschupp/asdf-k3sup"] k6.backends = ["ubi:grafana/k6", "asdf:gr1m0h/asdf-k6"] k9s.backends = ["ubi:derailed/k9s", "asdf:looztra/asdf-k9s"] -kafka.backends = ["asdf:ueisele/asdf-kafka"] +kafka.backends = ["asdf:mise-plugins/mise-kafka"] kafkactl.backends = [ "aqua:deviceinsight/kafkactl", "asdf:anweber/asdf-kafkactl" ] kapp.backends = ["aqua:carvel-dev/kapp", "asdf:vmware-tanzu/asdf-carvel"] kbld.backends = ["aqua:carvel-dev/kbld", "asdf:vmware-tanzu/asdf-carvel"] -kcat.backends = ["asdf:douglasdgoulart/asdf-kcat"] +kcat.backends = ["asdf:mise-plugins/mise-kcat"] kcctl.backends = ["ubi:kcctl/kcctl", "asdf:joschi/asdf-kcctl"] -kcl.backends = ["asdf:starkers/asdf-kcl"] +kcl.backends = ["asdf:mise-plugins/mise-kcl"] kconf.backends = ["aqua:particledecay/kconf", "asdf:particledecay/asdf-kconf"] ki.backends = [ "ubi:Kotlin/kotlin-interactive-shell[exe=ki]", @@ -950,8 +956,8 @@ koka.backends = ["ubi:koka-lang/koka", "asdf:susurri/asdf-koka"] kompose.backends = ["ubi:kubernetes/kompose", "asdf:technikhil314/asdf-kompose"] kops.backends = ["aqua:kubernetes/kops", "asdf:Antiarchitect/asdf-kops"] kotlin.backends = [ - "asdf:asdf-community/asdf-kotlin", - "vfox:version-fox/vfox-kotlin" + "asdf:mise-plugins/mise-kotlin", + "vfox:mise-plugins/vfox-kotlin" ] kpack.aliases = ["kp"] kpack.backends = [ @@ -969,12 +975,12 @@ ksops.backends = [ "ubi:viaduct-ai/kustomize-sops[exe=ksops]", "asdf:janpieper/asdf-ksops" ] -ktlint.backends = ["asdf:esensar/asdf-ktlint"] +ktlint.backends = ["asdf:mise-plugins/mise-ktlint"] kube-capacity.backends = [ "aqua:robscott/kube-capacity", "asdf:looztra/asdf-kube-capacity" ] -kube-code-generator.backends = ["asdf:jimmidyson/asdf-kube-code-generator"] +kube-code-generator.backends = ["asdf:mise-plugins/mise-kube-code-generator"] kube-controller-tools.backends = [ "ubi:kubernetes-sigs/controller-tools[exe=controller-gen]", "asdf:jimmidyson/asdf-kube-controller-tools" @@ -1096,18 +1102,15 @@ lazygit.backends = [ "aqua:jesseduffield/lazygit", "asdf:nklmilojevic/asdf-lazygit" ] -lean.backends = ["asdf:asdf-community/asdf-lean"] +lean.backends = ["asdf:mise-plugins/mise-lean"] lefthook.backends = [ "aqua:evilmartians/lefthook", "ubi:evilmartians/lefthook", "asdf:jtzero/asdf-lefthook" ] -leiningen.backends = ["asdf:miorimmax/asdf-lein"] -levant.backends = [ - "aqua:hashicorp/levant", - "asdf:asdf-community/asdf-hashicorp" -] -lfe.backends = ["asdf:asdf-community/asdf-lfe"] +leiningen.backends = ["asdf:mise-plugins/mise-lein"] +levant.backends = ["aqua:hashicorp/levant", "asdf:mise-plugins/mise-hashicorp"] +lfe.backends = ["asdf:mise-plugins/mise-lfe"] libsql-server.backends = [ "ubi:tursodatabase/libsql[tag_regex=libsql-server,exe=sqld]", "asdf:jonasb/asdf-libsql-server" @@ -1119,32 +1122,32 @@ license-plist.backends = [ lima.backends = ["aqua:lima-vm/lima", "asdf:CrouchingMuppet/asdf-lima"] linkerd.backends = ["aqua:linkerd/linkerd2", "asdf:kforsthoevel/asdf-linkerd"] liqoctl.backends = ["aqua:liqotech/liqo", "asdf:pdemagny/asdf-liqoctl"] -liquibase.backends = ["asdf:saliougaye/asdf-liquibase"] +liquibase.backends = ["asdf:mise-plugins/mise-liquibase"] litestream.backends = [ "aqua:benbjohnson/litestream", "asdf:threkk/asdf-litestream" ] -llvm-objcopy.backends = ["asdf:higebu/asdf-llvm"] -llvm-objdump.backends = ["asdf:higebu/asdf-llvm"] -logtalk.backends = ["asdf:LogtalkDotOrg/asdf-logtalk"] +llvm-objcopy.backends = ["asdf:mise-plugins/mise-llvm"] +llvm-objdump.backends = ["asdf:mise-plugins/mise-llvm"] +logtalk.backends = ["asdf:mise-plugins/mise-logtalk"] loki-logcli.backends = [ "aqua:grafana/loki/logcli", "asdf:comdotlinux/asdf-loki-logcli" ] ls-lint.backends = ["aqua:loeffel-io/ls-lint", "asdf:Ameausoone/asdf-ls-lint"] lsd.backends = ["aqua:lsd-rs/lsd", "asdf:mise-plugins/asdf-lsd"] -lua.backends = ["asdf:Stratus3D/asdf-lua"] +lua.backends = ["asdf:mise-plugins/mise-lua"] lua-language-server.backends = [ "aqua:LuaLS/lua-language-server", "asdf:bellini666/asdf-lua-language-server" ] -luajit.backends = ["asdf:smashedtoatoms/asdf-luaJIT"] +luajit.backends = ["asdf:mise-plugins/mise-luaJIT"] maestro.backends = [ "ubi:mobile-dev-inc/maestro", "asdf:dotanuki-labs/asdf-maestro" ] mage.backends = ["aqua:magefile/mage", "asdf:mathew-fleisch/asdf-mage"] -make.backends = ["asdf:yacchi/asdf-make"] +make.backends = ["asdf:mise-plugins/mise-make"] mani.backends = ["ubi:alajmo/mani", "asdf:anweber/asdf-mani"] mark.backends = ["ubi:kovetskiy/mark", "asdf:jfreeland/asdf-mark"] markdownlint-cli2.backends = [ @@ -1154,20 +1157,23 @@ markdownlint-cli2.backends = [ marp-cli.backends = ["aqua:marp-team/marp-cli", "asdf:xataz/asdf-marp-cli"] mask.backends = ["aqua:jacobdeichert/mask", "asdf:aaaaninja/asdf-mask"] mask.test = ["mask --version", "mask {{version}}"] -maven.backends = ["asdf:mise-plugins/asdf-maven", "vfox:version-fox/vfox-maven"] -mc.backends = ["asdf:penpyt/asdf-mc"] +maven.backends = [ + "asdf:mise-plugins/mise-maven", + "vfox:mise-plugins/vfox-maven" +] +mc.backends = ["asdf:mise-plugins/mise-mc"] mdbook.backends = ["aqua:rust-lang/mdBook", "asdf:cipherstash/asdf-mdbook"] mdbook.test = ["mdbook --version", "mdbook v{{version}}"] -mdbook-linkcheck.backends = ["asdf:cipherstash/asdf-mdbook-linkcheck"] +mdbook-linkcheck.backends = ["asdf:mise-plugins/mise-mdbook-linkcheck"] melange.backends = ["aqua:chainguard-dev/melange", "asdf:omissis/asdf-melange"] melange.os = ["linux", "macos"] # melange.test = ["melange version", "v{{version}}"] sometimes releases without assets melt.backends = ["ubi:charmbracelet/melt", "asdf:chessmango/asdf-melt"] -memcached.backends = ["asdf:furkanural/asdf-memcached"] -mercury.backends = ["asdf:susurri/asdf-mercury"] -meson.backends = ["asdf:asdf-community/asdf-meson"] -micronaut.backends = ["asdf:weibemoura/asdf-micronaut"] -mill.backends = ["asdf:asdf-community/asdf-mill"] +memcached.backends = ["asdf:mise-plugins/mise-memcached"] +mercury.backends = ["asdf:mise-plugins/mise-mercury"] +meson.backends = ["asdf:mise-plugins/mise-meson"] +micronaut.backends = ["asdf:mise-plugins/mise-micronaut"] +mill.backends = ["asdf:mise-plugins/mise-mill"] mimirtool.backends = [ "aqua:grafana/mimir/mimirtool", "asdf:asdf-community/asdf-mimirtool" @@ -1176,7 +1182,7 @@ mimirtool.test = ["mimir version", "Mimirtool, version {{version}}"] mimirtool.os = ["linux", "macos"] minify.backends = ["aqua:tdewolff/minify", "asdf:axilleas/asdf-minify"] minikube.backends = ["aqua:kubernetes/minikube", "asdf:alvarobp/asdf-minikube"] -minio.backends = ["asdf:aeons/asdf-minio"] +minio.backends = ["asdf:mise-plugins/mise-minio"] minishift.backends = ["aqua:minishift/minishift", "asdf:sqtran/asdf-minishift"] minisign.backends = ["aqua:jedisct1/minisign"] mint.backends = ["ubi:mint-lang/mint", "asdf:mint-lang/asdf-mint"] @@ -1184,27 +1190,27 @@ mirrord.backends = [ "ubi:metalbear-co/mirrord", "asdf:metalbear-co/asdf-mirrord" ] -mitmproxy.backends = ["asdf:NeoHsu/asdf-mitmproxy"] +mitmproxy.backends = ["asdf:mise-plugins/mise-mitmproxy"] mkcert.backends = ["ubi:FiloSottile/mkcert", "asdf:salasrod/asdf-mkcert"] -mlton.backends = ["asdf:asdf-community/asdf-mlton"] +mlton.backends = ["asdf:mise-plugins/mise-mlton"] mockery.backends = ["aqua:vektra/mockery", "asdf:cabify/asdf-mockery"] -mockolo.backends = ["asdf:MontakOleg/asdf-mockolo"] +mockolo.backends = ["asdf:mise-plugins/mise-mockolo"] mold.backends = ["ubi:rui314/mold"] -monarch.backends = ["asdf:nyuyuyu/asdf-monarch"] -mongodb.backends = ["asdf:sylph01/asdf-mongodb"] +monarch.backends = ["asdf:mise-plugins/mise-monarch"] +mongodb.backends = ["asdf:mise-plugins/mise-mongodb"] mongosh.backends = ["ubi:mongodb-js/mongosh", "asdf:itspngu/asdf-mongosh"] mprocs.backends = ["ubi:pvolok/mprocs"] mssqldef.backends = ["aqua:sqldef/sqldef/mssqldef"] -mutanus.backends = ["asdf:SoriUR/asdf-mutanus"] +mutanus.backends = ["asdf:mise-plugins/mise-mutanus"] mvnd.backends = ["aqua:apache/maven-mvnd", "asdf:joschi/asdf-mvnd"] -mysql.backends = ["asdf:iroddis/asdf-mysql"] +mysql.backends = ["asdf:mise-plugins/mise-mysql"] mysqldef.backends = ["aqua:sqldef/sqldef/mysqldef"] nancy.backends = [ "aqua:sonatype-nexus-community/nancy", "asdf:iilyak/asdf-nancy" ] -nano.backends = ["asdf:mfakane/asdf-nano"] -nasm.backends = ["asdf:Dpbm/asdf-nasm"] +nano.backends = ["asdf:mise-plugins/mise-nano"] +nasm.backends = ["asdf:mise-plugins/mise-nasm"] navi.backends = ["aqua:denisidoro/navi", "ubi:denisidoro/navi"] navi.test = ["navi --version", "navi {{version}}"] neko.backends = ["ubi:HaxeFoundation/neko", "asdf:asdf-community/asdf-neko"] @@ -1225,8 +1231,8 @@ nfpm.test = ["nfpm --version", "{{version}}"] nim.backends = ["asdf:mise-plugins/mise-nim"] ninja.backends = ["aqua:ninja-build/ninja", "asdf:asdf-community/asdf-ninja"] node.backends = ["core:node"] -nomad.backends = ["aqua:hashicorp/nomad", "asdf:asdf-community/asdf-hashicorp"] -nomad-pack.backends = ["asdf:asdf-community/asdf-hashicorp"] +nomad.backends = ["aqua:hashicorp/nomad", "asdf:mise-plugins/mise-hashicorp"] +nomad-pack.backends = ["asdf:mise-plugins/mise-hashicorp"] notation.backends = ["aqua:notaryproject/notation", "asdf:bodgit/asdf-notation"] nova.backends = ["aqua:FairwindsOps/nova", "asdf:elementalvoid/asdf-nova"] nsc.backends = ["ubi:nats-io/nsc", "asdf:dex4er/asdf-nsc"] @@ -1234,9 +1240,9 @@ oapi-codegen.backends = [ "go:github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen", "asdf:dylanrayboss/asdf-oapi-codegen" ] -oc.backends = ["asdf:sqtran/asdf-oc"] -ocaml.backends = ["asdf:asdf-community/asdf-ocaml"] -oci.backends = ["asdf:yasn77/asdf-oci"] +oc.backends = ["asdf:mise-plugins/mise-oc"] +ocaml.backends = ["asdf:mise-plugins/mise-ocaml"] +oci.backends = ["asdf:mise-plugins/mise-oci"] odin.backends = ["ubi:odin-lang/Odin[exe=odin]", "asdf:jtakakura/asdf-odin"] odo.backends = ["aqua:redhat-developer/odo", "asdf:rm3l/asdf-odo"] okta-aws.aliases = ["okta-aws-cli"] @@ -1246,17 +1252,17 @@ okta-aws.backends = [ ] okteto.backends = ["aqua:okteto/okteto", "asdf:BradenM/asdf-okteto"] ollama.backends = ["aqua:ollama/ollama", "asdf:virtualstaticvoid/asdf-ollama"] -om.backends = ["aqua:pivotal-cf/om", "asdf:vmware-tanzu/tanzu-plug-in-for-asdf"] +om.backends = ["aqua:pivotal-cf/om", "asdf:mise-plugins/tanzu-plug-in-for-asdf"] om.test = ["om version", "{{version}}"] onyx.backends = ["ubi:onyx-lang/onyx", "asdf:jtakakura/asdf-onyx"] opa.backends = ["aqua:open-policy-agent/opa", "asdf:tochukwuvictor/asdf-opa"] opam.backends = ["ubi:ocaml/opam", "asdf:asdf-community/asdf-opam"] openbao.backends = ["ubi:openbao/openbao[exe=bao]"] openfaas-cli.backends = ["aqua:openfaas/faas-cli", "asdf:zekker6/asdf-faas-cli"] -openresty.backends = ["asdf:smashedtoatoms/asdf-openresty"] -opensearch.backends = ["asdf:randikabanura/asdf-opensearch"] -opensearch-cli.backends = ["asdf:iul1an/asdf-opensearch-cli"] -openshift-install.backends = ["asdf:hhemied/asdf-openshift-install"] +openresty.backends = ["asdf:mise-plugins/mise-openresty"] +opensearch.backends = ["asdf:mise-plugins/mise-opensearch"] +opensearch-cli.backends = ["asdf:mise-plugins/mise-opensearch-cli"] +openshift-install.backends = ["asdf:mise-plugins/mise-openshift-install"] opentofu.backends = [ "ubi:opentofu/opentofu[exe=tofu]", "asdf:virtualroot/asdf-opentofu" @@ -1265,42 +1271,39 @@ operator-sdk.backends = [ "aqua:operator-framework/operator-sdk", "asdf:Medium/asdf-operator-sdk" ] -opsgenie-lamp.backends = ["asdf:ORCID/asdf-opsgenie-lamp"] +opsgenie-lamp.backends = ["asdf:mise-plugins/mise-opsgenie-lamp"] oras.backends = ["aqua:oras-project/oras", "asdf:bodgit/asdf-oras"] -osqueryi.backends = ["asdf:davidecavestro/asdf-osqueryi"] +osqueryi.backends = ["asdf:mise-plugins/mise-osqueryi"] overmind.backends = [ "ubi:DarthSim/overmind", "go:github.com/DarthSim/overmind/v2" ] pachctl.backends = ["aqua:pachyderm/pachyderm", "asdf:abatilo/asdf-pachctl"] # pachctl.test = ["pachctl version", "{{version}}"] # test fails on ci but seems to work locally -packer.backends = [ - "aqua:hashicorp/packer", - "asdf:asdf-community/asdf-hashicorp" -] +packer.backends = ["aqua:hashicorp/packer", "asdf:mise-plugins/mise-hashicorp"] pandoc.backends = ["ubi:jgm/pandoc", "asdf:Fbrisset/asdf-pandoc"] patat.backends = ["ubi:jaspervdj/patat", "asdf:airtonix/asdf-patat"] pdm.backends = ["pipx:pdm", "asdf:1oglop1/asdf-pdm"] pdm.test = ["pdm --version", "PDM, version {{version}}"] peco.backends = ["aqua:peco/peco", "asdf:asdf-community/asdf-peco"] -periphery.backends = ["asdf:MontakOleg/asdf-periphery"] +periphery.backends = ["asdf:mise-plugins/mise-periphery"] perl.backends = ["aqua:skaji/relocatable-perl", "asdf:ouest/asdf-perl"] -php.backends = ["asdf:asdf-community/asdf-php", "vfox:version-fox/vfox-php"] +php.backends = ["asdf:mise-plugins/mise-php", "vfox:mise-plugins/vfox-php"] pint.backends = ["aqua:cloudflare/pint", "asdf:sam-burrell/asdf-pint"] pipectl.backends = ["aqua:pipe-cd/pipecd/pipectl", "asdf:pipe-cd/asdf-pipectl"] pipectl.test = ["pipecd version", "Version: v{{version}}"] pipectl.os = ["linux", "macos"] -pipelight.backends = ["asdf:kogeletey/asdf-pipelight"] +pipelight.backends = ["asdf:mise-plugins/mise-pipelight"] pipenv.backends = ["asdf:mise-plugins/mise-pipenv"] pipenv.depends = ["python"] -pipx.backends = ["asdf:yozachar/asdf-pipx"] +pipx.backends = ["asdf:mise-plugins/mise-pipx"] pipx.depends = ["python"] pitchfork.backends = ["ubi:jdx/pitchfork"] pitchfork.description = "Daemon manager" pitchfork.test = ["pitchfork --version", "pitchfork {{version}}"] pivnet.backends = [ "aqua:pivotal-cf/pivnet-cli", - "asdf:vmware-tanzu/tanzu-plug-in-for-asdf" + "asdf:mise-plugins/tanzu-plug-in-for-asdf" ] pivnet.test = ["pivnet version", ""] # version returns "dev" on windows pkl.backends = ["aqua:apple/pkl", "asdf:mise-plugins/asdf-pkl"] @@ -1318,8 +1321,8 @@ polaris.backends = [ "asdf:particledecay/asdf-polaris" ] popeye.backends = ["aqua:derailed/popeye", "asdf:nlamirault/asdf-popeye"] -postgis.backends = ["asdf:knu/asdf-postgis"] -postgres.backends = ["asdf:smashedtoatoms/asdf-postgres"] +postgis.backends = ["asdf:mise-plugins/mise-postgis"] +postgres.backends = ["asdf:mise-plugins/mise-postgres"] powerline-go.backends = [ "ubi:justjanne/powerline-go", "asdf:dex4er/asdf-powerline-go" @@ -1339,7 +1342,7 @@ promtool.backends = [ "asdf:asdf-community/asdf-promtool" ] promtool.test = ["promtool --version", "promtool, version {{version}}"] -protobuf.backends = ["vfox:ahai-code/vfox-protobuf"] +protobuf.backends = ["vfox:mise-plugins/vfox-protobuf"] protoc.backends = [ "aqua:protocolbuffers/protobuf/protoc", "asdf:paxosglobal/asdf-protoc" @@ -1360,7 +1363,7 @@ protoc-gen-go-grpc.test = [ "protoc-gen-go-grpc --version", "protoc-gen-go-grpc" ] # TODO: use version_prefix and put version back in -protoc-gen-grpc-web.backends = ["asdf:pbr0ck3r/asdf-protoc-gen-grpc-web"] +protoc-gen-grpc-web.backends = ["asdf:mise-plugins/mise-protoc-gen-grpc-web"] protoc-gen-js.backends = [ "ubi:protocolbuffers/protobuf-javascript[exe=protoc-gen-js]", "asdf:pbr0ck3r/asdf-protoc-gen-js" @@ -1369,7 +1372,7 @@ protolint.backends = [ "aqua:yoheimuta/protolint", "asdf:spencergilbert/asdf-protolint" ] -protonge.backends = ["asdf:augustobmoura/asdf-protonge"] +protonge.backends = ["asdf:mise-plugins/mise-protonge"] psc-package.backends = [ "ubi:purescript/psc-package", "asdf:nsaunders/asdf-psc-package" @@ -1381,14 +1384,14 @@ purescript.backends = [ "ubi:purescript/purescript[exe=purs]", "asdf:jrrom/asdf-purescript" ] -purty.backends = ["asdf:nsaunders/asdf-purty"] +purty.backends = ["asdf:mise-plugins/mise-purty"] python.backends = ["core:python"] qdns.backends = ["ubi:natesales/q", "asdf:moritz-makandra/asdf-plugin-qdns"] -quarkus.backends = ["asdf:asdf-community/asdf-quarkus"] -r.backends = ["asdf:asdf-community/asdf-r"] -rabbitmq.backends = ["asdf:mise-plugins/asdf-rabbitmq"] -racket.backends = ["asdf:asdf-community/asdf-racket"] -raku.backends = ["asdf:m-dango/asdf-raku"] +quarkus.backends = ["asdf:mise-plugins/mise-quarkus"] +r.backends = ["asdf:mise-plugins/mise-r"] +rabbitmq.backends = ["asdf:mise-plugins/mise-rabbitmq"] +racket.backends = ["asdf:mise-plugins/mise-racket"] +raku.backends = ["asdf:mise-plugins/mise-raku"] rancher.backends = ["aqua:rancher/cli", "asdf:abinet/asdf-rancher"] rancher.test = ["rancher --version", "rancher version v{{version}}"] rbac-lookup.backends = [ @@ -1396,17 +1399,17 @@ rbac-lookup.backends = [ "asdf:looztra/asdf-rbac-lookup" ] rclone.backends = ["ubi:rclone/rclone", "asdf:johnlayton/asdf-rclone"] -rebar.backends = ["asdf:Stratus3D/asdf-rebar"] +rebar.backends = ["asdf:mise-plugins/mise-rebar"] rebar.depends = ["erlang"] reckoner.backends = [ "ubi:FairwindsOps/reckoner", "asdf:FairwindsOps/asdf-reckoner" ] -redis.backends = ["asdf:smashedtoatoms/asdf-redis"] -redis-cli.backends = ["asdf:NeoHsu/asdf-redis-cli"] +redis.backends = ["asdf:mise-plugins/mise-redis"] +redis-cli.backends = ["asdf:mise-plugins/mise-redis-cli"] redo.backends = ["ubi:barthr/redo", "asdf:chessmango/asdf-redo"] reg.backends = ["aqua:genuinetools/reg", "asdf:looztra/asdf-reg"] -regal.backends = ["aqua:StyraInc/regal", "asdf:asdf-community/asdf-regal"] +regal.backends = ["aqua:StyraInc/regal", "asdf:mise-plugins/mise-regal"] regctl.backends = ["aqua:regclient/regclient/regctl", "asdf:ORCID/asdf-regctl"] regsync.backends = [ "aqua:regclient/regclient/regsync", @@ -1441,7 +1444,7 @@ ripsecrets.backends = [ ] ripsecrets.test = ["ripsecrets --version", "ripsecrets {{version}}"] rke.backends = ["aqua:rancher/rke", "asdf:particledecay/asdf-rke"] -rlwrap.backends = ["asdf:asdf-community/asdf-rlwrap"] +rlwrap.backends = ["asdf:mise-plugins/mise-rlwrap"] ruby.backends = ["core:ruby"] ruff.backends = [ "aqua:astral-sh/ruff", @@ -1459,15 +1462,15 @@ saml2aws.backends = [ "aqua:Versent/saml2aws", "asdf:elementalvoid/asdf-saml2aws" ] -sbcl.backends = ["asdf:smashedtoatoms/asdf-sbcl"] -sbt.backends = ["asdf:bram2000/asdf-sbt"] +sbcl.backends = ["asdf:mise-plugins/mise-sbcl"] +sbt.backends = ["asdf:mise-plugins/mise-sbt"] scala.backends = [ - "asdf:asdf-community/asdf-scala", - "vfox:version-fox/vfox-scala" + "asdf:mise-plugins/mise-scala", + "vfox:mise-plugins/vfox-scala" ] scala-cli.backends = [ "ubi:VirtusLab/scala-cli", - "asdf:asdf-community/asdf-scala-cli" + "asdf:mise-plugins/mise-scala-cli" ] scaleway.aliases = ["scaleway-cli"] scaleway.backends = [ @@ -1483,24 +1486,24 @@ scarb.backends = [ "asdf:software-mansion/asdf-scarb" ] sccache.backends = ["ubi:mozilla/sccache", "asdf:emersonmx/asdf-sccache"] -schemacrawler.backends = ["asdf:davidecavestro/asdf-schemacrawler"] +schemacrawler.backends = ["asdf:mise-plugins/mise-schemacrawler"] scie-pants.backends = [ "ubi:pantsbuild/scie-pants", "asdf:robzr/asdf-scie-pants" ] -seed7.backends = ["asdf:susurri/asdf-seed7"] -semgrep.backends = ["asdf:brentjanderson/asdf-semgrep"] -semtag.backends = ["asdf:junminahn/asdf-semtag"] +seed7.backends = ["asdf:mise-plugins/mise-seed7"] +semgrep.backends = ["asdf:mise-plugins/mise-semgrep"] +semtag.backends = ["asdf:mise-plugins/mise-semtag"] semver.backends = [ "aqua:fsaintjacques/semver-tool", "asdf:mathew-fleisch/asdf-semver" ] -sentinel.backends = ["asdf:asdf-community/asdf-hashicorp"] +sentinel.backends = ["asdf:mise-plugins/mise-hashicorp"] sentry.aliases = ["sentry-cli"] sentry.backends = ["ubi:getsentry/sentry-cli"] -serf.backends = ["asdf:asdf-community/asdf-hashicorp"] -serverless.backends = ["asdf:pdemagny/asdf-serverless"] -setup-envtest.backends = ["asdf:pmalek/mise-setup-envtest"] +serf.backends = ["asdf:mise-plugins/mise-hashicorp"] +serverless.backends = ["asdf:mise-plugins/mise-serverless"] +setup-envtest.backends = ["asdf:mise-plugins/mise-setup-envtest"] shell2http.backends = ["aqua:msoap/shell2http", "asdf:ORCID/asdf-shell2http"] shellcheck.backends = [ "aqua:koalaman/shellcheck", @@ -1515,7 +1518,7 @@ shellspec.backends = [ ] shfmt.backends = ["aqua:mvdan/sh", "asdf:luizm/asdf-shfmt"] shfmt.os = ["linux", "macos"] -shorebird.backends = ["asdf:valian-ca/asdf-shorebird"] +shorebird.backends = ["asdf:mise-plugins/mise-shorebird"] sinker.backends = ["aqua:plexsystems/sinker", "asdf:elementalvoid/asdf-sinker"] skaffold.backends = [ "aqua:GoogleContainerTools/skaffold", @@ -1525,8 +1528,8 @@ skate.backends = ["aqua:charmbracelet/skate", "asdf:chessmango/asdf-skate"] sloth.backends = ["aqua:slok/sloth", "asdf:slok/asdf-sloth"] slsa-verifier.backends = ["ubi:slsa-framework/slsa-verifier"] slsa-verifier.test = ["slsa-verifier version", "{{version}}"] -smithy.backends = ["asdf:aws/asdf-smithy"] -smlnj.backends = ["asdf:samontea/asdf-smlnj"] +smithy.backends = ["asdf:mise-plugins/mise-smithy"] +smlnj.backends = ["asdf:mise-plugins/mise-smlnj"] snyk.backends = ["aqua:snyk/cli", "asdf:nirfuchs/asdf-snyk"] soft-serve.backends = [ "ubi:charmbracelet/soft-serve[exe=soft]", @@ -1543,18 +1546,21 @@ sonobuoy.backends = [ sops.backends = ["ubi:getsops/sops", "asdf:mise-plugins/mise-sops"] sopstool.backends = ["aqua:ibotta/sopstool", "asdf:elementalvoid/asdf-sopstool"] soracom.backends = ["ubi:soracom/soracom-cli", "asdf:gr1m0h/asdf-soracom"] -sourcery.backends = ["asdf:younke/asdf-sourcery"] +sourcery.backends = ["asdf:mise-plugins/mise-sourcery"] spacectl.backends = ["aqua:spacelift-io/spacectl", "asdf:bodgit/asdf-spacectl"] spago.backends = ["ubi:purescript/spago", "asdf:jrrom/asdf-spago"] spark.backends = ["asdf:mise-plugins/mise-spark"] spectral.backends = ["aqua:stoplightio/spectral", "asdf:vbyrd/asdf-spectral"] spin.backends = ["aqua:spinnaker/spin", "asdf:pavloos/asdf-spin"] -spring-boot.backends = ["asdf:joschi/asdf-spring-boot"] +spring-boot.backends = ["asdf:mise-plugins/mise-spring-boot"] spruce.backends = ["aqua:geofffranks/spruce", "asdf:woneill/asdf-spruce"] -sqlite.backends = ["asdf:cLupus/asdf-sqlite"] +sqlite.backends = ["asdf:mise-plugins/mise-sqlite"] sqlite3def.backends = ["aqua:sqldef/sqldef/sqlite3def"] -sshuttle.backends = ["asdf:xanmanning/asdf-sshuttle"] -stack.backends = ["aqua:commercialhaskell/stack", "asdf:sestrella/asdf-ghcup"] +sshuttle.backends = ["asdf:mise-plugins/mise-sshuttle"] +stack.backends = [ + "aqua:commercialhaskell/stack", + "asdf:mise-plugins/mise-ghcup" +] # stack.test = ["stack --version", "Version {{version}}"] # flaky starboard.backends = [ "aqua:aquasecurity/starboard", @@ -1585,11 +1591,11 @@ svu.backends = ["aqua:caarlos0/svu", "asdf:asdf-community/asdf-svu"] swag.backends = ["aqua:swaggo/swag", "asdf:behoof4mind/asdf-swag"] swift.backends = ["core:swift"] swift.os = ["linux", "macos"] -swift-package-list.backends = ["asdf:MacPaw/asdf-swift-package-list"] -swiftformat.backends = ["asdf:younke/asdf-swiftformat"] -swiftgen.backends = ["asdf:younke/asdf-swiftgen"] -swiftlint.backends = ["asdf:klundberg/asdf-swiftlint"] -swiprolog.backends = ["asdf:mracos/asdf-swiprolog"] +swift-package-list.backends = ["asdf:mise-plugins/mise-swift-package-list"] +swiftformat.backends = ["asdf:mise-plugins/mise-swiftformat"] +swiftgen.backends = ["asdf:mise-plugins/mise-swiftgen"] +swiftlint.backends = ["asdf:mise-plugins/mise-swiftlint"] +swiprolog.backends = ["asdf:mise-plugins/mise-swiprolog"] syft.backends = ["aqua:anchore/syft", "asdf:davidgp1701/asdf-syft"] talhelper.backends = ["aqua:budimanjojo/talhelper", "asdf:bjw-s/asdf-talhelper"] talos.backends = [ @@ -1601,14 +1607,14 @@ talosctl.backends = [ "asdf:bjw-s/asdf-talosctl" ] tanka.backends = ["aqua:grafana/tanka", "asdf:trotttrotttrott/asdf-tanka"] -tanzu.backends = ["asdf:vmware-tanzu/tanzu-plug-in-for-asdf"] +tanzu.backends = ["asdf:mise-plugins/tanzu-plug-in-for-asdf"] taplo.backends = ["ubi:tamasfe/taplo[matching=full]", "cargo:taplo-cli"] task.backends = ["ubi:go-task/task", "asdf:particledecay/asdf-task"] tctl.backends = ["aqua:temporalio/tctl", "asdf:eko/asdf-tctl"] tekton.aliases = ["tekton-cli"] tekton.backends = ["aqua:tektoncd/cli", "asdf:johnhamelink/asdf-tekton-cli"] -teleport-community.backends = ["asdf:MaloPolese/asdf-teleport-community"] -teleport-ent.backends = ["asdf:highb/asdf-teleport-ent"] +teleport-community.backends = ["asdf:mise-plugins/mise-teleport-community"] +teleport-ent.backends = ["asdf:mise-plugins/mise-teleport-ent"] telepresence.backends = [ "aqua:telepresenceio/telepresence", "asdf:pirackr/asdf-telepresence" @@ -1624,8 +1630,8 @@ terradozer.backends = [ ] terraform.backends = [ "aqua:hashicorp/terraform", - "asdf:asdf-community/asdf-hashicorp", - "vfox:enochchau/vfox-terraform" + "asdf:mise-plugins/mise-hashicorp", + "vfox:mise-plugins/vfox-terraform" ] terraform.idiomatic_files = [".terraform-version"] terraform.test = ["terraform version", "Terraform v{{version}}"] @@ -1635,7 +1641,7 @@ terraform-docs.backends = [ ] terraform-ls.backends = [ "aqua:hashicorp/terraform-ls", - "asdf:asdf-community/asdf-hashicorp" + "asdf:mise-plugins/mise-hashicorp" ] terraform-lsp.backends = [ "aqua:juliosueiras/terraform-lsp", @@ -1662,7 +1668,7 @@ tf-summarize.backends = [ "aqua:dineshba/tf-summarize", "asdf:adamcrews/asdf-tf-summarize" ] -tfc-agent.backends = ["asdf:asdf-community/asdf-hashicorp"] +tfc-agent.backends = ["asdf:mise-plugins/mise-hashicorp"] tfctl.backends = ["aqua:flux-iac/tofu-controller/tfctl", "asdf:deas/asdf-tfctl"] tfenv.backends = ["aqua:tfutils/tfenv", "asdf:carlduevel/asdf-tfenv"] tflint.backends = [ @@ -1683,15 +1689,15 @@ tfswitch.backends = [ "asdf:iul1an/asdf-tfswitch" ] tfupdate.backends = ["aqua:minamijoyo/tfupdate", "asdf:yuokada/asdf-tfupdate"] -thrift.backends = ["asdf:alisaifee/asdf-thrift"] +thrift.backends = ["asdf:mise-plugins/mise-thrift"] tilt.backends = ["aqua:tilt-dev/tilt", "asdf:eaceaser/asdf-tilt"] timoni.backends = ["aqua:stefanprodan/timoni", "asdf:Smana/asdf-timoni"] tiny.backends = ["asdf:mise-plugins/mise-tiny"] -tinytex.backends = ["asdf:Fbrisset/asdf-tinytex"] +tinytex.backends = ["asdf:mise-plugins/mise-tinytex"] titan.backends = ["ubi:titan-data/titan", "asdf:gabitchov/asdf-titan"] -tmux.backends = ["asdf:Dabolus/asdf-tmux"] +tmux.backends = ["asdf:mise-plugins/mise-tmux"] tokei.backends = ["ubi:XAMPPRocky/tokei", "asdf:gasuketsu/asdf-tokei"] -tomcat.backends = ["asdf:mbutov/asdf-tomcat"] +tomcat.backends = ["asdf:mise-plugins/mise-tomcat"] tonnage.backends = [ "ubi:elementalvoid/tonnage", "asdf:elementalvoid/asdf-tonnage" @@ -1713,13 +1719,13 @@ tsuru.backends = [ "asdf:virtualstaticvoid/asdf-tsuru" ] ttyd.backends = ["aqua:tsl0922/ttyd", "asdf:ivanvc/asdf-ttyd"] -tuist.backends = ["asdf:asdf-community/asdf-tuist"] +tuist.backends = ["asdf:mise-plugins/mise-tuist"] typos.backends = ["aqua:crate-ci/typos", "asdf:aschiavon91/asdf-typos"] typst.backends = ["aqua:typst/typst", "asdf:stephane-klein/asdf-typst"] uaa.aliases = ["uaa-cli"] uaa.backends = [ "ubi:cloudfoundry/uaa-cli[exe=uaa]", - "asdf:vmware-tanzu/tanzu-plug-in-for-asdf" + "asdf:mise-plugins/tanzu-plug-in-for-asdf" ] uaa.test = ["uaa version", "{{version}}"] ubi.backends = ["ubi:houseabsolute/ubi"] @@ -1736,34 +1742,34 @@ usage.backends = ["ubi:jdx/usage", "asdf:jdx/mise-usage"] usage.os = ["linux", "macos"] usql.backends = ["aqua:xo/usql", "asdf:itspngu/asdf-usql"] uv.backends = ["aqua:astral-sh/uv", "asdf:asdf-community/asdf-uv"] -v.backends = ["asdf:jthegedus/asdf-v"] +v.backends = ["asdf:mise-plugins/mise-v"] vacuum.backends = ["aqua:daveshanley/vacuum"] vacuum.test = ["vacuum version", "{{version}}"] vale.backends = ["aqua:errata-ai/vale", "asdf:pdemagny/asdf-vale"] vals.backends = ["aqua:helmfile/vals", "asdf:dex4er/asdf-vals"] -vault.backends = ["aqua:hashicorp/vault", "asdf:asdf-community/asdf-hashicorp"] +vault.backends = ["aqua:hashicorp/vault", "asdf:mise-plugins/mise-hashicorp"] vault.test = ["vault version", "Vault v{{version}}"] vcluster.backends = [ "aqua:loft-sh/vcluster", "asdf:https://gitlab.com/wt0f/asdf-vcluster" ] -velad.backends = ["asdf:pdemagny/asdf-velad"] +velad.backends = ["asdf:mise-plugins/mise-velad"] velero.backends = ["aqua:vmware-tanzu/velero", "asdf:looztra/asdf-velero"] vendir.backends = ["aqua:carvel-dev/vendir", "asdf:vmware-tanzu/asdf-carvel"] venom.backends = ["aqua:ovh/venom", "asdf:aabouzaid/asdf-venom"] vhs.backends = ["aqua:charmbracelet/vhs", "asdf:chessmango/asdf-vhs"] viddy.backends = ["aqua:sachaos/viddy", "asdf:ryodocx/asdf-viddy"] -vim.backends = ["asdf:tsuyoshicho/asdf-vim"] -virtualos.backends = ["asdf:tuist/asdf-virtualos"] +vim.backends = ["asdf:mise-plugins/mise-vim"] +virtualos.backends = ["asdf:mise-plugins/mise-virtualos"] vivid.backends = ["ubi:sharkdp/vivid"] -vlang.backends = ["vfox:ahai-code/vfox-vlang"] -vlt.backends = ["asdf:asdf-community/asdf-hashicorp"] +vlang.backends = ["vfox:mise-plugins/vfox-vlang"] +vlt.backends = ["asdf:mise-plugins/mise-hashicorp"] vultr.aliases = ["vultr-cli"] vultr.backends = ["ubi:vultr/vultr-cli", "asdf:ikuradon/asdf-vultr-cli"] vultr.test = ["vultr-cli version", "Vultr-CLI v3.4.0"] wait-for-gh-rate-limit.backends = ["ubi:jdx/wait-for-gh-rate-limit"] -wasi-sdk.backends = ["asdf:coolreader18/asdf-wasi-sdk"] -wasm3.backends = ["asdf:tachyonicbytes/asdf-wasm3"] +wasi-sdk.backends = ["asdf:mise-plugins/mise-wasi-sdk"] +wasm3.backends = ["asdf:mise-plugins/mise-wasm3"] wasm4.backends = ["ubi:aduros/wasm4[exe=w4]", "asdf:jtakakura/asdf-wasm4"] wasm4.test = ["w4 --version", "{{version}}"] wasmer.backends = ["aqua:wasmerio/wasmer", "asdf:tachyonicbytes/asdf-wasmer"] @@ -1774,7 +1780,7 @@ wasmtime.backends = [ watchexec.backends = ["ubi:watchexec/watchexec", "asdf:nyrst/asdf-watchexec"] waypoint.backends = [ "aqua:hashicorp/waypoint", - "asdf:asdf-community/asdf-hashicorp" + "asdf:mise-plugins/mise-hashicorp" ] weave-gitops.backends = [ "ubi:weaveworks/weave-gitops[exe=gitops]", @@ -1787,7 +1793,7 @@ wren.backends = [ "asdf:jtakakura/asdf-wren-cli" ] wren.test = ["wren_cli --version", "wren {{version}}"] -wrk.backends = ["asdf:ivanvc/asdf-wrk"] +wrk.backends = ["asdf:mise-plugins/mise-wrk"] wtfutil.backends = ["aqua:wtfutil/wtf", "asdf:NeoHsu/asdf-wtfutil"] wtfutil.test = ["wtfutil --help", "wtfutil "] # may not have version in output xc.backends = ["aqua:joerdav/xc", "asdf:airtonix/asdf-xc"] @@ -1795,17 +1801,17 @@ xcbeautify.backends = [ "ubi:cpisciotta/xcbeautify", "asdf:mise-plugins/asdf-xcbeautify" ] -xchtmlreport.backends = ["asdf:younke/asdf-xchtmlreport"] -xcodegen.backends = ["asdf:younke/asdf-xcodegen"] -xcresultparser.backends = ["asdf:MacPaw/asdf-xcresultparser"] +xchtmlreport.backends = ["asdf:mise-plugins/mise-xchtmlreport"] +xcodegen.backends = ["asdf:mise-plugins/mise-xcodegen"] +xcresultparser.backends = ["asdf:mise-plugins/mise-xcresultparser"] xh.backends = ["aqua:ducaale/xh", "ubi:ducaale/xh", "asdf:NeoHsu/asdf-xh"] xh.test = ["xh -V", "xh {{version}}"] -yadm.backends = ["asdf:particledecay/asdf-yadm"] +yadm.backends = ["asdf:mise-plugins/mise-yadm"] yamlfmt.backends = ["aqua:google/yamlfmt", "asdf:mise-plugins/asdf-yamlfmt"] yamllint.backends = ["pipx:yamllint", "asdf:ericcornelissen/asdf-yamllint"] -yamlscript.backends = ["asdf:FeryET/asdf-yamlscript"] -yarn.backends = ["asdf:mise-plugins/asdf-yarn"] -yay.backends = ["asdf:aaaaninja/asdf-yay"] +yamlscript.backends = ["asdf:mise-plugins/mise-yamlscript"] +yarn.backends = ["asdf:mise-plugins/mise-yarn"] +yay.backends = ["asdf:mise-plugins/mise-yay"] yazi.backends = ["aqua:sxyazi/yazi"] yazi.test = [ "yazi -V", @@ -1813,11 +1819,11 @@ yazi.test = [ ] # Version is in format Yazi {{version}} (buildid DATE) so it failed Yazi 0.4.1 (2275719 2024-12-10) yj.backends = ["ubi:sclevine/yj", "asdf:ryodocx/asdf-yj"] yor.backends = ["aqua:bridgecrewio/yor", "asdf:ordinaryexperts/asdf-yor"] -youtube-dl.backends = ["asdf:iul1an/asdf-youtube-dl"] +youtube-dl.backends = ["asdf:mise-plugins/mise-youtube-dl"] yq.backends = ["ubi:mikefarah/yq", "asdf:sudermanjr/asdf-yq"] yt-dlp.backends = ["ubi:yt-dlp/yt-dlp", "asdf:duhow/asdf-yt-dlp"] ytt.backends = ["aqua:carvel-dev/ytt", "asdf:vmware-tanzu/asdf-carvel"] -zbctl.backends = ["asdf:camunda-community-hub/asdf-zbctl"] +zbctl.backends = ["asdf:mise-plugins/mise-zbctl"] zellij.backends = ["ubi:zellij-org/zellij", "asdf:chessmango/asdf-zellij"] zephyr.backends = ["ubi:MaybeJustJames/zephyr", "asdf:nsaunders/asdf-zephyr"] zig.backends = ["core:zig"] @@ -1827,4 +1833,4 @@ zls.backends = ["aqua:zigtools/zls", "ubi:zigtools/zls"] zls.test = ["zls --version", "{{version}}"] zola.backends = ["ubi:getzola/zola", "asdf:salasrod/asdf-zola"] zoxide.backends = ["ubi:ajeetdsouza/zoxide", "asdf:nyrst/asdf-zoxide"] -zprint.backends = ["asdf:carlduevel/asdf-zprint"] +zprint.backends = ["asdf:mise-plugins/mise-zprint"] diff --git a/src/shorthands.rs b/src/shorthands.rs index 2eb9af945f..2e2cac4741 100644 --- a/src/shorthands.rs +++ b/src/shorthands.rs @@ -78,7 +78,7 @@ mod tests { let shorthands = get_shorthands(&settings); assert_str_eq!( shorthands["ephemeral-postgres"][0], - "asdf:smashedtoatoms/asdf-ephemeral-postgres" + "asdf:mise-plugins/mise-ephemeral-postgres" ); assert_str_eq!(shorthands["node"][0], "https://node"); assert_str_eq!(shorthands["xxxxxx"][0], "https://xxxxxx"); From 8d647a3b7abc79d68cefda4a602c6314bc1f57d8 Mon Sep 17 00:00:00 2001 From: Hugues Verlin Date: Wed, 8 Jan 2025 19:22:39 +0100 Subject: [PATCH 102/289] fix: use task display_name in more places (#3997) * fix: use task display_name in more places * [autofix.ci] apply automated fixes * [autofix.ci] apply automated fixes (attempt 2/3) * add tests * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- e2e/tasks/test_task_deps | 6 ++++++ e2e/tasks/test_task_info | 13 +++++++++++++ e2e/tasks/test_task_ls | 7 +++++++ mise.lock | 1 + src/cli/tasks/deps.rs | 16 ++++++++++++---- src/cli/tasks/info.rs | 12 +++++++++--- src/task/mod.rs | 2 +- 7 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 e2e/tasks/test_task_info diff --git a/e2e/tasks/test_task_deps b/e2e/tasks/test_task_deps index 20f6779ba2..2d377d7d6e 100644 --- a/e2e/tasks/test_task_deps +++ b/e2e/tasks/test_task_deps @@ -49,3 +49,9 @@ Depends on: hello:* Usage Spec: name "hello:all" bin "hello:all"' + +echo '' >mise.toml + +mkdir -p mise-tasks && echo "" >mise-tasks/build.sh && chmod +x mise-tasks/build.sh +assert "mise task deps build" "build" +assert "mise task deps build.sh" "build" diff --git a/e2e/tasks/test_task_info b/e2e/tasks/test_task_info new file mode 100644 index 0000000000..2f733aaf20 --- /dev/null +++ b/e2e/tasks/test_task_info @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +mkdir -p mise-tasks && echo "" >mise-tasks/build.sh && chmod +x mise-tasks/build.sh +assert "mise task info build" 'Task: build +Description: +Source: ~/workdir/mise-tasks/build.sh +File: ~/workdir/mise-tasks/build.sh + +Usage Spec: + name "build" + bin "build"' + +assert_contains "mise task info build.sh --json" '"name": "build"' diff --git a/e2e/tasks/test_task_ls b/e2e/tasks/test_task_ls index de9caab568..bd35cedf4a 100644 --- a/e2e/tasks/test_task_ls +++ b/e2e/tasks/test_task_ls @@ -29,12 +29,19 @@ cat <<'EOF' >mytasks/filetask2 EOF chmod +x mytasks/filetask2 +cat <<'EOF' >mytasks/filetask3.sh +#!/usr/bin/env bash +EOF +chmod +x mytasks/filetask3.sh + assert "mise task ls" "filetask2 +filetask3 lint test test-with-args" assert "mise task -x ls" "filetask2 ./mytasks/filetask2 +filetask3 ./mytasks/filetask3.sh lint ./mise.toml test ./tasks.toml test-with-args ./tasks.toml" diff --git a/mise.lock b/mise.lock index 97a6232e30..b778c975cc 100644 --- a/mise.lock +++ b/mise.lock @@ -4,6 +4,7 @@ backend = "aqua:rhysd/actionlint" [tools.actionlint.checksums] "actionlint_1.7.6_darwin_arm64.tar.gz" = "sha256:9a7c9cb2b627bb137ef68742eead2dd5b78f3ddc44876e84c37d323ba28b4710" +"actionlint_1.7.6_linux_amd64.tar.gz" = "sha256:5d1a70d9de15fee5371e6f9e20cc29b284e814d6ee1b882f9749e91caf716eba" [tools.bun] version = "1.1.42" diff --git a/src/cli/tasks/deps.rs b/src/cli/tasks/deps.rs index afddc7673e..1469bc4798 100644 --- a/src/cli/tasks/deps.rs +++ b/src/cli/tasks/deps.rs @@ -57,9 +57,17 @@ impl TasksDeps { let tasks = config.tasks()?; let tasks = self.tasks.as_ref().map(|t| { t.iter() - .map(|tn| match tasks.get(tn).cloned() { - Some(task) => Ok(task.clone()), - None => Err(self.err_no_task(tn.as_str())), + .map(|tn| { + tasks + .get(tn) + .cloned() + .or_else(|| { + tasks + .values() + .find(|task| task.display_name().as_str() == tn.as_str()) + .cloned() + }) + .ok_or_else(|| self.err_no_task(tn.as_str())) }) .collect::>>() }); @@ -134,7 +142,7 @@ impl TasksDeps { let config = Config::get(); let tasks = config .tasks() - .map(|t| t.keys().collect::>()) + .map(|t| t.iter().map(|(_, v)| v.display_name()).collect::>()) .unwrap_or_default(); let task_names = tasks.into_iter().map(style::ecyan).join(", "); let t = style(&t).yellow().for_stderr(); diff --git a/src/cli/tasks/info.rs b/src/cli/tasks/info.rs index f4a760fab6..01261c5f95 100644 --- a/src/cli/tasks/info.rs +++ b/src/cli/tasks/info.rs @@ -23,7 +23,13 @@ pub struct TasksInfo { impl TasksInfo { pub fn run(self) -> Result<()> { let config = Config::get(); - let task = config.tasks()?.get(&self.task); + let tasks = config.tasks()?; + + let task = tasks.get(&self.task).or_else(|| { + tasks + .values() + .find(|task| task.display_name().as_str() == self.task.as_str()) + }); if let Some(task) = task { let ts = config.get_toolset()?; @@ -44,7 +50,7 @@ impl TasksInfo { } fn display(&self, task: &Task, env: &EnvMap) -> Result<()> { - info::inline_section("Task", &task.name)?; + info::inline_section("Task", task.display_name())?; if !task.aliases.is_empty() { info::inline_section("Aliases", task.aliases.join(", "))?; } @@ -95,7 +101,7 @@ impl TasksInfo { fn display_json(&self, task: &Task, env: &EnvMap) -> Result<()> { let (spec, _) = task.parse_usage_spec(None, env)?; let o = json!({ - "name": task.name.to_string(), + "name": task.display_name(), "aliases": task.aliases.join(", "), "description": task.description.to_string(), "source": task.config_source, diff --git a/src/task/mod.rs b/src/task/mod.rs index 4b969877e7..0d07a6a0ea 100644 --- a/src/task/mod.rs +++ b/src/task/mod.rs @@ -640,7 +640,7 @@ impl TreeItem for (&Graph, NodeIndex) { fn write_self(&self) -> std::io::Result<()> { if let Some(w) = self.0.node_weight(self.1) { - miseprint!("{}", w.name)?; + miseprint!("{}", w.display_name())?; } Ok(()) } From 6372f101639386e94cd8df400c78962eab1dbdd5 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 8 Jan 2025 12:22:00 -0600 Subject: [PATCH 103/289] docs: update SECURITY.md --- SECURITY.md | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index 03a1920d29..657209aae7 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -47,22 +47,23 @@ Not all backends support thisโ€”notably asdf plugins do not. ## asdf plugins -asdf plugins are by far the biggest source of potential problems since they are typically not written -by the tool vendor and do not have checksum or signature verificationโ€”or if they do it isn't tied into -mise lockfiles. +asdf plugins in asdf (but not with mise's default tools) are dangerous. They are typically owned by random developers +unconnected to either asdf or the tool vendor. They may get hacked or maliciously inject code into +their plugin that could trivially execute code on your machine. -I'm actively moving away from using asdf plugins where possible towards backends like aqua and ubi. -This has the added benefit of supporting Windows if the tool itself supports it. -If a tool uses an asdf plugin you will receive a prompt in mise before installing it to check the plugin's source code. +asdf plugins are not used for tools inside the [registry](https://github.com/jdx/mise/blob/main/registry.toml) whenever possible. +Sometimes it is not possible to use more secure backends like aqua/ubi because tools have complex install +setups or need to export env vars. As of 2025-01-08, <25% of tools use asdf plugins as the default backend. +All of these are hosted in the [mise-plugins org](https://github.com/mise-plugins) to secure the supply +chain so you do not need to rely on plugins maintained by anyone except me. -Please contribute to this effort by checking if a tool works in ubi or aqua and submitting a PR to +Of course if you _manually_ add plugins not from the mise-plugins org you will want to ensure they +are coming from a trusted source. + +Please contribute to this effort to migrate away from asdf plugins by checking if a tool works in ubi or aqua and submitting a PR to [registry.toml](https://github.com/jdx/mise/blob/main/registry.toml) to add it. If it doesn't work in ubi or is missing from aqua, submit an issue or PR to the respective project to add it. New tools -using asdf are not likely to be accepted unless they cannot be supported in any other way. - -Another way I can reduce the risk of asdf plugins is by forking plugins into the [mise-plugins org](https://github.com/mise-plugins) which only -gives commit access to me and the mise advisory panel. On the [Roadmap for 2025](https://mise.jdx.dev/roadmap.html) is a goal to get -everything either off of asdf/vfox or at least into the mise-plugins org. +using asdf are **not** likely to be accepted unless they cannot be supported with any other backend. ## Supported Versions From a8e6a7a6b04b74327dff133271a4103d0306f3fc Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 8 Jan 2025 18:24:00 +0000 Subject: [PATCH 104/289] feat: added ktlint from aqua (#4004) --- docs/registry.md | 2 +- registry.toml | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/registry.md b/docs/registry.md index e1c55a08bb..9e821700db 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -414,7 +414,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | krew | [aqua:kubernetes-sigs/krew](https://github.com/kubernetes-sigs/krew) [asdf:bjw-s/asdf-krew](https://github.com/bjw-s/asdf-krew) | | kscript | [ubi:kscripting/kscript](https://github.com/kscripting/kscript) [asdf:edgelevel/asdf-kscript](https://github.com/edgelevel/asdf-kscript) | | ksops | [ubi:viaduct-ai/kustomize-sops](https://github.com/viaduct-ai/kustomize-sops) [asdf:janpieper/asdf-ksops](https://github.com/janpieper/asdf-ksops) | -| ktlint | [asdf:mise-plugins/mise-ktlint](https://github.com/mise-plugins/mise-ktlint) | +| ktlint | [aqua:pinterest/ktlint](https://github.com/pinterest/ktlint) [asdf:mise-plugins/mise-ktlint](https://github.com/mise-plugins/mise-ktlint) | | kube-capacity | [aqua:robscott/kube-capacity](https://github.com/robscott/kube-capacity) [asdf:looztra/asdf-kube-capacity](https://github.com/looztra/asdf-kube-capacity) | | kube-code-generator | [asdf:mise-plugins/mise-kube-code-generator](https://github.com/mise-plugins/mise-kube-code-generator) | | kube-controller-tools | [ubi:kubernetes-sigs/controller-tools](https://github.com/kubernetes-sigs/controller-tools) [asdf:jimmidyson/asdf-kube-controller-tools](https://github.com/jimmidyson/asdf-kube-controller-tools) | diff --git a/registry.toml b/registry.toml index 405a901443..12808eeeff 100644 --- a/registry.toml +++ b/registry.toml @@ -975,7 +975,9 @@ ksops.backends = [ "ubi:viaduct-ai/kustomize-sops[exe=ksops]", "asdf:janpieper/asdf-ksops" ] -ktlint.backends = ["asdf:mise-plugins/mise-ktlint"] +ktlint.depends = ["java"] +ktlint.backends = ["aqua:pinterest/ktlint", "asdf:mise-plugins/mise-ktlint"] +ktlint.test = ["ktlint --version", "ktlint version {{version}}"] kube-capacity.backends = [ "aqua:robscott/kube-capacity", "asdf:looztra/asdf-kube-capacity" From 2349d153f7d6cefdabc22943cb5992d9d361f36d Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 8 Jan 2025 12:30:19 -0600 Subject: [PATCH 105/289] Update roadmap.md --- docs/roadmap.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/roadmap.md b/docs/roadmap.md index 79b0fddee4..1c05100f4d 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -7,11 +7,9 @@ functionality. As far as general scope however, these are likely going to be foc - Removing experimental flag on features - several features are still marked as experimental. My hope is all features will be GA by the end of 2025. -- Supply chain hardening - in 2024 security was greatly enhanced in mise through migrating to aqua/ubi - backends for tools in the registry, but about 1/3 of the tools still rely on asdf plugins. - For tools we can't use aqua/ubi for, my goal is to fork them all into the [mise-plugins org](https://github.com/mise-plugins) by EOY - which only me and the advisory panel have commit access to. - Aqua tools also can benefit from further hardening through the use of slsa-verify and cosign and other verification methods. +- Supply chain hardening - much progress was made here by adopting ubi and aqua and switching to those backends + for the majority of tools. In 2025, we'll continue migrating more tools where possible away from asdf. + Aqua tools also can benefit from further hardening through the use of slsa-verify, cosign and other verification methods. - Tasks improvements - tasks came out of experimental at the end of 2024 but there are still features that I'd like to see from tasks such as prompts and error handling. - Hook improvements - hooks are very new in mise and still experimental. I suspect the design of hooks From 5ca603583166cc23543a0c4dce7727b308f663f5 Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Wed, 8 Jan 2025 19:40:57 +0100 Subject: [PATCH 106/289] fix: aqua:apache/spark doesn't work (#3995) * fix: aqua:apache/spark doesn't work * [autofix.ci] apply automated fixes * Update registry.toml --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: jdx <216188+jdx@users.noreply.github.com> --- docs/registry.md | 2 +- registry.toml | 4 +++- src/aqua/aqua_registry.rs | 2 +- src/backend/aqua.rs | 24 ++++++++++++++++-------- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/docs/registry.md b/docs/registry.md index 9e821700db..d7ea8efe4d 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -680,7 +680,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | sourcery | [asdf:mise-plugins/mise-sourcery](https://github.com/mise-plugins/mise-sourcery) | | spacectl | [aqua:spacelift-io/spacectl](https://github.com/spacelift-io/spacectl) [asdf:bodgit/asdf-spacectl](https://github.com/bodgit/asdf-spacectl) | | spago | [ubi:purescript/spago](https://github.com/purescript/spago) [asdf:jrrom/asdf-spago](https://github.com/jrrom/asdf-spago) | -| spark | [asdf:mise-plugins/mise-spark](https://github.com/mise-plugins/mise-spark) | +| spark | [aqua:apache/spark](https://github.com/apache/spark) [asdf:mise-plugins/mise-spark](https://github.com/mise-plugins/mise-spark) | | spectral | [aqua:stoplightio/spectral](https://github.com/stoplightio/spectral) [asdf:vbyrd/asdf-spectral](https://github.com/vbyrd/asdf-spectral) | | spin | [aqua:spinnaker/spin](https://github.com/spinnaker/spin) [asdf:pavloos/asdf-spin](https://github.com/pavloos/asdf-spin) | | spring-boot | [asdf:mise-plugins/mise-spring-boot](https://github.com/mise-plugins/mise-spring-boot) | diff --git a/registry.toml b/registry.toml index 12808eeeff..ad056124c3 100644 --- a/registry.toml +++ b/registry.toml @@ -1551,7 +1551,9 @@ soracom.backends = ["ubi:soracom/soracom-cli", "asdf:gr1m0h/asdf-soracom"] sourcery.backends = ["asdf:mise-plugins/mise-sourcery"] spacectl.backends = ["aqua:spacelift-io/spacectl", "asdf:bodgit/asdf-spacectl"] spago.backends = ["ubi:purescript/spago", "asdf:jrrom/asdf-spago"] -spark.backends = ["asdf:mise-plugins/mise-spark"] +spark.backends = ["aqua:apache/spark", "asdf:mise-plugins/mise-spark"] +spark.depends = ["java"] +spark.test = ["spark-shell --version 2>&1", "version {{version}}"] spectral.backends = ["aqua:stoplightio/spectral", "asdf:vbyrd/asdf-spectral"] spin.backends = ["aqua:spinnaker/spin", "asdf:pavloos/asdf-spin"] spring-boot.backends = ["asdf:mise-plugins/mise-spring-boot"] diff --git a/src/aqua/aqua_registry.rs b/src/aqua/aqua_registry.rs index a1731fb4c8..7310d41885 100644 --- a/src/aqua/aqua_registry.rs +++ b/src/aqua/aqua_registry.rs @@ -444,7 +444,7 @@ impl AquaFile { } fn apply_override(mut orig: AquaPackage, avo: &AquaPackage) -> AquaPackage { - if orig.r#type != avo.r#type { + if avo.r#type != AquaPackageType::GithubRelease { orig.r#type = avo.r#type.clone(); } if !avo.repo_owner.is_empty() { diff --git a/src/backend/aqua.rs b/src/backend/aqua.rs index b07f8cd347..7327710630 100644 --- a/src/backend/aqua.rs +++ b/src/backend/aqua.rs @@ -49,14 +49,7 @@ impl Backend for AquaBackend { fn _list_remote_versions(&self) -> Result> { let pkg = AQUA_REGISTRY.package(&self.id)?; if !pkg.repo_owner.is_empty() && !pkg.repo_name.is_empty() { - let versions = if let Some("github_tag") = pkg.version_source.as_deref() { - github::list_tags(&format!("{}/{}", pkg.repo_owner, pkg.repo_name))? - } else { - github::list_releases(&format!("{}/{}", pkg.repo_owner, pkg.repo_name))? - .into_iter() - .map(|r| r.tag_name) - .collect_vec() - }; + let versions = get_versions(&pkg)?; Ok(versions .into_iter() .filter_map(|v| { @@ -581,6 +574,21 @@ impl AquaBackend { } } +fn get_versions(pkg: &AquaPackage) -> Result> { + if let Some("github_tag") = pkg.version_source.as_deref() { + let versions = github::list_tags(&format!("{}/{}", pkg.repo_owner, pkg.repo_name))?; + return Ok(versions); + } + let mut versions = github::list_releases(&format!("{}/{}", pkg.repo_owner, pkg.repo_name))? + .into_iter() + .map(|r| r.tag_name) + .collect_vec(); + if versions.is_empty() { + versions = github::list_tags(&format!("{}/{}", pkg.repo_owner, pkg.repo_name))?; + } + Ok(versions) +} + fn validate(pkg: &AquaPackage) -> Result<()> { let envs: HashSet<&str> = pkg.supported_envs.iter().map(|s| s.as_str()).collect(); let os = os(); From d66ad22fcb28b492b471361d0470dd223ca28168 Mon Sep 17 00:00:00 2001 From: mise-en-dev Date: Wed, 8 Jan 2025 13:07:44 -0600 Subject: [PATCH 107/289] chore: release 2025.1.2 (#3955) --- CHANGELOG.md | 48 +++++++++++++ Cargo.lock | 146 ++++++++++++++++++++-------------------- Cargo.toml | 2 +- README.md | 2 +- aqua-registry | 2 +- completions/_mise | 6 +- completions/mise.bash | 6 +- completions/mise.fish | 6 +- default.nix | 2 +- packaging/rpm/mise.spec | 2 +- 10 files changed, 135 insertions(+), 87 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 193ab3a66b..9dac28864c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,49 @@ # Changelog +## [2025.1.2](https://github.com/jdx/mise/compare/v2025.1.1..v2025.1.2) - 2025-01-08 + +### ๐Ÿš€ Features + +- migrate asdf plugins to aqua/ubi by [@jdx](https://github.com/jdx) in [#3962](https://github.com/jdx/mise/pull/3962) +- migrate asdf plugins to aqua/ubi by [@jdx](https://github.com/jdx) in [#3978](https://github.com/jdx/mise/pull/3978) +- migrate asdf plugins to aqua/ubi by [@jdx](https://github.com/jdx) in [#3991](https://github.com/jdx/mise/pull/3991) +- replace asdf-spark plugin with mise-spark plugin by [@benberryallwood](https://github.com/benberryallwood) in [#3994](https://github.com/jdx/mise/pull/3994) +- add kubectx/kubens to registry by [@roele](https://github.com/roele) in [#3992](https://github.com/jdx/mise/pull/3992) +- added ktlint from aqua by [@jdx](https://github.com/jdx) in [#4004](https://github.com/jdx/mise/pull/4004) + +### ๐Ÿ› Bug Fixes + +- **(schema)** fix task sources and outputs schema by [@risu729](https://github.com/risu729) in [#3988](https://github.com/jdx/mise/pull/3988) +- **(schema)** update task schema by [@risu729](https://github.com/risu729) in [#3999](https://github.com/jdx/mise/pull/3999) +- correct age keyname by [@jdx](https://github.com/jdx) in [e28c293](https://github.com/jdx/mise/commit/e28c293bc5a241b043d0b72ec9aa0559e888f97b) +- mise install rust failed on windows by [@roele](https://github.com/roele) in [#3969](https://github.com/jdx/mise/pull/3969) +- maven-mvnd does not install with aqua by [@roele](https://github.com/roele) in [#3982](https://github.com/jdx/mise/pull/3982) +- maven-mvnd does not install with aqua by [@roele](https://github.com/roele) in [#3993](https://github.com/jdx/mise/pull/3993) +- use friendly error in `mise run` by [@jdx](https://github.com/jdx) in [#3998](https://github.com/jdx/mise/pull/3998) +- use task display_name in more places by [@hverlin](https://github.com/hverlin) in [#3997](https://github.com/jdx/mise/pull/3997) +- aqua:apache/spark doesn't work by [@roele](https://github.com/roele) in [#3995](https://github.com/jdx/mise/pull/3995) + +### ๐Ÿ“š Documentation + +- style on rustup settings by [@jdx](https://github.com/jdx) in [da91716](https://github.com/jdx/mise/commit/da91716c856b0bb1e8bdf70f9f97f74fe09f15ac) +- Escape template examples by [@henrebotha](https://github.com/henrebotha) in [#3987](https://github.com/jdx/mise/pull/3987) +- update SECURITY.md by [@jdx](https://github.com/jdx) in [6372f10](https://github.com/jdx/mise/commit/6372f101639386e94cd8df400c78962eab1dbdd5) + +### ๐Ÿงช Testing + +- fix test-plugins CI job for ubuntu-24 by [@jdx](https://github.com/jdx) in [492f6ac](https://github.com/jdx/mise/commit/492f6acc99014cb70f97efdd12700ee365a418ea) +- remove postgres test-plugins test by [@jdx](https://github.com/jdx) in [e93bc80](https://github.com/jdx/mise/commit/e93bc80a780fd0f7b4619af37c3f646dd622bed4) + +### Chore + +- remove deprecated tar syntax by [@jdx](https://github.com/jdx) in [322735a](https://github.com/jdx/mise/commit/322735a75bef9c602ffcec4d81914662cac00647) +- fix tar/gzip syntax by [@jdx](https://github.com/jdx) in [cd0a049](https://github.com/jdx/mise/commit/cd0a049ecace47354a931cd364ac2f5915812658) +- fork remaining asdf plugins to mise-plugins by [@jdx](https://github.com/jdx) in [#3996](https://github.com/jdx/mise/pull/3996) + +### New Contributors + +- @henrebotha made their first contribution in [#3987](https://github.com/jdx/mise/pull/3987) + ## [2025.1.1](https://github.com/jdx/mise/compare/v2025.1.0..v2025.1.1) - 2025-01-06 ### ๐Ÿš€ Features @@ -12,6 +56,7 @@ ### ๐Ÿ› Bug Fixes - improve mise generate bootstrap by [@hverlin](https://github.com/hverlin) in [#3939](https://github.com/jdx/mise/pull/3939) +- update year in copyright to dynamic with current year by [@nexckycort](https://github.com/nexckycort) in [#3957](https://github.com/jdx/mise/pull/3957) ### ๐Ÿ“š Documentation @@ -33,9 +78,12 @@ - remove cargo-show dependency by [@jdx](https://github.com/jdx) in [ab8e9e9](https://github.com/jdx/mise/commit/ab8e9e9e429beeb23731c356537525f64bc59b28) - remove cargo-show dependency by [@jdx](https://github.com/jdx) in [ca2f89c](https://github.com/jdx/mise/commit/ca2f89c6cd36d828a9eab2884a3f8c9cc1fe2c19) - remove cargo-show dependency by [@jdx](https://github.com/jdx) in [82e3390](https://github.com/jdx/mise/commit/82e3390c5fc9a97c942dc407b2073edfcb3974bc) +- fix release-plz by [@jdx](https://github.com/jdx) in [52ac62a](https://github.com/jdx/mise/commit/52ac62a7d7e8439d32b84c4247ee366c28901863) +- fix release-plz by [@jdx](https://github.com/jdx) in [dba7044](https://github.com/jdx/mise/commit/dba7044b4dcce808fd4734e9a284ab2174758be0) ### New Contributors +- @nexckycort made their first contribution in [#3957](https://github.com/jdx/mise/pull/3957) - @MontakOleg made their first contribution in [#3918](https://github.com/jdx/mise/pull/3918) - @kit494way made their first contribution in [#3943](https://github.com/jdx/mise/pull/3943) - @benberryallwood made their first contribution in [#3937](https://github.com/jdx/mise/pull/3937) diff --git a/Cargo.lock b/Cargo.lock index c1d74f45d2..52325af63a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -250,9 +250,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.84" +version = "0.1.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1244b10dcd56c92219da4e14caa97e312079e185f04ba3eea25061561dc0a0" +checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" dependencies = [ "proc-macro2", "quote", @@ -566,9 +566,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.23" +version = "4.5.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" +checksum = "9560b07a799281c7e0958b9296854d6fafd4c5f31444a7e5bb1ad6dde5ccf1bd" dependencies = [ "clap_builder", "clap_derive", @@ -576,9 +576,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.23" +version = "4.5.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" +checksum = "874e0dd3eb68bf99058751ac9712f622e61e6f393a94f7128fa26e3f02f5c7cd" dependencies = [ "anstream", "anstyle", @@ -588,9 +588,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.18" +version = "4.5.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -606,9 +606,9 @@ checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "clap_mangen" -version = "0.2.24" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbae9cbfdc5d4fa8711c09bd7b83f644cb48281ac35bf97af3e47b0675864bdf" +checksum = "acbfe6ac42a2438d0968beba18e3c35cacf16b0c25310bc22b1f5f3cffff09f4" dependencies = [ "clap", "roff", @@ -987,13 +987,13 @@ checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" [[package]] name = "demand" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6baac05ea4b0164abd840ea135c0156ad7025d0920cd720ee4e654b822d94454" +checksum = "58c47e28442b8cafbd1e05139fa18993058da13baf6c7110d47aac2e570169ce" dependencies = [ "console", "fuzzy-matcher", - "itertools 0.13.0", + "itertools 0.14.0", "once_cell", "signal-hook", "termcolor", @@ -1280,7 +1280,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbf7d3d8b433d4dc8fe3e5383ad01f1cb2ffba8e999191af8bf7af1e9fa3e2ca" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.7.0", "log", "once_cell", "pest", @@ -1647,7 +1647,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.5.0", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -1666,6 +1666,12 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + [[package]] name = "heck" version = "0.4.1" @@ -2154,12 +2160,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.5.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.2", "serde", ] @@ -2398,9 +2404,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.20" +version = "1.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" +checksum = "df9b68e50e6e0b26f672573834882eb57759f6db9b3be2ea3c35c91188bb4eaa" dependencies = [ "cc", "libc", @@ -2416,9 +2422,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "litemap" @@ -2623,7 +2629,7 @@ dependencies = [ [[package]] name = "mise" -version = "2025.1.1" +version = "2025.1.2" dependencies = [ "base64 0.22.1", "built", @@ -2660,7 +2666,7 @@ dependencies = [ "homedir", "humantime", "indenter", - "indexmap 2.5.0", + "indexmap 2.7.0", "indicatif", "indoc", "insta", @@ -2696,7 +2702,7 @@ dependencies = [ "shell-escape", "shell-words", "signal-hook", - "siphasher 1.0.1", + "siphasher", "strum", "sys-info", "tabled", @@ -3103,28 +3109,28 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b1374ec32450264534c67d1ccb5ca09818c4db8fd87cf97478d0df2fa44c65" +checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset", - "indexmap 2.5.0", + "indexmap 2.7.0", ] [[package]] name = "phf" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ "phf_shared", ] [[package]] name = "phf_codegen" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" dependencies = [ "phf_generator", "phf_shared", @@ -3132,9 +3138,9 @@ dependencies = [ [[package]] name = "phf_generator" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ "phf_shared", "rand", @@ -3142,27 +3148,27 @@ dependencies = [ [[package]] name = "phf_shared" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" dependencies = [ - "siphasher 0.3.11", + "siphasher", ] [[package]] name = "pin-project" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" +checksum = "1e2ec53ad785f4d35dac0adea7f7dc6f1bb277ad84a680c7afefeae05d1f5916" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" +checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb" dependencies = [ "proc-macro2", "quote", @@ -3171,9 +3177,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -3608,7 +3614,7 @@ dependencies = [ "generic-array", "hex", "impl-tools", - "indexmap 2.5.0", + "indexmap 2.7.0", "rand", "regex", "serde", @@ -3698,9 +3704,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.42" +version = "0.38.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" +checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" dependencies = [ "bitflags", "errno 0.3.10", @@ -3732,7 +3738,7 @@ dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.1.0", + "security-framework 3.2.0", ] [[package]] @@ -3859,9 +3865,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81d3f8c9bfcc3cbb6b0179eb57042d75b1582bdc65c3cb95f3fa999509c03cbc" +checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" dependencies = [ "bitflags", "core-foundation 0.10.0", @@ -3872,9 +3878,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.13.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1863fd3768cd83c56a7f60faa4dc0d403f1b6df0a38c3c25f44b7894e45370d5" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -3977,11 +3983,11 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.134" +version = "1.0.135" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" +checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.7.0", "itoa", "memchr", "ryu", @@ -4029,7 +4035,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.5.0", + "indexmap 2.7.0", "serde", "serde_derive", "serde_json", @@ -4055,7 +4061,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.7.0", "itoa", "ryu", "serde", @@ -4204,12 +4210,6 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - [[package]] name = "siphasher" version = "1.0.1" @@ -4634,9 +4634,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.42.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", @@ -4652,9 +4652,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", @@ -4730,7 +4730,7 @@ version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.7.0", "serde", "serde_spanned", "toml_datetime", @@ -5038,7 +5038,7 @@ checksum = "ab923f719b3048bd1cd2fb738fca978ed2a60756ce15cdad639fc40645adad9c" dependencies = [ "clap", "heck 0.5.0", - "indexmap 2.5.0", + "indexmap 2.7.0", "itertools 0.13.0", "kdl", "log", @@ -5103,13 +5103,13 @@ dependencies = [ [[package]] name = "vfox" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c44e4ec114bba1eeed55bc3a47ced72545cd2ffa04ce0ec0bdba1fb535807d" +checksum = "32dfa4e97177d71ec00f5d01ec2c317a4f37a2a0c607550a8a70b552b8f4ace6" dependencies = [ "homedir", - "indexmap 2.5.0", - "itertools 0.13.0", + "indexmap 2.7.0", + "itertools 0.14.0", "log", "mlua", "once_cell", @@ -5779,7 +5779,7 @@ dependencies = [ "displaydoc", "flate2", "hmac", - "indexmap 2.5.0", + "indexmap 2.7.0", "lzma-rs", "memchr", "pbkdf2", diff --git a/Cargo.toml b/Cargo.toml index c84df0612d..c763940ec2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mise" -version = "2025.1.1" +version = "2025.1.2" edition = "2021" description = "The front-end to your dev env" authors = ["Jeff Dickey (@jdx)"] diff --git a/README.md b/README.md index 97f77501d2..80d4ecc70f 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Install mise (other methods [here](https://mise.jdx.dev/getting-started.html)): ```sh-session $ curl https://mise.run | sh $ ~/.local/bin/mise --version -2025.1.1 macos-arm64 (a1b2d3e 2025-01-06) +2025.1.2 macos-arm64 (a1b2d3e 2025-01-08) ``` or install a specific a version: diff --git a/aqua-registry b/aqua-registry index 367509cba3..bb348e016f 160000 --- a/aqua-registry +++ b/aqua-registry @@ -1 +1 @@ -Subproject commit 367509cba335d6032c1921cc4d09931ea4e15f73 +Subproject commit bb348e016f83f547adefaf6be4d25a66dc6d675b diff --git a/completions/_mise b/completions/_mise index 0e05a23d07..4dcbd9ee6a 100644 --- a/completions/_mise +++ b/completions/_mise @@ -27,11 +27,11 @@ _mise() { zstyle ":completion:${curcontext}:" cache-policy _usage_mise_cache_policy fi - if ( [[ -z "${_usage_spec_mise_2025_1_1:-}" ]] || _cache_invalid _usage_spec_mise_2025_1_1 ) \ - && ! _retrieve_cache _usage_spec_mise_2025_1_1; + if ( [[ -z "${_usage_spec_mise_2025_1_2:-}" ]] || _cache_invalid _usage_spec_mise_2025_1_2 ) \ + && ! _retrieve_cache _usage_spec_mise_2025_1_2; then spec="$(mise usage)" - _store_cache _usage_spec_mise_2025_1_1 spec + _store_cache _usage_spec_mise_2025_1_2 spec fi _arguments "*: :(($(usage complete-word --shell zsh -s "$spec" -- "${words[@]}" )))" diff --git a/completions/mise.bash b/completions/mise.bash index 6ea052ac4f..9b1eac8884 100644 --- a/completions/mise.bash +++ b/completions/mise.bash @@ -6,14 +6,14 @@ _mise() { return 1 fi - if [[ -z ${_usage_spec_mise_2025_1_1:-} ]]; then - _usage_spec_mise_2025_1_1="$(mise usage)" + if [[ -z ${_usage_spec_mise_2025_1_2:-} ]]; then + _usage_spec_mise_2025_1_2="$(mise usage)" fi local cur prev words cword was_split comp_args _comp_initialize -n : -- "$@" || return # shellcheck disable=SC2207 - _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2025_1_1}" --cword="$cword" -- "${words[@]}")" + _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2025_1_2}" --cword="$cword" -- "${words[@]}")" _comp_ltrim_colon_completions "$cur" # shellcheck disable=SC2181 if [[ $? -ne 0 ]]; then diff --git a/completions/mise.fish b/completions/mise.fish index 7189e5c47e..8fc1dcf115 100644 --- a/completions/mise.fish +++ b/completions/mise.fish @@ -6,7 +6,7 @@ if ! command -v usage &> /dev/null return 1 end -if ! set -q _usage_spec_mise_2025_1_1 - set -g _usage_spec_mise_2025_1_1 (mise usage | string collect) +if ! set -q _usage_spec_mise_2025_1_2 + set -g _usage_spec_mise_2025_1_2 (mise usage | string collect) end -complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_1_1" -- (commandline -cop) (commandline -t))' +complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_1_2" -- (commandline -cop) (commandline -t))' diff --git a/default.nix b/default.nix index a554f8298d..3b612c8eca 100644 --- a/default.nix +++ b/default.nix @@ -2,7 +2,7 @@ rustPlatform.buildRustPackage { pname = "mise"; - version = "2025.1.1"; + version = "2025.1.2"; src = lib.cleanSource ./.; diff --git a/packaging/rpm/mise.spec b/packaging/rpm/mise.spec index 225602f42a..6937b377f4 100644 --- a/packaging/rpm/mise.spec +++ b/packaging/rpm/mise.spec @@ -1,6 +1,6 @@ Summary: The front-end to your dev env Name: mise -Version: 2025.1.1 +Version: 2025.1.2 Release: 1 URL: https://github.com/jdx/mise/ Group: System From 5b30972ecbcfbc9ee5a1ffd9b053fd97e4d6e966 Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Wed, 8 Jan 2025 20:19:50 +0100 Subject: [PATCH 108/289] fix: mise fails to install kubectl on windows from aqua registry (#4006) --- src/backend/aqua.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/backend/aqua.rs b/src/backend/aqua.rs index 7327710630..13dd68a6c4 100644 --- a/src/backend/aqua.rs +++ b/src/backend/aqua.rs @@ -532,6 +532,11 @@ impl AquaBackend { for (src, dst) in self.srcs(pkg, tv)? { if src != dst && src.exists() && !dst.exists() { if cfg!(windows) { + let dst = if dst.extension().is_none() { + dst.with_extension("exe") + } else { + dst + }; file::copy(&src, &dst)?; } else { let src = PathBuf::from(".").join(src.file_name().unwrap().to_str().unwrap()); From e3bf99f0230329c927f2d7009f851f4878c48141 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 8 Jan 2025 19:29:38 +0000 Subject: [PATCH 109/289] fix: aliases with aqua (#4007) Fixes #3933 Fixes #3936 --- e2e/cli/test_alias | 3 +++ src/backend/aqua.rs | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/e2e/cli/test_alias b/e2e/cli/test_alias index 92652b0f6d..4d05335ac6 100644 --- a/e2e/cli/test_alias +++ b/e2e/cli/test_alias @@ -4,3 +4,6 @@ mise alias set tiny xxx 2 assert_contains "mise alias ls tiny" "tiny xxx 2" mise alias unset tiny xxx assert_not_contains "mise alias ls" "tiny xxx" + +assert "mise config set alias.nushell aqua:nushell/nushell" +assert "mise x nushell -- nu --version" diff --git a/src/backend/aqua.rs b/src/backend/aqua.rs index 13dd68a6c4..13fee2c86a 100644 --- a/src/backend/aqua.rs +++ b/src/backend/aqua.rs @@ -147,7 +147,8 @@ impl Backend for AquaBackend { impl AquaBackend { pub fn from_arg(ba: BackendArg) -> Self { - let mut id = ba.tool_name.as_str(); + let full = ba.full(); + let mut id = full.split_once(":").unwrap_or(("", &full)).1; if !id.contains("/") { id = REGISTRY .get(id) From f9ee0be9c568bde8d7a41a3b66539b53e947e53d Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 8 Jan 2025 19:46:20 +0000 Subject: [PATCH 110/289] fix: issue with enter hook and subdirs (#4008) Fixes #4001 Fixes #3924 --- e2e/config/test_hooks | 27 ++++++++++++++++++++++----- src/hooks.rs | 2 +- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/e2e/config/test_hooks b/e2e/config/test_hooks index e2462481c7..130370b3c2 100644 --- a/e2e/config/test_hooks +++ b/e2e/config/test_hooks @@ -1,5 +1,6 @@ #!/usr/bin/env bash +mkdir foo cat <mise.toml [tools] dummy = 'latest' @@ -15,23 +16,39 @@ assert_contains "mise i 2>&1" "PREINSTALL" assert_contains "mise i dummy@1 2>&1" "POSTINSTALL" assert_contains "mise i 2>&1" "POSTINSTALL" assert_contains "mise i dummy@1 2>&1" "POSTINSTALL" - eval "$(mise hook-env)" + +cd ~/workdir || exit 1 assert_not_contains "mise hook-env 2>&1" "HOOK-CD" assert_not_contains "mise hook-env 2>&1" "HOOK-ENTER" assert_not_contains "mise hook-env 2>&1" "HOOK-LEAVE" -pushd .. || exit 1 + +cd ~ || exit 1 assert_not_contains "mise hook-env 2>&1" "HOOK-CD" assert_not_contains "mise hook-env 2>&1" "HOOK-ENTER" assert_contains "mise hook-env 2>&1" "HOOK-LEAVE" eval "$(mise hook-env)" -popd || exit 1 + +cd ~/workdir || exit 1 assert_contains "mise hook-env 2>&1" "HOOK-CD" assert_contains "mise hook-env 2>&1" "HOOK-ENTER" assert_not_contains "mise hook-env 2>&1" "HOOK-LEAVE" eval "$(mise hook-env)" -mkdir foo -cd foo || exit 1 + +cd ~/workdir/foo || exit 1 assert_contains "mise hook-env 2>&1" "HOOK-CD" assert_not_contains "mise hook-env 2>&1" "HOOK-ENTER" assert_not_contains "mise hook-env 2>&1" "HOOK-LEAVE" +eval "$(mise hook-env)" + +cd ~ || exit 1 +assert_not_contains "mise hook-env 2>&1" "HOOK-CD" +assert_not_contains "mise hook-env 2>&1" "HOOK-ENTER" +assert_contains "mise hook-env 2>&1" "HOOK-LEAVE" +eval "$(mise hook-env)" + +cd ~/workdir/foo || exit 1 +assert_contains "mise hook-env 2>&1" "HOOK-CD" +assert_contains "mise hook-env 2>&1" "HOOK-ENTER" +assert_not_contains "mise hook-env 2>&1" "HOOK-LEAVE" +eval "$(mise hook-env)" diff --git a/src/hooks.rs b/src/hooks.rs index f6534e4a6a..6cc71ab98c 100644 --- a/src/hooks.rs +++ b/src/hooks.rs @@ -78,7 +78,7 @@ pub fn run_one_hook(ts: &Toolset, hook: Hooks, shell: Option<&dyn Shell>) { trace!("running hook {hook} in {root:?}"); match (hook, hook_env::dir_change()) { (Hooks::Enter, Some((old, new))) => { - if !root.starts_with(&new) { + if !new.starts_with(root) { continue; } if !new.starts_with(root) { From dea1532decb0928b79b57ae9413e0868fa022d3b Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 8 Jan 2025 20:15:49 +0000 Subject: [PATCH 111/289] fix: allow using depends and depends_post on separate tasks (#4010) Fixes #4009 --- e2e/tasks/test_task_depends_post | 32 ++++++++++++++++++++++++++++++++ src/task/deps.rs | 6 ++++++ src/task/mod.rs | 5 ++++- 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 e2e/tasks/test_task_depends_post diff --git a/e2e/tasks/test_task_depends_post b/e2e/tasks/test_task_depends_post new file mode 100644 index 0000000000..e4123ff138 --- /dev/null +++ b/e2e/tasks/test_task_depends_post @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +# ensures depends_post and depends can be used on separate tasks +cat <mise.toml +[tasks.one] +run = "echo one" + +[tasks.two] +depends = ["one"] +run = "echo two" + +[tasks.three] +depends_post = ["two"] +run = "echo three" +EOF +assert "mise task deps" "one +three +two +โ”œโ”€โ”€ three +โ””โ”€โ”€ one" +assert "mise run three" + +# TODO: this does not work with how mise is designed currently. Tasks can only ever be run once per run session. This will require hefty refactoring if it is ever supported +# uses depends and depends_post on the same task +#cat <mise.toml +#tasks."util:donothing" = "" +#[tasks.hi] +#depends = "util:donothing" +#run = "echo hi" +#depends_post = "util:donothing" +#EOF +#assert "mise run hi" diff --git a/src/task/deps.rs b/src/task/deps.rs index b28199c3f6..b99a774d95 100644 --- a/src/task/deps.rs +++ b/src/task/deps.rs @@ -23,6 +23,7 @@ impl Deps { let mut graph = DiGraph::new(); let mut indexes = HashMap::new(); let mut stack = vec![]; + let mut seen = HashSet::new(); let mut add_idx = |task: &Task, graph: &mut DiGraph| { *indexes @@ -45,6 +46,10 @@ impl Deps { .flatten_ok() .collect::>>()?; while let Some(a) = stack.pop() { + if seen.contains(&a) { + // prevent infinite loop + continue; + } let a_idx = add_idx(&a, &mut graph); let (pre, post) = a.resolve_depends(&all_tasks_to_run)?; for b in pre { @@ -57,6 +62,7 @@ impl Deps { graph.update_edge(b_idx, a_idx, ()); stack.push(b.clone()); } + seen.insert(a); } let (tx, _) = channel::unbounded(); let sent = HashSet::new(); diff --git a/src/task/mod.rs b/src/task/mod.rs index 0d07a6a0ea..af1f7d9cc9 100644 --- a/src/task/mod.rs +++ b/src/task/mod.rs @@ -264,8 +264,11 @@ impl Task { .filter_ok(|t| t.name != self.name) .collect::>>()?; for dep in depends.clone() { - depends.extend(dep.all_depends()?); + let mut extra = dep.all_depends()?; + extra.retain(|t| t.name != self.name); // prevent depending on ourself + depends.extend(extra); } + let depends = depends.into_iter().unique().collect(); Ok(depends) } From b11167b8d82bdb1e646dd9e76e66c520208a99a2 Mon Sep 17 00:00:00 2001 From: Hugues Verlin Date: Thu, 9 Jan 2025 11:46:29 +0100 Subject: [PATCH 112/289] docs: Add default description to github token link (#4019) --- docs/troubleshooting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index 3588b46d2d..12bfc2c0fb 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -140,7 +140,7 @@ HTTP status client error (403 Forbidden) for url This can happen if the tool is hosted on GitHub, and you've hit the API rate limit. This is especially common running mise in a CI environment like GitHub Actions. If you don't have a `GITHUB_TOKEN` set, the rate limit is quite low. You can fix this by creating a GitHub token (which needs no scopes) -by going to and setting it as an environment variable. You can +by going to [https://github.com/settings/tokens/new](https://github.com/settings/tokens/new?description=MISE_GITHUB_TOKEN) and setting it as an environment variable. You can use any of the following (in order of preference): - `MISE_GITHUB_TOKEN` From 8afa8a405012943f4ccc83dc05ae93007883e337 Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Thu, 9 Jan 2025 17:09:03 +0100 Subject: [PATCH 113/289] fix: mise fails to install kubectl on windows from aqua registry (#4024) * fix: mise fails to install kubectl on windows from aqua registry * [autofix.ci] apply automated fixes * [autofix.ci] apply automated fixes (attempt 2/3) --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- src/aqua/aqua_registry.rs | 11 +++++++++-- src/backend/aqua.rs | 5 ----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/aqua/aqua_registry.rs b/src/aqua/aqua_registry.rs index 7310d41885..ea86303d0d 100644 --- a/src/aqua/aqua_registry.rs +++ b/src/aqua/aqua_registry.rs @@ -12,7 +12,7 @@ use itertools::Itertools; use serde_derive::Deserialize; use std::cmp::PartialEq; use std::collections::HashMap; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use std::sync::LazyLock as Lazy; use url::Url; @@ -349,7 +349,14 @@ impl AquaPackage { } pub fn url(&self, v: &str) -> Result { - self.parse_aqua_str(&self.url, v, &Default::default()) + let mut url = self.url.clone(); + if cfg!(windows) + && Path::new(&url).extension().is_none() + && (self.format.is_empty() || self.format == "raw") + { + url.push_str(".exe"); + } + self.parse_aqua_str(&url, v, &Default::default()) } fn parse_aqua_str( diff --git a/src/backend/aqua.rs b/src/backend/aqua.rs index 13fee2c86a..915b91c580 100644 --- a/src/backend/aqua.rs +++ b/src/backend/aqua.rs @@ -533,11 +533,6 @@ impl AquaBackend { for (src, dst) in self.srcs(pkg, tv)? { if src != dst && src.exists() && !dst.exists() { if cfg!(windows) { - let dst = if dst.extension().is_none() { - dst.with_extension("exe") - } else { - dst - }; file::copy(&src, &dst)?; } else { let src = PathBuf::from(".").join(src.file_name().unwrap().to_str().unwrap()); From fa8350a4dc2ef6b21a4dfc2118d2ac901643583d Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Thu, 9 Jan 2025 10:38:17 -0600 Subject: [PATCH 114/289] docs: fix source code links (#4025) Fixes #4012 Fixes #3950 --- docs/cli/alias.md | 2 +- docs/cli/backends.md | 2 +- docs/cli/bin-paths.md | 2 +- docs/cli/cache.md | 2 +- docs/cli/config.md | 2 +- docs/cli/doctor.md | 2 +- docs/cli/generate.md | 2 +- docs/cli/generate/git-pre-commit.md | 2 +- docs/cli/generate/github-action.md | 2 +- docs/cli/generate/task-docs.md | 2 +- docs/cli/generate/task-stubs.md | 2 +- docs/cli/install-into.md | 2 +- docs/cli/ls-remote.md | 2 +- docs/cli/plugins.md | 2 +- docs/cli/plugins/ls-remote.md | 2 +- docs/cli/self-update.md | 2 +- docs/cli/settings.md | 2 +- docs/cli/sync.md | 2 +- docs/cli/tasks.md | 2 +- mise.usage.kdl | 9 ++++++++- src/assets/mise-extra.usage.kdl | 9 ++++++++- 21 files changed, 35 insertions(+), 21 deletions(-) diff --git a/docs/cli/alias.md b/docs/cli/alias.md index c781ce2a81..07e2eea189 100644 --- a/docs/cli/alias.md +++ b/docs/cli/alias.md @@ -2,7 +2,7 @@ - **Usage**: `mise alias [-p --plugin ] [--no-header] ` - **Aliases**: `a` -- **Source code**: [`src/cli/alias.rs`](https://github.com/jdx/mise/blob/main/src/cli/alias.rs) +- **Source code**: [`src/cli/alias/mod.rs`](https://github.com/jdx/mise/blob/main/src/cli/alias/mod.rs) Manage aliases diff --git a/docs/cli/backends.md b/docs/cli/backends.md index f7caf15fbf..90cbe3de29 100644 --- a/docs/cli/backends.md +++ b/docs/cli/backends.md @@ -2,7 +2,7 @@ - **Usage**: `mise backends ` - **Aliases**: `b` -- **Source code**: [`src/cli/backends.rs`](https://github.com/jdx/mise/blob/main/src/cli/backends.rs) +- **Source code**: [`src/cli/backends/mod.rs`](https://github.com/jdx/mise/blob/main/src/cli/backends/mod.rs) Manage backends diff --git a/docs/cli/bin-paths.md b/docs/cli/bin-paths.md index 41a9da484d..bf4c237659 100644 --- a/docs/cli/bin-paths.md +++ b/docs/cli/bin-paths.md @@ -1,7 +1,7 @@ # `mise bin-paths` - **Usage**: `mise bin-paths [TOOL@VERSION]...` -- **Source code**: [`src/cli/bin-paths.rs`](https://github.com/jdx/mise/blob/main/src/cli/bin-paths.rs) +- **Source code**: [`src/cli/bin_paths.rs`](https://github.com/jdx/mise/blob/main/src/cli/bin_paths.rs) List all the active runtime bin paths diff --git a/docs/cli/cache.md b/docs/cli/cache.md index 81d015fc7e..ff1e85fadf 100644 --- a/docs/cli/cache.md +++ b/docs/cli/cache.md @@ -1,7 +1,7 @@ # `mise cache` - **Usage**: `mise cache ` -- **Source code**: [`src/cli/cache.rs`](https://github.com/jdx/mise/blob/main/src/cli/cache.rs) +- **Source code**: [`src/cli/cache/mod.rs`](https://github.com/jdx/mise/blob/main/src/cli/cache/mod.rs) Manage the mise cache diff --git a/docs/cli/config.md b/docs/cli/config.md index 9d8ab7463f..48a5613800 100644 --- a/docs/cli/config.md +++ b/docs/cli/config.md @@ -2,7 +2,7 @@ - **Usage**: `mise config [--no-header] [-J --json] ` - **Aliases**: `cfg` -- **Source code**: [`src/cli/config.rs`](https://github.com/jdx/mise/blob/main/src/cli/config.rs) +- **Source code**: [`src/cli/config/mod.rs`](https://github.com/jdx/mise/blob/main/src/cli/config/mod.rs) Manage config files diff --git a/docs/cli/doctor.md b/docs/cli/doctor.md index 55907756ca..508caa35be 100644 --- a/docs/cli/doctor.md +++ b/docs/cli/doctor.md @@ -2,7 +2,7 @@ - **Usage**: `mise doctor [-J --json] ` - **Aliases**: `dr` -- **Source code**: [`src/cli/doctor.rs`](https://github.com/jdx/mise/blob/main/src/cli/doctor.rs) +- **Source code**: [`src/cli/doctor/mod.rs`](https://github.com/jdx/mise/blob/main/src/cli/doctor/mod.rs) Check mise installation for possible problems diff --git a/docs/cli/generate.md b/docs/cli/generate.md index 0f7eb144c8..e59b158e55 100644 --- a/docs/cli/generate.md +++ b/docs/cli/generate.md @@ -2,7 +2,7 @@ - **Usage**: `mise generate ` - **Aliases**: `gen` -- **Source code**: [`src/cli/generate.rs`](https://github.com/jdx/mise/blob/main/src/cli/generate.rs) +- **Source code**: [`src/cli/generate/mod.rs`](https://github.com/jdx/mise/blob/main/src/cli/generate/mod.rs) [experimental] Generate files for various tools/services diff --git a/docs/cli/generate/git-pre-commit.md b/docs/cli/generate/git-pre-commit.md index 508c693a9d..a5aac94585 100644 --- a/docs/cli/generate/git-pre-commit.md +++ b/docs/cli/generate/git-pre-commit.md @@ -2,7 +2,7 @@ - **Usage**: `mise generate git-pre-commit [FLAGS]` - **Aliases**: `pre-commit` -- **Source code**: [`src/cli/generate/git-pre-commit.rs`](https://github.com/jdx/mise/blob/main/src/cli/generate/git-pre-commit.rs) +- **Source code**: [`src/cli/generate/git_pre_commit.rs`](https://github.com/jdx/mise/blob/main/src/cli/generate/git_pre_commit.rs) [experimental] Generate a git pre-commit hook diff --git a/docs/cli/generate/github-action.md b/docs/cli/generate/github-action.md index 7f4b3322f5..751ba4b349 100644 --- a/docs/cli/generate/github-action.md +++ b/docs/cli/generate/github-action.md @@ -1,7 +1,7 @@ # `mise generate github-action` - **Usage**: `mise generate github-action [FLAGS]` -- **Source code**: [`src/cli/generate/github-action.rs`](https://github.com/jdx/mise/blob/main/src/cli/generate/github-action.rs) +- **Source code**: [`src/cli/generate/github_action.rs`](https://github.com/jdx/mise/blob/main/src/cli/generate/github_action.rs) [experimental] Generate a GitHub Action workflow file diff --git a/docs/cli/generate/task-docs.md b/docs/cli/generate/task-docs.md index ffda3dce8d..55a48c8d81 100644 --- a/docs/cli/generate/task-docs.md +++ b/docs/cli/generate/task-docs.md @@ -1,7 +1,7 @@ # `mise generate task-docs` - **Usage**: `mise generate task-docs [FLAGS]` -- **Source code**: [`src/cli/generate/task-docs.rs`](https://github.com/jdx/mise/blob/main/src/cli/generate/task-docs.rs) +- **Source code**: [`src/cli/generate/task_docs.rs`](https://github.com/jdx/mise/blob/main/src/cli/generate/task_docs.rs) Generate documentation for tasks in a project diff --git a/docs/cli/generate/task-stubs.md b/docs/cli/generate/task-stubs.md index 9f6640ff26..cb25e324e3 100644 --- a/docs/cli/generate/task-stubs.md +++ b/docs/cli/generate/task-stubs.md @@ -1,7 +1,7 @@ # `mise generate task-stubs` - **Usage**: `mise generate task-stubs [-m --mise-bin ] [-d --dir ]` -- **Source code**: [`src/cli/generate/task-stubs.rs`](https://github.com/jdx/mise/blob/main/src/cli/generate/task-stubs.rs) +- **Source code**: [`src/cli/generate/task_stubs.rs`](https://github.com/jdx/mise/blob/main/src/cli/generate/task_stubs.rs) [experimental] Generates shims to run mise tasks diff --git a/docs/cli/install-into.md b/docs/cli/install-into.md index 118d170cd4..236a401273 100644 --- a/docs/cli/install-into.md +++ b/docs/cli/install-into.md @@ -1,7 +1,7 @@ # `mise install-into` - **Usage**: `mise install-into ` -- **Source code**: [`src/cli/install-into.rs`](https://github.com/jdx/mise/blob/main/src/cli/install-into.rs) +- **Source code**: [`src/cli/install_into.rs`](https://github.com/jdx/mise/blob/main/src/cli/install_into.rs) Install a tool version to a specific path diff --git a/docs/cli/ls-remote.md b/docs/cli/ls-remote.md index 20499b182a..441dd91120 100644 --- a/docs/cli/ls-remote.md +++ b/docs/cli/ls-remote.md @@ -1,7 +1,7 @@ # `mise ls-remote` - **Usage**: `mise ls-remote [--all] [TOOL@VERSION] [PREFIX]` -- **Source code**: [`src/cli/ls-remote.rs`](https://github.com/jdx/mise/blob/main/src/cli/ls-remote.rs) +- **Source code**: [`src/cli/ls_remote.rs`](https://github.com/jdx/mise/blob/main/src/cli/ls_remote.rs) List runtime versions available for install. diff --git a/docs/cli/plugins.md b/docs/cli/plugins.md index 1eac4e591a..b00a1d566a 100644 --- a/docs/cli/plugins.md +++ b/docs/cli/plugins.md @@ -2,7 +2,7 @@ - **Usage**: `mise plugins [FLAGS] ` - **Aliases**: `p` -- **Source code**: [`src/cli/plugins.rs`](https://github.com/jdx/mise/blob/main/src/cli/plugins.rs) +- **Source code**: [`src/cli/plugins/mod.rs`](https://github.com/jdx/mise/blob/main/src/cli/plugins/mod.rs) Manage plugins diff --git a/docs/cli/plugins/ls-remote.md b/docs/cli/plugins/ls-remote.md index dbec2cd60c..44bb27a18d 100644 --- a/docs/cli/plugins/ls-remote.md +++ b/docs/cli/plugins/ls-remote.md @@ -2,7 +2,7 @@ - **Usage**: `mise plugins ls-remote [-u --urls] [--only-names]` - **Aliases**: `list-remote`, `list-all` -- **Source code**: [`src/cli/plugins/ls-remote.rs`](https://github.com/jdx/mise/blob/main/src/cli/plugins/ls-remote.rs) +- **Source code**: [`src/cli/plugins/ls_remote.rs`](https://github.com/jdx/mise/blob/main/src/cli/plugins/ls_remote.rs) List all available remote plugins diff --git a/docs/cli/self-update.md b/docs/cli/self-update.md index 6acdb21cc0..0e35e10cc2 100644 --- a/docs/cli/self-update.md +++ b/docs/cli/self-update.md @@ -1,7 +1,7 @@ # `mise self-update` - **Usage**: `mise self-update [FLAGS] [VERSION]` -- **Source code**: [`src/cli/self-update.rs`](https://github.com/jdx/mise/blob/main/src/cli/self-update.rs) +- **Source code**: [`src/cli/self_update.rs`](https://github.com/jdx/mise/blob/main/src/cli/self_update.rs) Updates mise itself. diff --git a/docs/cli/settings.md b/docs/cli/settings.md index 02f213b176..23a2221840 100644 --- a/docs/cli/settings.md +++ b/docs/cli/settings.md @@ -1,7 +1,7 @@ # `mise settings` - **Usage**: `mise settings [FLAGS] [SETTING] [VALUE] ` -- **Source code**: [`src/cli/settings.rs`](https://github.com/jdx/mise/blob/main/src/cli/settings.rs) +- **Source code**: [`src/cli/settings/mod.rs`](https://github.com/jdx/mise/blob/main/src/cli/settings/mod.rs) Show current settings diff --git a/docs/cli/sync.md b/docs/cli/sync.md index a6c23c57df..e6e5799966 100644 --- a/docs/cli/sync.md +++ b/docs/cli/sync.md @@ -1,7 +1,7 @@ # `mise sync` - **Usage**: `mise sync ` -- **Source code**: [`src/cli/sync.rs`](https://github.com/jdx/mise/blob/main/src/cli/sync.rs) +- **Source code**: [`src/cli/sync/mod.rs`](https://github.com/jdx/mise/blob/main/src/cli/sync/mod.rs) Synchronize tools from other version managers with mise diff --git a/docs/cli/tasks.md b/docs/cli/tasks.md index d5a6c145f2..9028ad5c41 100644 --- a/docs/cli/tasks.md +++ b/docs/cli/tasks.md @@ -2,7 +2,7 @@ - **Usage**: `mise tasks [FLAGS] [TASK] ` - **Aliases**: `t` -- **Source code**: [`src/cli/tasks.rs`](https://github.com/jdx/mise/blob/main/src/cli/tasks.rs) +- **Source code**: [`src/cli/tasks/mod.rs`](https://github.com/jdx/mise/blob/main/src/cli/tasks/mod.rs) Manage tasks diff --git a/mise.usage.kdl b/mise.usage.kdl index 7759bf8f36..8fe5170f00 100644 --- a/mise.usage.kdl +++ b/mise.usage.kdl @@ -2064,7 +2064,14 @@ Use this to figure out what version of a tool is currently active." } cmd "render-help" hide=true help="internal command to generate markdown from help" cmd "render-mangen" hide=true help="internal command to generate markdown from help" -source_code_link_template "https://github.com/jdx/mise/blob/main/src/cli/{{path}}.rs" +source_code_link_template r#" +{%- set path = path | replace(from='-', to='_') -%} +{%- if cmd.subcommands | length > 0 -%} +{%- set path = path | split(pat="/") | slice(end=1) | concat(with="mod.rs") | join(sep="/") -%} +{%- else -%} +{%- set path = path ~ ".rs" -%} +{%- endif -%} +https://github.com/jdx/mise/blob/main/src/cli/{{path}}"# complete "alias" run="mise alias ls {{words[PREV]}} | awk '{print $2}'" complete "config_file" type="file" diff --git a/src/assets/mise-extra.usage.kdl b/src/assets/mise-extra.usage.kdl index b248f104d6..92400bca14 100644 --- a/src/assets/mise-extra.usage.kdl +++ b/src/assets/mise-extra.usage.kdl @@ -1,4 +1,11 @@ -source_code_link_template "https://github.com/jdx/mise/blob/main/src/cli/{{path}}.rs" +source_code_link_template r#" +{%- set path = path | replace(from='-', to='_') -%} +{%- if cmd.subcommands | length > 0 -%} +{%- set path = path | split(pat="/") | slice(end=1) | concat(with="mod.rs") | join(sep="/") -%} +{%- else -%} +{%- set path = path ~ ".rs" -%} +{%- endif -%} +https://github.com/jdx/mise/blob/main/src/cli/{{path}}"# complete "alias" run="mise alias ls {{words[PREV]}} | awk '{print $2}'" complete "config_file" type="file" From 70dfdd0b874a5292b4b20fa72c9c341a13900bde Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Thu, 9 Jan 2025 11:01:14 -0600 Subject: [PATCH 115/289] chore: make pre-commit faster --- mise.lock | 1 + tasks.toml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/mise.lock b/mise.lock index b778c975cc..a62b4c5bf6 100644 --- a/mise.lock +++ b/mise.lock @@ -3,6 +3,7 @@ version = "1.7.6" backend = "aqua:rhysd/actionlint" [tools.actionlint.checksums] +actionlint-macos-aarch64 = "sha256:baa69aa6ae140310d9d86127d916abd42cd2ad446aef0a04f2a7fe7f54da7d67" "actionlint_1.7.6_darwin_arm64.tar.gz" = "sha256:9a7c9cb2b627bb137ef68742eead2dd5b78f3ddc44876e84c37d323ba28b4710" "actionlint_1.7.6_linux_amd64.tar.gz" = "sha256:5d1a70d9de15fee5371e6f9e20cc29b284e814d6ee1b882f9749e91caf716eba" diff --git a/tasks.toml b/tasks.toml index ed703d45d0..b19c0ac02c 100644 --- a/tasks.toml +++ b/tasks.toml @@ -4,7 +4,7 @@ clean = "cargo clean" release = "cargo release" signal-test = "node ./test/fixtures/signal-test.js" ci = { depends = ["format", "build", "test"] } -pre-commit = { depends = ["render", "lint"] } +pre-commit = "cargo fmt" lint = { depends = ["lint:*"] } [build] From 0f7f498bfe5cfc10852ba3fd15294d9bc44ce2fe Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Thu, 9 Jan 2025 11:15:04 -0600 Subject: [PATCH 116/289] fix(rust): respect RUSTUP_HOME/CARGO_HOME (#4026) Fixes #4023 --- src/plugins/core/rust.rs | 4 +++- tasks.md | 2 -- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/core/rust.rs b/src/plugins/core/rust.rs index 61401b30ef..9431c50851 100644 --- a/src/plugins/core/rust.rs +++ b/src/plugins/core/rust.rs @@ -11,7 +11,7 @@ use crate::install_context::InstallContext; use crate::toolset::outdated_info::OutdatedInfo; use crate::toolset::{ToolVersion, Toolset}; use crate::ui::progress_report::SingleReport; -use crate::{dirs, file, github, plugins}; +use crate::{dirs, env, file, github, plugins}; use eyre::Result; use xx::regex; @@ -223,6 +223,7 @@ fn rustup_home() -> PathBuf { .rust .rustup_home .clone() + .or(env::var_path("RUSTUP_HOME")) .unwrap_or(dirs::HOME.join(".rustup")) } @@ -231,6 +232,7 @@ fn cargo_home() -> PathBuf { .rust .cargo_home .clone() + .or(env::var_path("CARGO_HOME")) .unwrap_or(dirs::HOME.join(".cargo")) } diff --git a/tasks.md b/tasks.md index adb84a4842..58080140b3 100644 --- a/tasks.md +++ b/tasks.md @@ -131,8 +131,6 @@ User to run as ## `pre-commit` -- Depends: render, lint - - **Usage**: `pre-commit` ## `release` From c1f25ac4cdaf74219d700fcaf37d3341971a3120 Mon Sep 17 00:00:00 2001 From: Jeff Dickey <216188+jdx@users.noreply.github.com> Date: Thu, 9 Jan 2025 11:38:03 -0600 Subject: [PATCH 117/289] chore: added commented out paths config --- .cargo/config.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.cargo/config.toml b/.cargo/config.toml index ea37655726..5a69aef4e2 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,3 +1,5 @@ +#paths = ["../vfox.rs"] + [env] RUST_TEST_THREADS = '1' From bc1fa0880e66ea9ad35259bbcb3a8fabeeab86ca Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Thu, 9 Jan 2025 12:51:58 -0600 Subject: [PATCH 118/289] chore: release 2025.1.3 (#4027) Co-authored-by: mise-en-dev --- CHANGELOG.md | 21 ++++++++++++++++++++ Cargo.lock | 44 ++++++++++++++++++++--------------------- Cargo.toml | 4 ++-- README.md | 2 +- aqua-registry | 2 +- completions/_mise | 6 +++--- completions/mise.bash | 6 +++--- completions/mise.fish | 6 +++--- default.nix | 2 +- packaging/rpm/mise.spec | 2 +- 10 files changed, 58 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9dac28864c..1b0b5b66f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,26 @@ # Changelog +## [2025.1.3](https://github.com/jdx/mise/compare/v2025.1.2..v2025.1.3) - 2025-01-09 + +### ๐Ÿ› Bug Fixes + +- **(rust)** respect RUSTUP_HOME/CARGO_HOME by [@jdx](https://github.com/jdx) in [#4026](https://github.com/jdx/mise/pull/4026) +- mise fails to install kubectl on windows from aqua registry by [@roele](https://github.com/roele) in [#4006](https://github.com/jdx/mise/pull/4006) +- aliases with aqua by [@jdx](https://github.com/jdx) in [#4007](https://github.com/jdx/mise/pull/4007) +- issue with enter hook and subdirs by [@jdx](https://github.com/jdx) in [#4008](https://github.com/jdx/mise/pull/4008) +- allow using depends and depends_post on separate tasks by [@jdx](https://github.com/jdx) in [#4010](https://github.com/jdx/mise/pull/4010) +- mise fails to install kubectl on windows from aqua registry by [@roele](https://github.com/roele) in [#4024](https://github.com/jdx/mise/pull/4024) + +### ๐Ÿ“š Documentation + +- Add default description to github token link by [@hverlin](https://github.com/hverlin) in [#4019](https://github.com/jdx/mise/pull/4019) +- fix source code links by [@jdx](https://github.com/jdx) in [#4025](https://github.com/jdx/mise/pull/4025) + +### Chore + +- make pre-commit faster by [@jdx](https://github.com/jdx) in [70dfdd0](https://github.com/jdx/mise/commit/70dfdd0b874a5292b4b20fa72c9c341a13900bde) +- added commented out paths config by [@jdx](https://github.com/jdx) in [c1f25ac](https://github.com/jdx/mise/commit/c1f25ac4cdaf74219d700fcaf37d3341971a3120) + ## [2025.1.2](https://github.com/jdx/mise/compare/v2025.1.1..v2025.1.2) - 2025-01-08 ### ๐Ÿš€ Features diff --git a/Cargo.lock b/Cargo.lock index 52325af63a..4cf1305765 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -566,9 +566,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.24" +version = "4.5.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9560b07a799281c7e0958b9296854d6fafd4c5f31444a7e5bb1ad6dde5ccf1bd" +checksum = "b95dca1b68188a08ca6af9d96a6576150f598824bdb528c1190460c2940a0b48" dependencies = [ "clap_builder", "clap_derive", @@ -576,9 +576,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.24" +version = "4.5.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874e0dd3eb68bf99058751ac9712f622e61e6f393a94f7128fa26e3f02f5c7cd" +checksum = "9ab52925392148efd3f7562f2136a81ffb778076bcc85727c6e020d6dd57cf15" dependencies = [ "anstream", "anstyle", @@ -1287,7 +1287,7 @@ dependencies = [ "pest_derive", "regex", "strum", - "thiserror 2.0.9", + "thiserror 2.0.10", ] [[package]] @@ -2629,7 +2629,7 @@ dependencies = [ [[package]] name = "mise" -version = "2025.1.2" +version = "2025.1.3" dependencies = [ "base64 0.22.1", "built", @@ -2712,7 +2712,7 @@ dependencies = [ "tera", "terminal_size", "test-log", - "thiserror 2.0.9", + "thiserror 2.0.10", "tokio", "toml 0.8.19", "toml_edit", @@ -3069,7 +3069,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" dependencies = [ "memchr", - "thiserror 2.0.9", + "thiserror 2.0.10", "ucd-trie", ] @@ -3340,7 +3340,7 @@ dependencies = [ "rustc-hash 2.1.0", "rustls", "socket2", - "thiserror 2.0.9", + "thiserror 2.0.10", "tokio", "tracing", ] @@ -3359,7 +3359,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.9", + "thiserror 2.0.10", "tinyvec", "tracing", "web-time", @@ -4537,11 +4537,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.9" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" +checksum = "a3ac7f54ca534db81081ef1c1e7f6ea8a3ef428d2fc069097c079443d24124d3" dependencies = [ - "thiserror-impl 2.0.9", + "thiserror-impl 2.0.10", ] [[package]] @@ -4557,9 +4557,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.9" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" +checksum = "9e9465d30713b56a37ede7185763c3492a91be2f5fa68d958c44e41ab9248beb" dependencies = [ "proc-macro2", "quote", @@ -4884,7 +4884,7 @@ dependencies = [ "serial_test", "strum", "tempfile", - "thiserror 2.0.9", + "thiserror 2.0.10", "url", "which 7.0.1", "xz2", @@ -5049,7 +5049,7 @@ dependencies = [ "shell-words", "strum", "tera", - "thiserror 2.0.9", + "thiserror 2.0.10", "versions", "xx", ] @@ -5103,9 +5103,9 @@ dependencies = [ [[package]] name = "vfox" -version = "0.3.5" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32dfa4e97177d71ec00f5d01ec2c317a4f37a2a0c607550a8a70b552b8f4ace6" +checksum = "6d66bb0124101043f5195f7c0f1c62d7e7a159c06e0c1e9a583774b44cb28718" dependencies = [ "homedir", "indexmap 2.7.0", @@ -5117,7 +5117,7 @@ dependencies = [ "serde", "serde_json", "tempfile", - "thiserror 2.0.9", + "thiserror 2.0.10", "tokio", "url", "xx", @@ -5634,7 +5634,7 @@ dependencies = [ "reqwest", "sha2", "tar", - "thiserror 2.0.9", + "thiserror 2.0.10", "tokio", "xz2", "zip", @@ -5785,7 +5785,7 @@ dependencies = [ "pbkdf2", "rand", "sha1", - "thiserror 2.0.9", + "thiserror 2.0.10", "time", "zeroize", "zopfli", diff --git a/Cargo.toml b/Cargo.toml index c763940ec2..8aefafd6c6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mise" -version = "2025.1.2" +version = "2025.1.3" edition = "2021" description = "The front-end to your dev env" authors = ["Jeff Dickey (@jdx)"] @@ -142,7 +142,7 @@ url = "2" usage-lib = { version = "1", features = ["clap", "docs"] } versions = { version = "6", features = ["serde"] } # vfox = { path = "../vfox.rs" } -vfox = { version = "0.3", default-features = false } +vfox = { version = "1", default-features = false } walkdir = "2" which = "7" xx = { version = "2", features = ["glob"] } diff --git a/README.md b/README.md index 80d4ecc70f..eb37db10a1 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Install mise (other methods [here](https://mise.jdx.dev/getting-started.html)): ```sh-session $ curl https://mise.run | sh $ ~/.local/bin/mise --version -2025.1.2 macos-arm64 (a1b2d3e 2025-01-08) +2025.1.3 macos-arm64 (a1b2d3e 2025-01-09) ``` or install a specific a version: diff --git a/aqua-registry b/aqua-registry index bb348e016f..600332d34e 160000 --- a/aqua-registry +++ b/aqua-registry @@ -1 +1 @@ -Subproject commit bb348e016f83f547adefaf6be4d25a66dc6d675b +Subproject commit 600332d34e1669ba66aee8158370e1799dd705bd diff --git a/completions/_mise b/completions/_mise index 4dcbd9ee6a..046fded08e 100644 --- a/completions/_mise +++ b/completions/_mise @@ -27,11 +27,11 @@ _mise() { zstyle ":completion:${curcontext}:" cache-policy _usage_mise_cache_policy fi - if ( [[ -z "${_usage_spec_mise_2025_1_2:-}" ]] || _cache_invalid _usage_spec_mise_2025_1_2 ) \ - && ! _retrieve_cache _usage_spec_mise_2025_1_2; + if ( [[ -z "${_usage_spec_mise_2025_1_3:-}" ]] || _cache_invalid _usage_spec_mise_2025_1_3 ) \ + && ! _retrieve_cache _usage_spec_mise_2025_1_3; then spec="$(mise usage)" - _store_cache _usage_spec_mise_2025_1_2 spec + _store_cache _usage_spec_mise_2025_1_3 spec fi _arguments "*: :(($(usage complete-word --shell zsh -s "$spec" -- "${words[@]}" )))" diff --git a/completions/mise.bash b/completions/mise.bash index 9b1eac8884..17905b1c0f 100644 --- a/completions/mise.bash +++ b/completions/mise.bash @@ -6,14 +6,14 @@ _mise() { return 1 fi - if [[ -z ${_usage_spec_mise_2025_1_2:-} ]]; then - _usage_spec_mise_2025_1_2="$(mise usage)" + if [[ -z ${_usage_spec_mise_2025_1_3:-} ]]; then + _usage_spec_mise_2025_1_3="$(mise usage)" fi local cur prev words cword was_split comp_args _comp_initialize -n : -- "$@" || return # shellcheck disable=SC2207 - _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2025_1_2}" --cword="$cword" -- "${words[@]}")" + _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2025_1_3}" --cword="$cword" -- "${words[@]}")" _comp_ltrim_colon_completions "$cur" # shellcheck disable=SC2181 if [[ $? -ne 0 ]]; then diff --git a/completions/mise.fish b/completions/mise.fish index 8fc1dcf115..77959c3b6a 100644 --- a/completions/mise.fish +++ b/completions/mise.fish @@ -6,7 +6,7 @@ if ! command -v usage &> /dev/null return 1 end -if ! set -q _usage_spec_mise_2025_1_2 - set -g _usage_spec_mise_2025_1_2 (mise usage | string collect) +if ! set -q _usage_spec_mise_2025_1_3 + set -g _usage_spec_mise_2025_1_3 (mise usage | string collect) end -complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_1_2" -- (commandline -cop) (commandline -t))' +complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_1_3" -- (commandline -cop) (commandline -t))' diff --git a/default.nix b/default.nix index 3b612c8eca..78a8f1e560 100644 --- a/default.nix +++ b/default.nix @@ -2,7 +2,7 @@ rustPlatform.buildRustPackage { pname = "mise"; - version = "2025.1.2"; + version = "2025.1.3"; src = lib.cleanSource ./.; diff --git a/packaging/rpm/mise.spec b/packaging/rpm/mise.spec index 6937b377f4..9501e6d45f 100644 --- a/packaging/rpm/mise.spec +++ b/packaging/rpm/mise.spec @@ -1,6 +1,6 @@ Summary: The front-end to your dev env Name: mise -Version: 2025.1.2 +Version: 2025.1.3 Release: 1 URL: https://github.com/jdx/mise/ Group: System From 106ee40b463923bb5c6444e0c0127dabc502d9ee Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Thu, 9 Jan 2025 14:11:01 -0600 Subject: [PATCH 119/289] test: disable some non-working plugins --- .github/workflows/test-plugins.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test-plugins.yml b/.github/workflows/test-plugins.yml index 2afa3a9a6e..36152e5dd3 100644 --- a/.github/workflows/test-plugins.yml +++ b/.github/workflows/test-plugins.yml @@ -83,8 +83,8 @@ jobs: command: mise exec dotnet@latest -- dotnet --list-sdks - plugin: flutter command: mise exec flutter@latest -- flutter --version - - plugin: crystal - command: mise exec crystal@latest -- crystal -v + # - plugin: crystal + # command: mise exec crystal@latest -- crystal -v - plugin: neovim command: mise exec neovim@latest -- nvim --version - plugin: php @@ -136,14 +136,13 @@ jobs: - levant - consul - boundary - - postgres + # - postgres - rust - action-validator - dotnet-core - neovim - poetry # TODO: - haskell not working due to already existing on image - - link - lua - redis - gcloud From 73eb25a88bbfe1b979bb5483ca3c81a689be184f Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Thu, 9 Jan 2025 21:40:44 +0000 Subject: [PATCH 120/289] chore: added `cargo check` to pre-commit --- mise.lock | 1 + tasks.toml | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/mise.lock b/mise.lock index a62b4c5bf6..272c12ab10 100644 --- a/mise.lock +++ b/mise.lock @@ -3,6 +3,7 @@ version = "1.7.6" backend = "aqua:rhysd/actionlint" [tools.actionlint.checksums] +actionlint-linux-x86_64 = "sha256:bf567ce887b8b045fdd6001411aea1971e90a49e4f5172801fb648902843c9ec" actionlint-macos-aarch64 = "sha256:baa69aa6ae140310d9d86127d916abd42cd2ad446aef0a04f2a7fe7f54da7d67" "actionlint_1.7.6_darwin_arm64.tar.gz" = "sha256:9a7c9cb2b627bb137ef68742eead2dd5b78f3ddc44876e84c37d323ba28b4710" "actionlint_1.7.6_linux_amd64.tar.gz" = "sha256:5d1a70d9de15fee5371e6f9e20cc29b284e814d6ee1b882f9749e91caf716eba" diff --git a/tasks.toml b/tasks.toml index b19c0ac02c..32093efb12 100644 --- a/tasks.toml +++ b/tasks.toml @@ -4,7 +4,6 @@ clean = "cargo clean" release = "cargo release" signal-test = "node ./test/fixtures/signal-test.js" ci = { depends = ["format", "build", "test"] } -pre-commit = "cargo fmt" lint = { depends = ["lint:*"] } [build] @@ -137,3 +136,10 @@ hide = true tools = { gh = "2.60.0" } run = "echo {{arg(name='greeting')}}; sleep 2; echo 2; sleep 2; echo 3; sleep 0.4; echo 4; sleep 1" description = "a task for testing" + +[pre-commit] +depends = ["pre-commit:*"] +["pre-commit:fmt"] +run = "cargo fmt --all -- --check" +["pre-commit:check"] +run = "cargo check --all-features" From ce5334a2e4a62d17ec2aabc4137c8b4ae8bf3824 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Thu, 9 Jan 2025 18:14:18 -0600 Subject: [PATCH 121/289] fix: ignore github releases marked as draft (#4030) --- src/github.rs | 4 +++- tasks.md | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/github.rs b/src/github.rs index e8cbe405e9..666f9a0821 100644 --- a/src/github.rs +++ b/src/github.rs @@ -15,6 +15,7 @@ pub struct GithubRelease { pub tag_name: String, // pub name: Option, // pub body: Option, + pub draft: bool, pub prerelease: bool, // pub created_at: String, // pub published_at: Option, @@ -95,10 +96,11 @@ fn list_releases_(repo: &str) -> Result> { if *env::MISE_LIST_ALL_VERSIONS { while let Some(next) = next_page(&headers) { let (more, h) = crate::http::HTTP_FETCH.json_headers::, _>(next)?; - releases.extend(more.into_iter().filter(|r| !r.prerelease)); + releases.extend(more); headers = h; } } + releases.retain(|r| !r.draft && !r.prerelease); Ok(releases) } diff --git a/tasks.md b/tasks.md index 58080140b3..cf1ae12a50 100644 --- a/tasks.md +++ b/tasks.md @@ -131,8 +131,18 @@ User to run as ## `pre-commit` +- Depends: pre-commit:* + - **Usage**: `pre-commit` +## `pre-commit:check` + +- **Usage**: `pre-commit:check` + +## `pre-commit:fmt` + +- **Usage**: `pre-commit:fmt` + ## `release` - **Usage**: `release` From 8f928659a002eea14f64767f6ad2f1ac1f1de8fc Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Thu, 9 Jan 2025 18:23:53 -0600 Subject: [PATCH 122/289] fix: `mise run` shorthand with tasks that have an extension (#4029) --- src/cli/doctor/mod.rs | 2 +- src/main.rs | 3 +++ src/shell/bash.rs | 2 ++ src/shell/elvish.rs | 2 ++ src/shell/fish.rs | 2 ++ src/shell/nushell.rs | 2 ++ src/shell/pwsh.rs | 2 ++ src/shell/xonsh.rs | 2 ++ src/shell/zsh.rs | 2 ++ src/task/mod.rs | 5 +++-- src/ui/progress_report.rs | 3 +++ xtasks/{lint-fix => lint-fix.sh} | 0 12 files changed, 24 insertions(+), 3 deletions(-) rename xtasks/{lint-fix => lint-fix.sh} (100%) diff --git a/src/cli/doctor/mod.rs b/src/cli/doctor/mod.rs index 95620c5805..aac2fd2d44 100644 --- a/src/cli/doctor/mod.rs +++ b/src/cli/doctor/mod.rs @@ -377,7 +377,7 @@ impl Doctor { let path = env .get(&*PATH_KEY) .ok_or_else(|| eyre::eyre!("Path not found"))?; - Ok(split_paths(path).map(PathBuf::from).collect()) + Ok(split_paths(path).collect()) } fn analyze_paths(&mut self, ts: &Toolset) -> eyre::Result<()> { diff --git a/src/main.rs b/src/main.rs index 6f9c023717..9d80e3cfc7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,6 @@ +#![allow(unknown_lints)] +#![allow(clippy::literal_string_with_formatting_args)] + use crate::cli::version::VERSION; use crate::cli::Cli; use color_eyre::{Section, SectionExt}; diff --git a/src/shell/bash.rs b/src/shell/bash.rs index 8d25c1774b..c1d967679f 100644 --- a/src/shell/bash.rs +++ b/src/shell/bash.rs @@ -1,3 +1,5 @@ +#![allow(unknown_lints)] +#![allow(clippy::literal_string_with_formatting_args)] use std::fmt::Display; use indoc::formatdoc; diff --git a/src/shell/elvish.rs b/src/shell/elvish.rs index 9765bcdd0c..619fde6d4e 100644 --- a/src/shell/elvish.rs +++ b/src/shell/elvish.rs @@ -1,3 +1,5 @@ +#![allow(unknown_lints)] +#![allow(clippy::literal_string_with_formatting_args)] use std::fmt::Display; use crate::shell::{ActivateOptions, Shell}; diff --git a/src/shell/fish.rs b/src/shell/fish.rs index 181dbf27b4..fab09f8e9e 100644 --- a/src/shell/fish.rs +++ b/src/shell/fish.rs @@ -1,3 +1,5 @@ +#![allow(unknown_lints)] +#![allow(clippy::literal_string_with_formatting_args)] use std::fmt::{Display, Formatter}; use crate::config::Settings; diff --git a/src/shell/nushell.rs b/src/shell/nushell.rs index 3001f7a555..e08be79d6d 100644 --- a/src/shell/nushell.rs +++ b/src/shell/nushell.rs @@ -1,3 +1,5 @@ +#![allow(unknown_lints)] +#![allow(clippy::literal_string_with_formatting_args)] use std::fmt::Display; use indoc::formatdoc; diff --git a/src/shell/pwsh.rs b/src/shell/pwsh.rs index 5f8e7e7891..cd1444acc2 100644 --- a/src/shell/pwsh.rs +++ b/src/shell/pwsh.rs @@ -1,3 +1,5 @@ +#![allow(unknown_lints)] +#![allow(clippy::literal_string_with_formatting_args)] use crate::config::Settings; use std::borrow::Cow; use std::fmt::Display; diff --git a/src/shell/xonsh.rs b/src/shell/xonsh.rs index 0a76ab1680..ff02c79726 100644 --- a/src/shell/xonsh.rs +++ b/src/shell/xonsh.rs @@ -1,3 +1,5 @@ +#![allow(unknown_lints)] +#![allow(clippy::literal_string_with_formatting_args)] use std::borrow::Cow; use std::fmt::Display; diff --git a/src/shell/zsh.rs b/src/shell/zsh.rs index 39ea058fda..337f631254 100644 --- a/src/shell/zsh.rs +++ b/src/shell/zsh.rs @@ -1,3 +1,5 @@ +#![allow(unknown_lints)] +#![allow(clippy::literal_string_with_formatting_args)] use std::fmt::Display; use indoc::formatdoc; diff --git a/src/task/mod.rs b/src/task/mod.rs index af1f7d9cc9..789995732e 100644 --- a/src/task/mod.rs +++ b/src/task/mod.rs @@ -220,7 +220,8 @@ impl Task { return true; } let pat = pat.rsplitn(2, '.').last().unwrap_or_default(); - self.name == pat || self.aliases.contains(&pat.to_string()) + self.name.rsplitn(2, '.').last().unwrap_or_default() == pat + || self.aliases.contains(&pat.to_string()) } pub fn task_dir() -> PathBuf { @@ -241,7 +242,7 @@ impl Task { } pub fn prefix(&self) -> String { - format!("[{}]", self.name) + format!("[{}]", self.display_name()) } pub fn run(&self) -> &Vec { diff --git a/src/ui/progress_report.rs b/src/ui/progress_report.rs index 750d01e5d7..29d414d991 100644 --- a/src/ui/progress_report.rs +++ b/src/ui/progress_report.rs @@ -1,3 +1,6 @@ +#![allow(unknown_lints)] +#![allow(clippy::literal_string_with_formatting_args)] + use std::sync::Mutex; use std::time::Duration; diff --git a/xtasks/lint-fix b/xtasks/lint-fix.sh similarity index 100% rename from xtasks/lint-fix rename to xtasks/lint-fix.sh From 8299c6b943119ffda94d18445c5b789948b6f9c0 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Fri, 10 Jan 2025 06:56:05 -0600 Subject: [PATCH 123/289] chore: fix release-plz pr creation --- xtasks/release-plz | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/xtasks/release-plz b/xtasks/release-plz index 91de136ca2..0d037d9fa2 100755 --- a/xtasks/release-plz +++ b/xtasks/release-plz @@ -54,5 +54,9 @@ git clean -df git checkout -B release git commit -m "chore: release $version" git push origin release --force -gh pr create --title "chore: release $version" --body "$changelog" --label "release" || + +if [[ "$(gh pr list --label release)" == "" ]]; then + gh pr create --title "chore: release $version" --body "$changelog" --label "release" +else gh pr edit --title "chore: release $version" --body "$changelog" +fi From 099b2d88d3ed31ace30c67be816170dc50f87b6d Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Fri, 10 Jan 2025 06:57:10 -0600 Subject: [PATCH 124/289] chore: use -q in pre-commit:check --- tasks.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks.toml b/tasks.toml index 32093efb12..198e62eb87 100644 --- a/tasks.toml +++ b/tasks.toml @@ -142,4 +142,4 @@ depends = ["pre-commit:*"] ["pre-commit:fmt"] run = "cargo fmt --all -- --check" ["pre-commit:check"] -run = "cargo check --all-features" +run = "cargo check -q --all-features" From a63b44910d55ad2cdc801a472f0c196c605cce25 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Fri, 10 Jan 2025 07:14:51 -0600 Subject: [PATCH 125/289] test: remove test for flarectl --- registry.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/registry.toml b/registry.toml index ad056124c3..b6c294e4db 100644 --- a/registry.toml +++ b/registry.toml @@ -612,7 +612,7 @@ flarectl.backends = [ "ubi:cloudflare/cloudflare-go[exe=flarectl]", "asdf:mise-plugins/asdf-flarectl" ] -flarectl.test = ["flarectl --version", "flarectl version {{version}}"] +# flarectl.test = ["flarectl --version", "flarectl version {{version}}"] # TODO: no release assets in 4.0 flatc.backends = [ "ubi:google/flatbuffers[exe=flatc]", "asdf:TheOpenDictionary/asdf-flatc" From a4d41338139355b0dd86a068fd89790eb7e34584 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Fri, 10 Jan 2025 07:19:40 -0600 Subject: [PATCH 126/289] fix: use consistent casing --- src/cli/run.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cli/run.rs b/src/cli/run.rs index debf646962..a954badc41 100644 --- a/src/cli/run.rs +++ b/src/cli/run.rs @@ -472,7 +472,7 @@ impl Run { self.eprint( task, &prefix, - &format!("finished in {}", time::format_duration(timer.elapsed())), + &format!("Finished in {}", time::format_duration(timer.elapsed())), ); } From c2accc5f7192202d0a8249ae7f3ab0ea7f100e1b Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Fri, 10 Jan 2025 07:46:12 -0600 Subject: [PATCH 127/289] chore: fix release-plz pr creation --- xtasks/release-plz | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xtasks/release-plz b/xtasks/release-plz index 0d037d9fa2..573734d5bd 100755 --- a/xtasks/release-plz +++ b/xtasks/release-plz @@ -56,7 +56,7 @@ git commit -m "chore: release $version" git push origin release --force if [[ "$(gh pr list --label release)" == "" ]]; then - gh pr create --title "chore: release $version" --body "$changelog" --label "release" + gh pr create --title "chore: release $version" --body "$changelog" --label "release" --head release else - gh pr edit --title "chore: release $version" --body "$changelog" + gh pr edit --title "chore: release $version" --body "$changelog" --head release fi From cf077820253f1580245f991f1d858dc21b227e0e Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Fri, 10 Jan 2025 08:01:55 -0600 Subject: [PATCH 128/289] chore: make prettier/pre-commit much faster (#4036) --- .prettierignore | 11 +++++++++++ src/cli/generate/git_pre_commit.rs | 1 + tasks.md | 10 ---------- tasks.toml | 7 ++----- xtasks/lint/clippy | 6 +++++- xtasks/lint/prettier | 5 +---- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/.prettierignore b/.prettierignore index 30ea2de414..0ad3e5d5d1 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,13 @@ +*.rs +*.snap +.idea .venv +*.gif +*.png +*.lock +*.lockb +.cliffignore +*.kdl CHANGELOG.md aqua-registry/ docs/.vitepress/cache @@ -7,7 +16,9 @@ docs/cli docs/environments.md docs/public/site.webmanifest docs/registry.md +e2e src/assets/bash_zsh_support/ tasks.md +test/data tmp xtasks/fig/src/mise.ts diff --git a/src/cli/generate/git_pre_commit.rs b/src/cli/generate/git_pre_commit.rs index 5ddbbeb11e..68fad89c3e 100644 --- a/src/cli/generate/git_pre_commit.rs +++ b/src/cli/generate/git_pre_commit.rs @@ -54,6 +54,7 @@ impl GitPreCommit { r#"#!/bin/sh STAGED="$(git diff-index --cached --name-only HEAD | tr ' ' '\ ' | tr '\n' ' ' | xargs)" export STAGED +export MISE_PRE_COMMIT=1 exec mise run {task} "# ) diff --git a/tasks.md b/tasks.md index cf1ae12a50..58080140b3 100644 --- a/tasks.md +++ b/tasks.md @@ -131,18 +131,8 @@ User to run as ## `pre-commit` -- Depends: pre-commit:* - - **Usage**: `pre-commit` -## `pre-commit:check` - -- **Usage**: `pre-commit:check` - -## `pre-commit:fmt` - -- **Usage**: `pre-commit:fmt` - ## `release` - **Usage**: `release` diff --git a/tasks.toml b/tasks.toml index 198e62eb87..7406066617 100644 --- a/tasks.toml +++ b/tasks.toml @@ -138,8 +138,5 @@ run = "echo {{arg(name='greeting')}}; sleep 2; echo 2; sleep 2; echo 3; sleep 0. description = "a task for testing" [pre-commit] -depends = ["pre-commit:*"] -["pre-commit:fmt"] -run = "cargo fmt --all -- --check" -["pre-commit:check"] -run = "cargo check -q --all-features" +env = { PRE_COMMIT = 1 } +run = ["mise run lint"] diff --git a/xtasks/lint/clippy b/xtasks/lint/clippy index 17dc8185fe..b1261ad965 100755 --- a/xtasks/lint/clippy +++ b/xtasks/lint/clippy @@ -2,4 +2,8 @@ #MISE wait_for=["build"] set -euo pipefail -cargo clippy --all-features -- -Dwarnings +if [[ "${MISE_PRE_COMMIT:-}" == 1 ]]; then + cargo check -q --all-features +else + cargo clippy --all-features -- -Dwarnings +fi diff --git a/xtasks/lint/prettier b/xtasks/lint/prettier index 34d3cde7cc..8fe5bd9582 100755 --- a/xtasks/lint/prettier +++ b/xtasks/lint/prettier @@ -2,7 +2,4 @@ #MISE wait_for=["render:settings"] set -euo pipefail -# shellcheck disable=SC2046 - -prettier -c $(git ls-files '*.yml' '*.yaml') -prettier -c . +prettier --cache --ignore-unknown --log-level warn -c "$@" . From 659287cb4508d7b000cbc9134265f208aff0c5d8 Mon Sep 17 00:00:00 2001 From: Hugues Verlin Date: Fri, 10 Jan 2025 15:05:15 +0100 Subject: [PATCH 129/289] feat: update JSON output for task info/ls (#4034) Co-authored-by: jdx <216188+jdx@users.noreply.github.com> --- e2e/assert.sh | 66 +++++++++++++++++++++ e2e/tasks/test_task_info | 64 ++++++++++++++++++++ e2e/tasks/test_task_ls | 122 ++++++++++++++++++++++++++++++++++++++ e2e/tasks/test_task_usage | 22 ++++++- src/cli/tasks/info.rs | 13 ++-- src/cli/tasks/ls.rs | 43 ++++++++------ 6 files changed, 306 insertions(+), 24 deletions(-) diff --git a/e2e/assert.sh b/e2e/assert.sh index 1b6271e657..d7e5385236 100755 --- a/e2e/assert.sh +++ b/e2e/assert.sh @@ -58,6 +58,72 @@ assert() { fi } +assert_json() { + local actual + actual="$(quiet_assert_succeed "$1")" + if jq -e . >/dev/null <<<"$actual"; then + ok "[$1] output is valid JSON" + else + fail "[$1] output is not valid JSON" + fi + + actual_json="$(jq . <<<"$actual")" + expected_json="$(jq . <<<"$2")" + if [[ $actual_json == "$expected_json" ]]; then + ok "[$1] output is equal to '$2'" + else + diff --side-by-side <(jq . <<<"$expected_json") <(jq . <<<"$actual_json") || true + fail "JSON output from [$1] is different from expected" + fi +} + +assert_json_partial_array() { + local command="$1" fields="$2" expected="$3" + + local actual + actual="$(quiet_assert_succeed "$command")" + + local filter="map({$fields})" + local actual_filtered expected_filtered + + actual_filtered="$(jq -S "$filter" <<<"$actual")" + expected_filtered="$(jq -S "$filter" <<<"$expected")" + + if [[ "$actual_filtered" == "$expected_filtered" ]]; then + ok "[$command] partial array match successful" + else + echo "Expected:" + echo "$expected_filtered" + echo "Got:" + echo "$actual_filtered" + fail "[$command] partial array match failed" + fi +} + +assert_json_partial_object() { + local command="$1" fields="$2" expected="$3" + + local actual + actual="$(quiet_assert_succeed "$command")" + + # shellcheck disable=SC2016 + local filter='with_entries(select(.key as $k | ($fields | split(",")) | contains([$k])))' + local actual_filtered expected_filtered + + actual_filtered="$(jq -S --arg fields "$fields" "$filter" <<<"$actual")" + expected_filtered="$(jq -S --arg fields "$fields" "$filter" <<<"$expected")" + + if [[ "$actual_filtered" == "$expected_filtered" ]]; then + ok "[$command] partial object match successful" + else + echo "Expected:" + echo "$expected_filtered" + echo "Got:" + echo "$actual_filtered" + fail "[$command] partial object match failed" + fi +} + assert_not() { local actual debug "$ $1" diff --git a/e2e/tasks/test_task_info b/e2e/tasks/test_task_info index 2f733aaf20..ef2d58957f 100644 --- a/e2e/tasks/test_task_info +++ b/e2e/tasks/test_task_info @@ -11,3 +11,67 @@ Usage Spec: bin "build"' assert_contains "mise task info build.sh --json" '"name": "build"' + +assert_json_partial_object "mise task info build --json" "name,source,description" '{ + "name": "build", + "source": "'"$PWD"'/mise-tasks/build.sh", + "description": "" +}' + +mise tasks add lint --depends "build -v" -- 'echo "linting!"' +assert_json "mise task info lint --json" "$( + cat <tasks.toml run = 'echo "testing!"' [test-with-args] run = 'echo "{{arg()}} {{flag(name="force")}} {{option(name="user")}}"' +depends = ["test -v", "test"] EOF mkdir -p .mise/tasks @@ -45,3 +46,124 @@ filetask3 ./mytasks/filetask3.sh lint ./mise.toml test ./tasks.toml test-with-args ./tasks.toml" + +assert_json "mise task ls --json" "$( + cat <(); miseprintln!("{}", serde_json::to_string_pretty(&array_items)?); From 2fba8b0fd6be05ece012721123e45d3392e93e9f Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Fri, 10 Jan 2025 08:22:14 -0600 Subject: [PATCH 130/289] docs: set prose-wrap with prettier (#4038) --- .github/ISSUE_TEMPLATE/config.yml | 3 +- .idea/codeStyles/codeStyleConfig.xml | 4 +- .prettierrc.toml | 3 + README.md | 15 +- SECURITY.md | 73 +++++----- docs/README.md | 3 +- docs/about.md | 54 +++---- docs/cache-behavior.md | 33 ++--- docs/configuration.md | 180 +++++++++++------------ docs/configuration/environments.md | 23 ++- docs/configuration/settings.md | 4 +- docs/contact.md | 22 ++- docs/continuous-integration.md | 15 +- docs/contributing.md | 45 +++--- docs/core-tools.md | 6 +- docs/demo.md | 5 +- docs/dev-tools/aliases.md | 19 ++- docs/dev-tools/backends/aqua.md | 63 ++++---- docs/dev-tools/backends/asdf.md | 12 +- docs/dev-tools/backends/cargo.md | 28 ++-- docs/dev-tools/backends/dotnet.md | 11 +- docs/dev-tools/backends/gem.md | 14 +- docs/dev-tools/backends/go.md | 17 ++- docs/dev-tools/backends/index.md | 6 +- docs/dev-tools/backends/npm.md | 13 +- docs/dev-tools/backends/pipx.md | 19 +-- docs/dev-tools/backends/spm.md | 16 ++- docs/dev-tools/backends/ubi.md | 70 ++++----- docs/dev-tools/backends/vfox.md | 6 +- docs/dev-tools/comparison-to-asdf.md | 205 ++++++++++++--------------- docs/dev-tools/index.md | 120 +++++++--------- docs/dev-tools/shims.md | 173 ++++++++++------------ docs/directories.md | 39 +++-- docs/direnv.md | 83 +++++------ docs/environments/index.md | 57 ++++---- docs/environments/secrets.md | 36 +++-- docs/external-resources.md | 9 +- docs/faq.md | 185 +++++++++++------------- docs/getting-started.md | 61 ++++---- docs/hooks.md | 25 ++-- docs/how-i-use-mise.md | 112 ++++++--------- docs/ide-integration.md | 101 +++++++------ docs/installing-mise.md | 92 +++++------- docs/lang/bun.md | 4 +- docs/lang/deno.md | 8 +- docs/lang/erlang.md | 8 +- docs/lang/go.md | 24 ++-- docs/lang/java.md | 41 +++--- docs/lang/node.md | 52 +++---- docs/lang/python.md | 74 ++++------ docs/lang/ruby.md | 37 +++-- docs/lang/rust.md | 16 +-- docs/lang/zig.md | 4 +- docs/mise-cookbook/index.md | 3 +- docs/mise-cookbook/nodejs.md | 3 +- docs/mise-cookbook/presets.md | 3 +- docs/mise-cookbook/shell-tricks.md | 6 +- docs/mise-cookbook/terraform.md | 7 +- docs/paranoid.md | 44 +++--- docs/plugins.md | 52 +++---- docs/roadmap.md | 82 +++++------ docs/rtx.md | 76 +++++----- docs/tasks/file-tasks.md | 60 ++++---- docs/tasks/index.md | 31 ++-- docs/tasks/running-tasks.md | 57 ++++---- docs/tasks/task-configuration.md | 131 +++++++++-------- docs/tasks/toml-tasks.md | 66 ++++----- docs/team.md | 7 +- docs/templates.md | 173 +++++++++------------- docs/tips-and-tricks.md | 69 +++++---- docs/troubleshooting.md | 129 ++++++++--------- docs/walkthrough.md | 93 ++++++------ packaging/alpine/README.md | 10 +- 73 files changed, 1590 insertions(+), 1860 deletions(-) create mode 100644 .prettierrc.toml diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 47dfe85cd9..80f9b55e18 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -2,4 +2,5 @@ blank_issues_enabled: false contact_links: - name: Features, Bug Reports, Questions url: https://github.com/jdx/mise/discussions/new/choose - about: Our preferred starting point if you have any questions or suggestions about configuration, features or behavior. + about: Our preferred starting point if you have any questions or suggestions + about configuration, features or behavior. diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml index 1a0176aca0..79ee123c2b 100644 --- a/.idea/codeStyles/codeStyleConfig.xml +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -1,5 +1,5 @@ - - + \ No newline at end of file diff --git a/.prettierrc.toml b/.prettierrc.toml new file mode 100644 index 0000000000..14e1d3a414 --- /dev/null +++ b/.prettierrc.toml @@ -0,0 +1,3 @@ +[[overrides]] +files = "*.md" +options = { proseWrap = "always", printWidth = 120 } diff --git a/README.md b/README.md index eb37db10a1..fbfb135ad7 100644 --- a/README.md +++ b/README.md @@ -16,15 +16,18 @@ ## What is it? -- Like [asdf](https://asdf-vm.com) (or [nvm](https://github.com/nvm-sh/nvm) or [pyenv](https://github.com/pyenv/pyenv) but for any language) it manages [dev tools](https://mise.jdx.dev/dev-tools/) like node, python, cmake, terraform, and [hundreds more](https://mise.jdx.dev/registry.html). -- Like [direnv](https://github.com/direnv/direnv) it manages [environment variables](https://mise.jdx.dev/environments/) for different project directories. -- Like [make](https://www.gnu.org/software/make/manual/make.html) it manages [tasks](https://mise.jdx.dev/tasks/) used to build and test projects. +- Like [asdf](https://asdf-vm.com) (or [nvm](https://github.com/nvm-sh/nvm) or [pyenv](https://github.com/pyenv/pyenv) + but for any language) it manages [dev tools](https://mise.jdx.dev/dev-tools/) like node, python, cmake, terraform, and + [hundreds more](https://mise.jdx.dev/registry.html). +- Like [direnv](https://github.com/direnv/direnv) it manages [environment variables](https://mise.jdx.dev/environments/) + for different project directories. +- Like [make](https://www.gnu.org/software/make/manual/make.html) it manages [tasks](https://mise.jdx.dev/tasks/) used + to build and test projects. ## 30 Second Demo -The following shows using mise to install different versions -of [node](https://nodejs.org). -Note that calling `which node` gives us a real path to node, not a shim. +The following shows using mise to install different versions of [node](https://nodejs.org). Note that calling +`which node` gives us a real path to node, not a shim. [![demo](./docs/demo.gif)](./docs/demo.gif) diff --git a/SECURITY.md b/SECURITY.md index 657209aae7..b0a024f0e1 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -7,63 +7,63 @@ Please open a ticket or send me an email if you have thoughts on how mise can be ## Core CLI Security -Development of the "core CLI" is done on jdx/mise which only a single developer (me, @jdx) has access to. -Other contributors may only submit contributions via public Pull Requests. Reducing the number -of developers with access down to 1 minimizes the chance of keys being leaked. +Development of the "core CLI" is done on jdx/mise which only a single developer (me, @jdx) has access to. Other +contributors may only submit contributions via public Pull Requests. Reducing the number of developers with access down +to 1 minimizes the chance of keys being leaked. -This does create a [bus factor](https://en.wikipedia.org/wiki/Bus_factor) problem. If I suddenly died one day -or otherwise wasn't able to continue development at all there are some successors listed in my GitHub account -that can take over my account if need be. +This does create a [bus factor](https://en.wikipedia.org/wiki/Bus_factor) problem. If I suddenly died one day or +otherwise wasn't able to continue development at all there are some successors listed in my GitHub account that can take +over my account if need be. The dependencies in the core CLI are a security vector. I've tried to be judicious about what dependencies make it into -the project. I only select dependencies with broad usage across the Rust community where possible. -I'm open to PRs or suggestions on reducing dependency count even at the cost of functionality because it will make -mise more secure. +the project. I only select dependencies with broad usage across the Rust community where possible. I'm open to PRs or +suggestions on reducing dependency count even at the cost of functionality because it will make mise more secure. ## mise.jdx.dev -mise.jdx.dev is the asset host for mise. It's used to host precompiled mise CLI binaries, and hosts a "[VERSION](https://mise.jdx.dev/VERSION)" -which mise uses to occasionally check for a new version being released. Everything hosted there uses a single -vendor to reduce surface area. +mise.jdx.dev is the asset host for mise. It's used to host precompiled mise CLI binaries, and hosts a +"[VERSION](https://mise.jdx.dev/VERSION)" which mise uses to occasionally check for a new version being released. +Everything hosted there uses a single vendor to reduce surface area. ## Cosign and slsa verification -mise will verify signatures of tools using [cosign](https://docs.sigstore.dev/) and [slsa-verifier](https://github.com/slsa-framework/slsa-verifier) -if cosign/slsa-verifier is installed and the tool is configured to support it. Typically, these will be tools using aqua as the backend. -See the [aqua docs](https://aquaproj.github.io/docs/reference/security/cosign-slsa) for more on how this is -configured in the [aqua registry](https://github.com/aquaproj/aqua-registry). +mise will verify signatures of tools using [cosign](https://docs.sigstore.dev/) and +[slsa-verifier](https://github.com/slsa-framework/slsa-verifier) if cosign/slsa-verifier is installed and the tool is +configured to support it. Typically, these will be tools using aqua as the backend. See the +[aqua docs](https://aquaproj.github.io/docs/reference/security/cosign-slsa) for more on how this is configured in the +[aqua registry](https://github.com/aquaproj/aqua-registry). -You will see this verification happen when tools are installed, setting `--verbose` when installing tools will help -make it easier to see if verification happened. If you happen to notice a tool offers gpg/slsa/cosign/minisign/etc, see if you can -make a PR to the aqua registry for mise to pick it up. +You will see this verification happen when tools are installed, setting `--verbose` when installing tools will help make +it easier to see if verification happened. If you happen to notice a tool offers gpg/slsa/cosign/minisign/etc, see if +you can make a PR to the aqua registry for mise to pick it up. ## `mise.lock` -mise has support for [lockfiles](https://mise.jdx.dev/configuration/settings.html#lockfile) which will -store/verify the checksum of tool tarballs. Committing this into your repository is a good way to ensure -that the exact same version of a tool is installed across all developers and CI/CD systems. +mise has support for [lockfiles](https://mise.jdx.dev/configuration/settings.html#lockfile) which will store/verify the +checksum of tool tarballs. Committing this into your repository is a good way to ensure that the exact same version of a +tool is installed across all developers and CI/CD systems. Not all backends support thisโ€”notably asdf plugins do not. ## asdf plugins asdf plugins in asdf (but not with mise's default tools) are dangerous. They are typically owned by random developers -unconnected to either asdf or the tool vendor. They may get hacked or maliciously inject code into -their plugin that could trivially execute code on your machine. +unconnected to either asdf or the tool vendor. They may get hacked or maliciously inject code into their plugin that +could trivially execute code on your machine. -asdf plugins are not used for tools inside the [registry](https://github.com/jdx/mise/blob/main/registry.toml) whenever possible. -Sometimes it is not possible to use more secure backends like aqua/ubi because tools have complex install -setups or need to export env vars. As of 2025-01-08, <25% of tools use asdf plugins as the default backend. -All of these are hosted in the [mise-plugins org](https://github.com/mise-plugins) to secure the supply -chain so you do not need to rely on plugins maintained by anyone except me. +asdf plugins are not used for tools inside the [registry](https://github.com/jdx/mise/blob/main/registry.toml) whenever +possible. Sometimes it is not possible to use more secure backends like aqua/ubi because tools have complex install +setups or need to export env vars. As of 2025-01-08, <25% of tools use asdf plugins as the default backend. All of these +are hosted in the [mise-plugins org](https://github.com/mise-plugins) to secure the supply chain so you do not need to +rely on plugins maintained by anyone except me. -Of course if you _manually_ add plugins not from the mise-plugins org you will want to ensure they -are coming from a trusted source. +Of course if you _manually_ add plugins not from the mise-plugins org you will want to ensure they are coming from a +trusted source. -Please contribute to this effort to migrate away from asdf plugins by checking if a tool works in ubi or aqua and submitting a PR to -[registry.toml](https://github.com/jdx/mise/blob/main/registry.toml) to add it. If it doesn't work -in ubi or is missing from aqua, submit an issue or PR to the respective project to add it. New tools -using asdf are **not** likely to be accepted unless they cannot be supported with any other backend. +Please contribute to this effort to migrate away from asdf plugins by checking if a tool works in ubi or aqua and +submitting a PR to [registry.toml](https://github.com/jdx/mise/blob/main/registry.toml) to add it. If it doesn't work in +ubi or is missing from aqua, submit an issue or PR to the respective project to add it. New tools using asdf are **not** +likely to be accepted unless they cannot be supported with any other backend. ## Supported Versions @@ -138,8 +138,7 @@ MFPobhR7zlCShd7TdY1a41uxTGB+Wmn4DO0s/wzSgdgxIzG+TM1X47owe7l5RiI1 ## Release gpg key -This is the gpg key used to sign deb releases and the SHASUMS files -contained within releases. +This is the gpg key used to sign deb releases and the SHASUMS files contained within releases.
Release gpg key diff --git a/docs/README.md b/docs/README.md index 6af9b4bb48..31e2751f8a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,3 +1,4 @@ # mise-docs -This repository contains the documentation website for the runtime executor [mise](https://github.com/jdx/mise). The website is powered by [VitePress](https://vitepress.dev/). +This repository contains the documentation website for the runtime executor [mise](https://github.com/jdx/mise). The +website is powered by [VitePress](https://vitepress.dev/). diff --git a/docs/about.md b/docs/about.md index b1751c4b9b..1902dc53f5 100644 --- a/docs/about.md +++ b/docs/about.md @@ -1,42 +1,34 @@ # About -`mise` (pronounced "meez") or "mise-en-place" is a development environment setup tool. -The name refers to a French culinary phrase that roughly translates to "setup" or "put in place". -The idea is that before one begins cooking, they should have all their utensils and ingredients -ready to go in their place. +`mise` (pronounced "meez") or "mise-en-place" is a development environment setup tool. The name refers to a French +culinary phrase that roughly translates to "setup" or "put in place". The idea is that before one begins cooking, they +should have all their utensils and ingredients ready to go in their place. -`mise` does the same for your projects. Using its `mise.toml` config file, -you'll have a consistent way to setup and interact with your projects no matter what -language they're written in. +`mise` does the same for your projects. Using its `mise.toml` config file, you'll have a consistent way to setup and +interact with your projects no matter what language they're written in. Its functionality is grouped into 3 categories described below. -`mise` installs and manages dev tools/runtimes like node, python, or terraform both -simplifying installing these tools and allowing you to specify which version of these -tools to use in different projects. `mise` supports [hundreds](/plugins.md) of dev tools. +`mise` installs and manages dev tools/runtimes like node, python, or terraform both simplifying installing these tools +and allowing you to specify which version of these tools to use in different projects. `mise` supports +[hundreds](/plugins.md) of dev tools. -`mise` manages environment variables letting you specify configuration like -`AWS_ACCESS_KEY_ID` that may differ between projects. It can also be used to -automatically activate a [Python virtualenv](/lang/python) when entering projects too. +`mise` manages environment variables letting you specify configuration like `AWS_ACCESS_KEY_ID` that may differ between +projects. It can also be used to automatically activate a [Python virtualenv](/lang/python) when entering projects too. -`mise` is a task runner that can be used to share common tasks within -a project among developers and make things like running tasks on file changes -easy. +`mise` is a task runner that can be used to share common tasks within a project among developers and make things like +running tasks on file changes easy. ## Contact -`mise` is mostly built and maintained by me, [Jeff Dickey](https://jdx.dev). The goal is -to make local development of software easy and consistent across languages. I -have spent many years building dev tools and thinking about the problems that `mise` -addresses. - -I try to use the first-person in these docs since the reality is it's generally me -writing them and I think it makes it more interesting having a bit of my personality -in the text. - -This project is simply a labor of love. I am making it because I want to make -your life as a developer easier. I hope you find it useful. Feedback is a massive -driver for me. If you have anything positive or negative to say-even if it's just -to say hi-please reach out to me either on [Twitter](https://twitter.com/jdxcode), -[Mastodon](https://fosstodon.org/@jdx), [Discord](https://discord.gg/UBa7pJUN7Z), -or `jdx at this domain`. +`mise` is mostly built and maintained by me, [Jeff Dickey](https://jdx.dev). The goal is to make local development of +software easy and consistent across languages. I have spent many years building dev tools and thinking about the +problems that `mise` addresses. + +I try to use the first-person in these docs since the reality is it's generally me writing them and I think it makes it +more interesting having a bit of my personality in the text. + +This project is simply a labor of love. I am making it because I want to make your life as a developer easier. I hope +you find it useful. Feedback is a massive driver for me. If you have anything positive or negative to say-even if it's +just to say hi-please reach out to me either on [Twitter](https://twitter.com/jdxcode), +[Mastodon](https://fosstodon.org/@jdx), [Discord](https://discord.gg/UBa7pJUN7Z), or `jdx at this domain`. diff --git a/docs/cache-behavior.md b/docs/cache-behavior.md index bccaa315fc..4293ca7911 100644 --- a/docs/cache-behavior.md +++ b/docs/cache-behavior.md @@ -1,31 +1,28 @@ # Cache Behavior -mise makes use of caching in many places in order to be efficient. The details about how long to keep -cache for should eventually all be configurable. There may be gaps in the current behavior where -things are hardcoded, but I'm happy to add more settings to cover whatever config is needed. +mise makes use of caching in many places in order to be efficient. The details about how long to keep cache for should +eventually all be configurable. There may be gaps in the current behavior where things are hardcoded, but I'm happy to +add more settings to cover whatever config is needed. -Below I explain the behavior it uses around caching. If you're seeing behavior where things don't appear -to be updating, this is a good place to start. +Below I explain the behavior it uses around caching. If you're seeing behavior where things don't appear to be updating, +this is a good place to start. ## Plugin/Runtime Cache -Each plugin has a cache that's stored in `~/$MISE_CACHE_DIR/`. It stores -the list of versions available for that plugin (`mise ls-remote `), the idiomatic filenames (see below), -the list of aliases, the bin directories within each runtime installation, and the result of -running `exec-env` after the runtime was installed. +Each plugin has a cache that's stored in `~/$MISE_CACHE_DIR/`. It stores the list of versions available for that +plugin (`mise ls-remote `), the idiomatic filenames (see below), the list of aliases, the bin directories within +each runtime installation, and the result of running `exec-env` after the runtime was installed. -Remote versions are updated daily by default. The file is zlib messagepack, if you want to view it you can -run the following (requires [msgpack-cli](https://github.com/msgpack/msgpack-cli)). +Remote versions are updated daily by default. The file is zlib messagepack, if you want to view it you can run the +following (requires [msgpack-cli](https://github.com/msgpack/msgpack-cli)). ```sh cat ~/$MISE_CACHE_DIR/node/remote_versions.msgpack.z | perl -e 'use Compress::Raw::Zlib;my $d=new Compress::Raw::Zlib::Inflate();my $o;undef $/;$d->inflate(<>,$o);print $o;' | msgpack-cli decode ``` -Note that the caching of `exec-env` may be problematic if the script isn't simply exporting -static values. The vast majority of `exec-env` scripts only export static values, but if you're -working with a plugin that has a dynamic `exec-env` submit -a ticket and we can try to figure out what to do. +Note that the caching of `exec-env` may be problematic if the script isn't simply exporting static values. The vast +majority of `exec-env` scripts only export static values, but if you're working with a plugin that has a dynamic +`exec-env` submit a ticket and we can try to figure out what to do. -Caching `exec-env` massively improved the performance of mise since it requires calling bash -every time mise is initialized. Ideally, we can keep this -behavior. +Caching `exec-env` massively improved the performance of mise since it requires calling bash every time mise is +initialized. Ideally, we can keep this behavior. diff --git a/docs/configuration.md b/docs/configuration.md index 6a55b3cb21..1ae948a436 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -2,7 +2,8 @@ ## `mise.toml` -`mise.toml` is the config file for mise. They can be at any of the following file paths (in order of precedence, top overrides configuration of lower paths): +`mise.toml` is the config file for mise. They can be at any of the following file paths (in order of precedence, top +overrides configuration of lower paths): - `mise.local.toml` - used for local config, this should not be committed to source control - `mise.toml` @@ -11,24 +12,21 @@ - `.config/mise/config.toml` - `.config/mise/conf.d/*.toml` - all files in this directory will be loaded in alphabetical order -::: tip -Run [`mise cfg`](/cli/config.html) to figure out what order mise is loading files on your particular setup. This is often -a lot easier than figuring out mise's rules. -::: +::: tip Run [`mise cfg`](/cli/config.html) to figure out what order mise is loading files on your particular setup. This +is often a lot easier than figuring out mise's rules. ::: Notes: - Paths which start with `mise` can be dotfiles, e.g.: `mise.toml` or `.mise/config.toml`. -- This list doesn't include [Configuration Environments](/configuration/environments) which allow for environment-specific config files like `mise.development.toml`โ€”set with `MISE_ENV=development`. -- See [`LOCAL_CONFIG_FILENAMES` in `src/config/mod.rs`](https://github.com/jdx/mise/blob/main/src/config/mod.rs) for the actual code for these paths and their precedence. Some legacy paths are not listed here for brevity. +- This list doesn't include [Configuration Environments](/configuration/environments) which allow for + environment-specific config files like `mise.development.toml`โ€”set with `MISE_ENV=development`. +- See [`LOCAL_CONFIG_FILENAMES` in `src/config/mod.rs`](https://github.com/jdx/mise/blob/main/src/config/mod.rs) for the + actual code for these paths and their precedence. Some legacy paths are not listed here for brevity. -These files recurse upwards, so if you have a `~/src/work/myproj/mise.toml` file, what is defined -there will override anything set in -`~/src/work/mise.toml` or `~/.config/mise.toml`. The config contents are merged together. +These files recurse upwards, so if you have a `~/src/work/myproj/mise.toml` file, what is defined there will override +anything set in `~/src/work/mise.toml` or `~/.config/mise.toml`. The config contents are merged together. -:::tip -Run `mise config` to see what files mise has loaded in order of precedence. -::: +:::tip Run `mise config` to see what files mise has loaded in order of precedence. ::: Here is what a `mise.toml` looks like: @@ -61,9 +59,8 @@ run = 'echo "running build tasks"' python = 'https://github.com/asdf-community/asdf-python' ``` -`mise.toml` files are hierarchical. The configuration in a file in the current directory will -override conflicting configuration in parent directories. For example, if `~/src/myproj/mise.toml` -defines the following: +`mise.toml` files are hierarchical. The configuration in a file in the current directory will override conflicting +configuration in parent directories. For example, if `~/src/myproj/mise.toml` defines the following: ```toml [tools] @@ -79,8 +76,8 @@ node = '18' ruby = '3.1' ``` -Then when inside of `~/src/myproj/backend`, `node` will be `18`, `python` will be `3.10`, and `ruby` -will be `3.1`. You can check the active versions with `mise ls --current`. +Then when inside of `~/src/myproj/backend`, `node` will be `18`, `python` will be `3.10`, and `ruby` will be `3.1`. You +can check the active versions with `mise ls --current`. You can also have environment specific config files like `.mise.production.toml`, see [Configuration Environments](/configuration/environments) for more details. @@ -103,8 +100,8 @@ See [Settings](/configuration/settings) for the full list of settings. ### `[plugins]` - Specify Custom Plugin Repository URLs -Use `[plugins]` to add/modify plugin shortnames. Note that this will only modify -_new_ plugin installations. Existing plugins can use any URL. +Use `[plugins]` to add/modify plugin shortnames. Note that this will only modify _new_ plugin installations. Existing +plugins can use any URL. ```toml [plugins] @@ -113,18 +110,16 @@ node = "https://github.com/my-org/mise-node.git#DEADBEEF" # supports specific gi ``` If you simply want to install a plugin from a specific URL once, it's better to use -`mise plugin install plugin `. Add this section to `mise.toml` if you want -to share the plugin location/revision with other developers in your project. +`mise plugin install plugin `. Add this section to `mise.toml` if you want to share the plugin +location/revision with other developers in your project. -This is similar -to [`MISE_SHORTHANDS`](https://github.com/jdx/mise#mise_shorthands_fileconfigmiseshorthandstoml) -but doesn't require a separate file. +This is similar to [`MISE_SHORTHANDS`](https://github.com/jdx/mise#mise_shorthands_fileconfigmiseshorthandstoml) but +doesn't require a separate file. ### `[aliases]` - Tool version aliases -The following makes `mise install node@my_custom_node` install node-20.x -this can also be specified in a [plugin](/dev-tools/aliases.md). -note adding an alias will also add a symlink, in this case: +The following makes `mise install node@my_custom_node` install node-20.x this can also be specified in a +[plugin](/dev-tools/aliases.md). note adding an alias will also add a symlink, in this case: ```sh ~/.local/share/mise/installs/node/20 -> ./20.x.x @@ -136,9 +131,8 @@ my_custom_node = '20' ### Minimum mise version -Specify the minimum supported version of mise required for the configuration file. -If the configuration file specifies a version of mise that is higher than -the currently installed version, mise will error out. +Specify the minimum supported version of mise required for the configuration file. If the configuration file specifies a +version of mise that is higher than the currently installed version, mise will error out. ```toml min_version = '2024.11.1' @@ -146,15 +140,20 @@ min_version = '2024.11.1' ### `mise.toml` schema -- You can find the JSON schema for `mise.toml` [here](https://github.com/jdx/mise/blob/main/schema/mise.json) or at . -- Some editors can load it automatically to provide autocompletion and validation for when editing a `mise.toml` file ([VSCode](https://code.visualstudio.com/docs/languages/json#_json-schemas-and-settings), [IntelliJ](https://www.jetbrains.com/help/idea/json.html#ws_json_using_schemas), [neovim](https://github.com/b0o/SchemaStore.nvim), etc.). It is also available in the [JSON schema store](https://www.schemastore.org/json/). -- Note that for `included tasks` (see [task configuration](/tasks/#task-configuration), there is another schema: ) +- You can find the JSON schema for `mise.toml` [here](https://github.com/jdx/mise/blob/main/schema/mise.json) or at + . +- Some editors can load it automatically to provide autocompletion and validation for when editing a `mise.toml` file + ([VSCode](https://code.visualstudio.com/docs/languages/json#_json-schemas-and-settings), + [IntelliJ](https://www.jetbrains.com/help/idea/json.html#ws_json_using_schemas), + [neovim](https://github.com/b0o/SchemaStore.nvim), etc.). It is also available in the + [JSON schema store](https://www.schemastore.org/json/). +- Note that for `included tasks` (see [task configuration](/tasks/#task-configuration), there is another schema: + ) ## Global config: `~/.config/mise/config.toml` -mise can be configured in `~/.config/mise/config.toml`. It's like local `mise.toml` files except -that -it is used for all directories. +mise can be configured in `~/.config/mise/config.toml`. It's like local `mise.toml` files except that it is used for all +directories. ```toml [tools] @@ -211,14 +210,14 @@ foo = "bar" ## System config: `/etc/mise/config.toml` -Similar to `~/.config/mise/config.toml` but for all users on the system. This is useful for -setting defaults for all users. +Similar to `~/.config/mise/config.toml` but for all users on the system. This is useful for setting defaults for all +users. ## `.tool-versions` -The `.tool-versions` file is asdf's config file and it can be used in mise just like `mise.toml`. -It isn't as flexible so it's recommended to use `mise.toml` instead. It can be useful if you -already have a lot of `.tool-versions` files or work on a team that uses asdf. +The `.tool-versions` file is asdf's config file and it can be used in mise just like `mise.toml`. It isn't as flexible +so it's recommended to use `mise.toml` instead. It can be useful if you already have a lot of `.tool-versions` files or +work on a team that uses asdf. Here is an example with all the supported syntax: @@ -236,31 +235,29 @@ node sub-2:lts # install 2 versions behind the latest lts (e.g.: 18 python sub-0.1:latest # install python-3.10 if the latest is 3.11 ``` -See [the asdf docs](https://asdf-vm.com/manage/configuration.html#tool-versions) for more info on -this file format. +See [the asdf docs](https://asdf-vm.com/manage/configuration.html#tool-versions) for more info on this file format. ## Scopes Both `mise.toml` and `.tool-versions` support "scopes" which modify the behavior of the version: - `ref:` - compile from a vcs (usually git) ref -- `prefix:` - use the latest version that matches the prefix. Useful for Go since `1.20` - would only match `1.20` exactly but `prefix:1.20` will match `1.20.1` and `1.20.2` etc. -- `path:` - use a custom compiled version at the given path. One use-case is to re-use - Homebrew tools (e.g.: `path:/opt/homebrew/opt/node@20`). -- `sub-:` - subtracts PARTIAL_VERSION from ORIG_VERSION. This can - be used to express something like "2 versions behind lts" such as `sub-2:lts`. Or 1 minor - version behind the latest version: `sub-0.1:latest`. +- `prefix:` - use the latest version that matches the prefix. Useful for Go since `1.20` would only match `1.20` + exactly but `prefix:1.20` will match `1.20.1` and `1.20.2` etc. +- `path:` - use a custom compiled version at the given path. One use-case is to re-use Homebrew tools (e.g.: + `path:/opt/homebrew/opt/node@20`). +- `sub-:` - subtracts PARTIAL_VERSION from ORIG_VERSION. This can be used to express + something like "2 versions behind lts" such as `sub-2:lts`. Or 1 minor version behind the latest version: + `sub-0.1:latest`. ## Idiomatic version files -mise supports "idiomatic version files" just like asdf. They're language-specific files -like `.node-version` -and `.python-version`. These are ideal for setting the runtime version of a project without forcing -other developers to use a specific tool like mise/asdf. +mise supports "idiomatic version files" just like asdf. They're language-specific files like `.node-version` and +`.python-version`. These are ideal for setting the runtime version of a project without forcing other developers to use +a specific tool like mise/asdf. -They support aliases, which means you can have an `.nvmrc` file with `lts/hydrogen` and it will work -in mise and nvm. Here are some of the supported idiomatic version files: +They support aliases, which means you can have an `.nvmrc` file with `lts/hydrogen` and it will work in mise and nvm. +Here are some of the supported idiomatic version files: | Plugin | Idiomatic Files | | --------- | -------------------------------------------------- | @@ -274,18 +271,14 @@ in mise and nvm. Here are some of the supported idiomatic version files: | terraform | `.terraform-version`, `.packer-version`, `main.tf` | | yarn | `.yarnrc` | -In mise these are enabled by default. You can disable them -with `mise settings idiomatic_version_file=false`. -There is a performance cost to having these when they're parsed as it's performed by the plugin in -`bin/parse-version-file`. However, these are [cached](/cache-behavior) so it's not a huge deal. -You may not even notice. +In mise these are enabled by default. You can disable them with `mise settings idiomatic_version_file=false`. There is a +performance cost to having these when they're parsed as it's performed by the plugin in `bin/parse-version-file`. +However, these are [cached](/cache-behavior) so it's not a huge deal. You may not even notice. -::: info -asdf called these "legacy version files". I think this was a bad name since it implies -that they shouldn't be usedโ€”which is definitely not the case IMO. I prefer the term "idiomatic" -version files since they are version files not specific to asdf/mise and can be used by other tools. -(`.nvmrc` being a notable exception, which is tied to a specific tool.) -::: +::: info asdf called these "legacy version files". I think this was a bad name since it implies that they shouldn't be +usedโ€”which is definitely not the case IMO. I prefer the term "idiomatic" version files since they are version files not +specific to asdf/mise and can be used by other tools. (`.nvmrc` being a notable exception, which is tied to a specific +tool.) ::: ## Settings @@ -297,13 +290,11 @@ See [Tasks](/tasks/) for the full list of configuration options. ## Environment variables -::: tip -Normally environment variables in mise are used to set [settings](/configuration/settings) so most -environment variables are in that doc. The following are environment variables that are not settings. +::: tip Normally environment variables in mise are used to set [settings](/configuration/settings) so most environment +variables are in that doc. The following are environment variables that are not settings. -A setting in mise is generally something that can be configured either as an environment variable -or set in a config file. -::: +A setting in mise is generally something that can be configured either as an environment variable or set in a config +file. ::: mise can also be configured via environment variables. The following options are available: @@ -311,22 +302,19 @@ mise can also be configured via environment variables. The following options are Default: `~/.local/share/mise` or `$XDG_DATA_HOME/mise` -This is the directory where mise stores plugins and tool installs. These are not supposed to be -shared -across machines. +This is the directory where mise stores plugins and tool installs. These are not supposed to be shared across machines. ### `MISE_CACHE_DIR` -Default (Linux): `~/.cache/mise` or `$XDG_CACHE_HOME/mise` -Default (macOS): `~/Library/Caches/mise` or `$XDG_CACHE_HOME/mise` +Default (Linux): `~/.cache/mise` or `$XDG_CACHE_HOME/mise` Default (macOS): `~/Library/Caches/mise` or +`$XDG_CACHE_HOME/mise` -This is the directory where mise stores internal cache. This is not supposed to be shared -across machines. It may be deleted at any time mise is not running. +This is the directory where mise stores internal cache. This is not supposed to be shared across machines. It may be +deleted at any time mise is not running. ### `MISE_TMP_DIR` -Default: [`std::env::temp_dir()`](https://doc.rust-lang.org/std/env/fn.temp_dir.html) implementation -in rust +Default: [`std::env::temp_dir()`](https://doc.rust-lang.org/std/env/fn.temp_dir.html) implementation in rust This is used for temporary storage such as when installing tools. @@ -350,18 +338,17 @@ This is the path which is used as `{{config_root}}` for the global config file. ### `MISE_ENV_FILE` -Set to a filename to read from env from a dotenv file. e.g.: `MISE_ENV_FILE=.env`. -Uses [dotenvy](https://crates.io/crates/dotenvy) under the hood. +Set to a filename to read from env from a dotenv file. e.g.: `MISE_ENV_FILE=.env`. Uses +[dotenvy](https://crates.io/crates/dotenvy) under the hood. ### `MISE_${PLUGIN}_VERSION` -Set the version for a runtime. For example, `MISE_NODE_VERSION=20` will use regardless -of what is set in `mise.toml`/`.tool-versions`. +Set the version for a runtime. For example, `MISE_NODE_VERSION=20` will use regardless of what is set in +`mise.toml`/`.tool-versions`. ### `MISE_TRUSTED_CONFIG_PATHS` -This is a list of paths that mise will automatically mark as -trusted. They can be separated with `:`. +This is a list of paths that mise will automatically mark as trusted. They can be separated with `:`. ### `MISE_LOG_LEVEL=trace|debug|info|warn|error` @@ -376,8 +363,8 @@ Output logs to a file. ### `MISE_LOG_FILE_LEVEL=trace|debug|info|warn|error` -Same as `MISE_LOG_LEVEL` but for the log _file_ output level. This is useful if you want -to store the logs but not have them litter your display. +Same as `MISE_LOG_LEVEL` but for the log _file_ output level. This is useful if you want to store the logs but not have +them litter your display. ### `MISE_QUIET=1` @@ -389,16 +376,15 @@ Set the timeout for http requests in seconds. The default is `30`. ### `MISE_RAW=1` -Set to "1" to directly pipe plugin scripts to stdin/stdout/stderr. By default stdin is disabled -because when installing a bunch of plugins in parallel you won't see the prompt. Use this if a -plugin accepts input or otherwise does not seem to be installing correctly. +Set to "1" to directly pipe plugin scripts to stdin/stdout/stderr. By default stdin is disabled because when installing +a bunch of plugins in parallel you won't see the prompt. Use this if a plugin accepts input or otherwise does not seem +to be installing correctly. Sets `MISE_JOBS=1` because only 1 plugin script can be executed at a time. ### `MISE_FISH_AUTO_ACTIVATE=1` -Configures the vendor_conf.d script for fish shell to automatically activate. -This file is automatically used in homebrew and potentially other installs to -automatically activate mise without configuring. +Configures the vendor_conf.d script for fish shell to automatically activate. This file is automatically used in +homebrew and potentially other installs to automatically activate mise without configuring. Defaults to enabled, set to "0" to disable. diff --git a/docs/configuration/environments.md b/docs/configuration/environments.md index 039b8e9834..787747cc1b 100644 --- a/docs/configuration/environments.md +++ b/docs/configuration/environments.md @@ -1,14 +1,13 @@ # Config Environments -It's possible to have separate `mise.toml` files in the same directory for different -environments like `development` and `production`. To enable, either set the `-E,--env` option or `MISE_ENV` environment -variable to an environment like `development` or `production`. mise will then look for a `mise.{MISE_ENV}.toml` file -in the current directory, parent directories and the `MISE_CONFIG_DIR` directory. +It's possible to have separate `mise.toml` files in the same directory for different environments like `development` and +`production`. To enable, either set the `-E,--env` option or `MISE_ENV` environment variable to an environment like +`development` or `production`. mise will then look for a `mise.{MISE_ENV}.toml` file in the current directory, parent +directories and the `MISE_CONFIG_DIR` directory. -mise will also look for "local" files like `mise.local.toml` and `mise.{MISE_ENV}.local.toml` -in the current directory and parent directories. -These are intended to not be committed to version control. -(Add `mise.local.toml` and `mise.*.local.toml` to your `.gitignore` file.) +mise will also look for "local" files like `mise.local.toml` and `mise.{MISE_ENV}.local.toml` in the current directory +and parent directories. These are intended to not be committed to version control. (Add `mise.local.toml` and +`mise.*.local.toml` to your `.gitignore` file.) The priority of these files goes in this order (top overrides bottom): @@ -19,12 +18,12 @@ The priority of these files goes in this order (top overrides bottom): If `MISE_OVERRIDE_CONFIG_FILENAMES` is set, that will be used instead of all of this. -You can also use paths like `mise/config.{MISE_ENV}.toml` or `.config/mise.{MISE_ENV}.toml` Those rules -follow the order in [Configuration](/configuration). +You can also use paths like `mise/config.{MISE_ENV}.toml` or `.config/mise.{MISE_ENV}.toml` Those rules follow the order +in [Configuration](/configuration). Use `mise config` to see which files are being used. -The rules around which file is written are different because we ultimately need to choose one. See -the docs for [`mise use`](/cli/use.html) for more information. +The rules around which file is written are different because we ultimately need to choose one. See the docs for +[`mise use`](/cli/use.html) for more information. Multiple environments can be specified, e.g. `MISE_ENV=ci,test` with the last one taking precedence. diff --git a/docs/configuration/settings.md b/docs/configuration/settings.md index b6a492c404..f51bbd5021 100644 --- a/docs/configuration/settings.md +++ b/docs/configuration/settings.md @@ -4,8 +4,8 @@ import Settings from '/components/settings.vue'; -The following is a list of all of mise's settings. These can be set via `mise settings key=value`, -by directly modifying `~/.config/mise/config.toml` or local config, or via environment variables. +The following is a list of all of mise's settings. These can be set via `mise settings key=value`, by directly modifying +`~/.config/mise/config.toml` or local config, or via environment variables. Some of them also can be set via global CLI flags. diff --git a/docs/contact.md b/docs/contact.md index e7b1815e7e..aedef53072 100644 --- a/docs/contact.md +++ b/docs/contact.md @@ -1,17 +1,13 @@ # Contact -`mise` is mostly built and maintained by me, [Jeff Dickey](https://jdx.dev). The goal is -to make local development of software easy and consistent across languages. I -have spent many years building dev tools and thinking about the problems that `mise` -addresses. +`mise` is mostly built and maintained by me, [Jeff Dickey](https://jdx.dev). The goal is to make local development of +software easy and consistent across languages. I have spent many years building dev tools and thinking about the +problems that `mise` addresses. -I try to use the first-person in these docs since the reality is it's generally me -writing them and I think it makes it more interesting having a bit of my personality -in the text. +I try to use the first-person in these docs since the reality is it's generally me writing them and I think it makes it +more interesting having a bit of my personality in the text. -This project is simply a labor of love. I am making it because I want to make -your life as a developer easier. I hope you find it useful. Feedback is a massive -driver for me. If you have anything positive or negative to say-even if it's just -to say hi-please reach out to me either on [Twitter](https://twitter.com/jdxcode), -[Mastodon](https://fosstodon.org/@jdx), [Discord](https://discord.gg/UBa7pJUN7Z), -or `jdx at this domain`. +This project is simply a labor of love. I am making it because I want to make your life as a developer easier. I hope +you find it useful. Feedback is a massive driver for me. If you have anything positive or negative to say-even if it's +just to say hi-please reach out to me either on [Twitter](https://twitter.com/jdxcode), +[Mastodon](https://fosstodon.org/@jdx), [Discord](https://discord.gg/UBa7pJUN7Z), or `jdx at this domain`. diff --git a/docs/continuous-integration.md b/docs/continuous-integration.md index 5e0ff57723..92dadbac5d 100644 --- a/docs/continuous-integration.md +++ b/docs/continuous-integration.md @@ -5,7 +5,8 @@ We recommend that your project pins the tools to a specific version to ensure th ## Any CI provider -Continuous integration pipelines allow running arbitrary commands. You can use this to install Mise and run `mise install` to install the tools: +Continuous integration pipelines allow running arbitrary commands. You can use this to install Mise and run +`mise install` to install the tools: ```yaml script: | @@ -24,7 +25,8 @@ Alternatively, you can add the [shims](/dev-tools/shims.md) directory to your `P ## GitHub Actions -If you use GitHub Actions, we provide a [mise-action](https://github.com/jdx/mise-action) that wraps the installation of Mise and the tools. All you need to do is to add the action to your workflow: +If you use GitHub Actions, we provide a [mise-action](https://github.com/jdx/mise-action) that wraps the installation of +Mise and the tools. All you need to do is to add the action to your workflow: ```yaml name: test @@ -58,9 +60,8 @@ jobs: ## GitLab CI -You can use any docker image with `mise` installed to run your CI jobs. -Here's an example using `debian-slim` as base image: -::: details +You can use any docker image with `mise` installed to run your CI jobs. Here's an example using `debian-slim` as base +image: ::: details ```dockerfile FROM debian:12-slim @@ -99,7 +100,9 @@ build-job: ## Xcode Cloud -If you are using Xcode Cloud, you can use custom `ci_post_clone.sh` [build script](https://developer.apple.com/documentation/xcode/writing-custom-build-scripts) to install Mise. Here's an example: +If you are using Xcode Cloud, you can use custom `ci_post_clone.sh` +[build script](https://developer.apple.com/documentation/xcode/writing-custom-build-scripts) to install Mise. Here's an +example: ```bash #!/bin/sh diff --git a/docs/contributing.md b/docs/contributing.md index 83b27aeb4b..59e48a0b88 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -1,16 +1,21 @@ # Contributing -Before submitting a PR, unless it's something obvious, consider filing an issue or simply mention what you plan to do in the [Discord](https://discord.gg/UBa7pJUN7Z). -PRs are often either rejected or need to change significantly after submission so make sure before you start working on something it won't be a wasted effort. +Before submitting a PR, unless it's something obvious, consider filing an issue or simply mention what you plan to do in +the [Discord](https://discord.gg/UBa7pJUN7Z). PRs are often either rejected or need to change significantly after +submission so make sure before you start working on something it won't be a wasted effort. -Issues ideal for contributors can be found with the ["help wanted"](https://github.com/jdx/mise/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) and ["good first issue"](https://github.com/jdx/mise/labels/good%20first%20issue) labels. These are isssues that I feel are self-contained therefore don't require super in-depth understanding of the codebase or that require knowledge about something I don't understand very well myself. +Issues ideal for contributors can be found with the +["help wanted"](https://github.com/jdx/mise/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) and +["good first issue"](https://github.com/jdx/mise/labels/good%20first%20issue) labels. These are isssues that I feel are +self-contained therefore don't require super in-depth understanding of the codebase or that require knowledge about +something I don't understand very well myself. ## Testing ### Unit Tests -Unit tests are used for fast, relatively simple logic. They can be run with `cargo test`. The dev container is recommended -for executing since it does not require having a proper local setup. +Unit tests are used for fast, relatively simple logic. They can be run with `cargo test`. The dev container is +recommended for executing since it does not require having a proper local setup. To run locally you will need to first disable mise if you are using it. @@ -53,8 +58,10 @@ pwsh e2e-win\run.ps1 task # run tests matching `*task*` ## Dependencies -- [rust](https://www.rust-lang.org/) stable 1.70.0+ (I test with the beta channel locally, but CI uses stable, you can use whatever) -- [just](https://github.com/casey/just) this should be removed in favor of mise tasks but it's still used for some things. +- [rust](https://www.rust-lang.org/) stable 1.70.0+ (I test with the beta channel locally, but CI uses stable, you can + use whatever) +- [just](https://github.com/casey/just) this should be removed in favor of mise tasks but it's still used for some + things. ## Tasks @@ -84,14 +91,13 @@ test:e2e ~/src/mise/.mise.to ## Setup -Shouldn't require anything special I'm aware of, but `mise run build` is a good sanity check to run and make sure it's all working. +Shouldn't require anything special I'm aware of, but `mise run build` is a good sanity check to run and make sure it's +all working. ## Dev Container -::: danger -The docker setup quit working and since I don't use it I haven't bothered to fix it. For now you'll need to run outside of -docker or you can try to fix the docker setup. -::: +::: danger The docker setup quit working and since I don't use it I haven't bothered to fix it. For now you'll need to +run outside of docker or you can try to fix the docker setup. ::: There is a docker setup that makes development with mise easier. It is especially helpful for running the E2E tests. Here's some example ways to use it: @@ -106,22 +112,20 @@ mise run docker:e2e # shortcut for `mise run docker:mise run test:e2e` ## Pre-commit hook -You can optionally run a pre-commit hook which lints the codebase and updates generated code. -To do this, install [lefthook](https://github.com/evilmartians/lefthook) and run `lefthook install`. +You can optionally run a pre-commit hook which lints the codebase and updates generated code. To do this, install +[lefthook](https://github.com/evilmartians/lefthook) and run `lefthook install`. ## Running the CLI -Even if using the devcontainer, it's a good idea to create a shim to make it easy to launch mise. I use the following shim -in `~/.local/bin/@mise`: +Even if using the devcontainer, it's a good idea to create a shim to make it easy to launch mise. I use the following +shim in `~/.local/bin/@mise`: ```sh #!/bin/sh exec cargo run -q --all-features --manifest-path ~/src/mise/Cargo.toml -- "$@" ``` -::: info -Don't forget to change the manifest path to the correct path for your setup. -::: +::: info Don't forget to change the manifest path to the correct path for your setup. ::: Then if that is in PATH just use `@mise` to run mise by compiling it on the fly. @@ -149,7 +153,8 @@ mise run render ## Adding a new setting -To add a new setting, add it to [`settings.toml`](https://github.com/jdx/mise/blob/main/settings.toml) in the root of the project and run `mise run render` to update the codebase. +To add a new setting, add it to [`settings.toml`](https://github.com/jdx/mise/blob/main/settings.toml) in the root of +the project and run `mise run render` to update the codebase. ## Testing packaging diff --git a/docs/core-tools.md b/docs/core-tools.md index 337513ecda..a8101d189a 100644 --- a/docs/core-tools.md +++ b/docs/core-tools.md @@ -1,9 +1,9 @@ # Core Tools -`mise` comes with some plugins built into the CLI written in Rust. These are new and will improve over -time. +`mise` comes with some plugins built into the CLI written in Rust. These are new and will improve over time. -They can be easily overridden by installing an asdf/vfox plugin with the same name, e.g.: `mise plugin install python https://github.com/asdf-community/asdf-python`. +They can be easily overridden by installing an asdf/vfox plugin with the same name, e.g.: +`mise plugin install python https://github.com/asdf-community/asdf-python`. You can see the core plugins with `mise registry -b core`. diff --git a/docs/demo.md b/docs/demo.md index e1b1ba4d5b..f7dde15927 100644 --- a/docs/demo.md +++ b/docs/demo.md @@ -1,7 +1,6 @@ # 30 Second Demo -The following shows using mise to install different versions -of [node](https://nodejs.org). -Note that calling `which node` gives us a real path to node, not a shim. +The following shows using mise to install different versions of [node](https://nodejs.org). Note that calling +`which node` gives us a real path to node, not a shim. [![demo](https://github.com/jdx/mise/blob/main/docs/demo.gif?raw=true)](https://github.com/jdx/mise/blob/main/docs/demo.gif) diff --git a/docs/dev-tools/aliases.md b/docs/dev-tools/aliases.md index f5a99b3de4..fbad5f277f 100644 --- a/docs/dev-tools/aliases.md +++ b/docs/dev-tools/aliases.md @@ -2,8 +2,8 @@ ## Aliased Backends -Tools can be aliased so that something like `node` which normally maps to `core:node` can be changed -to something like `asdf:company/our-custom-node` instead. +Tools can be aliased so that something like `node` which normally maps to `core:node` can be changed to something like +`asdf:company/our-custom-node` instead. ```toml [alias] @@ -13,9 +13,9 @@ erlang = 'asdf:https://github.com/company/our-custom-erlang' ## Aliased Versions -mise supports aliasing the versions of runtimes. One use-case for this is to define aliases for LTS -versions of runtimes. For example, you may want to specify `lts-hydrogen` as the version for -so you can use set it with `node lts-hydrogen` in `mise.toml`/`.tool-versions`. +mise supports aliasing the versions of runtimes. One use-case for this is to define aliases for LTS versions of +runtimes. For example, you may want to specify `lts-hydrogen` as the version for so you can use set it with +`node lts-hydrogen` in `mise.toml`/`.tool-versions`. User aliases can be created by adding an `alias.` section to `~/.config/mise/config.toml`: @@ -24,8 +24,7 @@ User aliases can be created by adding an `alias.` section to `~/.config/ my_custom_20 = '20' ``` -Plugins can also provide aliases via a `bin/list-aliases` script. Here is an example showing node.js -versions: +Plugins can also provide aliases via a `bin/list-aliases` script. Here is an example showing node.js versions: ```bash #!/usr/bin/env bash @@ -35,10 +34,8 @@ echo "lts-gallium 16" echo "lts-fermium 14" ``` -::: info -Because this is mise-specific functionality not currently used by asdf it isn't likely to be in any -plugin currently, but plugin authors can add this script without impacting asdf users. -::: +::: info Because this is mise-specific functionality not currently used by asdf it isn't likely to be in any plugin +currently, but plugin authors can add this script without impacting asdf users. ::: ## Templates diff --git a/docs/dev-tools/backends/aqua.md b/docs/dev-tools/backends/aqua.md index b822bd3873..b41b31def2 100644 --- a/docs/dev-tools/backends/aqua.md +++ b/docs/dev-tools/backends/aqua.md @@ -1,27 +1,29 @@ # Aqua Backend -[Aqua](https://aquaproj.github.io/) tools may be used natively in mise. aqua is the ideal backend -to use for new tools since they don't require plugins, they work on windows, they offer security -features like cosign/slsa verification in addition to checksums. aqua installs also show more progress -bars, which is nice. - -You do not need to separately install aqua. The aqua CLI is not used in mise at all. What is used is -the [aqua registry](https://github.com/aquaproj/aqua-registry) which is a bunch of yaml files that get compiled into the mise binary on release. -Here's an example of one of these files: [`aqua:hashicorp/terraform`](https://github.com/aquaproj/aqua-registry/blob/main/pkgs/hashicorp/terraform/registry.yaml). +[Aqua](https://aquaproj.github.io/) tools may be used natively in mise. aqua is the ideal backend to use for new tools +since they don't require plugins, they work on windows, they offer security features like cosign/slsa verification in +addition to checksums. aqua installs also show more progress bars, which is nice. + +You do not need to separately install aqua. The aqua CLI is not used in mise at all. What is used is the +[aqua registry](https://github.com/aquaproj/aqua-registry) which is a bunch of yaml files that get compiled into the +mise binary on release. Here's an example of one of these files: +[`aqua:hashicorp/terraform`](https://github.com/aquaproj/aqua-registry/blob/main/pkgs/hashicorp/terraform/registry.yaml). mise has a reimplementation of aqua that knows how to work with these files to install tools. -As of this writing, aqua is relatively new to mise and because a lot of tools are being converted from -asdf to aqua, there may be some configuration in aqua tools that need to be tightened up. I put some -common issues below and would strongly recommend contributing changes back to the aqua registry if you -notice problems. The maintainer is super responsive and great to work with. +As of this writing, aqua is relatively new to mise and because a lot of tools are being converted from asdf to aqua, +there may be some configuration in aqua tools that need to be tightened up. I put some common issues below and would +strongly recommend contributing changes back to the aqua registry if you notice problems. The maintainer is super +responsive and great to work with. -If all else fails, you can disable aqua entirely with [`MISE_DISABLE_BACKENDS=aqua`](/configuration/settings.html#disable_backends). +If all else fails, you can disable aqua entirely with +[`MISE_DISABLE_BACKENDS=aqua`](/configuration/settings.html#disable_backends). -Currently aqua tools don't support setting environment variables or doing more than simply downloading -binaries though (and I'm not sure this functionality would ever get added), so some tools will likely -always require plugins like asdf/vfox. +Currently aqua tools don't support setting environment variables or doing more than simply downloading binaries though +(and I'm not sure this functionality would ever get added), so some tools will likely always require plugins like +asdf/vfox. -The code for this is inside the mise repository at [`./src/backend/aqua.rs`](https://github.com/jdx/mise/blob/main/src/backend/aqua.rs). +The code for this is inside the mise repository at +[`./src/backend/aqua.rs`](https://github.com/jdx/mise/blob/main/src/backend/aqua.rs). ## Usage @@ -40,8 +42,9 @@ The version will be set in `~/.config/mise/config.toml` with the following forma "aqua:BurntSushi/ripgrep" = "latest" ``` -Some tools will default to use aqua if they're specified in [registry.toml](https://github.com/jdx/mise/blob/main/registry.toml) -to use the aqua backend. To see these tools, run `mise registry | grep aqua:`. +Some tools will default to use aqua if they're specified in +[registry.toml](https://github.com/jdx/mise/blob/main/registry.toml) to use the aqua backend. To see these tools, run +`mise registry | grep aqua:`. ## Settings @@ -56,24 +59,22 @@ Here's some common issues I've seen when working with aqua tools. ### Supported env missing -The aqua registry defines supported envs for each tool of the os/arch. I've noticed some of these -are simply missing os/arch combos that are in fact supportedโ€”possibly because it was added after -the registry was created for that tool. +The aqua registry defines supported envs for each tool of the os/arch. I've noticed some of these are simply missing +os/arch combos that are in fact supportedโ€”possibly because it was added after the registry was created for that tool. The fix is simple, just edit the `supported_envs` section of `registry.yaml` for the tool in question. ### Using `version_filter` instead of `version_prefix` -This is a weird one that causes weird issues in mise. In general in mise we like versions like -`1.2.3` with no decoration like `v1.2.3` or `cli-v1.2.3`. This consistency not only makes `mise.toml` -cleaner but, it also helps make things like `mise up` function right because it's able to parse it as -semver without dealing with a bunch of edge-cases. +This is a weird one that causes weird issues in mise. In general in mise we like versions like `1.2.3` with no +decoration like `v1.2.3` or `cli-v1.2.3`. This consistency not only makes `mise.toml` cleaner but, it also helps make +things like `mise up` function right because it's able to parse it as semver without dealing with a bunch of edge-cases. Really if you notice aqua tools are giving you versions that aren't simple triplets, it's worth fixing. -One common thing I've seen is registries using a `version_filter` expression like `Version startsWith "Version startsWith "atlascli/""`. +One common thing I've seen is registries using a `version_filter` expression like +`Version startsWith "Version startsWith "atlascli/""`. -This ultimately causes the version to be `atlascli/1.2.3` which is not what we want. The fix is to use -`version_prefix` instead of `version_filter` and just put the prefix in the `version_prefix` field. -In this example, it would be `atlascli/`. mise will automatically strip this out and add it back in, -which it can't do with `version_filter`. +This ultimately causes the version to be `atlascli/1.2.3` which is not what we want. The fix is to use `version_prefix` +instead of `version_filter` and just put the prefix in the `version_prefix` field. In this example, it would be +`atlascli/`. mise will automatically strip this out and add it back in, which it can't do with `version_filter`. diff --git a/docs/dev-tools/backends/asdf.md b/docs/dev-tools/backends/asdf.md index 731aac0438..979dbba919 100644 --- a/docs/dev-tools/backends/asdf.md +++ b/docs/dev-tools/backends/asdf.md @@ -1,12 +1,10 @@ # asdf Backend -asdf is the original backend for mise. It relies on asdf plugins for each tool. asdf plugins are -more risky to use because they're typically written by a single developer unrelated to the tool vendor -they also do not function on Windows. -Because of the extra complexity of asdf tools and security concerns we are actively moving tools in -the registry away from asdf where possible to backends like aqua and ubi which don't require plugins. -That said, not all tools can function with ubi/aqua if they have a unique installation process or -need to set env vars other than PATH. +asdf is the original backend for mise. It relies on asdf plugins for each tool. asdf plugins are more risky to use +because they're typically written by a single developer unrelated to the tool vendor they also do not function on +Windows. Because of the extra complexity of asdf tools and security concerns we are actively moving tools in the +registry away from asdf where possible to backends like aqua and ubi which don't require plugins. That said, not all +tools can function with ubi/aqua if they have a unique installation process or need to set env vars other than PATH. ## Writing asdf plugins for mise diff --git a/docs/dev-tools/backends/cargo.md b/docs/dev-tools/backends/cargo.md index d9ce5c98d1..4a24725f5a 100644 --- a/docs/dev-tools/backends/cargo.md +++ b/docs/dev-tools/backends/cargo.md @@ -1,14 +1,13 @@ # Cargo Backend -You may install packages directly from [Cargo Crates](https://crates.io/) even if there -isn't an asdf plugin for it. +You may install packages directly from [Cargo Crates](https://crates.io/) even if there isn't an asdf plugin for it. -The code for this is inside the mise repository at [`./src/backend/cargo.rs`](https://github.com/jdx/mise/blob/main/src/backend/cargo.rs). +The code for this is inside the mise repository at +[`./src/backend/cargo.rs`](https://github.com/jdx/mise/blob/main/src/backend/cargo.rs). ## Dependencies -This relies on having `cargo` installed. You can either install it on your -system via [rustup](https://rustup.rs/): +This relies on having `cargo` installed. You can either install it on your system via [rustup](https://rustup.rs/): ```sh curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh @@ -22,8 +21,8 @@ mise use -g rust ## Usage -The following installs the latest version of [eza](https://crates.io/crates/eza) and -sets it as the active version on PATH: +The following installs the latest version of [eza](https://crates.io/crates/eza) and sets it as the active version on +PATH: ```sh $ mise use -g cargo:eza @@ -42,8 +41,8 @@ The version will be set in `~/.config/mise/config.toml` with the following forma ### Using Git -You can install any package from a Git repository using the `mise` command. This allows you to -install a particular tag, branch, or commit revision: +You can install any package from a Git repository using the `mise` command. This allows you to install a particular tag, +branch, or commit revision: ```sh # Install a specific tag @@ -69,8 +68,8 @@ import Settings from '/components/settings.vue'; ## Tool Options -The following [tool-options](/dev-tools/#tool-options) are available for the `cargo` backendโ€”these -go in `[tools]` in `mise.toml`. +The following [tool-options](/dev-tools/#tool-options) are available for the `cargo` backendโ€”these go in `[tools]` in +`mise.toml`. ### `features` @@ -101,8 +100,7 @@ Select the CLI bin name to install when multiple are available (passed as `cargo ### `crate` -Select the crate name to install when multiple are available (passed as -`cargo install --git= `): +Select the crate name to install when multiple are available (passed as `cargo install --git= `): ```toml [tools] @@ -111,8 +109,8 @@ Select the crate name to install when multiple are available (passed as ### `locked` -Use Cargo.lock (passes `cargo install --locked`) when building CLI. This is the default behavior, -pass `false` to disable: +Use Cargo.lock (passes `cargo install --locked`) when building CLI. This is the default behavior, pass `false` to +disable: ```toml [tools] diff --git a/docs/dev-tools/backends/dotnet.md b/docs/dev-tools/backends/dotnet.md index d269825a6f..d695727c38 100644 --- a/docs/dev-tools/backends/dotnet.md +++ b/docs/dev-tools/backends/dotnet.md @@ -1,11 +1,12 @@ # Dotnet backend -The code for this is inside the mise repository at [`./src/backend/dotnet.rs`](https://github.com/jdx/mise/blob/main/src/backend/dotnet.rs). +The code for this is inside the mise repository at +[`./src/backend/dotnet.rs`](https://github.com/jdx/mise/blob/main/src/backend/dotnet.rs). ## Usage -The following installs the latest version of [GitVersion.Tool](https://gitversion.net/) and -sets it as the active version on PATH: +The following installs the latest version of [GitVersion.Tool](https://gitversion.net/) and sets it as the active +version on PATH: ```sh $ mise use -g dotnet:GitVersion.Tool@5.12.0 @@ -51,5 +52,5 @@ import Settings from '/components/settings.vue'; ## Tool Options -The following [tool-options](/dev-tools/#tool-options) are available for the `dotnet` backendโ€”these -go in `[tools]` in `mise.toml`. +The following [tool-options](/dev-tools/#tool-options) are available for the `dotnet` backendโ€”these go in `[tools]` in +`mise.toml`. diff --git a/docs/dev-tools/backends/gem.md b/docs/dev-tools/backends/gem.md index 9b586f9a26..22331c5884 100644 --- a/docs/dev-tools/backends/gem.md +++ b/docs/dev-tools/backends/gem.md @@ -1,11 +1,12 @@ # gem Backend -mise can be used to install CLIs from RubyGems. The code for this is inside of the mise repository at [`./src/backend/gem.rs`](https://github.com/jdx/mise/blob/main/src/backend/pipx.rs). +mise can be used to install CLIs from RubyGems. The code for this is inside of the mise repository at +[`./src/backend/gem.rs`](https://github.com/jdx/mise/blob/main/src/backend/pipx.rs). ## Dependencies -This relies on having `gem` (provided with ruby) installed. You can install it with or without mise. -Here is how to install `ruby` with mise: +This relies on having `gem` (provided with ruby) installed. You can install it with or without mise. Here is how to +install `ruby` with mise: ```sh mise use -g ruby @@ -13,7 +14,8 @@ mise use -g ruby ## Usage -The following installs the latest version of [rubocop](https://rubygems.org/gems/rubocop) and sets it as the active version on PATH: +The following installs the latest version of [rubocop](https://rubygems.org/gems/rubocop) and sets it as the active +version on PATH: ```sh mise use -g gem:rubocop @@ -29,8 +31,8 @@ The version will be set in `~/.config/mise/config.toml` with the following forma ## Ruby upgrades -If the ruby version used by a gem package changes, (by mise or system ruby), you may need to -reinstall the gem. This can be done with: +If the ruby version used by a gem package changes, (by mise or system ruby), you may need to reinstall the gem. This can +be done with: ```sh mise install -f gem:rubocop diff --git a/docs/dev-tools/backends/go.md b/docs/dev-tools/backends/go.md index b6c52b4bb5..dc9e5fa2d7 100644 --- a/docs/dev-tools/backends/go.md +++ b/docs/dev-tools/backends/go.md @@ -1,9 +1,10 @@ # Go Backend -You may install packages directly via [go install](https://go.dev/doc/install) even if there -isn't an asdf plugin for it. +You may install packages directly via [go install](https://go.dev/doc/install) even if there isn't an asdf plugin for +it. -The code for this is inside of the mise repository at [`./src/backend/go.rs`](https://github.com/jdx/mise/blob/main/src/backend/go.rs). +The code for this is inside of the mise repository at +[`./src/backend/go.rs`](https://github.com/jdx/mise/blob/main/src/backend/go.rs). ## Dependencies @@ -13,15 +14,13 @@ This relies on having `go` installed. Which you can install via mise: mise use -g go ``` -::: tip -Any method of installing `go` is fine if you want to install go some other way. -mise will use whatever `go` is on PATH. -::: +::: tip Any method of installing `go` is fine if you want to install go some other way. mise will use whatever `go` is +on PATH. ::: ## Usage -The following installs the latest version of [hivemind](https://github.com/DarthSim/hivemind) and -sets it as the active version on PATH: +The following installs the latest version of [hivemind](https://github.com/DarthSim/hivemind) and sets it as the active +version on PATH: ```sh $ mise use -g go:github.com/DarthSim/hivemind diff --git a/docs/dev-tools/backends/index.md b/docs/dev-tools/backends/index.md index 440a77e773..800da8bce2 100644 --- a/docs/dev-tools/backends/index.md +++ b/docs/dev-tools/backends/index.md @@ -14,7 +14,5 @@ In addition to asdf plugins, you can also directly install CLIs with some packag - [ubi](/dev-tools/backends/ubi) - [vfox](/dev-tools/backends/vfox) -::: tip -If you'd like to contribute a new backend to mise, they're not difficult to write. -See [`./src/backend/`](https://github.com/jdx/mise/tree/main/src/backend) for examples. -::: +::: tip If you'd like to contribute a new backend to mise, they're not difficult to write. See +[`./src/backend/`](https://github.com/jdx/mise/tree/main/src/backend) for examples. ::: diff --git a/docs/dev-tools/backends/npm.md b/docs/dev-tools/backends/npm.md index 575010eaf4..2170e20b0b 100644 --- a/docs/dev-tools/backends/npm.md +++ b/docs/dev-tools/backends/npm.md @@ -1,14 +1,13 @@ # npm Backend -You may install packages directly from [npmjs.org](https://npmjs.org/) even if there -isn't an asdf plugin for it. +You may install packages directly from [npmjs.org](https://npmjs.org/) even if there isn't an asdf plugin for it. -The code for this is inside of the mise repository at [`./src/backend/npm.rs`](https://github.com/jdx/mise/blob/main/src/backend/npm.rs). +The code for this is inside of the mise repository at +[`./src/backend/npm.rs`](https://github.com/jdx/mise/blob/main/src/backend/npm.rs). ## Dependencies -This relies on having `npm` installed. You can install it with or without mise. -Here is how to install `npm` with mise: +This relies on having `npm` installed. You can install it with or without mise. Here is how to install `npm` with mise: ```sh mise use -g node @@ -16,8 +15,8 @@ mise use -g node ## Usage -The following installs the latest version of [prettier](https://www.npmjs.com/package/prettier) -and sets it as the active version on PATH: +The following installs the latest version of [prettier](https://www.npmjs.com/package/prettier) and sets it as the +active version on PATH: ```sh $ mise use -g npm:prettier diff --git a/docs/dev-tools/backends/pipx.md b/docs/dev-tools/backends/pipx.md index ad047e2e53..d6a6acbdad 100644 --- a/docs/dev-tools/backends/pipx.md +++ b/docs/dev-tools/backends/pipx.md @@ -7,12 +7,13 @@ You may install python packages directly from: - GitHub - Http -The code for this is inside of the mise repository at [`./src/backend/pipx.rs`](https://github.com/jdx/mise/blob/main/src/backend/pipx.rs). +The code for this is inside of the mise repository at +[`./src/backend/pipx.rs`](https://github.com/jdx/mise/blob/main/src/backend/pipx.rs). ## Dependencies -This relies on having `pipx` installed. You can install it with or without mise. -Here is how to install `pipx` with mise: +This relies on having `pipx` installed. You can install it with or without mise. Here is how to install `pipx` with +mise: ```sh mise use -g python @@ -23,8 +24,8 @@ Other installation instructions can be found [here](https://pipx.pypa.io/latest/ ## Usage -The following installs the latest version of [black](https://github.com/psf/black) -and sets it as the active version on PATH: +The following installs the latest version of [black](https://github.com/psf/black) and sets it as the active version on +PATH: ```sh $ mise use -g pipx:psf/black @@ -41,8 +42,8 @@ The version will be set in `~/.config/mise/config.toml` with the following forma ## Python upgrades -If the python version used by a pipx package changes, (by mise or system python), you may need to -reinstall the package. This can be done with: +If the python version used by a pipx package changes, (by mise or system python), you may need to reinstall the package. +This can be done with: ```sh mise install -f pipx:psf/black @@ -81,8 +82,8 @@ import Settings from '/components/settings.vue'; ## Tool Options -The following [tool-options](/dev-tools/#tool-options) are available for the `pipx` backendโ€”these -go in `[tools]` in `mise.toml`. +The following [tool-options](/dev-tools/#tool-options) are available for the `pipx` backendโ€”these go in `[tools]` in +`mise.toml`. ### `extras` diff --git a/docs/dev-tools/backends/spm.md b/docs/dev-tools/backends/spm.md index 15f56a3888..d148bdb87e 100644 --- a/docs/dev-tools/backends/spm.md +++ b/docs/dev-tools/backends/spm.md @@ -1,20 +1,22 @@ # SPM Backend -You may install executables managed by [Swift Package Manager](https://www.swift.org/documentation/package-manager) directly from GitHub releases. +You may install executables managed by [Swift Package Manager](https://www.swift.org/documentation/package-manager) +directly from GitHub releases. -The code for this is inside of the mise repository at [`./src/backend/spm.rs`](https://github.com/jdx/mise/blob/main/src/backend/spm.rs). +The code for this is inside of the mise repository at +[`./src/backend/spm.rs`](https://github.com/jdx/mise/blob/main/src/backend/spm.rs). ## Dependencies -This relies on having `swift` installed. You can either install it [manually](https://www.swift.org/install) or [with mise](/lang/swift). +This relies on having `swift` installed. You can either install it [manually](https://www.swift.org/install) or +[with mise](/lang/swift). -> [!NOTE] -> If you have Xcode installed and selected in your system via `xcode-select`, Swift is already available through the toolchain embedded in the Xcode installation. +> [!NOTE] If you have Xcode installed and selected in your system via `xcode-select`, Swift is already available through +> the toolchain embedded in the Xcode installation. ## Usage -The following installs the latest version of `tuist` -and sets it as the active version on PATH: +The following installs the latest version of `tuist` and sets it as the active version on PATH: ```sh $ mise use -g spm:tuist/tuist diff --git a/docs/dev-tools/backends/ubi.md b/docs/dev-tools/backends/ubi.md index 7f3ecba889..f90e275684 100644 --- a/docs/dev-tools/backends/ubi.md +++ b/docs/dev-tools/backends/ubi.md @@ -1,19 +1,19 @@ # Ubi Backend -You may install GitHub Releases and URL packages directly using [ubi](https://github.com/houseabsolute/ubi) backend. ubi is directly compiled into -the mise codebase so it does not need to be installed separately to be used. ubi is preferred over -asdf/vfox for new tools since it doesn't require a plugin, supports Windows, and is really easy to use. +You may install GitHub Releases and URL packages directly using [ubi](https://github.com/houseabsolute/ubi) backend. ubi +is directly compiled into the mise codebase so it does not need to be installed separately to be used. ubi is preferred +over asdf/vfox for new tools since it doesn't require a plugin, supports Windows, and is really easy to use. -ubi doesn't require plugins or even any configuration for each tool. What it does is try to deduce what -the proper binary/tarball is from GitHub releases and downloads the right one. As long as the vendor -uses a somewhat standard labeling scheme for their releases, ubi should be able to figure it out. +ubi doesn't require plugins or even any configuration for each tool. What it does is try to deduce what the proper +binary/tarball is from GitHub releases and downloads the right one. As long as the vendor uses a somewhat standard +labeling scheme for their releases, ubi should be able to figure it out. -The code for this is inside of the mise repository at [`./src/backend/ubi.rs`](https://github.com/jdx/mise/blob/main/src/backend/ubi.rs). +The code for this is inside of the mise repository at +[`./src/backend/ubi.rs`](https://github.com/jdx/mise/blob/main/src/backend/ubi.rs). ## Usage -The following installs the latest version of goreleaser -and sets it as the active version on PATH: +The following installs the latest version of goreleaser and sets it as the active version on PATH: ```sh $ mise use -g ubi:goreleaser/goreleaser @@ -30,16 +30,16 @@ The version will be set in `~/.config/mise/config.toml` with the following forma ## Tool Options -The following [tool-options](/dev-tools/#tool-options) are available for the `ubi` backendโ€”these -go in `[tools]` in `mise.toml`. +The following [tool-options](/dev-tools/#tool-options) are available for the `ubi` backendโ€”these go in `[tools]` in +`mise.toml`. ### `exe` -The `exe` option allows you to specify the executable name in the archive. This is useful when the -archive contains multiple executables. +The `exe` option allows you to specify the executable name in the archive. This is useful when the archive contains +multiple executables. -If you get an error like `could not find any files named cli in the downloaded zip file`, you can -use the `exe` option to specify the executable name: +If you get an error like `could not find any files named cli in the downloaded zip file`, you can use the `exe` option +to specify the executable name: ```toml [tools] @@ -48,10 +48,9 @@ use the `exe` option to specify the executable name: ### `matching` -Set a string to match against the release filename when there are multiple files for your -OS/arch, i.e. "gnu" or "musl". Note that this is only used when there is more than one -matching release filename for your OS/arch. If only one release asset matches your OS/arch, -then this will be ignored. +Set a string to match against the release filename when there are multiple files for your OS/arch, i.e. "gnu" or "musl". +Note that this is only used when there is more than one matching release filename for your OS/arch. If only one release +asset matches your OS/arch, then this will be ignored. ```toml [tools] @@ -62,15 +61,16 @@ then this will be ignored. - **GitHub shorthand for latest release version:** `ubi:goreleaser/goreleaser` - **GitHub shorthand for specific release version:** `ubi:goreleaser/goreleaser@1.25.1` -- **URL syntax:** `ubi:https://github.com/goreleaser/goreleaser/releases/download/v1.16.2/goreleaser_Darwin_arm64.tar.gz` +- **URL syntax:** + `ubi:https://github.com/goreleaser/goreleaser/releases/download/v1.16.2/goreleaser_Darwin_arm64.tar.gz` ## Troubleshooting ubi ### `ubi` resolver can't find os/arch -Sometimes vendors use strange formats for their releases that ubi can't figure out, possibly for a -specific os/arch combination. For example this recently happend in [this ticket](https://github.com/houseabsolute/ubi/issues/79) because a vendor used -"mac" instead of the more common "macos" or "darwin" tags. +Sometimes vendors use strange formats for their releases that ubi can't figure out, possibly for a specific os/arch +combination. For example this recently happend in [this ticket](https://github.com/houseabsolute/ubi/issues/79) because +a vendor used "mac" instead of the more common "macos" or "darwin" tags. Try using ubi by itself to see if the issue is related to mise or ubi: @@ -81,8 +81,8 @@ ubi -p jdx/mise ### `ubi` picks the wrong tarball -Another issue is that a GitHub release may have a bunch of tarballs, some that don't contain the CLI -you want, you can use the `matching` field in order to specify a string to match against the release. +Another issue is that a GitHub release may have a bunch of tarballs, some that don't contain the CLI you want, you can +use the `matching` field in order to specify a string to match against the release. ```sh mise use ubi:tamasfe/taplo[matching=full] @@ -92,9 +92,9 @@ ubi -p tamasfe/taplo -m full ### `ubi` can't find the binary in the tarball -ubi assumes that the repo name is the same as the binary name, however that is often not the case. -For example, BurntSushi/ripgrep gives us a binary named `rg` not `ripgrep`. In this case, you can -specify the binary name with the `exe` field: +ubi assumes that the repo name is the same as the binary name, however that is often not the case. For example, +BurntSushi/ripgrep gives us a binary named `rg` not `ripgrep`. In this case, you can specify the binary name with the +`exe` field: ```sh mise use ubi:BurntSushi/ripgrep[exe=rg] @@ -104,15 +104,15 @@ ubi -p BurntSushi/ripgrep -e rg ### `ubi` uses weird versions -This issue is actually with mise and not with ubi. mise needs to be able to list the available versions -of the tools so that "latest" points to whatever is the actual latest release of the CLI. What sometimes -happens is vendors will have GitHub releases for unrelated things. For example, `cargo-bins/cargo-binstall` -is the repo for cargo-binstall, however it has a bunch of releases for unrelated CLIs that are not -cargo-binstall. We need to filter these out and that can be specified with the `tag_regex` tool option: +This issue is actually with mise and not with ubi. mise needs to be able to list the available versions of the tools so +that "latest" points to whatever is the actual latest release of the CLI. What sometimes happens is vendors will have +GitHub releases for unrelated things. For example, `cargo-bins/cargo-binstall` is the repo for cargo-binstall, however +it has a bunch of releases for unrelated CLIs that are not cargo-binstall. We need to filter these out and that can be +specified with the `tag_regex` tool option: ```sh mise use 'ubi:cargo-bins/cargo-binstall[tag_regex=^\d+\.]' ``` -Now when running `mise ls-remote ubi:cargo-bins/cargo-binstall[tag_regex=^\d+\.]` you should only see -versions starting with a number. Note that this command is cached so you likely will need to run `mise cache clear` first. +Now when running `mise ls-remote ubi:cargo-bins/cargo-binstall[tag_regex=^\d+\.]` you should only see versions starting +with a number. Note that this command is cached so you likely will need to run `mise cache clear` first. diff --git a/docs/dev-tools/backends/vfox.md b/docs/dev-tools/backends/vfox.md index 41c1457c9b..32b0179c78 100644 --- a/docs/dev-tools/backends/vfox.md +++ b/docs/dev-tools/backends/vfox.md @@ -2,7 +2,8 @@ [Vfox](https://github.com/version-fox/vfox) plugins may be used in mise to install tools. -The code for this is inside the mise repository at [`./src/backend/vfox.rs`](https://github.com/jdx/mise/blob/main/src/backend/vfox.rs). +The code for this is inside the mise repository at +[`./src/backend/vfox.rs`](https://github.com/jdx/mise/blob/main/src/backend/vfox.rs). ## Dependencies @@ -61,5 +62,4 @@ terraform vfox:enochchau/vfox-terraform vlang vfox:ahai-code/vfox-vlang ``` -And they will be installed when running commands such as `mise use -g cmake` without needing to -specify `vfox:cmake`. +And they will be installed when running commands such as `mise use -g cmake` without needing to specify `vfox:cmake`. diff --git a/docs/dev-tools/comparison-to-asdf.md b/docs/dev-tools/comparison-to-asdf.md index 81c1d62d72..f35285f02d 100644 --- a/docs/dev-tools/comparison-to-asdf.md +++ b/docs/dev-tools/comparison-to-asdf.md @@ -1,81 +1,69 @@ # Comparison to asdf -mise can be used as a drop-in replacement for asdf. It supports the same `.tool-versions` files that -you may have used with asdf and can use asdf plugins through -the [asdf backend](/dev-tools/backends/asdf.html). - -It will not, however, reuse existing asdf directories -(so you'll need to either reinstall them or move them), and 100% compatibility is not a design goal. -That said, -if you're coming from asdf-bash (0.15 and below), mise actually -has [fewer breaking changes than asdf-go (0.16 and above)](https://asdf-vm.com/guide/upgrading-from-v0-15-to-v0-16.html) +mise can be used as a drop-in replacement for asdf. It supports the same `.tool-versions` files that you may have used +with asdf and can use asdf plugins through the [asdf backend](/dev-tools/backends/asdf.html). + +It will not, however, reuse existing asdf directories (so you'll need to either reinstall them or move them), and 100% +compatibility is not a design goal. That said, if you're coming from asdf-bash (0.15 and below), mise actually has +[fewer breaking changes than asdf-go (0.16 and above)](https://asdf-vm.com/guide/upgrading-from-v0-15-to-v0-16.html) despite 100% compatibility not being a design goal of mise. Casual users coming from asdf have generally found mise to just be a faster, easier to use asdf. -:::tip -Make sure you have a look at [environments](/environments/) and [tasks](/tasks/) which -are major portions of mise that have no asdf equivalent. -::: +:::tip Make sure you have a look at [environments](/environments/) and [tasks](/tasks/) which are major portions of mise +that have no asdf equivalent. ::: ## Migrate from asdf to mise -If you're moving from asdf to mise, please -review [#how-do-i-migrate-from-asdf](/faq.html#how-do-i-migrate-from-asdf) for guidance. +If you're moving from asdf to mise, please review [#how-do-i-migrate-from-asdf](/faq.html#how-do-i-migrate-from-asdf) +for guidance. ## asdf in go (0.16+) -asdf has gone through a rewrite in go. Because this is quite new as of this writing (2025-01-01), -I'm going to keep information about 0.16+ asdf versions (which I call "asdf-go" vs "asdf-bash") in -this section and the rest of this doc will apply to asdf-bash (0.15 and below). +asdf has gone through a rewrite in go. Because this is quite new as of this writing (2025-01-01), I'm going to keep +information about 0.16+ asdf versions (which I call "asdf-go" vs "asdf-bash") in this section and the rest of this doc +will apply to asdf-bash (0.15 and below). -In terms of performance, mise is still faster than the go asdf, however the difference is much -closer. asdf is likely fast enough that the difference in overhead between asdf-go and mise may not -even be enough to notice for youโ€”after all there are plenty of people still using asdf-bash that -claim they don't even notice how slow it is (don't ask me how): +In terms of performance, mise is still faster than the go asdf, however the difference is much closer. asdf is likely +fast enough that the difference in overhead between asdf-go and mise may not even be enough to notice for youโ€”after all +there are plenty of people still using asdf-bash that claim they don't even notice how slow it is (don't ask me how): ![GgAQJJmWIAAUlec](https://github.com/user-attachments/assets/05689925-396d-41f3-bcd1-7b3b1bf6c2fa) -I don't think performance is a good enough reason to switch though now that asdf-go is a thing. It's -a reason, but it's a minor one. The improved security in mise, better DX, and lack of reliance on -shims are all more important than performance. +I don't think performance is a good enough reason to switch though now that asdf-go is a thing. It's a reason, but it's +a minor one. The improved security in mise, better DX, and lack of reliance on shims are all more important than +performance. -Given they went through the trouble of rewriting asdfโ€”that's also an indication they want to keep -working on it (which is awesome that they're doing that btw). This does mean that some of what's -written here may go out of date if they address some of the problems -with asdf. +Given they went through the trouble of rewriting asdfโ€”that's also an indication they want to keep working on it (which +is awesome that they're doing that btw). This does mean that some of what's written here may go out of date if they +address some of the problems with asdf. ## Supply chain security -asdf plugins are not secure. This is explained -in [SECURITY.md](https://github.com/jdx/mise/blob/main/SECURITY.md), but the quick explanation is -that asdf plugins involve shell code which can essentially do anything on your machine. It's -dangerous code. What's worse is asdf plugins are rarely written by the tool vendor (who you need to -trust anyway to use the tool), which means for every asdf plugin you use you'll be trusting a random -developer to not go rogue and to not get hacked themselves and publish changes to a plugin with an -exploit. +asdf plugins are not secure. This is explained in [SECURITY.md](https://github.com/jdx/mise/blob/main/SECURITY.md), but +the quick explanation is that asdf plugins involve shell code which can essentially do anything on your machine. It's +dangerous code. What's worse is asdf plugins are rarely written by the tool vendor (who you need to trust anyway to use +the tool), which means for every asdf plugin you use you'll be trusting a random developer to not go rogue and to not +get hacked themselves and publish changes to a plugin with an exploit. -mise still uses asdf plugins for some tools, but we're actively reducing that count as well as -moving things into the [mise-plugins org](https://github.com/mise-plugins). It looks like asdf has a -similar model with their asdf-community org, but it isn't. asdf gives plugin authors commit access -to their plugin in [asdf-community](https://github.com/asdf-community) when they move it in, which I -feel like defeats the purpose of having a dedicated org in the first place. By the end of 2025 I -would like for there to no longer be any asdf plugins in the registry that aren't owned by me. +mise still uses asdf plugins for some tools, but we're actively reducing that count as well as moving things into the +[mise-plugins org](https://github.com/mise-plugins). It looks like asdf has a similar model with their asdf-community +org, but it isn't. asdf gives plugin authors commit access to their plugin in +[asdf-community](https://github.com/asdf-community) when they move it in, which I feel like defeats the purpose of +having a dedicated org in the first place. By the end of 2025 I would like for there to no longer be any asdf plugins in +the registry that aren't owned by me. -I've also been adopting extra security verification steps when vendors offer that ability such as -gpg verification on node installs, or slsa-verify/cosign checks on some aqua tools. +I've also been adopting extra security verification steps when vendors offer that ability such as gpg verification on +node installs, or slsa-verify/cosign checks on some aqua tools. ## UX ![CleanShot 2024-01-28 at 12 36 20@2x](https://github.com/jdx/mise-docs/assets/216188/47f381d7-1566-4b78-9260-3b85a21dd6ec) -Some commands are the same in asdf but others have been changed. Everything that's possible -in asdf should be possible in mise but may use slightly different syntax. mise has more forgiving -commands, -such as using fuzzy-matching, e.g.: `mise install node@20`. While in asdf you _can_ run -`asdf install node latest:20`, you can't use `latest:20` in a `.tool-versions` file or many other -places. -In `mise` you can use fuzzy-matching everywhere. +Some commands are the same in asdf but others have been changed. Everything that's possible in asdf should be possible +in mise but may use slightly different syntax. mise has more forgiving commands, such as using fuzzy-matching, e.g.: +`mise install node@20`. While in asdf you _can_ run `asdf install node latest:20`, you can't use `latest:20` in a +`.tool-versions` file or many other places. In `mise` you can use fuzzy-matching everywhere. asdf requires several steps to install a new runtime if the plugin isn't installed, e.g.: @@ -85,105 +73,90 @@ asdf install node latest:20 asdf local node latest:20 ``` -In `mise` this can all be done in a single step which installs the plugin, installs the runtime, -and sets the version: +In `mise` this can all be done in a single step which installs the plugin, installs the runtime, and sets the version: ```sh mise use node@20 ``` -If you have an existing `.tool-versions` file, or `.mise-toml`, you can install all plugins -and runtimes with a single command: +If you have an existing `.tool-versions` file, or `.mise-toml`, you can install all plugins and runtimes with a single +command: ```sh mise install ``` -I've found asdf to be particularly rigid and difficult to learn. It also made strange decisions like -having `asdf list all` but `asdf latest --all` (why is one a flag and one a positional argument?). -`mise` makes heavy use of aliases so you don't need to remember if it's `mise plugin add node` or -`mise plugin install node`. If I can guess what you meant, then I'll try to get mise to respond -in the right way. +I've found asdf to be particularly rigid and difficult to learn. It also made strange decisions like having +`asdf list all` but `asdf latest --all` (why is one a flag and one a positional argument?). `mise` makes heavy use of +aliases so you don't need to remember if it's `mise plugin add node` or `mise plugin install node`. If I can guess what +you meant, then I'll try to get mise to respond in the right way. -That said, there are a lot of great things about asdf. It's the best multi-runtime manager out there -and I've really been impressed with the plugin system. Most of the design decisions the authors made -were very good. I really just have 2 complaints: the shims and the fact it's written in Bash. +That said, there are a lot of great things about asdf. It's the best multi-runtime manager out there and I've really +been impressed with the plugin system. Most of the design decisions the authors made were very good. I really just have +2 complaints: the shims and the fact it's written in Bash. ## Performance -asdf made (what I consider) a poor design decision to use shims that go between a call to a runtime -and the runtime itself. e.g.: when you call `node` it will call an asdf shim file -`~/.asdf/shims/node`, -which then calls `asdf exec`, which then calls the correct version of node. - -These shims have terrible performance, adding ~120ms to every runtime call. `mise activate` does not -use shims and instead -updates `PATH` so that it doesn't have any overhead when simply calling binaries. These shims are -the main reason that I wrote this. Note that in the demo GIF at the top of this README -that `mise` isn't actually used when calling `node -v` for this reason. The performance is -identical to running node without using mise. - -I don't think it's possible for asdf to fix these issues. The author of asdf did a great writeup -of [performance problems](https://stratus3d.com/blog/2022/08/11/asdf-performance/). asdf is written -in bash which certainly makes it challenging to be performant, however I think the real problem is -the -shim design. I don't think it's possible to fix that without a complete rewrite. - -mise does call an internal command `mise hook-env` every time the directory has changed, but because -it's written in Rust, this is very quickโ€”taking ~10ms on my machine. 4ms if there are no changes, -14ms if it's -a full reload. - -tl;dr: asdf adds overhead (~120ms) when calling a runtime, mise adds a small amount of overhead (~ -5ms) -when the prompt loads. +asdf made (what I consider) a poor design decision to use shims that go between a call to a runtime and the runtime +itself. e.g.: when you call `node` it will call an asdf shim file `~/.asdf/shims/node`, which then calls `asdf exec`, +which then calls the correct version of node. + +These shims have terrible performance, adding ~120ms to every runtime call. `mise activate` does not use shims and +instead updates `PATH` so that it doesn't have any overhead when simply calling binaries. These shims are the main +reason that I wrote this. Note that in the demo GIF at the top of this README that `mise` isn't actually used when +calling `node -v` for this reason. The performance is identical to running node without using mise. + +I don't think it's possible for asdf to fix these issues. The author of asdf did a great writeup of +[performance problems](https://stratus3d.com/blog/2022/08/11/asdf-performance/). asdf is written in bash which certainly +makes it challenging to be performant, however I think the real problem is the shim design. I don't think it's possible +to fix that without a complete rewrite. + +mise does call an internal command `mise hook-env` every time the directory has changed, but because it's written in +Rust, this is very quickโ€”taking ~10ms on my machine. 4ms if there are no changes, 14ms if it's a full reload. + +tl;dr: asdf adds overhead (~120ms) when calling a runtime, mise adds a small amount of overhead (~ 5ms) when the prompt +loads. ## Windows support -asdf does not run on Windows at all. With mise, tools using non-asdf backends can support Windows. -Of course, this means the tool -vendor must provide Windows binaries but if they do, and the backend isn't asdf, the tool should -work on Windows. +asdf does not run on Windows at all. With mise, tools using non-asdf backends can support Windows. Of course, this means +the tool vendor must provide Windows binaries but if they do, and the backend isn't asdf, the tool should work on +Windows. ## Security -asdf plugins are insecure. They typically are written by individuals with no ties to the vendors -that provide the underlying tool. -Where possible, mise does not use asdf plugins and instead uses backends like aqua and ubi which do -not require separate plugins. +asdf plugins are insecure. They typically are written by individuals with no ties to the vendors that provide the +underlying tool. Where possible, mise does not use asdf plugins and instead uses backends like aqua and ubi which do not +require separate plugins. -Aqua tools can be configured with cosign/slsa verification as well. -See [SECURITY](https://github.com/jdx/mise/blob/main/SECURITY.md) for more information. +Aqua tools can be configured with cosign/slsa verification as well. See +[SECURITY](https://github.com/jdx/mise/blob/main/SECURITY.md) for more information. ## Command Compatibility -In nearly all places you can use the exact syntax that works in asdf, however this likely won't -show up in the help or CLI reference. If you're coming from asdf and comfortable with that way of -working you can almost always use the same syntax with mise, e.g.: +In nearly all places you can use the exact syntax that works in asdf, however this likely won't show up in the help or +CLI reference. If you're coming from asdf and comfortable with that way of working you can almost always use the same +syntax with mise, e.g.: ```sh mise install node 20.0.0 mise local node 20.0.0 ``` -UPDATE (2025-01-01): asdf-go (0.16+) actually got rid of `asdf global|local` entirely in favor of -`asdf set` which we can't support since we already have a command named `mise set`. mise command -compatibility will likely not be as good with asdf-go 0.16+. +UPDATE (2025-01-01): asdf-go (0.16+) actually got rid of `asdf global|local` entirely in favor of `asdf set` which we +can't support since we already have a command named `mise set`. mise command compatibility will likely not be as good +with asdf-go 0.16+. -It's not recommended though. You almost always want to modify config files and install things so -`mise use node@20` saves an extra command. Also, the "@" in the command is preferred since it allows -you to install multiple tools at once: `mise use|install node@20 node@18`. Also, there are edge -cases -where it's not possibleโ€”or at least very challengingโ€”for us to definitively know which syntax is -being -used and so we default to mise-style. While there aren't many of these, asdf-compatibility is done -as a "best-effort" in order to make transitioning from asdf feel familiar for those users who can -rely on their muscle memory. Ensuring asdf-syntax works with everything is not a design goal. +It's not recommended though. You almost always want to modify config files and install things so `mise use node@20` +saves an extra command. Also, the "@" in the command is preferred since it allows you to install multiple tools at once: +`mise use|install node@20 node@18`. Also, there are edge cases where it's not possibleโ€”or at least very challengingโ€”for +us to definitively know which syntax is being used and so we default to mise-style. While there aren't many of these, +asdf-compatibility is done as a "best-effort" in order to make transitioning from asdf feel familiar for those users who +can rely on their muscle memory. Ensuring asdf-syntax works with everything is not a design goal. ## Extra backends -mise has support for backends other than asdf plugins. For example you can install CLIs -directly from cargo and npm: +mise has support for backends other than asdf plugins. For example you can install CLIs directly from cargo and npm: ```sh mise use -g cargo:ripgrep@14 diff --git a/docs/dev-tools/index.md b/docs/dev-tools/index.md index 3008659fea..9c64bbeaea 100644 --- a/docs/dev-tools/index.md +++ b/docs/dev-tools/index.md @@ -1,20 +1,21 @@ # Dev Tools -> _Like [asdf](https://asdf-vm.com) (or [nvm](https://github.com/nvm-sh/nvm) -> or [pyenv](https://github.com/pyenv/pyenv) but for any language), it manages dev tools like node, -> python, cmake, terraform, and [hundreds more](/registry.html)._ +> _Like [asdf](https://asdf-vm.com) (or [nvm](https://github.com/nvm-sh/nvm) or [pyenv](https://github.com/pyenv/pyenv) +> but for any language), it manages dev tools like node, python, cmake, terraform, and [hundreds more](/registry.html)._ -::: tip -New developer? Try reading the [Beginner's Guide](https://dev.to/jdxcode/beginners-guide-to-rtx-ac4) -for a gentler introduction. -::: +::: tip New developer? Try reading the [Beginner's Guide](https://dev.to/jdxcode/beginners-guide-to-rtx-ac4) for a +gentler introduction. ::: -mise is a tool that manages installations of programming language runtimes and other tools for local development. For example, it can be used to manage multiple versions of Node.js, Python, Ruby, Go, etc. on the same machine. +mise is a tool that manages installations of programming language runtimes and other tools for local development. For +example, it can be used to manage multiple versions of Node.js, Python, Ruby, Go, etc. on the same machine. -Once [activated](/getting-started.html#_2-activate-mise), mise will automatically switch between different versions of tools based on the directory you're in. -This means that if you have a project that requires Node.js 18 and another that requires Node.js 22, mise will automatically switch between them as you move between the two projects. See tools available for mise with in the [registry](/registry). +Once [activated](/getting-started.html#_2-activate-mise), mise will automatically switch between different versions of +tools based on the directory you're in. This means that if you have a project that requires Node.js 18 and another that +requires Node.js 22, mise will automatically switch between them as you move between the two projects. See tools +available for mise with in the [registry](/registry). -To know which tool version to use, mise will typically look for a `mise.toml` file in the current directory and its parents. To get an idea of how tools are specified, here is an example of a [mise.toml](/configuration.html) file: +To know which tool version to use, mise will typically look for a `mise.toml` file in the current directory and its +parents. To get an idea of how tools are specified, here is an example of a [mise.toml](/configuration.html) file: ```toml [tools] @@ -23,43 +24,36 @@ python = '3' ruby = 'latest' ``` -It's also compatible -with asdf `.tool-versions` files as well as [idiomatic version files](/configuration#idiomatic-version-files) like `.node-version` and -`.ruby-version`. See [configuration](/configuration) for more details. +It's also compatible with asdf `.tool-versions` files as well as +[idiomatic version files](/configuration#idiomatic-version-files) like `.node-version` and `.ruby-version`. See +[configuration](/configuration) for more details. -::: info -mise is inspired by [asdf](https://asdf-vm.com) and can leverage asdf's -vast [plugin ecosystem](https://github.com/mise-plugins/registry) -under the hood. However, [it is _much_ faster than asdf and has a more friendly user experience](./comparison-to-asdf). -::: +::: info mise is inspired by [asdf](https://asdf-vm.com) and can leverage asdf's vast +[plugin ecosystem](https://github.com/mise-plugins/registry) under the hood. However, +[it is _much_ faster than asdf and has a more friendly user experience](./comparison-to-asdf). ::: ## How it works -mise hooks into your shell (with `mise activate zsh`) and sets the `PATH` -environment variable to point your shell to the correct runtime binaries. When you `cd` into a -directory containing a `mise.toml`/`.tool-versions` file, mise will automatically set the -appropriate tool versions in `PATH`. +mise hooks into your shell (with `mise activate zsh`) and sets the `PATH` environment variable to point your shell to +the correct runtime binaries. When you `cd` into a directory containing a `mise.toml`/`.tool-versions` file, mise will +automatically set the appropriate tool versions in `PATH`. -::: info -After activating, mise will update env vars like PATH whenever the directory is changed or the prompt is _displayed_. -See the [FAQ](/faq#what-does-mise-activate-do). -::: +::: info After activating, mise will update env vars like PATH whenever the directory is changed or the prompt is +_displayed_. See the [FAQ](/faq#what-does-mise-activate-do). ::: -After activating, every time your prompt displays it will call `mise hook-env` to fetch new -environment variables. -This should be very fast. It exits early if the directory wasn't changed or -`mise.toml`/`.tool-versions` files haven't been modified. +After activating, every time your prompt displays it will call `mise hook-env` to fetch new environment variables. This +should be very fast. It exits early if the directory wasn't changed or `mise.toml`/`.tool-versions` files haven't been +modified. -`mise` modifies `PATH` ahead of time so the runtimes are called directly. This means that calling a tool has zero overhead and commands like `which node` returns the real path to the binary. -Other tools like asdf only support shim files to dynamically locate runtimes when they're called which adds a small delay and can cause issues with some commands. See [shims](/dev-tools/shims) for more information. +`mise` modifies `PATH` ahead of time so the runtimes are called directly. This means that calling a tool has zero +overhead and commands like `which node` returns the real path to the binary. Other tools like asdf only support shim +files to dynamically locate runtimes when they're called which adds a small delay and can cause issues with some +commands. See [shims](/dev-tools/shims) for more information. ## Common commands -Here are some of the most important commands when it comes to working with dev tools. Click the -header -for each command to go to its reference documentation page to see all available flags/options and -more -examples. +Here are some of the most important commands when it comes to working with dev tools. Click the header for each command +to go to its reference documentation page to see all available flags/options and more examples. ### [`mise use`](/cli/use) @@ -81,50 +75,40 @@ mise ~/my-project/mise.toml tools: node@22.12.0 # mise.toml created/updated ~/.local/share/installs/node/22.12.0/bin/node ``` -`mise use node@22` will install the latest version of node-22 and create/update the -`mise.toml` -config file in the local directory. Anytime you're in that directory, that version of `node` will be -used. +`mise use node@22` will install the latest version of node-22 and create/update the `mise.toml` config file in the local +directory. Anytime you're in that directory, that version of `node` will be used. -`mise use -g node@22` will do the same but update the [global config](/configuration.html#global-config-config-mise-config-toml) (~/.config/mise/config.toml) so -unless there is a config file in the local directory hierarchy, node-22 will be the default version -for -the user. +`mise use -g node@22` will do the same but update the +[global config](/configuration.html#global-config-config-mise-config-toml) (~/.config/mise/config.toml) so unless there +is a config file in the local directory hierarchy, node-22 will be the default version for the user. ### [`mise install`](/cli/install) -`mise install` will install but not activate toolsโ€”meaning it will download/build/compile the tool -into `~/.local/share/mise/installs` but you won't be able to use it without "setting" the version -in a `.mise-toml` or `.tool-versions` file. +`mise install` will install but not activate toolsโ€”meaning it will download/build/compile the tool into +`~/.local/share/mise/installs` but you won't be able to use it without "setting" the version in a `.mise-toml` or +`.tool-versions` file. -::: tip -If you're coming from `asdf`, there is no need to also run `mise plugin add` to first install -the plugin, that will be done automatically if needed. Of course, you can manually install plugins -if you wish or you want to use a plugin not in the default registry. -::: +::: tip If you're coming from `asdf`, there is no need to also run `mise plugin add` to first install the plugin, that +will be done automatically if needed. Of course, you can manually install plugins if you wish or you want to use a +plugin not in the default registry. ::: There are many ways it can be used: - `mise install node@20.0.0` - install a specific version - `mise install node@20` - install the latest version matching this prefix -- `mise install node` - install whatever version of node currently specified in `mise.toml` (or other - config files) +- `mise install node` - install whatever version of node currently specified in `mise.toml` (or other config files) - `mise install` - install all plugins and tools specified in the config files ### [`mise exec`|`mise x`](/cli/exec) -`mise x` can be used for one-off commands using specific tools. e.g.: if you want to run a script -with python3.12: +`mise x` can be used for one-off commands using specific tools. e.g.: if you want to run a script with python3.12: ```sh mise x python@3.12 -- ./myscript.py ``` -Python will be installed if it is not already. `mise x` will read local/global -`.mise-toml`/`.tool-versions` files -as well, so if you don't want to use `mise activate` or shims you can use mise by just prefixing -commands with -`mise x --`: +Python will be installed if it is not already. `mise x` will read local/global `.mise-toml`/`.tool-versions` files as +well, so if you don't want to use `mise activate` or shims you can use mise by just prefixing commands with `mise x --`: ```sh $ mise use node@20 @@ -132,8 +116,7 @@ $ mise x -- node -v 20.x.x ``` -::: tip -If you use this a lot, an alias can be helpful: +::: tip If you use this a lot, an alias can be helpful: ```sh alias mx="mise x --" @@ -141,8 +124,8 @@ alias mx="mise x --" ::: -Similarly, `mise run` can be used to [execute tasks](/tasks/) which will also activate the mise -environment with all of your tools. +Similarly, `mise run` can be used to [execute tasks](/tasks/) which will also activate the mise environment with all of +your tools. ## Tool Options @@ -162,7 +145,8 @@ All tools can accept a `postinstall` option which is a shell command to run afte node = { version = '20', postinstall = 'corepack enable' } ``` -It's yet not possible to specify this via the CLI in `mise use`. As a workaround, you can use [mise config set](/cli/config/set.html): +It's yet not possible to specify this via the CLI in `mise use`. As a workaround, you can use +[mise config set](/cli/config/set.html): ```shell mise config set tools.node.version 20 diff --git a/docs/dev-tools/shims.md b/docs/dev-tools/shims.md index 67c9f2e0fd..8a4baa868d 100644 --- a/docs/dev-tools/shims.md +++ b/docs/dev-tools/shims.md @@ -1,13 +1,11 @@ # Shims -::: tip -The [beginner's guide](https://dev.to/jdxcode/beginners-guide-to-rtx-ac4), and my [blog post](https://jdx.dev/posts/2024-04-13-shims-how-they-work-in-mise-en-place/) are helpful resources to dive deeper into shims. -::: +::: tip The [beginner's guide](https://dev.to/jdxcode/beginners-guide-to-rtx-ac4), and my +[blog post](https://jdx.dev/posts/2024-04-13-shims-how-they-work-in-mise-en-place/) are helpful resources to dive deeper +into shims. ::: -::: warning -`mise activate --shims` does not support all the features of `mise activate`.
-See [shims vs path](/dev-tools/shims.html#shims-vs-path) for more info. -::: +::: warning `mise activate --shims` does not support all the features of `mise activate`.
See +[shims vs path](/dev-tools/shims.html#shims-vs-path) for more info. ::: ## Introduction @@ -16,8 +14,8 @@ There are two ways for dev tools to be loaded into your shell: `mise activate` a - Mise's "PATH" activation method updates environment variables at each prompt by modifying `PATH` - The "shims" method uses symlinks to the mise binary that intercept commands and load the appropriate environment -While the `PATH` design of mise works great in most cases, there are some situations where shims are -preferable. One example is when calling mise binaries from an IDE. +While the `PATH` design of mise works great in most cases, there are some situations where shims are preferable. One +example is when calling mise binaries from an IDE. To support this, mise does have a shim dir that can be used. It's located at `~/.local/share/mise/shims`. @@ -31,29 +29,25 @@ $ ~/.local/share/mise/shims/prettier -v 3.1.0 ``` -::: tip -`mise activate --shims` is a shorthand for adding the shims directory to PATH. -::: +::: tip `mise activate --shims` is a shorthand for adding the shims directory to PATH. ::: -::: info -`mise reshim` actually should get called automatically if you're using npm so an explicit reshim should not be necessary -in that scenario. Also, this bears repeating but: `mise reshim` just creates/removes the shims. People use it as a -"fix it" button but it really should only be necessary if `~/.local/share/mise/shims` doesn't contain something it should. +::: info `mise reshim` actually should get called automatically if you're using npm so an explicit reshim should not be +necessary in that scenario. Also, this bears repeating but: `mise reshim` just creates/removes the shims. People use it +as a "fix it" button but it really should only be necessary if `~/.local/share/mise/shims` doesn't contain something it +should. mise also runs a reshim anytime a tool is installed/updated/removed so you don't need to use it for those scenarios. -Also don't put things in there manually, mise will just delete it next reshim. -::: +Also don't put things in there manually, mise will just delete it next reshim. ::: ## How to add mise shims to PATH If you prefer to use shims, you can run the following to use mise without activating it. -You can use `.bashrc`/`.zshrc` instead of `.bash_profile`/`.zprofile` if you prefer to only use -mise in interactive sessions (`.bash_profile`/`.zprofile` will work in non-interactive places -like scripts or IDEs). Note that `mise activate` will remove the shims directory so it's fine -to call `mise activate --shims` in the profile file then later call `mise activate` in an interactive -session. +You can use `.bashrc`/`.zshrc` instead of `.bash_profile`/`.zprofile` if you prefer to only use mise in interactive +sessions (`.bash_profile`/`.zprofile` will work in non-interactive places like scripts or IDEs). Note that +`mise activate` will remove the shims directory so it's fine to call `mise activate --shims` in the profile file then +later call `mise activate` in an interactive session. ::: code-group @@ -74,11 +68,9 @@ echo 'mise activate fish --shims | source' >> ~/.config/fish/config.fish echo 'mise activate fish | source' >> ~/.config/fish/fish.config ``` -:::tip -You can also run `export PATH="$HOME/.local/share/mise/shims:$PATH"` which is what `mise activate --shims` does. -This can be helpful is mise may not be available at that point in time. It's also a tiny bit faster, -but since this is only run once per shell session it's not a big deal. -::: +:::tip You can also run `export PATH="$HOME/.local/share/mise/shims:$PATH"` which is what `mise activate --shims` does. +This can be helpful is mise may not be available at that point in time. It's also a tiny bit faster, but since this is +only run once per shell session it's not a big deal. ::: ## Shims vs PATH @@ -88,11 +80,10 @@ The following features are affected when shims are used **instead** of PATH acti - Most hooks won't trigger - The unix `which` command points to the shim, obscuring the real executable -In general, I recommend using PATH (`mise activate`) instead of shims for _interactive_ situations. The -way activate works is every time the prompt is displayed, mise-en-place will determine what PATH and other -env vars should be and export them. This is why it doesn't work well for non-interactive situations like -scripts. The prompt never gets displayed so you have to manually call `mise hook-env` to get mise to update -the env vars. +In general, I recommend using PATH (`mise activate`) instead of shims for _interactive_ situations. The way activate +works is every time the prompt is displayed, mise-en-place will determine what PATH and other env vars should be and +export them. This is why it doesn't work well for non-interactive situations like scripts. The prompt never gets +displayed so you have to manually call `mise hook-env` to get mise to update the env vars. Also, if you run a set of commands in a single line like the following: @@ -101,24 +92,21 @@ cd ~ cd ~/src/proj1 && node -v && cd ~/src/proj2 && node -v ``` -Using `mise activate`, this will use the tools from `~`, not from `~/src/proj1` or `~/src/proj2` even -after the directory changed because the prompt never got displayed. That might be obvious to you, not sure, -what I'm trying to convey though is just think of mise running just before your prompt gets displayedโ€”because -that literally is what is happening. It's not a magical utility that is capable of having your environment -always setup perfectly in every situation even though it might normally "feel" that way. +Using `mise activate`, this will use the tools from `~`, not from `~/src/proj1` or `~/src/proj2` even after the +directory changed because the prompt never got displayed. That might be obvious to you, not sure, what I'm trying to +convey though is just think of mise running just before your prompt gets displayedโ€”because that literally is what is +happening. It's not a magical utility that is capable of having your environment always setup perfectly in every +situation even though it might normally "feel" that way. Note that shims _will_ work with the inline example above. -::: info -This may be fixable at least for some shells if they support a hook for directory change, however -some investigation will need to be done. See [#1294](https://github.com/jdx/mise/issues/1294) for details. -::: +::: info This may be fixable at least for some shells if they support a hook for directory change, however some +investigation will need to be done. See [#1294](https://github.com/jdx/mise/issues/1294) for details. ::: ### Env vars and shims -A downside of shims is the "mise environment" is only loaded when a shim is called. This means if you -set an environment variable in `mise.toml`, it will only be run when a shim is called. So the following -only works under `mise activate`: +A downside of shims is the "mise environment" is only loaded when a shim is called. This means if you set an environment +variable in `mise.toml`, it will only be run when a shim is called. So the following only works under `mise activate`: ```sh $ mise set NODE_ENV=production @@ -134,8 +122,7 @@ $ node -p process.env.NODE_ENV production ``` -Also, `mise x|exec` and `mise r|run` can be used to get the environment even if you don't need any mise -tools: +Also, `mise x|exec` and `mise r|run` can be used to get the environment even if you don't need any mise tools: ```sh $ mise set NODE_ENV=production @@ -145,21 +132,19 @@ $ mise r some_task_that_uses_NODE_ENV production ``` -::: tip -In general, [tasks](/tasks/) are a good way to ensure that the mise environment is always loaded so -this isn't a problem. -::: +::: tip In general, [tasks](/tasks/) are a good way to ensure that the mise environment is always loaded so this isn't a +problem. ::: ### Hooks and shims -The [hooks](/hooks.html) `cd`, `enter`, `exit`, and `watch_files` only trigger with `mise activate`. However `preinstall` and `postinstall` still work with shims because they don't require shell integration. +The [hooks](/hooks.html) `cd`, `enter`, `exit`, and `watch_files` only trigger with `mise activate`. However +`preinstall` and `postinstall` still work with shims because they don't require shell integration. ### `which` -`which` is a command that I personally find great value in. shims effectively "break" `which` and -cause it to show the location of the shim. Of course `mise which` will show the location but I prefer -the "cleanliness" of running `which node` and getting back a real path with a version number inside of it. -e.g: +`which` is a command that I personally find great value in. shims effectively "break" `which` and cause it to show the +location of the shim. Of course `mise which` will show the location but I prefer the "cleanliness" of running +`which node` and getting back a real path with a version number inside of it. e.g: ```sh $ which node @@ -168,17 +153,17 @@ $ which node ## Hook on `cd` -Some version managers modify the behavior of `cd`. That might seem like the ideal method of making a version -manager, it has tons of gaps. It doesn't work if you use `pushd|popd` or other commands that modify PWDโ€”though -some shells have a "chpwd" hook that would. It doesn't run if you modify the `mise.toml` file. +Some version managers modify the behavior of `cd`. That might seem like the ideal method of making a version manager, it +has tons of gaps. It doesn't work if you use `pushd|popd` or other commands that modify PWDโ€”though some shells have a +"chpwd" hook that would. It doesn't run if you modify the `mise.toml` file. -The upside is that it doesn't run as frequently but since mise is written in rust the cost for executing -mise is negligible (~4-5ms). +The upside is that it doesn't run as frequently but since mise is written in rust the cost for executing mise is +negligible (~4-5ms). ## .zshrc/.bashrc files -rc files like `.zshrc` are unusual. It's a script but also runs only for interactive sessions. If you need -to access tools provided by mise inside of an rc file you have 2 options: +rc files like `.zshrc` are unusual. It's a script but also runs only for interactive sessions. If you need to access +tools provided by mise inside of an rc file you have 2 options: ::: code-group @@ -196,23 +181,23 @@ node some_script.js ::: -The only difference I can think of between these would be that using `hook-env` you will need to call -it again if you change directories but with shims that won't be necessary. The shims directory will be -removed by `mise activate` automatically so you won't need to worry about dealing with shims in your PATH. +The only difference I can think of between these would be that using `hook-env` you will need to call it again if you +change directories but with shims that won't be necessary. The shims directory will be removed by `mise activate` +automatically so you won't need to worry about dealing with shims in your PATH. ## Performance -Truthfully, you're probably not going to notice much in the way of performance with any solution here. -However, I would like to document what the tradeoffs are since it's not as simple as "shims are slow". -In asdf they are, but that's because asdf is written in bash. In mise the cost of the shims are negligible. +Truthfully, you're probably not going to notice much in the way of performance with any solution here. However, I would +like to document what the tradeoffs are since it's not as simple as "shims are slow". In asdf they are, but that's +because asdf is written in bash. In mise the cost of the shims are negligible. -First, since mise runs every time the prompt is displayed with `mise activate`, you'll pay a few ms cost -every time the prompt is displayed. Regardless of whether or not you're actively using a mise tool, you'll -pay that penalty every time you run any command. It does have some short-circuiting logic to make it faster -if there are no changes but it doesn't help much unless you have a very complex setup. +First, since mise runs every time the prompt is displayed with `mise activate`, you'll pay a few ms cost every time the +prompt is displayed. Regardless of whether or not you're actively using a mise tool, you'll pay that penalty every time +you run any command. It does have some short-circuiting logic to make it faster if there are no changes but it doesn't +help much unless you have a very complex setup. -shims have basically the same performance profile but run when the shim is called. This makes some situations -better, and some worse. +shims have basically the same performance profile but run when the shim is called. This makes some situations better, +and some worse. If you are calling a shim from within a bash script like this: @@ -222,31 +207,29 @@ for i in {1..500}; do done ``` -You'll pay the mise penalty every time you call it within the loop. However, if you did the same thing -but call a subprocess from within a shim (say, node creating a node subprocess), you will _not_ pay a new -penalty. This is because when a shim is called, mise sets up the environment with PATH for all tools and -those PATH entries will be before the shim directory. +You'll pay the mise penalty every time you call it within the loop. However, if you did the same thing but call a +subprocess from within a shim (say, node creating a node subprocess), you will _not_ pay a new penalty. This is because +when a shim is called, mise sets up the environment with PATH for all tools and those PATH entries will be before the +shim directory. -In other words, which is better in terms of performance just depends on how you're calling mise. Really -though I think most users won't notice a 5ms lag on their terminal so I suggest `mise activate`. +In other words, which is better in terms of performance just depends on how you're calling mise. Really though I think +most users won't notice a 5ms lag on their terminal so I suggest `mise activate`. ## Neither shims nor PATH -[I don't actually use either of these methods](https://mise.jdx.dev/how-i-use-mise.html). There are many -ways to load the mise environment that don't require either, chiefly: `mise x|exec` and `mise r|run`. +[I don't actually use either of these methods](https://mise.jdx.dev/how-i-use-mise.html). There are many ways to load +the mise environment that don't require either, chiefly: `mise x|exec` and `mise r|run`. -These will both load all of the tools and env vars before executing something. I find this to be -ideal because I don't need to modify my shell rc file at all and my environment is always loaded -explicitly. I find this a "clean" way of working. +These will both load all of the tools and env vars before executing something. I find this to be ideal because I don't +need to modify my shell rc file at all and my environment is always loaded explicitly. I find this a "clean" way of +working. -The obvious downside is that anytime I want to use `mise` I need to prefix it with `mise exec|run`, -though I alias them to `mx|mr`. +The obvious downside is that anytime I want to use `mise` I need to prefix it with `mise exec|run`, though I alias them +to `mx|mr`. -This is what I'd recommend if you're like me and prefer things to be precise over "easy". Or perhaps -if you're just wanting to use mise on a single project because that's what your team uses and prefer -not to use it to manage anything else on your system. IMO using a shell extension for that use-case -would be overkill. +This is what I'd recommend if you're like me and prefer things to be precise over "easy". Or perhaps if you're just +wanting to use mise on a single project because that's what your team uses and prefer not to use it to manage anything +else on your system. IMO using a shell extension for that use-case would be overkill. -Part of the reason for this is I often need to make sure I'm on my development version of mise. If you -work on mise yourself I would recommend working in a similar way and disabling `mise activate` or shims -while you are working on it. +Part of the reason for this is I often need to make sure I'm on my development version of mise. If you work on mise +yourself I would recommend working in a similar way and disabling `mise activate` or shims while you are working on it. diff --git a/docs/directories.md b/docs/directories.md index 497cf68546..9737e2fcd3 100644 --- a/docs/directories.md +++ b/docs/directories.md @@ -2,9 +2,8 @@ The following are the directories that mise uses. -::: tip -If you often find yourself using these directories (as I do), I suggest setting all of them to `~/.mise` for easy access. -::: +::: tip If you often find yourself using these directories (as I do), I suggest setting all of them to `~/.mise` for +easy access. ::: ## `~/.config/mise` @@ -19,10 +18,9 @@ dotfiles repo to share across machines. - Override: `$MISE_CACHE_DIR` - Default: `${XDG_CACHE_HOME:-$HOME/.cache}/mise`, _macOS: `~/Library/Caches/mise`._ -Stores internal cache that mise uses for things like the list of all available versions of a -plugin. Do not share this across machines. You may delete this directory any time mise isn't actively installing something. -Do this with `mise cache clear`. -See [Cache Behavior](/cache-behavior) for more information. +Stores internal cache that mise uses for things like the list of all available versions of a plugin. Do not share this +across machines. You may delete this directory any time mise isn't actively installing something. Do this with +`mise cache clear`. See [Cache Behavior](/cache-behavior) for more information. ## `~/.local/state/mise` @@ -37,23 +35,21 @@ machines. - Override: `$MISE_DATA_DIR` - Default: `${XDG_DATA_HOME:-$HOME/.local/share}/mise` -This is the main directory that mise uses and is where plugins and tools are installed into. -It is nearly identical to `~/.asdf` in asdf, so much so that you may be able to get by -symlinking these together and using asdf and mise simultaneously. (Supporting this isn't a -project goal, however). +This is the main directory that mise uses and is where plugins and tools are installed into. It is nearly identical to +`~/.asdf` in asdf, so much so that you may be able to get by symlinking these together and using asdf and mise +simultaneously. (Supporting this isn't a project goal, however). This directory _could_ be shared across machines but only if they run the same OS/arch. In general I wouldn't advise doing so. ### `~/.local/share/mise/downloads` -This is where plugins may optionally cache downloaded assets such as tarballs. Use the -`always_keep_downloads` setting to prevent mise from removing files from here. +This is where plugins may optionally cache downloaded assets such as tarballs. Use the `always_keep_downloads` setting +to prevent mise from removing files from here. ### `~/.local/share/mise/plugins` -mise installs plugins to this directory when running `mise plugins install`. If you are working on a -plugin, I suggest +mise installs plugins to this directory when running `mise plugins install`. If you are working on a plugin, I suggest symlinking it manually by running: ```sh @@ -62,12 +58,11 @@ ln -s ~/src/mise-my-tool ~/.local/share/mise/plugins/my-tool ### `~/.local/share/mise/installs` -This is where tools are installed to when running `mise install`. For example, `mise install -node@20.0.0` will install to `~/.local/share/mise/installs/node/20.0.0` +This is where tools are installed to when running `mise install`. For example, `mise install node@20.0.0` will install +to `~/.local/share/mise/installs/node/20.0.0` -This will also create other symlinks to this directory for version prefixes ("20" and "20.15") -and matching aliases ("lts", "latest"). -For example: +This will also create other symlinks to this directory for version prefixes ("20" and "20.15") and matching aliases +("lts", "latest"). For example: ```sh $ tree ~/.local/share/mise/installs/node @@ -79,5 +74,5 @@ latest -> ./20.15.0 ### `~/.local/share/mise/shims` -This is where mise places shims. Generally these are used for IDE integration or if `mise activate` -does not work for some reason. +This is where mise places shims. Generally these are used for IDE integration or if `mise activate` does not work for +some reason. diff --git a/docs/direnv.md b/docs/direnv.md index 1aef158193..7d77b25bec 100644 --- a/docs/direnv.md +++ b/docs/direnv.md @@ -1,43 +1,31 @@ # direnv -[direnv](https://direnv.net) and mise both manage environment variables based on directory. Because -they both analyze -the current environment variables before and after their respective "hook" commands are run, they -can sometimes conflict with each other. - -::: warning -The official stance is you should not use direnv with mise. Issues arising -from incompatibilities are not considered bugs. If mise has feature gaps -that direnv resolves, please open an issue so we can close those gaps. -While that's the official stance, the reality is mise and direnv usually -will work together just fine despite this. It's only more advanced use-cases -where problems arise. -::: - -If you have an issue, it's likely to do with the ordering of PATH. This means it would -really only be a problem if you were trying to manage the same tool with direnv and mise. For -example, -you may use `layout python` in an `.envrc` but also be maintaining a `.tool-versions` file with -python -in it as well. - -A more typical usage of direnv would be to set some arbitrary environment variables, or add -unrelated -binaries to PATH. In these cases, mise will not interfere with direnv. +[direnv](https://direnv.net) and mise both manage environment variables based on directory. Because they both analyze +the current environment variables before and after their respective "hook" commands are run, they can sometimes conflict +with each other. + +::: warning The official stance is you should not use direnv with mise. Issues arising from incompatibilities are not +considered bugs. If mise has feature gaps that direnv resolves, please open an issue so we can close those gaps. While +that's the official stance, the reality is mise and direnv usually will work together just fine despite this. It's only +more advanced use-cases where problems arise. ::: + +If you have an issue, it's likely to do with the ordering of PATH. This means it would really only be a problem if you +were trying to manage the same tool with direnv and mise. For example, you may use `layout python` in an `.envrc` but +also be maintaining a `.tool-versions` file with python in it as well. + +A more typical usage of direnv would be to set some arbitrary environment variables, or add unrelated binaries to PATH. +In these cases, mise will not interfere with direnv. ## mise inside of direnv (`use mise` in `.envrc`) -::: warning -`use mise` is deprecated and no longer supported. If `mise activate` does -not fit your use-case please post an issue. -::: +::: warning `use mise` is deprecated and no longer supported. If `mise activate` does not fit your use-case please post +an issue. ::: -If you do encounter issues with `mise activate`, or just want to use direnv in an alternate way, -this is a simpler setup that's less likely to cause issuesโ€”at the cost of functionality. +If you do encounter issues with `mise activate`, or just want to use direnv in an alternate way, this is a simpler setup +that's less likely to cause issuesโ€”at the cost of functionality. -This may be required if you want to use direnv's `layout python` with mise. Otherwise there are -situations where mise will override direnv's PATH. `use mise` ensures that direnv always has -control. +This may be required if you want to use direnv's `layout python` with mise. Otherwise there are situations where mise +will override direnv's PATH. `use mise` ensures that direnv always has control. To do this, first use `mise` to build a `use_mise` function that you can use in `.envrc` files: @@ -51,32 +39,27 @@ Now in your `.envrc` file add the following: use mise ``` -direnv will now call mise to export its environment variables. You'll need to make sure to -add `use_mise` -to all projects that use mise (or use direnv's `source_up` to load it from a subdirectory). You can -also add `use mise` to `~/.config/direnv/direnvrc`. +direnv will now call mise to export its environment variables. You'll need to make sure to add `use_mise` to all +projects that use mise (or use direnv's `source_up` to load it from a subdirectory). You can also add `use mise` to +`~/.config/direnv/direnvrc`. -Note that in this method direnv typically won't know to refresh `.tool-versions` files -unless they're at the same level as a `.envrc` file. You'll likely always want to have -a `.envrc` file next to your `.tool-versions` for this reason. To make this a little -easier to manage, I encourage _not_ actually using `.tool-versions` at all, and instead -setting environment variables entirely in `.envrc`: +Note that in this method direnv typically won't know to refresh `.tool-versions` files unless they're at the same level +as a `.envrc` file. You'll likely always want to have a `.envrc` file next to your `.tool-versions` for this reason. To +make this a little easier to manage, I encourage _not_ actually using `.tool-versions` at all, and instead setting +environment variables entirely in `.envrc`: ```sh export MISE_NODE_VERSION=20.0.0 export MISE_PYTHON_VERSION=3.11 ``` -Of course if you use `mise activate`, then these steps won't have been necessary and you can use -mise -as if direnv was not used. +Of course if you use `mise activate`, then these steps won't have been necessary and you can use mise as if direnv was +not used. If you continue to struggle, you can also try using the [shims method](dev-tools/shims.md). ### Do you need direnv? -While making mise compatible with direnv is, and will always be a major goal of this project, I also -want mise to be capable of replacing direnv if needed. This is why mise includes support for -managing -env vars and [virtualenv](lang/python.md#automatic-virtualenv-activation) -for python using `mise.toml`. +While making mise compatible with direnv is, and will always be a major goal of this project, I also want mise to be +capable of replacing direnv if needed. This is why mise includes support for managing env vars and +[virtualenv](lang/python.md#automatic-virtualenv-activation) for python using `mise.toml`. diff --git a/docs/environments/index.md b/docs/environments/index.md index 40ad405611..c89cc04c9b 100644 --- a/docs/environments/index.md +++ b/docs/environments/index.md @@ -1,11 +1,9 @@ # Environments -> Like [direnv](https://github.com/direnv/direnv) it -> manages _environment variables_ for -> different project directories. +> Like [direnv](https://github.com/direnv/direnv) it manages _environment variables_ for different project directories. -Use mise to specify environment variables used for different projects. Create a `mise.toml` file -in the root of your project directory: +Use mise to specify environment variables used for different projects. Create a `mise.toml` file in the root of your +project directory: ```toml [env] @@ -33,9 +31,9 @@ $ mise unset NODE_ENV ## Lazy eval -Environment variables typically are resolved before toolsโ€”that way you can configure tool installation -with environment variables. However, sometimes you want to access environment variables produced by -tools. To do that, turn the value into a map with `tools = true`: +Environment variables typically are resolved before toolsโ€”that way you can configure tool installation with environment +variables. However, sometimes you want to access environment variables produced by tools. To do that, turn the value +into a map with `tools = true`: ```toml [env] @@ -55,29 +53,25 @@ _.file = { path = [".env.json"], redact = true } ## `env._` directives -`env._.*` define special behavior for setting environment variables. (e.g.: reading env vars -from a file). Since nested environment variables do not make sense, -we make use of this fact by creating a key named "\_" which is a -TOML table for the configuration of these directives. +`env._.*` define special behavior for setting environment variables. (e.g.: reading env vars from a file). Since nested +environment variables do not make sense, we make use of this fact by creating a key named "\_" which is a TOML table for +the configuration of these directives. ### `env._.file` -In `mise.toml`: `env._.file` can be used to specify a [dotenv](https://dotenv.org) file to load. -It can be a string or array and uses relative or absolute paths: +In `mise.toml`: `env._.file` can be used to specify a [dotenv](https://dotenv.org) file to load. It can be a string or +array and uses relative or absolute paths: ```toml [env] _.file = '.env' ``` -::: info -This uses [dotenvy](https://crates.io/crates/dotenvy) under the hood. If you have problems with -the way `env._.file` works, you will likely need to post an issue there, -not to mise since there is not much mise can do about the way that crate works. -::: +::: info This uses [dotenvy](https://crates.io/crates/dotenvy) under the hood. If you have problems with the way +`env._.file` works, you will likely need to post an issue there, not to mise since there is not much mise can do about +the way that crate works. ::: -Or set [`MISE_ENV_FILE=.env`](/configuration#mise-env-file) to automatically load dotenv files in any -directory. +Or set [`MISE_ENV_FILE=.env`](/configuration#mise-env-file) to automatically load dotenv files in any directory. You can also use json or yaml files: @@ -104,7 +98,11 @@ _.path = [ ] ``` -Adding a relative path like `tools/bin` or `./tools/bin` is similar to adding a path rooted at `{{config_root}}`, but behaves differently if your config file is nested in a subdirectory like `/path/to/project/.config/mise/config.toml`. Including `tools/bin` will add the path `/path/to/project/.config/mise/tools/bin`, whereas including `{{config_root}}/tools/bin` will add the path `/path/to/project/tools/bin`. +Adding a relative path like `tools/bin` or `./tools/bin` is similar to adding a path rooted at +`{{config_root}}`, but behaves differently if your config file is nested in a subdirectory like +`/path/to/project/.config/mise/config.toml`. Including `tools/bin` will add the path +`/path/to/project/.config/mise/tools/bin`, whereas including `{{config_root}}/tools/bin` will add the +path `/path/to/project/tools/bin`. ### `env._.source` @@ -115,25 +113,24 @@ Source an external bash script and pull exported environment variables out of it _.source = "./script.sh" ``` -::: info -This **must** be a script that runs in bash as if it were executed like this: +::: info This **must** be a script that runs in bash as if it were executed like this: ```sh source ./script.sh ``` -The shebang will be **ignored**. See [#1448](https://github.com/jdx/mise/issues/1448) -for a potential alternative that would work with binaries or other script languages. -::: +The shebang will be **ignored**. See [#1448](https://github.com/jdx/mise/issues/1448) for a potential alternative that +would work with binaries or other script languages. ::: ## Plugin-provided `env._` Directives -Plugins can provide their own `env._` directives. See [mise-env-sample](https://github.com/jdx/mise-env-sample) for an example of one. +Plugins can provide their own `env._` directives. See [mise-env-sample](https://github.com/jdx/mise-env-sample) for an +example of one. ## Multiple `env._` Directives -It may be necessary to use multiple `env._` directives, however TOML fails with this syntax -because it has 2 identical keys in a table: +It may be necessary to use multiple `env._` directives, however TOML fails with this syntax because it has 2 identical +keys in a table: ```toml [env] diff --git a/docs/environments/secrets.md b/docs/environments/secrets.md index ddace64589..67b3071325 100644 --- a/docs/environments/secrets.md +++ b/docs/environments/secrets.md @@ -1,8 +1,8 @@ # Secrets -Because env vars in mise.toml can store sensitive information, mise has built-in support for reading -encrypted secrets from files. Currently, this is done with a [sops](https://getsops.io) implementation -however other secret backends could be added in the future. +Because env vars in mise.toml can store sensitive information, mise has built-in support for reading encrypted secrets +from files. Currently, this is done with a [sops](https://getsops.io) implementation however other secret backends could +be added in the future. Secrets are `.env.(json|yaml|toml)` files with a simple structure, for example: @@ -24,21 +24,19 @@ mise will automatically use a secret backend like sops if the file is encrypted. ## sops -mise uses the rust [rops](https://github.com/gibbz00/rops) library to interact with [sops](https://getsops.io) files. -If you encrypt a sops file, mise will automatically decrypt it when reading the file. sops files can -be in json, yaml, or toml formatโ€”however if you want to use toml you'll need to use the rops cli instead -of sops. Otherwise, either sops or rops will work fine. +mise uses the rust [rops](https://github.com/gibbz00/rops) library to interact with [sops](https://getsops.io) files. If +you encrypt a sops file, mise will automatically decrypt it when reading the file. sops files can be in json, yaml, or +toml formatโ€”however if you want to use toml you'll need to use the rops cli instead of sops. Otherwise, either sops or +rops will work fine. -::: info -Currently age is the only sops encryption method supported. -::: +::: info Currently age is the only sops encryption method supported. ::: -In order to encrypt a file with sops, you'll first need to install it (`mise use -g sops`). You'll -also need to install [age](https://github.com/FiloSottile/age) (`mise use -g age`) to generate a keypair for sops to use -if you have not already done so. +In order to encrypt a file with sops, you'll first need to install it (`mise use -g sops`). You'll also need to install +[age](https://github.com/FiloSottile/age) (`mise use -g age`) to generate a keypair for sops to use if you have not +already done so. -To generate a keypair with age run the following and note the public key that is output to use -in the next command to `sops`: +To generate a keypair with age run the following and note the public key that is output to use in the next command to +`sops`: ```sh $ age-keygen -o ~/.config/mise/age.txt @@ -51,13 +49,11 @@ Assuming we have a `.env.json` file like at the top of this doc, we can now encr sops encrypt -i --age "" .env.json ``` -::: tip -The `-i` here overwrites the file with an encrypted version. This encrypted version is safe to commit -into your repo as without the private key (`~/.config/mise/age.txt` in this case) the file is useless. +::: tip The `-i` here overwrites the file with an encrypted version. This encrypted version is safe to commit into your +repo as without the private key (`~/.config/mise/age.txt` in this case) the file is useless. You can later decrypt the file with `sops decrypt -i .env.json` or edit it in EDITOR with `sops edit .env.json`. -However, you'll first need to set SOPS_AGE_KEY_FILE to `~/.config/mise/age.txt` to decrypt the file. -::: +However, you'll first need to set SOPS_AGE_KEY_FILE to `~/.config/mise/age.txt` to decrypt the file. ::: Lastly, we need to add the file to our mise config which can be done with `mise set _.file=.env.json`. diff --git a/docs/external-resources.md b/docs/external-resources.md index b30a9d9091..7a94419f46 100644 --- a/docs/external-resources.md +++ b/docs/external-resources.md @@ -3,9 +3,12 @@ Links to articles, videos, and other resources that are relevant to mise. - 2024-11-20 - Migrating from nvm to mise - -- 2024-06-27 - Managing Development Tool Versions with mise - -- 2024-06-09 - Replacing pyenv, nvm, direnv with Mise - +- 2024-06-27 - Managing Development Tool Versions with mise - + +- 2024-06-09 - Replacing pyenv, nvm, direnv with Mise - + - 2024-04-07 - Lalaluka stream: Grroxy, Cook, and jdx/mise - -- 2024-01-14 - Manage all your runtime versions with one tool (asdf, mise) - +- 2024-01-14 - Manage all your runtime versions with one tool (asdf, mise) - + - 2023-12-30 - You should be using mise - - 2023-03-04 - Beginner's Guide to rtx (mise) - diff --git a/docs/faq.md b/docs/faq.md index b5e6cc6a7b..1c69f6393d 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -2,114 +2,98 @@ ## I don't want to put a `mise.toml`/`.tool-versions` file into my project since git shows it as an untracked file -Use [`mise.local.toml`](https://mise.jdx.dev/configuration.html#mise-toml) and put that into your global gitignore file. This file should never be committed. +Use [`mise.local.toml`](https://mise.jdx.dev/configuration.html#mise-toml) and put that into your global gitignore file. +This file should never be committed. If you really want to use a `mise.toml` or `.tool-versions`, here are 3 ways to make git ignore these files: -- Adding `mise.toml` to project's `.git/info/exclude`. This file is local to your project so - there is no need to commit it. -- Adding `mise.toml` to project's `.gitignore` file. This has the downside that you need to - commit the change to the ignore file. -- Adding `mise.toml` to global gitignore (`core.excludesFile`). This will cause git to - ignore `mise.toml` files in all projects. You can explicitly add one to a project if needed - with `git add --force mise.toml`. +- Adding `mise.toml` to project's `.git/info/exclude`. This file is local to your project so there is no need to commit + it. +- Adding `mise.toml` to project's `.gitignore` file. This has the downside that you need to commit the change to the + ignore file. +- Adding `mise.toml` to global gitignore (`core.excludesFile`). This will cause git to ignore `mise.toml` files in all + projects. You can explicitly add one to a project if needed with `git add --force mise.toml`. ## What is the difference between "nodejs" and "node" (or "golang" and "go")? -These are aliased. For example, `mise use nodejs@14.0` is the same as `mise install node@14.0`. This -means it is not possible to have these be different plugins. +These are aliased. For example, `mise use nodejs@14.0` is the same as `mise install node@14.0`. This means it is not +possible to have these be different plugins. -This is for convenience so you don't need to remember which one is the "official" name. However if -something with the aliasing is acting up, submit a ticket or just stick to using "node" and "go". -Under the hood, when mise reads a config file or takes CLI input it will swap out "nodejs" and -"golang". +This is for convenience so you don't need to remember which one is the "official" name. However if something with the +aliasing is acting up, submit a ticket or just stick to using "node" and "go". Under the hood, when mise reads a config +file or takes CLI input it will swap out "nodejs" and "golang". -While this change is rolling out, there is some migration code that will move installs/plugins from -the "nodejs" and "golang" directories to the new names. If this runs for you you'll see a message -but it should not run again unless there is some kind of problem. In this case, it's probably -easiest to just -run +While this change is rolling out, there is some migration code that will move installs/plugins from the "nodejs" and +"golang" directories to the new names. If this runs for you you'll see a message but it should not run again unless +there is some kind of problem. In this case, it's probably easiest to just run `rm -rf ~/.local/share/mise/installs/{golang,nodejs} ~/.local/share/mise/plugins/{golang,nodejs}`. Once most users have migrated over this migration code will be removed. ## What does `mise activate` do? -It registers a shell hook to run `mise hook-env` every time the shell prompt is displayed. -`mise hook-env` checks the current env vars (most importantly `PATH` but there are others like -`GOROOT` or `JAVA_HOME` for some tools) and adds/removes/updates the ones that have changed. +It registers a shell hook to run `mise hook-env` every time the shell prompt is displayed. `mise hook-env` checks the +current env vars (most importantly `PATH` but there are others like `GOROOT` or `JAVA_HOME` for some tools) and +adds/removes/updates the ones that have changed. -For example, if you `cd` into a different directory that has `java 18` instead of `java 17` -specified, just before the next prompt is displayed the shell runs: `eval "$(mise hook-env)"` -which will execute something like this in the current shell session: +For example, if you `cd` into a different directory that has `java 18` instead of `java 17` specified, just before the +next prompt is displayed the shell runs: `eval "$(mise hook-env)"` which will execute something like this in the current +shell session: ```sh export JAVA_HOME=$HOME/.local/share/installs/java/18 export PATH=$HOME/.local/share/installs/java/18/bin:$PATH ``` -In reality updating `PATH` is a bit more complex than that because it also needs to remove java-17, -but you get the idea. - -You may think that is excessive to run `mise hook-env` every time the prompt is displayed -and it should only run on `cd`, however there are plenty of -situations where it needs to run without the directory changing, for example if `.tool-versions` or -`mise.toml` was just edited in the current shell. - -Because it runs on prompt display, if you attempt to use `mise activate` in a -non-interactive session (like a bash script), it will never call `mise hook-env` and in effect will -never modify PATH because it never displays a prompt. For this type of setup, you can either call -`mise hook-env` manually every time you wish to update PATH, or use [shims](/dev-tools/shims.md) -instead (preferred). -Or if you only need to use mise for certain commands, just prefix the commands with -[`mise x --`](./cli/exec). -For example, `mise x -- npm test` or `mise x -- ./my_script.sh`. - -`mise hook-env` will exit early in different situations if no changes have been made. This prevents -adding latency to your shell prompt every time you run a command. You can run `mise hook-env` -yourself -to see what it outputs, however it is likely nothing if you're in a shell that has already been -activated. - -`mise activate` also creates a shell function (in most shells) called `mise`. -This is a trick that makes it possible for `mise shell` -and `mise deactivate` to work without wrapping them in `eval "$(mise shell)"`. +In reality updating `PATH` is a bit more complex than that because it also needs to remove java-17, but you get the +idea. + +You may think that is excessive to run `mise hook-env` every time the prompt is displayed and it should only run on +`cd`, however there are plenty of situations where it needs to run without the directory changing, for example if +`.tool-versions` or `mise.toml` was just edited in the current shell. + +Because it runs on prompt display, if you attempt to use `mise activate` in a non-interactive session (like a bash +script), it will never call `mise hook-env` and in effect will never modify PATH because it never displays a prompt. For +this type of setup, you can either call `mise hook-env` manually every time you wish to update PATH, or use +[shims](/dev-tools/shims.md) instead (preferred). Or if you only need to use mise for certain commands, just prefix the +commands with [`mise x --`](./cli/exec). For example, `mise x -- npm test` or `mise x -- ./my_script.sh`. + +`mise hook-env` will exit early in different situations if no changes have been made. This prevents adding latency to +your shell prompt every time you run a command. You can run `mise hook-env` yourself to see what it outputs, however it +is likely nothing if you're in a shell that has already been activated. + +`mise activate` also creates a shell function (in most shells) called `mise`. This is a trick that makes it possible for +`mise shell` and `mise deactivate` to work without wrapping them in `eval "$(mise shell)"`. ## Windows support? -While mise runs great in WSL, native Windows is also supported, though via the use of shims until -someone adds [powershell](https://github.com/jdx/mise/issues/3451) support. +While mise runs great in WSL, native Windows is also supported, though via the use of shims until someone adds +[powershell](https://github.com/jdx/mise/issues/3451) support. As you'll need to use shims, this means you won't have environment variables from mise.toml unless you run mise via -[`mise x`](/cli/exec) or [`mise run`](/cli/run)โ€”though that's actually how I use mise on my mac so -for me that's my preferred workflow anyway. +[`mise x`](/cli/exec) or [`mise run`](/cli/run)โ€”though that's actually how I use mise on my mac so for me that's my +preferred workflow anyway. ## How do I use mise with http proxies? -Short answer: just set `http_proxy` and `https_proxy` environment variables. These should be -lowercase. +Short answer: just set `http_proxy` and `https_proxy` environment variables. These should be lowercase. -This may not work with all plugins if they are not configured to use these env vars. -If you're having a proxy-related issue installing something specific you should post an issue on the -plugin's repository. +This may not work with all plugins if they are not configured to use these env vars. If you're having a proxy-related +issue installing something specific you should post an issue on the plugin's repository. ## How do the shorthand plugin names map to repositories? e.g.: how does `mise plugin install elixir` know to fetch ? -We maintain [an index](https://github.com/mise-plugins/registry) of shorthands that mise uses as a -base. -This is regularly updated every time that mise has a release. This repository is stored directly -into -the codebase [here](https://github.com/jdx/mise/blob/main/registry.toml). +We maintain [an index](https://github.com/mise-plugins/registry) of shorthands that mise uses as a base. This is +regularly updated every time that mise has a release. This repository is stored directly into the codebase +[here](https://github.com/jdx/mise/blob/main/registry.toml). ## Does "node@20" mean the newest available version of node? -It depends on the command. Normally, for most commands and inside of config files, "node@20" will -point to the latest _installed_ version of node-20.x. You can find this version by running -`mise latest --installed node@20` or by seeing what the `~/.local/share/mise/installs/node/20` -symlink -points to: +It depends on the command. Normally, for most commands and inside of config files, "node@20" will point to the latest +_installed_ version of node-20.x. You can find this version by running `mise latest --installed node@20` or by seeing +what the `~/.local/share/mise/installs/node/20` symlink points to: ```sh $ ls -l ~/.local/share/mise/installs/node/20 @@ -122,8 +106,8 @@ There are some exceptions to this, such as the following: - `mise latest node@20` - `mise upgrade node@20` -These will use the latest _available_ version of node-20.x. This generally makes sense because you -wouldn't want to install a version that is already installed. +These will use the latest _available_ version of node-20.x. This generally makes sense because you wouldn't want to +install a version that is already installed. ## How do I migrate from asdf? @@ -141,36 +125,37 @@ mv ~/.tool-versions ~/.tool-versions.bak cat ~/.tool-versions.bak | tr ' ' '@' | xargs -n2 mise use -g ``` -Once you are comfortable with mise, you can remove the `.tool-versions.bak` file and [uninstall `asdf`](https://asdf-vm.com/manage/core.html#uninstall) +Once you are comfortable with mise, you can remove the `.tool-versions.bak` file and +[uninstall `asdf`](https://asdf-vm.com/manage/core.html#uninstall) ## How compatible is mise with asdf? -mise should be able to read/install any `.tool-versions` file used by asdf. Any asdf plugin -should be usable in mise. The commands in mise are slightly -different, such as `mise install node@20.0.0` vs `asdf install node 20.0.0`โ€”this is done so -multiple tools can be specified at once. However, asdf-style syntax is still supported: (`mise -install node 20.0.0`). This is the case for most commands, though the help for the command may -say that asdf-style syntax is supported. When in doubt, just try asdf syntax and see if it worksโ€”it probably does. +mise should be able to read/install any `.tool-versions` file used by asdf. Any asdf plugin should be usable in mise. +The commands in mise are slightly different, such as `mise install node@20.0.0` vs `asdf install node 20.0.0`โ€”this is +done so multiple tools can be specified at once. However, asdf-style syntax is still supported: +(`mise install node 20.0.0`). This is the case for most commands, though the help for the command may say that +asdf-style syntax is supported. When in doubt, just try asdf syntax and see if it worksโ€”it probably does. -UPDATE (2025-01-01): mise was designed to be compatible with the asdf written in bash (<=0.15). The new asdf written in go (>=0.16) -has commands mise does not support like `asdf set`. `mise set` is an existing command that is completely different than `asdf set`โ€”in mise that sets env vars. +UPDATE (2025-01-01): mise was designed to be compatible with the asdf written in bash (<=0.15). The new asdf written in +go (>=0.16) has commands mise does not support like `asdf set`. `mise set` is an existing command that is completely +different than `asdf set`โ€”in mise that sets env vars. -This isn't important for usability reasons so much as making it so plugins continue to work that -call asdf commands inside of the plugin code. +This isn't important for usability reasons so much as making it so plugins continue to work that call asdf commands +inside of the plugin code. -Using commands like `mise use` may output `.tool-versions` files that are not compatible with asdf, -such as using fuzzy versions. You can set `--pin` or `MISE_PIN=1` to make `mise use` output asdf-compatible versions -in `.tool-versions`. Alternatively, you can have `mise.toml` and `.tool-versions` sitting side-by-side. `mise.toml` tools -will override tools defined in a `.tool-versions` in the same directory. +Using commands like `mise use` may output `.tool-versions` files that are not compatible with asdf, such as using fuzzy +versions. You can set `--pin` or `MISE_PIN=1` to make `mise use` output asdf-compatible versions in `.tool-versions`. +Alternatively, you can have `mise.toml` and `.tool-versions` sitting side-by-side. `mise.toml` tools will override tools +defined in a `.tool-versions` in the same directory. -That said, in general compatibility with asdf is no longer a design goal. It's long been the case -that there is no reason to prefer asdf to mise so users should migrate. While plenty of users have -teams which use both in tandem, issues with such a setup are unlikely to be prioritized. +That said, in general compatibility with asdf is no longer a design goal. It's long been the case that there is no +reason to prefer asdf to mise so users should migrate. While plenty of users have teams which use both in tandem, issues +with such a setup are unlikely to be prioritized. ## How do I disable/force CLI color output? -mise uses [console.rs](https://docs.rs/console/latest/console/fn.colors_enabled.html) which -honors the [clicolors spec](https://bixense.com/clicolors/): +mise uses [console.rs](https://docs.rs/console/latest/console/fn.colors_enabled.html) which honors the +[clicolors spec](https://bixense.com/clicolors/): - `CLICOLOR != 0`: ANSI colors are supported and should be used when the program isnโ€™t piped. - `CLICOLOR == 0`: Donโ€™t output ANSI color escape codes. @@ -178,10 +163,9 @@ honors the [clicolors spec](https://bixense.com/clicolors/): ## Is mise secure? -Providing a secure supply chain is incredibly important. mise already provides a more secure -experience when compared to asdf. Security-oriented evaluations and contributions are welcome. -We also urge users to look after the plugins they use, and urge plugin authors to look after -the users they serve. +Providing a secure supply chain is incredibly important. mise already provides a more secure experience when compared to +asdf. Security-oriented evaluations and contributions are welcome. We also urge users to look after the plugins they +use, and urge plugin authors to look after the users they serve. For more details see [SECURITY.md](https://github.com/jdx/mise/blob/main/SECURITY.md). @@ -189,8 +173,11 @@ For more details see [SECURITY.md](https://github.com/jdx/mise/blob/main/SECURIT usage () is a spec and CLI for defining CLI tools. -Arguments, flags, environment variables, and config files can all be defined in a Usage spec. It can be thought of like OpenAPI (swagger) for CLIs. +Arguments, flags, environment variables, and config files can all be defined in a Usage spec. It can be thought of like +OpenAPI (swagger) for CLIs. -`usage` can be installed with `mise` using `mise use -g usage` and is required to get the autocompetion working. See [autocompletion](/installing-mise.html#autocompletion). +`usage` can be installed with `mise` using `mise use -g usage` and is required to get the autocompetion working. See +[autocompletion](/installing-mise.html#autocompletion). -You can leverage usage in file tasks to get auto-completion working, see [file tasks arguments](/tasks/file-tasks.html#arguments). +You can leverage usage in file tasks to get auto-completion working, see +[file tasks arguments](/tasks/file-tasks.html#arguments). diff --git a/docs/getting-started.md b/docs/getting-started.md index facc568038..001e3f437a 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -1,13 +1,13 @@ # Getting Started -This will show you how to install mise and get started with it. This is a suitable way when using an interactive shell like `bash`, `zsh`, or `fish`. +This will show you how to install mise and get started with it. This is a suitable way when using an interactive shell +like `bash`, `zsh`, or `fish`. ## 1. Install `mise` CLI See [installing mise](/installing-mise) for other ways to install mise (`macport`, `apt`, `yum`, `nix`, etc.). -:::tabs key:installing-mise -== Linux/macOS +:::tabs key:installing-mise == Linux/macOS ```shell curl https://mise.run | sh @@ -21,18 +21,15 @@ You can verify the installation by running: # mise 2024.x.x ``` -- `~/.local/bin` does not need to be in `PATH`. mise will automatically add its own directory to `PATH` - when activated. +- `~/.local/bin` does not need to be in `PATH`. mise will automatically add its own directory to `PATH` when activated. -== Brew -Using [brew](https://brew.sh/) package manager +== Brew Using [brew](https://brew.sh/) package manager ```shell brew install mise ``` -== Windows -::: code-group +== Windows ::: code-group ```shell [winget] winget install jdx.mise @@ -69,23 +66,24 @@ sudo apt install -y mise ::: -`mise` respects [`MISE_DATA_DIR`](/configuration) and [`XDG_DATA_HOME`](/configuration) if you'd like -to change these locations. +`mise` respects [`MISE_DATA_DIR`](/configuration) and [`XDG_DATA_HOME`](/configuration) if you'd like to change these +locations. ## 2. Activate `mise` Now that `mise` is installed, you can optionally activate it or add its [shims](dev-tools/shims.md) to `PATH`. -- [`mise activate`](/cli/activate) method updates your environment variable and `PATH` every time your prompt is run to ensure you use the correct versions. -- [Shims](dev-tools/shims.md) are symlinks to the `mise` binary that intercept commands and load the appropriate environment +- [`mise activate`](/cli/activate) method updates your environment variable and `PATH` every time your prompt is run to + ensure you use the correct versions. +- [Shims](dev-tools/shims.md) are symlinks to the `mise` binary that intercept commands and load the appropriate + environment -::: warning -Shims do not support all the features of `mise activate`.
-See [shims vs path](/dev-tools/shims.html#shims-vs-path) for more info. -::: +::: warning Shims do not support all the features of `mise activate`.
See +[shims vs path](/dev-tools/shims.html#shims-vs-path) for more info. ::: -For interactive shells, `mise activate` is recommended. In non-interactive sessions, like CI/CD, IDEs, and scripts, using `shims` might work best. You can also not use any and call `mise exec/run` directly instead. -See [this guide](dev-tools/shims.md) for more information. +For interactive shells, `mise activate` is recommended. In non-interactive sessions, like CI/CD, IDEs, and scripts, +using `shims` might work best. You can also not use any and call `mise exec/run` directly instead. See +[this guide](dev-tools/shims.md) for more information. :::tabs key:installing-mise @@ -105,12 +103,9 @@ echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc echo '~/.local/bin/mise activate fish | source' >> ~/.config/fish/config.fish ``` -- Make sure you restart your shell session after modifying your rc file in order for it to take - effect. -- Also note that - this uses `~/.local/bin/mise` as the binary location since that's what uses by - default. If you've - installed mise by some other means it may be on `PATH` or somewhere different. +- Make sure you restart your shell session after modifying your rc file in order for it to take effect. +- Also note that this uses `~/.local/bin/mise` as the binary location since that's what uses by + default. If you've installed mise by some other means it may be on `PATH` or somewhere different. == Brew @@ -124,7 +119,8 @@ echo 'eval "$(/opt/homebrew/bin/mise activate bash)"' >> ~/.bashrc echo 'eval "$(/opt/homebrew/bin/mise activate zsh)"' >> ~/.zshrc ``` -- Activation will be handled automatically if you use `fish` shell and installed via `homebrew`. This can be disabled with `set -Ux MISE_FISH_AUTO_ACTIVATE 0`. +- Activation will be handled automatically if you use `fish` shell and installed via `homebrew`. This can be disabled + with `set -Ux MISE_FISH_AUTO_ACTIVATE 0`. - Make sure you restart your shell session after modifying your rc file in order for it to take effect. == Windows @@ -161,11 +157,8 @@ echo 'mise activate fish | source' >> ~/.config/fish/config.fish ## 3. Using `mise` -:::info -Of course, if using mise solely for [environment management](/environments/) -or [running tasks](/tasks/) -this step is not necessary. You can use it to make sure `mise` is correctly setup. -::: +:::info Of course, if using mise solely for [environment management](/environments/) or [running tasks](/tasks/) this +step is not necessary. You can use it to make sure `mise` is correctly setup. ::: As an example, here is how you can install `node` and set it as the global default: @@ -180,10 +173,8 @@ mise exec -- node -v # v22.x.x ``` -:::tip -Use `mise x -- node -v` or set a shell alias in your shell's rc file like `alias x="mise x --"` to -save some keystrokes. -::: +:::tip Use `mise x -- node -v` or set a shell alias in your shell's rc file like `alias x="mise x --"` to save some +keystrokes. ::: If you did activate `mise` or add its shims to `PATH`, then `node` is also available directly! diff --git a/docs/hooks.md b/docs/hooks.md index f87307550b..3b6ea1ce8b 100644 --- a/docs/hooks.md +++ b/docs/hooks.md @@ -1,8 +1,8 @@ # Hooks -You can have mise automatically execute scripts during a `mise activate` session. You cannot use these -without the `mise activate` shell hook installed in your shellโ€”except the `preinstall` and `postinstall` hooks. -The configuration goes into `mise.toml`. +You can have mise automatically execute scripts during a `mise activate` session. You cannot use these without the +`mise activate` shell hook installed in your shellโ€”except the `preinstall` and `postinstall` hooks. The configuration +goes into `mise.toml`. ## CD hook @@ -15,7 +15,8 @@ cd = "echo 'I changed directories'" ## Enter hook -This hook is run when the project is entered. Changing directories while in the project will not trigger this hook again. +This hook is run when the project is entered. Changing directories while in the project will not trigger this hook +again. ```toml [hooks] @@ -53,7 +54,8 @@ script = "cargo fmt" This hook will have the following environment variables set: -- `MISE_WATCH_FILES_MODIFIED`: A colon-separated list of the files that have been modified. Colons are escaped with a backslash. +- `MISE_WATCH_FILES_MODIFIED`: A colon-separated list of the files that have been modified. Colons are escaped with a + backslash. ## Hook execution @@ -61,7 +63,8 @@ Hooks are executed with the following environment variables set: - `MISE_ORIGINAL_CWD`: The directory that the user is in. - `MISE_PROJECT_DIR`: The root directory of the project. -- `MISE_PREVIOUS_DIR`: The directory that the user was in before the directory change (only if a directory change occurred). +- `MISE_PREVIOUS_DIR`: The directory that the user was in before the directory change (only if a directory change + occurred). ## Shell hooks @@ -73,12 +76,10 @@ shell = "bash" script = "source completions.sh" ``` -::: warning -I feel this should be obvious but in case it's not, this isn't going to do any sort of cleanup -when you _leave_ the directory like using `[env]` does in `mise.toml`. You're literally just -executing shell code when you enter the directory which mise has no way to track at all. -I don't think there is a solution to this problem and it's likely the reason direnv has never -implemented something similar. +::: warning I feel this should be obvious but in case it's not, this isn't going to do any sort of cleanup when you +_leave_ the directory like using `[env]` does in `mise.toml`. You're literally just executing shell code when you enter +the directory which mise has no way to track at all. I don't think there is a solution to this problem and it's likely +the reason direnv has never implemented something similar. I think in most situations this is probably fine, though worth keeping in mind. diff --git a/docs/how-i-use-mise.md b/docs/how-i-use-mise.md index d30a0da9a8..b3c7ca3df4 100644 --- a/docs/how-i-use-mise.md +++ b/docs/how-i-use-mise.md @@ -1,41 +1,33 @@ # How I use mise -This is a very different doc than the rest of the site. It's not my -intention to make this valuable to anyone. In fact it may end up being -useful to 0 people. +This is a very different doc than the rest of the site. It's not my intention to make this valuable to anyone. In fact +it may end up being useful to 0 people. -I'm probably the strangest user of mise out there. My use case is the -most atypical for a number of reasons I'll get to. That said, I often -find myself saying to friends "you know the way I use mise..." and thought -it might be useful to actually write down the way I use it in case -anyone is interested. +I'm probably the strangest user of mise out there. My use case is the most atypical for a number of reasons I'll get to. +That said, I often find myself saying to friends "you know the way I use mise..." and thought it might be useful to +actually write down the way I use it in case anyone is interested. -This is an advanced article. I'm not going to take the time to explain -the tools and techniques here. If you're curious, file an issue or ask -me in the Discord. +This is an advanced article. I'm not going to take the time to explain the tools and techniques here. If you're curious, +file an issue or ask me in the Discord. ## My setup -I use a mac with fish shell and am a heavy homebrew user. I've been using -both for over a decade. +I use a mac with fish shell and am a heavy homebrew user. I've been using both for over a decade. -My main editor(s) are JetBrains products (IntelliJ, RustRover, Webstorm). -I also use nvim as a secondary editor (Astronvim with some minimal config). -I probably spend 70% of my time in JetBrains. +My main editor(s) are JetBrains products (IntelliJ, RustRover, Webstorm). I also use nvim as a secondary editor +(Astronvim with some minimal config). I probably spend 70% of my time in JetBrains. -I tend to keep a terminal open (kitty) while working in JetBrains. I do not -often run tests or builds with in the IDE. Not sure why, just never been -in the habit of that. (Because of that these docs and possibly mise support in -IDEs may not be what it should be-it's just not how I work personally). +I tend to keep a terminal open (kitty) while working in JetBrains. I do not often run tests or builds with in the IDE. +Not sure why, just never been in the habit of that. (Because of that these docs and possibly mise support in IDEs may +not be what it should be-it's just not how I work personally). ## `mise activate` -Unlike most mise users, I don't use `mise activate` or -shims at all unless I'm explicitly testing them-and that's rarely the -case. It certainly doesn't go into my `~/.config/fish/config.fish`. +Unlike most mise users, I don't use `mise activate` or shims at all unless I'm explicitly testing them-and that's rarely +the case. It certainly doesn't go into my `~/.config/fish/config.fish`. -Because I work on mise itself, I often need to rebuild it and run the code from my repo. For this, I have the following bash shim located in -`~/bin/@mise`: +Because I work on mise itself, I often need to rebuild it and run the code from my repo. For this, I have the following +bash shim located in `~/bin/@mise`: ```fish #!/usr/bin/env bash @@ -44,12 +36,10 @@ set -euo pipefail exec cargo run -q --all-features --manifest-path ~/src/mise/Cargo.toml -- "$@" ``` -:::info -The "@" prefix I use for things that will perform a rebuild-i.e.: they're slow. -::: +:::info The "@" prefix I use for things that will perform a rebuild-i.e.: they're slow. ::: -This way I can easily test mise in any directory with `@mise`. I probably -run this more often than without just out of habit. For example, if I want to test `mise activate` in zsh: +This way I can easily test mise in any directory with `@mise`. I probably run this more often than without just out of +habit. For example, if I want to test `mise activate` in zsh: ```sh zsh @@ -58,52 +48,38 @@ eval "$(@mise activate zsh)" ## Minimal tools -Might be surprising to folks but I don't use too many mise plugins. Well -I have a lot in my config, but I don't actually use them. They're for -testing. +Might be surprising to folks but I don't use too many mise plugins. Well I have a lot in my config, but I don't actually +use them. They're for testing. -I tend to basically just use core plugins. I like mise for managing -things where I really care about the major version (like node). If it's -something like `shfmt` or `jq` I don't really care about the version. -I just want the latest and for me, I find `brew` to be better suited to -that purpose. +I tend to basically just use core plugins. I like mise for managing things where I really care about the major version +(like node). If it's something like `shfmt` or `jq` I don't really care about the version. I just want the latest and +for me, I find `brew` to be better suited to that purpose. -I recognize that some people really like locking down their versions -across a team to keep things consistent. I think that's great too. -Part of this is that I'm currently at Amazon where the tooling story -is complicated let's just say-not in a bad way, just one where -integrating mise into the setup isn't as straightforward as a smaller -company would be. +I recognize that some people really like locking down their versions across a team to keep things consistent. I think +that's great too. Part of this is that I'm currently at Amazon where the tooling story is complicated let's just say-not +in a bad way, just one where integrating mise into the setup isn't as straightforward as a smaller company would be. -Outside of Amazon I have a handful of open source projects, mostly -mise-related and mostly fairly simple. Also mostly rust where I don't -use mise anyways. +Outside of Amazon I have a handful of open source projects, mostly mise-related and mostly fairly simple. Also mostly +rust where I don't use mise anyways. -The one big exception here is node which I quite like mise for. I assume -others do to because it's by far the most popular language. You'd -probably guess that since it's my example in nearly all of the docs. +The one big exception here is node which I quite like mise for. I assume others do to because it's by far the most +popular language. You'd probably guess that since it's my example in nearly all of the docs. -That said, part of the reason for doing that in the docs is that it's 4 -characters and everyone knows what it is. +That said, part of the reason for doing that in the docs is that it's 4 characters and everyone knows what it is. ## `.mise.local.toml` -I'm a heavy user of this concept. I rarely like to actually commit `mise.toml` -files into projects. I tend to see my mise config as my personal config that -I use within other projects that I don't particularly want to share with others. +I'm a heavy user of this concept. I rarely like to actually commit `mise.toml` files into projects. I tend to see my +mise config as my personal config that I use within other projects that I don't particularly want to share with others. -Of course, this goes into my global gitconfig so I can easily add this to -shared projects without submitting a PR. +Of course, this goes into my global gitconfig so I can easily add this to shared projects without submitting a PR. -One day when tasks is out of experimental, I may do this a lot less since I -think tasks are one thing I really want to share. For me, the `[tools]` -section is just so easy to write I don't mind doing it and don't like -imposing the way that **I** setup my machine on others. +One day when tasks is out of experimental, I may do this a lot less since I think tasks are one thing I really want to +share. For me, the `[tools]` section is just so easy to write I don't mind doing it and don't like imposing the way that +**I** setup my machine on others. -There is a social aspect of this as well that I'm conscious of. I'm -the author of `mise`. To me it's a little self-serving to go into a project -and add a config for my own project. I'd love if _someone else_ did that -instead. +There is a social aspect of this as well that I'm conscious of. I'm the author of `mise`. To me it's a little +self-serving to go into a project and add a config for my own project. I'd love if _someone else_ did that instead. ## `~/.mise` @@ -116,7 +92,5 @@ ln -s ~/.mise ~/.local/state/mise ln -s ~/.mise/cache ~/.cache/mise ``` -It is good that mise generally follows XDG spec, but for tools that I interact -with a lot I like to put them at the top level like this. Obviously, -mise doesn't mind if all of these point to the same place or else it would -not work for me. +It is good that mise generally follows XDG spec, but for tools that I interact with a lot I like to put them at the top +level like this. Obviously, mise doesn't mind if all of these point to the same place or else it would not work for me. diff --git a/docs/ide-integration.md b/docs/ide-integration.md index 9dcde7e9fc..52089ee9e5 100644 --- a/docs/ide-integration.md +++ b/docs/ide-integration.md @@ -2,24 +2,36 @@ Code editors and IDEs work differently than interactive shells. -Usually, they will either inherit the environment from your current shell (this is the case if you start it from a terminal like `nvim .` or `code .`) or will have [their own way](https://github.com/microsoft/vscode-docs/blob/906acccd6180d8425577f8297ed29e221ad3daca/docs/supporting/faq.md?plain=1#L238) to set up the environment. +Usually, they will either inherit the environment from your current shell (this is the case if you start it from a +terminal like `nvim .` or `code .`) or will have +[their own way](https://github.com/microsoft/vscode-docs/blob/906acccd6180d8425577f8297ed29e221ad3daca/docs/supporting/faq.md?plain=1#L238) +to set up the environment. -Once you have launched the IDE, it won't reload the environment variables or the `PATH` provided by `mise` if you update your mise configuration files. Therefore, we cannot rely on the default `mise activate` method to automatically set up the editor. +Once you have launched the IDE, it won't reload the environment variables or the `PATH` provided by `mise` if you update +your mise configuration files. Therefore, we cannot rely on the default `mise activate` method to automatically set up +the editor. There are a few ways to make `mise` work with your editor: -- Some editors or IDE plugins have direct support for `mise` and can let you select the tools/sdk path from the IDE settings. This will let you access to the tool binaries but won't load the environment variables. -- Most editors (and language plugins) will look for tools on the `PATH` and run them in the context of your project. Therefore, adding the `mise` shims to the `PATH` might be enough (see [below](#adding-shims-to-path-default-shell)). This will run the tool provided by mise and load the environment variables. -- In other cases, you may need to manually indicate the path to the tools provided by `mise` in the IDE settings. This can be done by using [`mise which `](./cli/which.md) or [`mise where`](./cli/where). You can also provide the path to the tool shim (e.g. `~/.local/share/mise/shims/node`) if the plugin supports it as this will also load the environment variables when the tool is run. -- Finally, some custom plugins have been developed to work with `mise`. You can find them in the [IDE Plugins](#ide-plugins) section. +- Some editors or IDE plugins have direct support for `mise` and can let you select the tools/sdk path from the IDE + settings. This will let you access to the tool binaries but won't load the environment variables. +- Most editors (and language plugins) will look for tools on the `PATH` and run them in the context of your project. + Therefore, adding the `mise` shims to the `PATH` might be enough (see [below](#adding-shims-to-path-default-shell)). + This will run the tool provided by mise and load the environment variables. +- In other cases, you may need to manually indicate the path to the tools provided by `mise` in the IDE settings. This + can be done by using [`mise which `](./cli/which.md) or [`mise where`](./cli/where). You can also provide the + path to the tool shim (e.g. `~/.local/share/mise/shims/node`) if the plugin supports it as this will also load the + environment variables when the tool is run. +- Finally, some custom plugins have been developed to work with `mise`. You can find them in the + [IDE Plugins](#ide-plugins) section. ## Adding shims to PATH in your default shell profile {#adding-shims-to-path-default-shell} -IDEs work better with [shims](./dev-tools/shims) than they do environment variable modifications. The simplest way is -to add the mise shim directory to `PATH`. +IDEs work better with [shims](./dev-tools/shims) than they do environment variable modifications. The simplest way is to +add the mise shim directory to `PATH`. -For IntelliJ and VSCodeโ€”and likely others, you can modify your default shell's profile -script. Your default shell can be found with: +For IntelliJ and VSCodeโ€”and likely others, you can modify your default shell's profile script. Your default shell can be +found with: ::: code-group @@ -33,8 +45,8 @@ getent passwd $USER | cut -d: -f7 ::: -You can change your default shell with `chsh -s /path/to/shell` but you may need -to first add it to `/etc/shells`. Once you know the right one, modify the appropriate file: +You can change your default shell with `chsh -s /path/to/shell` but you may need to first add it to `/etc/shells`. Once +you know the right one, modify the appropriate file: ::: code-group @@ -59,22 +71,20 @@ end ::: -This assumes that `mise` is on `PATH`. If it is not, you'll need to use the absolute path ( -e.g.: `eval "$($HOME/.local/bin/mise activate zsh --shims)"`). +This assumes that `mise` is on `PATH`. If it is not, you'll need to use the absolute path ( e.g.: +`eval "$($HOME/.local/bin/mise activate zsh --shims)"`). Here is an example showing that VSCode will use `node` provided by `mise`: -::: tabs -=== VSCode +::: tabs === VSCode [![vscode using shims](./shims-vscode.png)](./shims-vscode.png) -=== IntelliJ -[![intellij using shims](./shims-intellij.png)](./shims-intellij.png) -::: +=== IntelliJ [![intellij using shims](./shims-intellij.png)](./shims-intellij.png) ::: -As mentioned above, using `shims` doesn't work with all mise features. For example, arbitrary [env vars](./environments/) in `[env]` will -only be set if a shim is executed. For this we need tighter integration with the IDE and/or a custom plugin. +As mentioned above, using `shims` doesn't work with all mise features. For example, arbitrary +[env vars](./environments/) in `[env]` will only be set if a shim is executed. For this we need tighter integration with +the IDE and/or a custom plugin. ## IDE Plugins @@ -84,9 +94,9 @@ Here are some community plugins that have been developed to work with `mise`: - IntelliJ: [intellij-mise](https://github.com/134130/intellij-mise) - VSCode: [mise-vscode](https://github.com/hverlin/mise-vscode) -If you want to build a custom plugin for your editor, have a look at the existing plugins or take a look at existing direnv extensions and see if you can modify it to -work for `mise`.`direnv` and `mise` work similarly and there should be a direnv extension that can be used as a starting -point. +If you want to build a custom plugin for your editor, have a look at the existing plugins or take a look at existing +direnv extensions and see if you can modify it to work for `mise`.`direnv` and `mise` work similarly and there should be +a direnv extension that can be used as a starting point. ## Vim @@ -117,7 +127,8 @@ vim.env.PATH = vim.env.HOME .. "/.local/share/mise/shims:" .. vim.env.PATH -> A GNU Emacs library which uses the mise tool to determine per-directory/project environment variables and then set those environment variables on a per-buffer basis. +> A GNU Emacs library which uses the mise tool to determine per-directory/project environment variables and then set +> those environment variables on a per-buffer basis. ```lisp (require 'mise) @@ -130,19 +141,20 @@ vim.env.PATH = vim.env.HOME .. "/.local/share/mise/shims:" .. vim.env.PATH -This plugin can automatically configure the IDE to use the tools provided by mise. It has also some support for running mise tasks and loading environment variables in the run configurations. +This plugin can automatically configure the IDE to use the tools provided by mise. It has also some support for running +mise tasks and loading environment variables in the run configurations. ### Direct SDK selection -Some JetBrains IDEs (or language plugins) have direct support for `mise`. This allows you to select the SDK version from the IDE settings. -Example for Java: +Some JetBrains IDEs (or language plugins) have direct support for `mise`. This allows you to select the SDK version from +the IDE settings. Example for Java: ![SDK settings](./intellij-sdk-selection.png) ### SDK selection using asdf layout -Some plugins cannot find SDK installed by `mise` yet but might have support for asdf. -In that case, a workaround is to symlink the mise tool directory which has same layout as asdf: +Some plugins cannot find SDK installed by `mise` yet but might have support for asdf. In that case, a workaround is to +symlink the mise tool directory which has same layout as asdf: ```sh ln -s ~/.local/share/mise ~/.asdf @@ -160,7 +172,8 @@ Or in the case of node (possibly other languages), it's under "Languages & Frame ### VSCode Plugin -There is a [VSCode plugin](https://marketplace.visualstudio.com/items?itemName=hverlin.mise-vscode) which can configure other extensions for you, without having to modify your shell profile to add the shims to `PATH`. +There is a [VSCode plugin](https://marketplace.visualstudio.com/items?itemName=hverlin.mise-vscode) which can configure +other extensions for you, without having to modify your shell profile to add the shims to `PATH`. In addition, it provides additional features such as: @@ -174,8 +187,7 @@ In addition, it provides additional features such as: ### Use [`mise exec`](./cli/exec) in launch Configuration -While modifying your default shell profile is likely the easiest solution, you can also set -the tools in `launch.json`: +While modifying your default shell profile is likely the easiest solution, you can also set the tools in `launch.json`: ::: details mise exec launch.json example @@ -204,11 +216,10 @@ the tools in `launch.json`: ## Xcode -Xcode projects can run system commands from script build phases and schemes. Since Xcode sandboxes -the execution of the script using the tool `/usr/bin/sandbox-exec`, don't expect Mise and the -automatically-activated tools to work out of the box. First, you'll need to -add `$(SRCROOT)/mise.toml` to the list of **Input files**. This is necessary for Xcode to allow -reads to that file. Then, you can use `mise activate` to activate the tools you need: +Xcode projects can run system commands from script build phases and schemes. Since Xcode sandboxes the execution of the +script using the tool `/usr/bin/sandbox-exec`, don't expect Mise and the automatically-activated tools to work out of +the box. First, you'll need to add `$(SRCROOT)/mise.toml` to the list of **Input files**. This is necessary for Xcode to +allow reads to that file. Then, you can use `mise activate` to activate the tools you need: ```bash # -C ensures that Mise loads the configuration from the Mise configuration @@ -220,13 +231,9 @@ swiftlint ## [YOUR IDE HERE] -I am not a heavy IDE user. I use JetBrains products but I don't actually -like to execute code directly inside of them often so I don't have much -personal advice to offer for IDEs generally. That said, people often -ask about how to get their IDE to work with mise so if you've done this -for your IDE, please consider sending a PR to this page with some -instructions (however rough they are, starting somewhere is better than -nothing). +I am not a heavy IDE user. I use JetBrains products but I don't actually like to execute code directly inside of them +often so I don't have much personal advice to offer for IDEs generally. That said, people often ask about how to get +their IDE to work with mise so if you've done this for your IDE, please consider sending a PR to this page with some +instructions (however rough they are, starting somewhere is better than nothing). -Also if you've found a setup that you prefer to what is listed here consider -adding it as a suggestion. +Also if you've found a setup that you prefer to what is listed here consider adding it as a suggestion. diff --git a/docs/installing-mise.md b/docs/installing-mise.md index acb4b4813a..f44f540d55 100644 --- a/docs/installing-mise.md +++ b/docs/installing-mise.md @@ -8,9 +8,8 @@ This page lists various ways to install `mise` on your system. ### -Note that it isn't necessary for `mise` to be on `PATH`. If you run the activate script in your -shell's rc -file, mise will automatically add itself to `PATH`. +Note that it isn't necessary for `mise` to be on `PATH`. If you run the activate script in your shell's rc file, mise +will automatically add itself to `PATH`. ```sh curl https://mise.run | sh @@ -35,11 +34,9 @@ curl https://mise.jdx.dev/install.sh.sig | gpg --decrypt > install.sh sh ./install.sh ``` -::: tip -As long as you don't change the version with `MISE_VERSION`, the install script will be pinned to whatever the latest -version was when it was downloaded with checksums inside the file. This makes downloading the file and putting it into -a project a great way to ensure that anyone installing with that script fetches the exact same mise bin. -::: +::: tip As long as you don't change the version with `MISE_VERSION`, the install script will be pinned to whatever the +latest version was when it was downloaded with checksums inside the file. This makes downloading the file and putting it +into a project a great way to ensure that anyone installing with that script fetches the exact same mise bin. ::: or if you're allergic to `| sh`: @@ -92,8 +89,8 @@ For Alpine Linux: apk add mise ``` -_mise lives in -the [community repository](https://gitlab.alpinelinux.org/alpine/aports/-/blob/master/community/mise/APKBUILD)._ +_mise lives in the +[community repository](https://gitlab.alpinelinux.org/alpine/aports/-/blob/master/community/mise/APKBUILD)._ ### apt @@ -176,8 +173,8 @@ brew install mise ### npm -mise is available on npm as a precompiled binary. This isn't a Node.js packageโ€”just distributed -via npm. This is useful for JS projects that want to setup mise via `package.json` or `npx`. +mise is available on npm as a precompiled binary. This isn't a Node.js packageโ€”just distributed via npm. This is useful +for JS projects that want to setup mise via `package.json` or `npx`. ```sh npm install -g @jdxcode/mise @@ -212,8 +209,7 @@ For the Nix package manager, at release 23.05 or later: nix-env -iA mise ``` -You can also import the package directly using -`mise-flake.packages.${system}.mise`. It supports all default Nix +You can also import the package directly using `mise-flake.packages.${system}.mise`. It supports all default Nix systems. ### yum @@ -226,8 +222,7 @@ yum install -y mise ### Windows - Scoop -> [!NOTE] -> We're currently waiting for mise to be merged to the Scoop main bucket: +> [!NOTE] We're currently waiting for mise to be merged to the Scoop main bucket: > > - @@ -245,9 +240,7 @@ winget install jdx.mise ### Windows - Chocolatey -::: info -chocolatey version is currently outdated. -::: +::: info chocolatey version is currently outdated. ::: ```sh choco install mise @@ -255,10 +248,10 @@ choco install mise ### Windows - manual -Download the latest release from [GitHub](https://github.com/jdx/mise/releases) and add the binary -to your PATH. +Download the latest release from [GitHub](https://github.com/jdx/mise/releases) and add the binary to your PATH. -If your shell does not support `mise activate`, you would want to edit PATH to include the shims directory (by default: `%LOCALAPPDATA%\mise\shims`). +If your shell does not support `mise activate`, you would want to edit PATH to include the shims directory (by default: +`%LOCALAPPDATA%\mise\shims`). ## Shells @@ -280,19 +273,15 @@ echo 'eval "$(mise activate zsh)"' >> "${ZDOTDIR-$HOME}/.zshrc" echo 'mise activate fish | source' >> ~/.config/fish/config.fish ``` -::: tip -For homebrew and possibly other installs mise is automatically activated so -this is not necessary. +::: tip For homebrew and possibly other installs mise is automatically activated so this is not necessary. -See [`MISE_FISH_AUTO_ACTIVATE=1`](/configuration#mise_fish_auto_activate1) for more information. -::: +See [`MISE_FISH_AUTO_ACTIVATE=1`](/configuration#mise_fish_auto_activate1) for more information. ::: ### Powershell -::: warning -See [about_Profiles](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_profiles) docs to find your actual profile location. -You will need to first create the parent directory if it does not exist. -::: +::: warning See +[about_Profiles](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_profiles) +docs to find your actual profile location. You will need to first create the parent directory if it does not exist. ::: ```powershell echo '~/.local/bin/mise activate mise activate pwsh | Out-String | Invoke-Expression' >> $HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 @@ -300,9 +289,8 @@ echo '~/.local/bin/mise activate mise activate pwsh | Out-String | Invoke-Expres ### Nushell -Nu -does [not support `eval`](https://www.nushell.sh/book/how_nushell_code_gets_run.html#eval-function) -Install Mise by appending `env.nu` and `config.nu`: +Nu does [not support `eval`](https://www.nushell.sh/book/how_nushell_code_gets_run.html#eval-function) Install Mise by +appending `env.nu` and `config.nu`: ```nushell ' @@ -312,8 +300,7 @@ let mise_path = $nu.default-config-dir | path join mise.nu "\nuse ($nu.default-config-dir | path join mise.nu)" | save $nu.config-path --append ``` -If you prefer to keep your dotfiles clean you can save it to a different directory then -update `$env.NU_LIB_DIRS`: +If you prefer to keep your dotfiles clean you can save it to a different directory then update `$env.NU_LIB_DIRS`: ```nushell "\n$env.NU_LIB_DIRS ++= ($mise_path | path dirname | to nuon)" | save $nu.env-path --append @@ -321,9 +308,9 @@ update `$env.NU_LIB_DIRS`: ### Xonsh -Since `.xsh` files are [not compiled](https://github.com/xonsh/xonsh/issues/3953) you may shave a -bit off startup time by using a pure Python import: add the code below to, for -example, `~/.config/xonsh/mise.py` config file and `import mise` it in `~/.config/xonsh/rc.xsh`: +Since `.xsh` files are [not compiled](https://github.com/xonsh/xonsh/issues/3953) you may shave a bit off startup time +by using a pure Python import: add the code below to, for example, `~/.config/xonsh/mise.py` config file and +`import mise` it in `~/.config/xonsh/rc.xsh`: ```python from pathlib import Path @@ -340,10 +327,9 @@ Or continue to use `rc.xsh`/`.xonshrc`: echo 'execx($(~/bin/mise activate xonsh))' >> ~/.config/xonsh/rc.xsh # or ~/.xonshrc ``` -Given that `mise` replaces both shell env `$PATH` and OS environ `PATH`, watch out that your configs -don't have these two set differently (might -throw `os.environ['PATH'] = xonsh.built_ins.XSH.env.get_detyped('PATH')` at the end of a config to -make sure they match) +Given that `mise` replaces both shell env `$PATH` and OS environ `PATH`, watch out that your configs don't have these +two set differently (might throw `os.environ['PATH'] = xonsh.built_ins.XSH.env.get_detyped('PATH')` at the end of a +config to make sure they match) ### Elvish @@ -363,20 +349,16 @@ edit:add-var mise~ {|@args| mise:mise $@args } ### Something else? -Adding a new shell is not hard at all since very little shell code is -in this project. -[See here](https://github.com/jdx/mise/tree/main/src/shell) for how -the others are implemented. If your shell isn't currently supported -I'd be happy to help you get yours integrated. +Adding a new shell is not hard at all since very little shell code is in this project. +[See here](https://github.com/jdx/mise/tree/main/src/shell) for how the others are implemented. If your shell isn't +currently supported I'd be happy to help you get yours integrated. ## Autocompletion -::: tip -Some installation methods automatically install autocompletion scripts. -::: +::: tip Some installation methods automatically install autocompletion scripts. ::: -The [`mise completion`](/cli/completion.html) command can generate autocompletion scripts for your shell. -This requires `usage` to be installed. If you don't have it, install it with: +The [`mise completion`](/cli/completion.html) command can generate autocompletion scripts for your shell. This requires +`usage` to be installed. If you don't have it, install it with: ```shell mise use -g usage @@ -415,8 +397,8 @@ Then source your shell's rc file or restart your shell. ## Uninstalling -Use `mise implode` to uninstall mise. This will remove the mise binary and all of its data. Use -`mise implode --help` for more information. +Use `mise implode` to uninstall mise. This will remove the mise binary and all of its data. Use `mise implode --help` +for more information. Alternatively, manually remove the following directories to fully clean up: diff --git a/docs/lang/bun.md b/docs/lang/bun.md index d30178b508..ea51a23dab 100644 --- a/docs/lang/bun.md +++ b/docs/lang/bun.md @@ -1,7 +1,7 @@ # Bun -The following are instructions for using the bun mise core plugin. This is used when there isn't a -git plugin installed named "bun". +The following are instructions for using the bun mise core plugin. This is used when there isn't a git plugin installed +named "bun". The code for this is inside the mise repository at [`./src/plugins/core/bun.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/bun.rs). diff --git a/docs/lang/deno.md b/docs/lang/deno.md index 3208f1f60b..81b8d40fde 100644 --- a/docs/lang/deno.md +++ b/docs/lang/deno.md @@ -1,10 +1,10 @@ # Deno -The following are instructions for using the deno mise core plugin. This is used when there isn't a -git plugin installed named "deno". +The following are instructions for using the deno mise core plugin. This is used when there isn't a git plugin installed +named "deno". -If you want to use [asdf-deno](https://github.com/asdf-community/asdf-deno) -then run `mise plugins install deno https://github.com/asdf-community/asdf-deno`. +If you want to use [asdf-deno](https://github.com/asdf-community/asdf-deno) then run +`mise plugins install deno https://github.com/asdf-community/asdf-deno`. The code for this is inside the mise repository at [`./src/plugins/core/deno.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/deno.rs). diff --git a/docs/lang/erlang.md b/docs/lang/erlang.md index a0ca8a39e4..d367b86890 100644 --- a/docs/lang/erlang.md +++ b/docs/lang/erlang.md @@ -1,7 +1,7 @@ # Erlang -The following are instructions for using the erlang core plugin. -This is used when there isn't a git plugin installed named "erlang". +The following are instructions for using the erlang core plugin. This is used when there isn't a git plugin installed +named "erlang". The code for this is inside the mise repository at [`./src/plugins/core/erlang.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/erlang.rs). @@ -18,8 +18,8 @@ See available versions with `mise ls-remote erlang`. ## kerl -The plugin uses [kerl](https://github.com/kerl/kerl) under the hood to build erlang. -See kerl's docs for information on configuring kerl. +The plugin uses [kerl](https://github.com/kerl/kerl) under the hood to build erlang. See kerl's docs for information on +configuring kerl. ## Settings diff --git a/docs/lang/go.md b/docs/lang/go.md index dd6fe8deb1..162ea654a8 100644 --- a/docs/lang/go.md +++ b/docs/lang/go.md @@ -1,25 +1,24 @@ # Go -The following are instructions for using the go mise core plugin. This is used when there isn't a -git plugin installed named "go". +The following are instructions for using the go mise core plugin. This is used when there isn't a git plugin installed +named "go". -If you want to use [asdf-golang](https://github.com/kennyp/asdf-golang) -then use `mise plugins install go GIT_URL`. +If you want to use [asdf-golang](https://github.com/kennyp/asdf-golang) then use `mise plugins install go GIT_URL`. The code for this is inside the mise repository at [`./src/plugins/core/go.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/go.rs). ## Usage -The following installs the latest version of go-1.21.x (if some version of 1.21.x is not already -installed) and makes it the global default: +The following installs the latest version of go-1.21.x (if some version of 1.21.x is not already installed) and makes it +the global default: ```sh mise use -g go@1.21 ``` -Minor go versions 1.20 and below require specifying `prefix` before the version number because the -first version of each series was released without a `.0` suffix, making 1.20 an exact version match: +Minor go versions 1.20 and below require specifying `prefix` before the version number because the first version of each +series was released without a `.0` suffix, making 1.20 an exact version match: ```sh mise use -g go@prefix:1.20 @@ -34,9 +33,8 @@ import Settings from '/components/settings.vue'; ## Default packages -mise can automatically install a default set of packages right after installing a new go version. -To enable this feature, provide a `$HOME/.default-go-packages` file that lists one packages per -line, for example: +mise can automatically install a default set of packages right after installing a new go version. To enable this +feature, provide a `$HOME/.default-go-packages` file that lists one packages per line, for example: ```text github.com/Dreamacro/clash # allows comments @@ -45,5 +43,5 @@ github.com/jesseduffield/lazygit ## `.go-version` file support -mise uses a `mise.toml` or `.tool-versions` file for auto-switching between software versions. -However it can also read go-specific version files named `.go-version`. +mise uses a `mise.toml` or `.tool-versions` file for auto-switching between software versions. However it can also read +go-specific version files named `.go-version`. diff --git a/docs/lang/java.md b/docs/lang/java.md index 8f61884feb..1181b7f365 100644 --- a/docs/lang/java.md +++ b/docs/lang/java.md @@ -1,18 +1,17 @@ # Java -The following are instructions for using the java mise core plugin. This is used when there isn't a -git plugin installed named "java". +The following are instructions for using the java mise core plugin. This is used when there isn't a git plugin installed +named "java". -If you want to use [asdf-java](https://github.com/halcyon/asdf-java) -then use `mise plugins install java GIT_URL`. +If you want to use [asdf-java](https://github.com/halcyon/asdf-java) then use `mise plugins install java GIT_URL`. The code for this is inside the mise repository at [`./src/plugins/core/java.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/java.rs). ## Usage -The following installs the latest version of openjdk-21.x (if some version of openjdk-21.x is -not already installed) and makes it the global default: +The following installs the latest version of openjdk-21.x (if some version of openjdk-21.x is not already installed) and +makes it the global default: ```sh mise use -g java@openjdk-21 @@ -21,20 +20,18 @@ mise use -g java@21 # alternate shorthands for openjdk-only See available versions with `mise ls-remote java`. -::: warning -Note that shorthand versions (like `21` in the example) use `OpenJDK` as the vendor. -The OpenJDK versions will only be updated for a 6-month period. Updates and security patches will not be available after this short period. This also applies for LTS versions. Also see for more information. -::: +::: warning Note that shorthand versions (like `21` in the example) use `OpenJDK` as the vendor. The OpenJDK versions +will only be updated for a 6-month period. Updates and security patches will not be available after this short period. +This also applies for LTS versions. Also see for more information. ::: ## Tool Options -The following [tool-options](/dev-tools/#tool-options) are available for the `java` backendโ€”these -go in `[tools]` in `mise.toml`. +The following [tool-options](/dev-tools/#tool-options) are available for the `java` backendโ€”these go in `[tools]` in +`mise.toml`. ### `release_type` -The `release_type` option allows you to specify the type of release to install. The following values -are supported: +The `release_type` option allows you to specify the type of release to install. The following values are supported: - `ga` (default): General Availability release - `ea`: Early Access release @@ -48,8 +45,7 @@ are supported: Some applications in macOS rely on `/usr/libexec/java_home` to find installed Java runtimes. -To integrate an installed Java runtime with macOS run the following commands for the proper -version (e.g. openjdk-21). +To integrate an installed Java runtime with macOS run the following commands for the proper version (e.g. openjdk-21). ```sh sudo mkdir /Library/Java/JavaVirtualMachines/openjdk-21.jdk @@ -62,11 +58,10 @@ sudo ln -s ~/.local/share/mise/installs/java/openjdk-21/Contents /Library/Java/J The Java core plugin supports the idiomatic version files `.java-version` and `.sdkmanrc`. -For `.sdkmanrc` files, mise will try to map the vendor and version to the appropriate version -string. For example, the version `20.0.2-tem` will be mapped to `temurin-20.0.2`. Due to Azul's Zulu -versioning, the version `11.0.12-zulu` will be mapped to the major version `zulu-11`. Not all -vendors available in SDKMAN are supported by mise. The following vendors are NOT supported: `bsg` ( -Bisheng), `graal` (GraalVM), `nik` (Liberica NIK). +For `.sdkmanrc` files, mise will try to map the vendor and version to the appropriate version string. For example, the +version `20.0.2-tem` will be mapped to `temurin-20.0.2`. Due to Azul's Zulu versioning, the version `11.0.12-zulu` will +be mapped to the major version `zulu-11`. Not all vendors available in SDKMAN are supported by mise. The following +vendors are NOT supported: `bsg` ( Bisheng), `graal` (GraalVM), `nik` (Liberica NIK). In case an unsupported version of java is needed, some manual work is required: @@ -87,8 +82,8 @@ ln -s ~/.sdkman/candidates/java/21.0.1-open ~/.local/share/mise/installs/java/21 cp ~/.local/share/mise/installs/java/21.0.1-open/lib/libjli.dylib ~/.local/share/mise/installs/java/21.0.1-open/Contents/MacOS/libjli.dylib ``` -4. Don't forget to make sure the cache is blocked and valid, by making sure an **empty** directory **exists** for your version in the [mise cache](https://mise.jdx.dev/directories.html#cache-mise): - e.g. +4. Don't forget to make sure the cache is blocked and valid, by making sure an **empty** directory **exists** for your + version in the [mise cache](https://mise.jdx.dev/directories.html#cache-mise): e.g. ```sh $ ls -R $MISE_CACHE_DIR/java diff --git a/docs/lang/node.md b/docs/lang/node.md index ed050b8177..03b1d72cf5 100644 --- a/docs/lang/node.md +++ b/docs/lang/node.md @@ -1,17 +1,17 @@ # Node -The following are instructions for using the node mise core plugin. This is used when there isn't a -git plugin installed named "node". +The following are instructions for using the node mise core plugin. This is used when there isn't a git plugin installed +named "node". -If you want to use [asdf-nodejs](https://github.com/asdf-vm/asdf-nodejs) -then run `mise plugins install node https://github.com/asdf-vm/asdf-nodejs` +If you want to use [asdf-nodejs](https://github.com/asdf-vm/asdf-nodejs) then run +`mise plugins install node https://github.com/asdf-vm/asdf-nodejs` -The code for this is inside the mise repository at [`./src/plugins/core/node.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/node.rs). +The code for this is inside the mise repository at +[`./src/plugins/core/node.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/node.rs). ## Usage -The following installs the latest version of node-20.x and makes it the global -default: +The following installs the latest version of node-20.x and makes it the global default: ```sh mise use -g node@20 @@ -19,8 +19,8 @@ mise use -g node@20 ## Requirements -See [BUILDING.md](https://github.com/nodejs/node/blob/main/BUILDING.md#building-nodejs-on-supported-platforms) in node's documentation for -required system dependencies. +See [BUILDING.md](https://github.com/nodejs/node/blob/main/BUILDING.md#building-nodejs-on-supported-platforms) in node's +documentation for required system dependencies. ## Settings @@ -34,20 +34,21 @@ import Settings from '/components/settings.vue'; - `MISE_NODE_VERIFY` [bool]: Verify the downloaded assets using GPG. Defaults to `true`. - `MISE_NODE_NINJA` [bool]: Use ninja instead of make to compile node. Defaults to `true` if installed. - `MISE_NODE_CONCURRENCY` [uint]: How many jobs should be used in compilation. Defaults to half the computer cores -- `MISE_NODE_DEFAULT_PACKAGES_FILE` [string]: location of default packages file, defaults to `$HOME/.default-npm-packages` +- `MISE_NODE_DEFAULT_PACKAGES_FILE` [string]: location of default packages file, defaults to + `$HOME/.default-npm-packages` - `MISE_NODE_CFLAGS` [string]: Additional CFLAGS options (e.g., to override -O3). - `MISE_NODE_CONFIGURE_OPTS` [string]: Additional `./configure` options. - `MISE_NODE_MAKE_OPTS` [string]: Additional `make` options. - `MISE_NODE_MAKE_INSTALL_OPTS` [string]: Additional `make install` options. -- `MISE_NODE_COREPACK` [bool]: Installs the default corepack shims after installing any node version that ships with [corepack](https://github.com/nodejs/corepack). +- `MISE_NODE_COREPACK` [bool]: Installs the default corepack shims after installing any node version that ships with + [corepack](https://github.com/nodejs/corepack). -::: info -TODO: these env vars should be migrated to compatible settings in the future. -::: +::: info TODO: these env vars should be migrated to compatible settings in the future. ::: ## Default node packages -mise-node can automatically install a default set of npm packages right after installing a node version. To enable this feature, provide a `$HOME/.default-npm-packages` file that lists one package per line, for example: +mise-node can automatically install a default set of npm packages right after installing a node version. To enable this +feature, provide a `$HOME/.default-npm-packages` file that lists one package per line, for example: ```text lodash @@ -59,19 +60,20 @@ You can specify a non-default location of this file by setting a `MISE_NODE_DEFA ## `.nvmrc` and `.node-version` support -mise uses a `mise.toml` or `.tool-versions` file for auto-switching between software versions. To ease migration, you can have also have it read an existing `.nvmrc` or `.node-version` file to find out what version of Node.js should be used. This will be used if `node` isn't defined in `mise.toml`/`.tool-versions`. +mise uses a `mise.toml` or `.tool-versions` file for auto-switching between software versions. To ease migration, you +can have also have it read an existing `.nvmrc` or `.node-version` file to find out what version of Node.js should be +used. This will be used if `node` isn't defined in `mise.toml`/`.tool-versions`. ## "nodejs" -> "node" Alias -You cannot install/use a plugin named "nodejs". If you attempt this, mise will just rename it to -"node". See the [FAQ](https://github.com/jdx/mise#what-is-the-difference-between-nodejs-and-node-or-golang-and-go) -for an explanation. +You cannot install/use a plugin named "nodejs". If you attempt this, mise will just rename it to "node". See the +[FAQ](https://github.com/jdx/mise#what-is-the-difference-between-nodejs-and-node-or-golang-and-go) for an explanation. ## Unofficial Builds -Nodejs.org offers a set of [unofficial builds](https://unofficial-builds.nodejs.org/) which are -compatible with some platforms that are not supported by the official binaries. These are a nice alternative to -compiling from source for these platforms. +Nodejs.org offers a set of [unofficial builds](https://unofficial-builds.nodejs.org/) which are compatible with some +platforms that are not supported by the official binaries. These are a nice alternative to compiling from source for +these platforms. To use, first set the mirror url to point to the unofficial builds: @@ -79,9 +81,9 @@ To use, first set the mirror url to point to the unofficial builds: mise settings node.mirror_url=https://unofficial-builds.nodejs.org/download/release/ ``` -If your goal is to simply support an alternative arch/os like linux-loong64 or linux-armv6l, this is -all that is required. Node also provides flavors such as musl or glibc-217 (an older glibc version -than what the official binaries are built with). +If your goal is to simply support an alternative arch/os like linux-loong64 or linux-armv6l, this is all that is +required. Node also provides flavors such as musl or glibc-217 (an older glibc version than what the official binaries +are built with). To use these, set `node.flavor`: diff --git a/docs/lang/python.md b/docs/lang/python.md index e701751453..b390d55278 100644 --- a/docs/lang/python.md +++ b/docs/lang/python.md @@ -1,16 +1,14 @@ # Python -The following are instructions for using the python mise core plugin. The core plugin will be used -so long as no plugin is manually -installed named "python" using `mise plugins install python [GIT_URL]`. +The following are instructions for using the python mise core plugin. The core plugin will be used so long as no plugin +is manually installed named "python" using `mise plugins install python [GIT_URL]`. -The code for this is inside of the mise repository -at [`./src/plugins/core/python.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/python.rs). +The code for this is inside of the mise repository at +[`./src/plugins/core/python.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/python.rs). ## Usage -The following installs the latest version of python-3.11.x and makes it the global -default: +The following installs the latest version of python-3.11.x and makes it the global default: ```sh mise use -g python@3.11 @@ -28,8 +26,7 @@ $ python3.11 -V ## Settings -`python-build` already has -a [handful of settings](https://github.com/pyenv/pyenv/tree/master/plugins/python-build), in +`python-build` already has a [handful of settings](https://github.com/pyenv/pyenv/tree/master/plugins/python-build), in additional to that python in mise has a few extra configuration variables. Set these with `mise settings set [VARIABLE] [VALUE]` or by setting the environment variable. @@ -41,53 +38,44 @@ import Settings from '/components/settings.vue'; ## Default Python packages -mise can automatically install a default set of Python packages with pip right after installing a -Python version. To enable this feature, provide a `$HOME/.default-python-packages` file that lists -one package per line, for example: +mise can automatically install a default set of Python packages with pip right after installing a Python version. To +enable this feature, provide a `$HOME/.default-python-packages` file that lists one package per line, for example: ```text ansible pipenv ``` -You can specify a non-default location of this file by setting a `MISE_PYTHON_DEFAULT_PACKAGES_FILE` -variable. +You can specify a non-default location of this file by setting a `MISE_PYTHON_DEFAULT_PACKAGES_FILE` variable. ## Precompiled python binaries -By default, mise will -download [precompiled binaries](https://github.com/astral-sh/python-build-standalone) -for python instead of compiling them with python-build. This makes installing python much faster. +By default, mise will download [precompiled binaries](https://github.com/astral-sh/python-build-standalone) for python +instead of compiling them with python-build. This makes installing python much faster. -In addition to being faster, it also means you don't have to install all of the system dependencies -either. +In addition to being faster, it also means you don't have to install all of the system dependencies either. -That said, there are -some [quirks](https://github.com/astral-sh/python-build-standalone/blob/main/docs/quirks.rst) -with the precompiled binaries to be aware of. +That said, there are some [quirks](https://github.com/astral-sh/python-build-standalone/blob/main/docs/quirks.rst) with +the precompiled binaries to be aware of. If you'd like to disable these binaries, set `mise settings python.compile=1`. -These binaries may not work on older CPUs however you may opt into binaries which -are more compatible with older CPUs by setting `MISE_PYTHON_PRECOMPILED_ARCH` with -a different version. See for -more information -on this option. Set it to "x86_64" for the most compatible binaries. +These binaries may not work on older CPUs however you may opt into binaries which are more compatible with older CPUs by +setting `MISE_PYTHON_PRECOMPILED_ARCH` with a different version. See + for more information on this option. Set it to +"x86_64" for the most compatible binaries. ## python-build -Optionally, mise -uses [python-build](https://github.com/pyenv/pyenv/tree/master/plugins/python-build) (part of pyenv) -to compile python runtimes, -you need to ensure -its [dependencies](https://github.com/pyenv/pyenv/wiki#suggested-build-environment) are installed -before installing python with -python-build. +Optionally, mise uses [python-build](https://github.com/pyenv/pyenv/tree/master/plugins/python-build) (part of pyenv) to +compile python runtimes, you need to ensure its +[dependencies](https://github.com/pyenv/pyenv/wiki#suggested-build-environment) are installed before installing python +with python-build. ## Troubleshooting errors with Homebrew -If you normally use Homebrew and you see errors regarding OpenSSL, -your best bet might be using the following command to install Python: +If you normally use Homebrew and you see errors regarding OpenSSL, your best bet might be using the following command to +install Python: ```sh CFLAGS="-I$(brew --prefix openssl)/include" \ @@ -95,15 +83,10 @@ LDFLAGS="-L$(brew --prefix openssl)/lib" \ mise install python@latest; ``` -Homebrew installs its own OpenSSL version, which may collide with system-expected ones. -You could even add that to your -`.profile`, -`.bashrc`, -`.zshrc`... -to avoid setting them every time +Homebrew installs its own OpenSSL version, which may collide with system-expected ones. You could even add that to your +`.profile`, `.bashrc`, `.zshrc`... to avoid setting them every time -Additionally, if you encounter issues with python-build, -you may benefit from unlinking pkg-config prior to install +Additionally, if you encounter issues with python-build, you may benefit from unlinking pkg-config prior to install ([reason](https://github.com/pyenv/pyenv/issues/2823#issuecomment-1769081965)). ```sh @@ -124,8 +107,7 @@ brew link pkg-config ## Automatic virtualenv activation -Python comes with virtualenv support built in, use it with `mise.toml` configuration like -one of the following: +Python comes with virtualenv support built in, use it with `mise.toml` configuration like one of the following: ```toml [tools] diff --git a/docs/lang/ruby.md b/docs/lang/ruby.md index e76711b5e5..da8fd81e88 100644 --- a/docs/lang/ruby.md +++ b/docs/lang/ruby.md @@ -1,34 +1,32 @@ # Ruby -The following are instructions for using the ruby mise core plugin. This is used when there isn't a -git plugin installed named "ruby". +The following are instructions for using the ruby mise core plugin. This is used when there isn't a git plugin installed +named "ruby". -If you want to use [asdf-ruby](https://github.com/asdf-vm/asdf-ruby) -then use `mise plugins install ruby GIT_URL`. +If you want to use [asdf-ruby](https://github.com/asdf-vm/asdf-ruby) then use `mise plugins install ruby GIT_URL`. The code for this is inside the mise repository at [`./src/plugins/core/ruby.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/ruby.rs). ## Usage -The following installs the latest version of ruby-3.2.x (if some version of 3.2.x is not already -installed) and makes it the global default: +The following installs the latest version of ruby-3.2.x (if some version of 3.2.x is not already installed) and makes it +the global default: ```sh mise use -g ruby@3.2 ``` -Behind the scenes, mise uses [`ruby-build`](https://github.com/rbenv/ruby-build) to compile ruby -from source. Ensure that you have the necessary -[dependencies](https://github.com/rbenv/ruby-build/wiki#suggested-build-environment) installed. -You can check its [README](https://github.com/rbenv/ruby-build/blob/master/README.md) for additional settings and some -troubleshooting. +Behind the scenes, mise uses [`ruby-build`](https://github.com/rbenv/ruby-build) to compile ruby from source. Ensure +that you have the necessary [dependencies](https://github.com/rbenv/ruby-build/wiki#suggested-build-environment) +installed. You can check its [README](https://github.com/rbenv/ruby-build/blob/master/README.md) for additional settings +and some troubleshooting. ## Settings `ruby-build` already has a -[handful of settings](https://github.com/rbenv/ruby-build?tab=readme-ov-file#custom-build-configuration), -in additional to that mise has a few extra settings: +[handful of settings](https://github.com/rbenv/ruby-build?tab=readme-ov-file#custom-build-configuration), in additional +to that mise has a few extra settings: -The following is a list of all of mise's settings. These can be set via `mise settings key=value`, by directly modifying -`~/.config/mise/config.toml` or local config, or via environment variables. +The following is a list of all of mise's settings. These can be set via `mise settings key=value`, +by directly modifying `~/.config/mise/config.toml` or local config, or via environment variables. Some of them also can be set via global CLI flags. diff --git a/docs/contact.md b/docs/contact.md index aedef53072..e7b1815e7e 100644 --- a/docs/contact.md +++ b/docs/contact.md @@ -1,13 +1,17 @@ # Contact -`mise` is mostly built and maintained by me, [Jeff Dickey](https://jdx.dev). The goal is to make local development of -software easy and consistent across languages. I have spent many years building dev tools and thinking about the -problems that `mise` addresses. +`mise` is mostly built and maintained by me, [Jeff Dickey](https://jdx.dev). The goal is +to make local development of software easy and consistent across languages. I +have spent many years building dev tools and thinking about the problems that `mise` +addresses. -I try to use the first-person in these docs since the reality is it's generally me writing them and I think it makes it -more interesting having a bit of my personality in the text. +I try to use the first-person in these docs since the reality is it's generally me +writing them and I think it makes it more interesting having a bit of my personality +in the text. -This project is simply a labor of love. I am making it because I want to make your life as a developer easier. I hope -you find it useful. Feedback is a massive driver for me. If you have anything positive or negative to say-even if it's -just to say hi-please reach out to me either on [Twitter](https://twitter.com/jdxcode), -[Mastodon](https://fosstodon.org/@jdx), [Discord](https://discord.gg/UBa7pJUN7Z), or `jdx at this domain`. +This project is simply a labor of love. I am making it because I want to make +your life as a developer easier. I hope you find it useful. Feedback is a massive +driver for me. If you have anything positive or negative to say-even if it's just +to say hi-please reach out to me either on [Twitter](https://twitter.com/jdxcode), +[Mastodon](https://fosstodon.org/@jdx), [Discord](https://discord.gg/UBa7pJUN7Z), +or `jdx at this domain`. diff --git a/docs/continuous-integration.md b/docs/continuous-integration.md index 92dadbac5d..5e0ff57723 100644 --- a/docs/continuous-integration.md +++ b/docs/continuous-integration.md @@ -5,8 +5,7 @@ We recommend that your project pins the tools to a specific version to ensure th ## Any CI provider -Continuous integration pipelines allow running arbitrary commands. You can use this to install Mise and run -`mise install` to install the tools: +Continuous integration pipelines allow running arbitrary commands. You can use this to install Mise and run `mise install` to install the tools: ```yaml script: | @@ -25,8 +24,7 @@ Alternatively, you can add the [shims](/dev-tools/shims.md) directory to your `P ## GitHub Actions -If you use GitHub Actions, we provide a [mise-action](https://github.com/jdx/mise-action) that wraps the installation of -Mise and the tools. All you need to do is to add the action to your workflow: +If you use GitHub Actions, we provide a [mise-action](https://github.com/jdx/mise-action) that wraps the installation of Mise and the tools. All you need to do is to add the action to your workflow: ```yaml name: test @@ -60,8 +58,9 @@ jobs: ## GitLab CI -You can use any docker image with `mise` installed to run your CI jobs. Here's an example using `debian-slim` as base -image: ::: details +You can use any docker image with `mise` installed to run your CI jobs. +Here's an example using `debian-slim` as base image: +::: details ```dockerfile FROM debian:12-slim @@ -100,9 +99,7 @@ build-job: ## Xcode Cloud -If you are using Xcode Cloud, you can use custom `ci_post_clone.sh` -[build script](https://developer.apple.com/documentation/xcode/writing-custom-build-scripts) to install Mise. Here's an -example: +If you are using Xcode Cloud, you can use custom `ci_post_clone.sh` [build script](https://developer.apple.com/documentation/xcode/writing-custom-build-scripts) to install Mise. Here's an example: ```bash #!/bin/sh diff --git a/docs/contributing.md b/docs/contributing.md index 59e48a0b88..83b27aeb4b 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -1,21 +1,16 @@ # Contributing -Before submitting a PR, unless it's something obvious, consider filing an issue or simply mention what you plan to do in -the [Discord](https://discord.gg/UBa7pJUN7Z). PRs are often either rejected or need to change significantly after -submission so make sure before you start working on something it won't be a wasted effort. +Before submitting a PR, unless it's something obvious, consider filing an issue or simply mention what you plan to do in the [Discord](https://discord.gg/UBa7pJUN7Z). +PRs are often either rejected or need to change significantly after submission so make sure before you start working on something it won't be a wasted effort. -Issues ideal for contributors can be found with the -["help wanted"](https://github.com/jdx/mise/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) and -["good first issue"](https://github.com/jdx/mise/labels/good%20first%20issue) labels. These are isssues that I feel are -self-contained therefore don't require super in-depth understanding of the codebase or that require knowledge about -something I don't understand very well myself. +Issues ideal for contributors can be found with the ["help wanted"](https://github.com/jdx/mise/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) and ["good first issue"](https://github.com/jdx/mise/labels/good%20first%20issue) labels. These are isssues that I feel are self-contained therefore don't require super in-depth understanding of the codebase or that require knowledge about something I don't understand very well myself. ## Testing ### Unit Tests -Unit tests are used for fast, relatively simple logic. They can be run with `cargo test`. The dev container is -recommended for executing since it does not require having a proper local setup. +Unit tests are used for fast, relatively simple logic. They can be run with `cargo test`. The dev container is recommended +for executing since it does not require having a proper local setup. To run locally you will need to first disable mise if you are using it. @@ -58,10 +53,8 @@ pwsh e2e-win\run.ps1 task # run tests matching `*task*` ## Dependencies -- [rust](https://www.rust-lang.org/) stable 1.70.0+ (I test with the beta channel locally, but CI uses stable, you can - use whatever) -- [just](https://github.com/casey/just) this should be removed in favor of mise tasks but it's still used for some - things. +- [rust](https://www.rust-lang.org/) stable 1.70.0+ (I test with the beta channel locally, but CI uses stable, you can use whatever) +- [just](https://github.com/casey/just) this should be removed in favor of mise tasks but it's still used for some things. ## Tasks @@ -91,13 +84,14 @@ test:e2e ~/src/mise/.mise.to ## Setup -Shouldn't require anything special I'm aware of, but `mise run build` is a good sanity check to run and make sure it's -all working. +Shouldn't require anything special I'm aware of, but `mise run build` is a good sanity check to run and make sure it's all working. ## Dev Container -::: danger The docker setup quit working and since I don't use it I haven't bothered to fix it. For now you'll need to -run outside of docker or you can try to fix the docker setup. ::: +::: danger +The docker setup quit working and since I don't use it I haven't bothered to fix it. For now you'll need to run outside of +docker or you can try to fix the docker setup. +::: There is a docker setup that makes development with mise easier. It is especially helpful for running the E2E tests. Here's some example ways to use it: @@ -112,20 +106,22 @@ mise run docker:e2e # shortcut for `mise run docker:mise run test:e2e` ## Pre-commit hook -You can optionally run a pre-commit hook which lints the codebase and updates generated code. To do this, install -[lefthook](https://github.com/evilmartians/lefthook) and run `lefthook install`. +You can optionally run a pre-commit hook which lints the codebase and updates generated code. +To do this, install [lefthook](https://github.com/evilmartians/lefthook) and run `lefthook install`. ## Running the CLI -Even if using the devcontainer, it's a good idea to create a shim to make it easy to launch mise. I use the following -shim in `~/.local/bin/@mise`: +Even if using the devcontainer, it's a good idea to create a shim to make it easy to launch mise. I use the following shim +in `~/.local/bin/@mise`: ```sh #!/bin/sh exec cargo run -q --all-features --manifest-path ~/src/mise/Cargo.toml -- "$@" ``` -::: info Don't forget to change the manifest path to the correct path for your setup. ::: +::: info +Don't forget to change the manifest path to the correct path for your setup. +::: Then if that is in PATH just use `@mise` to run mise by compiling it on the fly. @@ -153,8 +149,7 @@ mise run render ## Adding a new setting -To add a new setting, add it to [`settings.toml`](https://github.com/jdx/mise/blob/main/settings.toml) in the root of -the project and run `mise run render` to update the codebase. +To add a new setting, add it to [`settings.toml`](https://github.com/jdx/mise/blob/main/settings.toml) in the root of the project and run `mise run render` to update the codebase. ## Testing packaging diff --git a/docs/core-tools.md b/docs/core-tools.md index a8101d189a..337513ecda 100644 --- a/docs/core-tools.md +++ b/docs/core-tools.md @@ -1,9 +1,9 @@ # Core Tools -`mise` comes with some plugins built into the CLI written in Rust. These are new and will improve over time. +`mise` comes with some plugins built into the CLI written in Rust. These are new and will improve over +time. -They can be easily overridden by installing an asdf/vfox plugin with the same name, e.g.: -`mise plugin install python https://github.com/asdf-community/asdf-python`. +They can be easily overridden by installing an asdf/vfox plugin with the same name, e.g.: `mise plugin install python https://github.com/asdf-community/asdf-python`. You can see the core plugins with `mise registry -b core`. diff --git a/docs/demo.md b/docs/demo.md index f7dde15927..e1b1ba4d5b 100644 --- a/docs/demo.md +++ b/docs/demo.md @@ -1,6 +1,7 @@ # 30 Second Demo -The following shows using mise to install different versions of [node](https://nodejs.org). Note that calling -`which node` gives us a real path to node, not a shim. +The following shows using mise to install different versions +of [node](https://nodejs.org). +Note that calling `which node` gives us a real path to node, not a shim. [![demo](https://github.com/jdx/mise/blob/main/docs/demo.gif?raw=true)](https://github.com/jdx/mise/blob/main/docs/demo.gif) diff --git a/docs/dev-tools/aliases.md b/docs/dev-tools/aliases.md index fbad5f277f..f5a99b3de4 100644 --- a/docs/dev-tools/aliases.md +++ b/docs/dev-tools/aliases.md @@ -2,8 +2,8 @@ ## Aliased Backends -Tools can be aliased so that something like `node` which normally maps to `core:node` can be changed to something like -`asdf:company/our-custom-node` instead. +Tools can be aliased so that something like `node` which normally maps to `core:node` can be changed +to something like `asdf:company/our-custom-node` instead. ```toml [alias] @@ -13,9 +13,9 @@ erlang = 'asdf:https://github.com/company/our-custom-erlang' ## Aliased Versions -mise supports aliasing the versions of runtimes. One use-case for this is to define aliases for LTS versions of -runtimes. For example, you may want to specify `lts-hydrogen` as the version for so you can use set it with -`node lts-hydrogen` in `mise.toml`/`.tool-versions`. +mise supports aliasing the versions of runtimes. One use-case for this is to define aliases for LTS +versions of runtimes. For example, you may want to specify `lts-hydrogen` as the version for +so you can use set it with `node lts-hydrogen` in `mise.toml`/`.tool-versions`. User aliases can be created by adding an `alias.` section to `~/.config/mise/config.toml`: @@ -24,7 +24,8 @@ User aliases can be created by adding an `alias.` section to `~/.config/ my_custom_20 = '20' ``` -Plugins can also provide aliases via a `bin/list-aliases` script. Here is an example showing node.js versions: +Plugins can also provide aliases via a `bin/list-aliases` script. Here is an example showing node.js +versions: ```bash #!/usr/bin/env bash @@ -34,8 +35,10 @@ echo "lts-gallium 16" echo "lts-fermium 14" ``` -::: info Because this is mise-specific functionality not currently used by asdf it isn't likely to be in any plugin -currently, but plugin authors can add this script without impacting asdf users. ::: +::: info +Because this is mise-specific functionality not currently used by asdf it isn't likely to be in any +plugin currently, but plugin authors can add this script without impacting asdf users. +::: ## Templates diff --git a/docs/dev-tools/backends/aqua.md b/docs/dev-tools/backends/aqua.md index b41b31def2..b822bd3873 100644 --- a/docs/dev-tools/backends/aqua.md +++ b/docs/dev-tools/backends/aqua.md @@ -1,29 +1,27 @@ # Aqua Backend -[Aqua](https://aquaproj.github.io/) tools may be used natively in mise. aqua is the ideal backend to use for new tools -since they don't require plugins, they work on windows, they offer security features like cosign/slsa verification in -addition to checksums. aqua installs also show more progress bars, which is nice. - -You do not need to separately install aqua. The aqua CLI is not used in mise at all. What is used is the -[aqua registry](https://github.com/aquaproj/aqua-registry) which is a bunch of yaml files that get compiled into the -mise binary on release. Here's an example of one of these files: -[`aqua:hashicorp/terraform`](https://github.com/aquaproj/aqua-registry/blob/main/pkgs/hashicorp/terraform/registry.yaml). +[Aqua](https://aquaproj.github.io/) tools may be used natively in mise. aqua is the ideal backend +to use for new tools since they don't require plugins, they work on windows, they offer security +features like cosign/slsa verification in addition to checksums. aqua installs also show more progress +bars, which is nice. + +You do not need to separately install aqua. The aqua CLI is not used in mise at all. What is used is +the [aqua registry](https://github.com/aquaproj/aqua-registry) which is a bunch of yaml files that get compiled into the mise binary on release. +Here's an example of one of these files: [`aqua:hashicorp/terraform`](https://github.com/aquaproj/aqua-registry/blob/main/pkgs/hashicorp/terraform/registry.yaml). mise has a reimplementation of aqua that knows how to work with these files to install tools. -As of this writing, aqua is relatively new to mise and because a lot of tools are being converted from asdf to aqua, -there may be some configuration in aqua tools that need to be tightened up. I put some common issues below and would -strongly recommend contributing changes back to the aqua registry if you notice problems. The maintainer is super -responsive and great to work with. +As of this writing, aqua is relatively new to mise and because a lot of tools are being converted from +asdf to aqua, there may be some configuration in aqua tools that need to be tightened up. I put some +common issues below and would strongly recommend contributing changes back to the aqua registry if you +notice problems. The maintainer is super responsive and great to work with. -If all else fails, you can disable aqua entirely with -[`MISE_DISABLE_BACKENDS=aqua`](/configuration/settings.html#disable_backends). +If all else fails, you can disable aqua entirely with [`MISE_DISABLE_BACKENDS=aqua`](/configuration/settings.html#disable_backends). -Currently aqua tools don't support setting environment variables or doing more than simply downloading binaries though -(and I'm not sure this functionality would ever get added), so some tools will likely always require plugins like -asdf/vfox. +Currently aqua tools don't support setting environment variables or doing more than simply downloading +binaries though (and I'm not sure this functionality would ever get added), so some tools will likely +always require plugins like asdf/vfox. -The code for this is inside the mise repository at -[`./src/backend/aqua.rs`](https://github.com/jdx/mise/blob/main/src/backend/aqua.rs). +The code for this is inside the mise repository at [`./src/backend/aqua.rs`](https://github.com/jdx/mise/blob/main/src/backend/aqua.rs). ## Usage @@ -42,9 +40,8 @@ The version will be set in `~/.config/mise/config.toml` with the following forma "aqua:BurntSushi/ripgrep" = "latest" ``` -Some tools will default to use aqua if they're specified in -[registry.toml](https://github.com/jdx/mise/blob/main/registry.toml) to use the aqua backend. To see these tools, run -`mise registry | grep aqua:`. +Some tools will default to use aqua if they're specified in [registry.toml](https://github.com/jdx/mise/blob/main/registry.toml) +to use the aqua backend. To see these tools, run `mise registry | grep aqua:`. ## Settings @@ -59,22 +56,24 @@ Here's some common issues I've seen when working with aqua tools. ### Supported env missing -The aqua registry defines supported envs for each tool of the os/arch. I've noticed some of these are simply missing -os/arch combos that are in fact supportedโ€”possibly because it was added after the registry was created for that tool. +The aqua registry defines supported envs for each tool of the os/arch. I've noticed some of these +are simply missing os/arch combos that are in fact supportedโ€”possibly because it was added after +the registry was created for that tool. The fix is simple, just edit the `supported_envs` section of `registry.yaml` for the tool in question. ### Using `version_filter` instead of `version_prefix` -This is a weird one that causes weird issues in mise. In general in mise we like versions like `1.2.3` with no -decoration like `v1.2.3` or `cli-v1.2.3`. This consistency not only makes `mise.toml` cleaner but, it also helps make -things like `mise up` function right because it's able to parse it as semver without dealing with a bunch of edge-cases. +This is a weird one that causes weird issues in mise. In general in mise we like versions like +`1.2.3` with no decoration like `v1.2.3` or `cli-v1.2.3`. This consistency not only makes `mise.toml` +cleaner but, it also helps make things like `mise up` function right because it's able to parse it as +semver without dealing with a bunch of edge-cases. Really if you notice aqua tools are giving you versions that aren't simple triplets, it's worth fixing. -One common thing I've seen is registries using a `version_filter` expression like -`Version startsWith "Version startsWith "atlascli/""`. +One common thing I've seen is registries using a `version_filter` expression like `Version startsWith "Version startsWith "atlascli/""`. -This ultimately causes the version to be `atlascli/1.2.3` which is not what we want. The fix is to use `version_prefix` -instead of `version_filter` and just put the prefix in the `version_prefix` field. In this example, it would be -`atlascli/`. mise will automatically strip this out and add it back in, which it can't do with `version_filter`. +This ultimately causes the version to be `atlascli/1.2.3` which is not what we want. The fix is to use +`version_prefix` instead of `version_filter` and just put the prefix in the `version_prefix` field. +In this example, it would be `atlascli/`. mise will automatically strip this out and add it back in, +which it can't do with `version_filter`. diff --git a/docs/dev-tools/backends/asdf.md b/docs/dev-tools/backends/asdf.md index 979dbba919..731aac0438 100644 --- a/docs/dev-tools/backends/asdf.md +++ b/docs/dev-tools/backends/asdf.md @@ -1,10 +1,12 @@ # asdf Backend -asdf is the original backend for mise. It relies on asdf plugins for each tool. asdf plugins are more risky to use -because they're typically written by a single developer unrelated to the tool vendor they also do not function on -Windows. Because of the extra complexity of asdf tools and security concerns we are actively moving tools in the -registry away from asdf where possible to backends like aqua and ubi which don't require plugins. That said, not all -tools can function with ubi/aqua if they have a unique installation process or need to set env vars other than PATH. +asdf is the original backend for mise. It relies on asdf plugins for each tool. asdf plugins are +more risky to use because they're typically written by a single developer unrelated to the tool vendor +they also do not function on Windows. +Because of the extra complexity of asdf tools and security concerns we are actively moving tools in +the registry away from asdf where possible to backends like aqua and ubi which don't require plugins. +That said, not all tools can function with ubi/aqua if they have a unique installation process or +need to set env vars other than PATH. ## Writing asdf plugins for mise diff --git a/docs/dev-tools/backends/cargo.md b/docs/dev-tools/backends/cargo.md index 4a24725f5a..d9ce5c98d1 100644 --- a/docs/dev-tools/backends/cargo.md +++ b/docs/dev-tools/backends/cargo.md @@ -1,13 +1,14 @@ # Cargo Backend -You may install packages directly from [Cargo Crates](https://crates.io/) even if there isn't an asdf plugin for it. +You may install packages directly from [Cargo Crates](https://crates.io/) even if there +isn't an asdf plugin for it. -The code for this is inside the mise repository at -[`./src/backend/cargo.rs`](https://github.com/jdx/mise/blob/main/src/backend/cargo.rs). +The code for this is inside the mise repository at [`./src/backend/cargo.rs`](https://github.com/jdx/mise/blob/main/src/backend/cargo.rs). ## Dependencies -This relies on having `cargo` installed. You can either install it on your system via [rustup](https://rustup.rs/): +This relies on having `cargo` installed. You can either install it on your +system via [rustup](https://rustup.rs/): ```sh curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh @@ -21,8 +22,8 @@ mise use -g rust ## Usage -The following installs the latest version of [eza](https://crates.io/crates/eza) and sets it as the active version on -PATH: +The following installs the latest version of [eza](https://crates.io/crates/eza) and +sets it as the active version on PATH: ```sh $ mise use -g cargo:eza @@ -41,8 +42,8 @@ The version will be set in `~/.config/mise/config.toml` with the following forma ### Using Git -You can install any package from a Git repository using the `mise` command. This allows you to install a particular tag, -branch, or commit revision: +You can install any package from a Git repository using the `mise` command. This allows you to +install a particular tag, branch, or commit revision: ```sh # Install a specific tag @@ -68,8 +69,8 @@ import Settings from '/components/settings.vue'; ## Tool Options -The following [tool-options](/dev-tools/#tool-options) are available for the `cargo` backendโ€”these go in `[tools]` in -`mise.toml`. +The following [tool-options](/dev-tools/#tool-options) are available for the `cargo` backendโ€”these +go in `[tools]` in `mise.toml`. ### `features` @@ -100,7 +101,8 @@ Select the CLI bin name to install when multiple are available (passed as `cargo ### `crate` -Select the crate name to install when multiple are available (passed as `cargo install --git= `): +Select the crate name to install when multiple are available (passed as +`cargo install --git= `): ```toml [tools] @@ -109,8 +111,8 @@ Select the crate name to install when multiple are available (passed as `cargo i ### `locked` -Use Cargo.lock (passes `cargo install --locked`) when building CLI. This is the default behavior, pass `false` to -disable: +Use Cargo.lock (passes `cargo install --locked`) when building CLI. This is the default behavior, +pass `false` to disable: ```toml [tools] diff --git a/docs/dev-tools/backends/dotnet.md b/docs/dev-tools/backends/dotnet.md index d695727c38..d269825a6f 100644 --- a/docs/dev-tools/backends/dotnet.md +++ b/docs/dev-tools/backends/dotnet.md @@ -1,12 +1,11 @@ # Dotnet backend -The code for this is inside the mise repository at -[`./src/backend/dotnet.rs`](https://github.com/jdx/mise/blob/main/src/backend/dotnet.rs). +The code for this is inside the mise repository at [`./src/backend/dotnet.rs`](https://github.com/jdx/mise/blob/main/src/backend/dotnet.rs). ## Usage -The following installs the latest version of [GitVersion.Tool](https://gitversion.net/) and sets it as the active -version on PATH: +The following installs the latest version of [GitVersion.Tool](https://gitversion.net/) and +sets it as the active version on PATH: ```sh $ mise use -g dotnet:GitVersion.Tool@5.12.0 @@ -52,5 +51,5 @@ import Settings from '/components/settings.vue'; ## Tool Options -The following [tool-options](/dev-tools/#tool-options) are available for the `dotnet` backendโ€”these go in `[tools]` in -`mise.toml`. +The following [tool-options](/dev-tools/#tool-options) are available for the `dotnet` backendโ€”these +go in `[tools]` in `mise.toml`. diff --git a/docs/dev-tools/backends/gem.md b/docs/dev-tools/backends/gem.md index 22331c5884..9b586f9a26 100644 --- a/docs/dev-tools/backends/gem.md +++ b/docs/dev-tools/backends/gem.md @@ -1,12 +1,11 @@ # gem Backend -mise can be used to install CLIs from RubyGems. The code for this is inside of the mise repository at -[`./src/backend/gem.rs`](https://github.com/jdx/mise/blob/main/src/backend/pipx.rs). +mise can be used to install CLIs from RubyGems. The code for this is inside of the mise repository at [`./src/backend/gem.rs`](https://github.com/jdx/mise/blob/main/src/backend/pipx.rs). ## Dependencies -This relies on having `gem` (provided with ruby) installed. You can install it with or without mise. Here is how to -install `ruby` with mise: +This relies on having `gem` (provided with ruby) installed. You can install it with or without mise. +Here is how to install `ruby` with mise: ```sh mise use -g ruby @@ -14,8 +13,7 @@ mise use -g ruby ## Usage -The following installs the latest version of [rubocop](https://rubygems.org/gems/rubocop) and sets it as the active -version on PATH: +The following installs the latest version of [rubocop](https://rubygems.org/gems/rubocop) and sets it as the active version on PATH: ```sh mise use -g gem:rubocop @@ -31,8 +29,8 @@ The version will be set in `~/.config/mise/config.toml` with the following forma ## Ruby upgrades -If the ruby version used by a gem package changes, (by mise or system ruby), you may need to reinstall the gem. This can -be done with: +If the ruby version used by a gem package changes, (by mise or system ruby), you may need to +reinstall the gem. This can be done with: ```sh mise install -f gem:rubocop diff --git a/docs/dev-tools/backends/go.md b/docs/dev-tools/backends/go.md index dc9e5fa2d7..b6c52b4bb5 100644 --- a/docs/dev-tools/backends/go.md +++ b/docs/dev-tools/backends/go.md @@ -1,10 +1,9 @@ # Go Backend -You may install packages directly via [go install](https://go.dev/doc/install) even if there isn't an asdf plugin for -it. +You may install packages directly via [go install](https://go.dev/doc/install) even if there +isn't an asdf plugin for it. -The code for this is inside of the mise repository at -[`./src/backend/go.rs`](https://github.com/jdx/mise/blob/main/src/backend/go.rs). +The code for this is inside of the mise repository at [`./src/backend/go.rs`](https://github.com/jdx/mise/blob/main/src/backend/go.rs). ## Dependencies @@ -14,13 +13,15 @@ This relies on having `go` installed. Which you can install via mise: mise use -g go ``` -::: tip Any method of installing `go` is fine if you want to install go some other way. mise will use whatever `go` is -on PATH. ::: +::: tip +Any method of installing `go` is fine if you want to install go some other way. +mise will use whatever `go` is on PATH. +::: ## Usage -The following installs the latest version of [hivemind](https://github.com/DarthSim/hivemind) and sets it as the active -version on PATH: +The following installs the latest version of [hivemind](https://github.com/DarthSim/hivemind) and +sets it as the active version on PATH: ```sh $ mise use -g go:github.com/DarthSim/hivemind diff --git a/docs/dev-tools/backends/index.md b/docs/dev-tools/backends/index.md index 800da8bce2..440a77e773 100644 --- a/docs/dev-tools/backends/index.md +++ b/docs/dev-tools/backends/index.md @@ -14,5 +14,7 @@ In addition to asdf plugins, you can also directly install CLIs with some packag - [ubi](/dev-tools/backends/ubi) - [vfox](/dev-tools/backends/vfox) -::: tip If you'd like to contribute a new backend to mise, they're not difficult to write. See -[`./src/backend/`](https://github.com/jdx/mise/tree/main/src/backend) for examples. ::: +::: tip +If you'd like to contribute a new backend to mise, they're not difficult to write. +See [`./src/backend/`](https://github.com/jdx/mise/tree/main/src/backend) for examples. +::: diff --git a/docs/dev-tools/backends/npm.md b/docs/dev-tools/backends/npm.md index 2170e20b0b..575010eaf4 100644 --- a/docs/dev-tools/backends/npm.md +++ b/docs/dev-tools/backends/npm.md @@ -1,13 +1,14 @@ # npm Backend -You may install packages directly from [npmjs.org](https://npmjs.org/) even if there isn't an asdf plugin for it. +You may install packages directly from [npmjs.org](https://npmjs.org/) even if there +isn't an asdf plugin for it. -The code for this is inside of the mise repository at -[`./src/backend/npm.rs`](https://github.com/jdx/mise/blob/main/src/backend/npm.rs). +The code for this is inside of the mise repository at [`./src/backend/npm.rs`](https://github.com/jdx/mise/blob/main/src/backend/npm.rs). ## Dependencies -This relies on having `npm` installed. You can install it with or without mise. Here is how to install `npm` with mise: +This relies on having `npm` installed. You can install it with or without mise. +Here is how to install `npm` with mise: ```sh mise use -g node @@ -15,8 +16,8 @@ mise use -g node ## Usage -The following installs the latest version of [prettier](https://www.npmjs.com/package/prettier) and sets it as the -active version on PATH: +The following installs the latest version of [prettier](https://www.npmjs.com/package/prettier) +and sets it as the active version on PATH: ```sh $ mise use -g npm:prettier diff --git a/docs/dev-tools/backends/pipx.md b/docs/dev-tools/backends/pipx.md index d6a6acbdad..ad047e2e53 100644 --- a/docs/dev-tools/backends/pipx.md +++ b/docs/dev-tools/backends/pipx.md @@ -7,13 +7,12 @@ You may install python packages directly from: - GitHub - Http -The code for this is inside of the mise repository at -[`./src/backend/pipx.rs`](https://github.com/jdx/mise/blob/main/src/backend/pipx.rs). +The code for this is inside of the mise repository at [`./src/backend/pipx.rs`](https://github.com/jdx/mise/blob/main/src/backend/pipx.rs). ## Dependencies -This relies on having `pipx` installed. You can install it with or without mise. Here is how to install `pipx` with -mise: +This relies on having `pipx` installed. You can install it with or without mise. +Here is how to install `pipx` with mise: ```sh mise use -g python @@ -24,8 +23,8 @@ Other installation instructions can be found [here](https://pipx.pypa.io/latest/ ## Usage -The following installs the latest version of [black](https://github.com/psf/black) and sets it as the active version on -PATH: +The following installs the latest version of [black](https://github.com/psf/black) +and sets it as the active version on PATH: ```sh $ mise use -g pipx:psf/black @@ -42,8 +41,8 @@ The version will be set in `~/.config/mise/config.toml` with the following forma ## Python upgrades -If the python version used by a pipx package changes, (by mise or system python), you may need to reinstall the package. -This can be done with: +If the python version used by a pipx package changes, (by mise or system python), you may need to +reinstall the package. This can be done with: ```sh mise install -f pipx:psf/black @@ -82,8 +81,8 @@ import Settings from '/components/settings.vue'; ## Tool Options -The following [tool-options](/dev-tools/#tool-options) are available for the `pipx` backendโ€”these go in `[tools]` in -`mise.toml`. +The following [tool-options](/dev-tools/#tool-options) are available for the `pipx` backendโ€”these +go in `[tools]` in `mise.toml`. ### `extras` diff --git a/docs/dev-tools/backends/spm.md b/docs/dev-tools/backends/spm.md index d148bdb87e..15f56a3888 100644 --- a/docs/dev-tools/backends/spm.md +++ b/docs/dev-tools/backends/spm.md @@ -1,22 +1,20 @@ # SPM Backend -You may install executables managed by [Swift Package Manager](https://www.swift.org/documentation/package-manager) -directly from GitHub releases. +You may install executables managed by [Swift Package Manager](https://www.swift.org/documentation/package-manager) directly from GitHub releases. -The code for this is inside of the mise repository at -[`./src/backend/spm.rs`](https://github.com/jdx/mise/blob/main/src/backend/spm.rs). +The code for this is inside of the mise repository at [`./src/backend/spm.rs`](https://github.com/jdx/mise/blob/main/src/backend/spm.rs). ## Dependencies -This relies on having `swift` installed. You can either install it [manually](https://www.swift.org/install) or -[with mise](/lang/swift). +This relies on having `swift` installed. You can either install it [manually](https://www.swift.org/install) or [with mise](/lang/swift). -> [!NOTE] If you have Xcode installed and selected in your system via `xcode-select`, Swift is already available through -> the toolchain embedded in the Xcode installation. +> [!NOTE] +> If you have Xcode installed and selected in your system via `xcode-select`, Swift is already available through the toolchain embedded in the Xcode installation. ## Usage -The following installs the latest version of `tuist` and sets it as the active version on PATH: +The following installs the latest version of `tuist` +and sets it as the active version on PATH: ```sh $ mise use -g spm:tuist/tuist diff --git a/docs/dev-tools/backends/ubi.md b/docs/dev-tools/backends/ubi.md index f90e275684..7f3ecba889 100644 --- a/docs/dev-tools/backends/ubi.md +++ b/docs/dev-tools/backends/ubi.md @@ -1,19 +1,19 @@ # Ubi Backend -You may install GitHub Releases and URL packages directly using [ubi](https://github.com/houseabsolute/ubi) backend. ubi -is directly compiled into the mise codebase so it does not need to be installed separately to be used. ubi is preferred -over asdf/vfox for new tools since it doesn't require a plugin, supports Windows, and is really easy to use. +You may install GitHub Releases and URL packages directly using [ubi](https://github.com/houseabsolute/ubi) backend. ubi is directly compiled into +the mise codebase so it does not need to be installed separately to be used. ubi is preferred over +asdf/vfox for new tools since it doesn't require a plugin, supports Windows, and is really easy to use. -ubi doesn't require plugins or even any configuration for each tool. What it does is try to deduce what the proper -binary/tarball is from GitHub releases and downloads the right one. As long as the vendor uses a somewhat standard -labeling scheme for their releases, ubi should be able to figure it out. +ubi doesn't require plugins or even any configuration for each tool. What it does is try to deduce what +the proper binary/tarball is from GitHub releases and downloads the right one. As long as the vendor +uses a somewhat standard labeling scheme for their releases, ubi should be able to figure it out. -The code for this is inside of the mise repository at -[`./src/backend/ubi.rs`](https://github.com/jdx/mise/blob/main/src/backend/ubi.rs). +The code for this is inside of the mise repository at [`./src/backend/ubi.rs`](https://github.com/jdx/mise/blob/main/src/backend/ubi.rs). ## Usage -The following installs the latest version of goreleaser and sets it as the active version on PATH: +The following installs the latest version of goreleaser +and sets it as the active version on PATH: ```sh $ mise use -g ubi:goreleaser/goreleaser @@ -30,16 +30,16 @@ The version will be set in `~/.config/mise/config.toml` with the following forma ## Tool Options -The following [tool-options](/dev-tools/#tool-options) are available for the `ubi` backendโ€”these go in `[tools]` in -`mise.toml`. +The following [tool-options](/dev-tools/#tool-options) are available for the `ubi` backendโ€”these +go in `[tools]` in `mise.toml`. ### `exe` -The `exe` option allows you to specify the executable name in the archive. This is useful when the archive contains -multiple executables. +The `exe` option allows you to specify the executable name in the archive. This is useful when the +archive contains multiple executables. -If you get an error like `could not find any files named cli in the downloaded zip file`, you can use the `exe` option -to specify the executable name: +If you get an error like `could not find any files named cli in the downloaded zip file`, you can +use the `exe` option to specify the executable name: ```toml [tools] @@ -48,9 +48,10 @@ to specify the executable name: ### `matching` -Set a string to match against the release filename when there are multiple files for your OS/arch, i.e. "gnu" or "musl". -Note that this is only used when there is more than one matching release filename for your OS/arch. If only one release -asset matches your OS/arch, then this will be ignored. +Set a string to match against the release filename when there are multiple files for your +OS/arch, i.e. "gnu" or "musl". Note that this is only used when there is more than one +matching release filename for your OS/arch. If only one release asset matches your OS/arch, +then this will be ignored. ```toml [tools] @@ -61,16 +62,15 @@ asset matches your OS/arch, then this will be ignored. - **GitHub shorthand for latest release version:** `ubi:goreleaser/goreleaser` - **GitHub shorthand for specific release version:** `ubi:goreleaser/goreleaser@1.25.1` -- **URL syntax:** - `ubi:https://github.com/goreleaser/goreleaser/releases/download/v1.16.2/goreleaser_Darwin_arm64.tar.gz` +- **URL syntax:** `ubi:https://github.com/goreleaser/goreleaser/releases/download/v1.16.2/goreleaser_Darwin_arm64.tar.gz` ## Troubleshooting ubi ### `ubi` resolver can't find os/arch -Sometimes vendors use strange formats for their releases that ubi can't figure out, possibly for a specific os/arch -combination. For example this recently happend in [this ticket](https://github.com/houseabsolute/ubi/issues/79) because -a vendor used "mac" instead of the more common "macos" or "darwin" tags. +Sometimes vendors use strange formats for their releases that ubi can't figure out, possibly for a +specific os/arch combination. For example this recently happend in [this ticket](https://github.com/houseabsolute/ubi/issues/79) because a vendor used +"mac" instead of the more common "macos" or "darwin" tags. Try using ubi by itself to see if the issue is related to mise or ubi: @@ -81,8 +81,8 @@ ubi -p jdx/mise ### `ubi` picks the wrong tarball -Another issue is that a GitHub release may have a bunch of tarballs, some that don't contain the CLI you want, you can -use the `matching` field in order to specify a string to match against the release. +Another issue is that a GitHub release may have a bunch of tarballs, some that don't contain the CLI +you want, you can use the `matching` field in order to specify a string to match against the release. ```sh mise use ubi:tamasfe/taplo[matching=full] @@ -92,9 +92,9 @@ ubi -p tamasfe/taplo -m full ### `ubi` can't find the binary in the tarball -ubi assumes that the repo name is the same as the binary name, however that is often not the case. For example, -BurntSushi/ripgrep gives us a binary named `rg` not `ripgrep`. In this case, you can specify the binary name with the -`exe` field: +ubi assumes that the repo name is the same as the binary name, however that is often not the case. +For example, BurntSushi/ripgrep gives us a binary named `rg` not `ripgrep`. In this case, you can +specify the binary name with the `exe` field: ```sh mise use ubi:BurntSushi/ripgrep[exe=rg] @@ -104,15 +104,15 @@ ubi -p BurntSushi/ripgrep -e rg ### `ubi` uses weird versions -This issue is actually with mise and not with ubi. mise needs to be able to list the available versions of the tools so -that "latest" points to whatever is the actual latest release of the CLI. What sometimes happens is vendors will have -GitHub releases for unrelated things. For example, `cargo-bins/cargo-binstall` is the repo for cargo-binstall, however -it has a bunch of releases for unrelated CLIs that are not cargo-binstall. We need to filter these out and that can be -specified with the `tag_regex` tool option: +This issue is actually with mise and not with ubi. mise needs to be able to list the available versions +of the tools so that "latest" points to whatever is the actual latest release of the CLI. What sometimes +happens is vendors will have GitHub releases for unrelated things. For example, `cargo-bins/cargo-binstall` +is the repo for cargo-binstall, however it has a bunch of releases for unrelated CLIs that are not +cargo-binstall. We need to filter these out and that can be specified with the `tag_regex` tool option: ```sh mise use 'ubi:cargo-bins/cargo-binstall[tag_regex=^\d+\.]' ``` -Now when running `mise ls-remote ubi:cargo-bins/cargo-binstall[tag_regex=^\d+\.]` you should only see versions starting -with a number. Note that this command is cached so you likely will need to run `mise cache clear` first. +Now when running `mise ls-remote ubi:cargo-bins/cargo-binstall[tag_regex=^\d+\.]` you should only see +versions starting with a number. Note that this command is cached so you likely will need to run `mise cache clear` first. diff --git a/docs/dev-tools/backends/vfox.md b/docs/dev-tools/backends/vfox.md index 32b0179c78..41c1457c9b 100644 --- a/docs/dev-tools/backends/vfox.md +++ b/docs/dev-tools/backends/vfox.md @@ -2,8 +2,7 @@ [Vfox](https://github.com/version-fox/vfox) plugins may be used in mise to install tools. -The code for this is inside the mise repository at -[`./src/backend/vfox.rs`](https://github.com/jdx/mise/blob/main/src/backend/vfox.rs). +The code for this is inside the mise repository at [`./src/backend/vfox.rs`](https://github.com/jdx/mise/blob/main/src/backend/vfox.rs). ## Dependencies @@ -62,4 +61,5 @@ terraform vfox:enochchau/vfox-terraform vlang vfox:ahai-code/vfox-vlang ``` -And they will be installed when running commands such as `mise use -g cmake` without needing to specify `vfox:cmake`. +And they will be installed when running commands such as `mise use -g cmake` without needing to +specify `vfox:cmake`. diff --git a/docs/dev-tools/comparison-to-asdf.md b/docs/dev-tools/comparison-to-asdf.md index f35285f02d..81c1d62d72 100644 --- a/docs/dev-tools/comparison-to-asdf.md +++ b/docs/dev-tools/comparison-to-asdf.md @@ -1,69 +1,81 @@ # Comparison to asdf -mise can be used as a drop-in replacement for asdf. It supports the same `.tool-versions` files that you may have used -with asdf and can use asdf plugins through the [asdf backend](/dev-tools/backends/asdf.html). - -It will not, however, reuse existing asdf directories (so you'll need to either reinstall them or move them), and 100% -compatibility is not a design goal. That said, if you're coming from asdf-bash (0.15 and below), mise actually has -[fewer breaking changes than asdf-go (0.16 and above)](https://asdf-vm.com/guide/upgrading-from-v0-15-to-v0-16.html) +mise can be used as a drop-in replacement for asdf. It supports the same `.tool-versions` files that +you may have used with asdf and can use asdf plugins through +the [asdf backend](/dev-tools/backends/asdf.html). + +It will not, however, reuse existing asdf directories +(so you'll need to either reinstall them or move them), and 100% compatibility is not a design goal. +That said, +if you're coming from asdf-bash (0.15 and below), mise actually +has [fewer breaking changes than asdf-go (0.16 and above)](https://asdf-vm.com/guide/upgrading-from-v0-15-to-v0-16.html) despite 100% compatibility not being a design goal of mise. Casual users coming from asdf have generally found mise to just be a faster, easier to use asdf. -:::tip Make sure you have a look at [environments](/environments/) and [tasks](/tasks/) which are major portions of mise -that have no asdf equivalent. ::: +:::tip +Make sure you have a look at [environments](/environments/) and [tasks](/tasks/) which +are major portions of mise that have no asdf equivalent. +::: ## Migrate from asdf to mise -If you're moving from asdf to mise, please review [#how-do-i-migrate-from-asdf](/faq.html#how-do-i-migrate-from-asdf) -for guidance. +If you're moving from asdf to mise, please +review [#how-do-i-migrate-from-asdf](/faq.html#how-do-i-migrate-from-asdf) for guidance. ## asdf in go (0.16+) -asdf has gone through a rewrite in go. Because this is quite new as of this writing (2025-01-01), I'm going to keep -information about 0.16+ asdf versions (which I call "asdf-go" vs "asdf-bash") in this section and the rest of this doc -will apply to asdf-bash (0.15 and below). +asdf has gone through a rewrite in go. Because this is quite new as of this writing (2025-01-01), +I'm going to keep information about 0.16+ asdf versions (which I call "asdf-go" vs "asdf-bash") in +this section and the rest of this doc will apply to asdf-bash (0.15 and below). -In terms of performance, mise is still faster than the go asdf, however the difference is much closer. asdf is likely -fast enough that the difference in overhead between asdf-go and mise may not even be enough to notice for youโ€”after all -there are plenty of people still using asdf-bash that claim they don't even notice how slow it is (don't ask me how): +In terms of performance, mise is still faster than the go asdf, however the difference is much +closer. asdf is likely fast enough that the difference in overhead between asdf-go and mise may not +even be enough to notice for youโ€”after all there are plenty of people still using asdf-bash that +claim they don't even notice how slow it is (don't ask me how): ![GgAQJJmWIAAUlec](https://github.com/user-attachments/assets/05689925-396d-41f3-bcd1-7b3b1bf6c2fa) -I don't think performance is a good enough reason to switch though now that asdf-go is a thing. It's a reason, but it's -a minor one. The improved security in mise, better DX, and lack of reliance on shims are all more important than -performance. +I don't think performance is a good enough reason to switch though now that asdf-go is a thing. It's +a reason, but it's a minor one. The improved security in mise, better DX, and lack of reliance on +shims are all more important than performance. -Given they went through the trouble of rewriting asdfโ€”that's also an indication they want to keep working on it (which -is awesome that they're doing that btw). This does mean that some of what's written here may go out of date if they -address some of the problems with asdf. +Given they went through the trouble of rewriting asdfโ€”that's also an indication they want to keep +working on it (which is awesome that they're doing that btw). This does mean that some of what's +written here may go out of date if they address some of the problems +with asdf. ## Supply chain security -asdf plugins are not secure. This is explained in [SECURITY.md](https://github.com/jdx/mise/blob/main/SECURITY.md), but -the quick explanation is that asdf plugins involve shell code which can essentially do anything on your machine. It's -dangerous code. What's worse is asdf plugins are rarely written by the tool vendor (who you need to trust anyway to use -the tool), which means for every asdf plugin you use you'll be trusting a random developer to not go rogue and to not -get hacked themselves and publish changes to a plugin with an exploit. +asdf plugins are not secure. This is explained +in [SECURITY.md](https://github.com/jdx/mise/blob/main/SECURITY.md), but the quick explanation is +that asdf plugins involve shell code which can essentially do anything on your machine. It's +dangerous code. What's worse is asdf plugins are rarely written by the tool vendor (who you need to +trust anyway to use the tool), which means for every asdf plugin you use you'll be trusting a random +developer to not go rogue and to not get hacked themselves and publish changes to a plugin with an +exploit. -mise still uses asdf plugins for some tools, but we're actively reducing that count as well as moving things into the -[mise-plugins org](https://github.com/mise-plugins). It looks like asdf has a similar model with their asdf-community -org, but it isn't. asdf gives plugin authors commit access to their plugin in -[asdf-community](https://github.com/asdf-community) when they move it in, which I feel like defeats the purpose of -having a dedicated org in the first place. By the end of 2025 I would like for there to no longer be any asdf plugins in -the registry that aren't owned by me. +mise still uses asdf plugins for some tools, but we're actively reducing that count as well as +moving things into the [mise-plugins org](https://github.com/mise-plugins). It looks like asdf has a +similar model with their asdf-community org, but it isn't. asdf gives plugin authors commit access +to their plugin in [asdf-community](https://github.com/asdf-community) when they move it in, which I +feel like defeats the purpose of having a dedicated org in the first place. By the end of 2025 I +would like for there to no longer be any asdf plugins in the registry that aren't owned by me. -I've also been adopting extra security verification steps when vendors offer that ability such as gpg verification on -node installs, or slsa-verify/cosign checks on some aqua tools. +I've also been adopting extra security verification steps when vendors offer that ability such as +gpg verification on node installs, or slsa-verify/cosign checks on some aqua tools. ## UX ![CleanShot 2024-01-28 at 12 36 20@2x](https://github.com/jdx/mise-docs/assets/216188/47f381d7-1566-4b78-9260-3b85a21dd6ec) -Some commands are the same in asdf but others have been changed. Everything that's possible in asdf should be possible -in mise but may use slightly different syntax. mise has more forgiving commands, such as using fuzzy-matching, e.g.: -`mise install node@20`. While in asdf you _can_ run `asdf install node latest:20`, you can't use `latest:20` in a -`.tool-versions` file or many other places. In `mise` you can use fuzzy-matching everywhere. +Some commands are the same in asdf but others have been changed. Everything that's possible +in asdf should be possible in mise but may use slightly different syntax. mise has more forgiving +commands, +such as using fuzzy-matching, e.g.: `mise install node@20`. While in asdf you _can_ run +`asdf install node latest:20`, you can't use `latest:20` in a `.tool-versions` file or many other +places. +In `mise` you can use fuzzy-matching everywhere. asdf requires several steps to install a new runtime if the plugin isn't installed, e.g.: @@ -73,90 +85,105 @@ asdf install node latest:20 asdf local node latest:20 ``` -In `mise` this can all be done in a single step which installs the plugin, installs the runtime, and sets the version: +In `mise` this can all be done in a single step which installs the plugin, installs the runtime, +and sets the version: ```sh mise use node@20 ``` -If you have an existing `.tool-versions` file, or `.mise-toml`, you can install all plugins and runtimes with a single -command: +If you have an existing `.tool-versions` file, or `.mise-toml`, you can install all plugins +and runtimes with a single command: ```sh mise install ``` -I've found asdf to be particularly rigid and difficult to learn. It also made strange decisions like having -`asdf list all` but `asdf latest --all` (why is one a flag and one a positional argument?). `mise` makes heavy use of -aliases so you don't need to remember if it's `mise plugin add node` or `mise plugin install node`. If I can guess what -you meant, then I'll try to get mise to respond in the right way. +I've found asdf to be particularly rigid and difficult to learn. It also made strange decisions like +having `asdf list all` but `asdf latest --all` (why is one a flag and one a positional argument?). +`mise` makes heavy use of aliases so you don't need to remember if it's `mise plugin add node` or +`mise plugin install node`. If I can guess what you meant, then I'll try to get mise to respond +in the right way. -That said, there are a lot of great things about asdf. It's the best multi-runtime manager out there and I've really -been impressed with the plugin system. Most of the design decisions the authors made were very good. I really just have -2 complaints: the shims and the fact it's written in Bash. +That said, there are a lot of great things about asdf. It's the best multi-runtime manager out there +and I've really been impressed with the plugin system. Most of the design decisions the authors made +were very good. I really just have 2 complaints: the shims and the fact it's written in Bash. ## Performance -asdf made (what I consider) a poor design decision to use shims that go between a call to a runtime and the runtime -itself. e.g.: when you call `node` it will call an asdf shim file `~/.asdf/shims/node`, which then calls `asdf exec`, -which then calls the correct version of node. - -These shims have terrible performance, adding ~120ms to every runtime call. `mise activate` does not use shims and -instead updates `PATH` so that it doesn't have any overhead when simply calling binaries. These shims are the main -reason that I wrote this. Note that in the demo GIF at the top of this README that `mise` isn't actually used when -calling `node -v` for this reason. The performance is identical to running node without using mise. - -I don't think it's possible for asdf to fix these issues. The author of asdf did a great writeup of -[performance problems](https://stratus3d.com/blog/2022/08/11/asdf-performance/). asdf is written in bash which certainly -makes it challenging to be performant, however I think the real problem is the shim design. I don't think it's possible -to fix that without a complete rewrite. - -mise does call an internal command `mise hook-env` every time the directory has changed, but because it's written in -Rust, this is very quickโ€”taking ~10ms on my machine. 4ms if there are no changes, 14ms if it's a full reload. - -tl;dr: asdf adds overhead (~120ms) when calling a runtime, mise adds a small amount of overhead (~ 5ms) when the prompt -loads. +asdf made (what I consider) a poor design decision to use shims that go between a call to a runtime +and the runtime itself. e.g.: when you call `node` it will call an asdf shim file +`~/.asdf/shims/node`, +which then calls `asdf exec`, which then calls the correct version of node. + +These shims have terrible performance, adding ~120ms to every runtime call. `mise activate` does not +use shims and instead +updates `PATH` so that it doesn't have any overhead when simply calling binaries. These shims are +the main reason that I wrote this. Note that in the demo GIF at the top of this README +that `mise` isn't actually used when calling `node -v` for this reason. The performance is +identical to running node without using mise. + +I don't think it's possible for asdf to fix these issues. The author of asdf did a great writeup +of [performance problems](https://stratus3d.com/blog/2022/08/11/asdf-performance/). asdf is written +in bash which certainly makes it challenging to be performant, however I think the real problem is +the +shim design. I don't think it's possible to fix that without a complete rewrite. + +mise does call an internal command `mise hook-env` every time the directory has changed, but because +it's written in Rust, this is very quickโ€”taking ~10ms on my machine. 4ms if there are no changes, +14ms if it's +a full reload. + +tl;dr: asdf adds overhead (~120ms) when calling a runtime, mise adds a small amount of overhead (~ +5ms) +when the prompt loads. ## Windows support -asdf does not run on Windows at all. With mise, tools using non-asdf backends can support Windows. Of course, this means -the tool vendor must provide Windows binaries but if they do, and the backend isn't asdf, the tool should work on -Windows. +asdf does not run on Windows at all. With mise, tools using non-asdf backends can support Windows. +Of course, this means the tool +vendor must provide Windows binaries but if they do, and the backend isn't asdf, the tool should +work on Windows. ## Security -asdf plugins are insecure. They typically are written by individuals with no ties to the vendors that provide the -underlying tool. Where possible, mise does not use asdf plugins and instead uses backends like aqua and ubi which do not -require separate plugins. +asdf plugins are insecure. They typically are written by individuals with no ties to the vendors +that provide the underlying tool. +Where possible, mise does not use asdf plugins and instead uses backends like aqua and ubi which do +not require separate plugins. -Aqua tools can be configured with cosign/slsa verification as well. See -[SECURITY](https://github.com/jdx/mise/blob/main/SECURITY.md) for more information. +Aqua tools can be configured with cosign/slsa verification as well. +See [SECURITY](https://github.com/jdx/mise/blob/main/SECURITY.md) for more information. ## Command Compatibility -In nearly all places you can use the exact syntax that works in asdf, however this likely won't show up in the help or -CLI reference. If you're coming from asdf and comfortable with that way of working you can almost always use the same -syntax with mise, e.g.: +In nearly all places you can use the exact syntax that works in asdf, however this likely won't +show up in the help or CLI reference. If you're coming from asdf and comfortable with that way of +working you can almost always use the same syntax with mise, e.g.: ```sh mise install node 20.0.0 mise local node 20.0.0 ``` -UPDATE (2025-01-01): asdf-go (0.16+) actually got rid of `asdf global|local` entirely in favor of `asdf set` which we -can't support since we already have a command named `mise set`. mise command compatibility will likely not be as good -with asdf-go 0.16+. +UPDATE (2025-01-01): asdf-go (0.16+) actually got rid of `asdf global|local` entirely in favor of +`asdf set` which we can't support since we already have a command named `mise set`. mise command +compatibility will likely not be as good with asdf-go 0.16+. -It's not recommended though. You almost always want to modify config files and install things so `mise use node@20` -saves an extra command. Also, the "@" in the command is preferred since it allows you to install multiple tools at once: -`mise use|install node@20 node@18`. Also, there are edge cases where it's not possibleโ€”or at least very challengingโ€”for -us to definitively know which syntax is being used and so we default to mise-style. While there aren't many of these, -asdf-compatibility is done as a "best-effort" in order to make transitioning from asdf feel familiar for those users who -can rely on their muscle memory. Ensuring asdf-syntax works with everything is not a design goal. +It's not recommended though. You almost always want to modify config files and install things so +`mise use node@20` saves an extra command. Also, the "@" in the command is preferred since it allows +you to install multiple tools at once: `mise use|install node@20 node@18`. Also, there are edge +cases +where it's not possibleโ€”or at least very challengingโ€”for us to definitively know which syntax is +being +used and so we default to mise-style. While there aren't many of these, asdf-compatibility is done +as a "best-effort" in order to make transitioning from asdf feel familiar for those users who can +rely on their muscle memory. Ensuring asdf-syntax works with everything is not a design goal. ## Extra backends -mise has support for backends other than asdf plugins. For example you can install CLIs directly from cargo and npm: +mise has support for backends other than asdf plugins. For example you can install CLIs +directly from cargo and npm: ```sh mise use -g cargo:ripgrep@14 diff --git a/docs/dev-tools/index.md b/docs/dev-tools/index.md index 9c64bbeaea..3008659fea 100644 --- a/docs/dev-tools/index.md +++ b/docs/dev-tools/index.md @@ -1,21 +1,20 @@ # Dev Tools -> _Like [asdf](https://asdf-vm.com) (or [nvm](https://github.com/nvm-sh/nvm) or [pyenv](https://github.com/pyenv/pyenv) -> but for any language), it manages dev tools like node, python, cmake, terraform, and [hundreds more](/registry.html)._ +> _Like [asdf](https://asdf-vm.com) (or [nvm](https://github.com/nvm-sh/nvm) +> or [pyenv](https://github.com/pyenv/pyenv) but for any language), it manages dev tools like node, +> python, cmake, terraform, and [hundreds more](/registry.html)._ -::: tip New developer? Try reading the [Beginner's Guide](https://dev.to/jdxcode/beginners-guide-to-rtx-ac4) for a -gentler introduction. ::: +::: tip +New developer? Try reading the [Beginner's Guide](https://dev.to/jdxcode/beginners-guide-to-rtx-ac4) +for a gentler introduction. +::: -mise is a tool that manages installations of programming language runtimes and other tools for local development. For -example, it can be used to manage multiple versions of Node.js, Python, Ruby, Go, etc. on the same machine. +mise is a tool that manages installations of programming language runtimes and other tools for local development. For example, it can be used to manage multiple versions of Node.js, Python, Ruby, Go, etc. on the same machine. -Once [activated](/getting-started.html#_2-activate-mise), mise will automatically switch between different versions of -tools based on the directory you're in. This means that if you have a project that requires Node.js 18 and another that -requires Node.js 22, mise will automatically switch between them as you move between the two projects. See tools -available for mise with in the [registry](/registry). +Once [activated](/getting-started.html#_2-activate-mise), mise will automatically switch between different versions of tools based on the directory you're in. +This means that if you have a project that requires Node.js 18 and another that requires Node.js 22, mise will automatically switch between them as you move between the two projects. See tools available for mise with in the [registry](/registry). -To know which tool version to use, mise will typically look for a `mise.toml` file in the current directory and its -parents. To get an idea of how tools are specified, here is an example of a [mise.toml](/configuration.html) file: +To know which tool version to use, mise will typically look for a `mise.toml` file in the current directory and its parents. To get an idea of how tools are specified, here is an example of a [mise.toml](/configuration.html) file: ```toml [tools] @@ -24,36 +23,43 @@ python = '3' ruby = 'latest' ``` -It's also compatible with asdf `.tool-versions` files as well as -[idiomatic version files](/configuration#idiomatic-version-files) like `.node-version` and `.ruby-version`. See -[configuration](/configuration) for more details. +It's also compatible +with asdf `.tool-versions` files as well as [idiomatic version files](/configuration#idiomatic-version-files) like `.node-version` and +`.ruby-version`. See [configuration](/configuration) for more details. -::: info mise is inspired by [asdf](https://asdf-vm.com) and can leverage asdf's vast -[plugin ecosystem](https://github.com/mise-plugins/registry) under the hood. However, -[it is _much_ faster than asdf and has a more friendly user experience](./comparison-to-asdf). ::: +::: info +mise is inspired by [asdf](https://asdf-vm.com) and can leverage asdf's +vast [plugin ecosystem](https://github.com/mise-plugins/registry) +under the hood. However, [it is _much_ faster than asdf and has a more friendly user experience](./comparison-to-asdf). +::: ## How it works -mise hooks into your shell (with `mise activate zsh`) and sets the `PATH` environment variable to point your shell to -the correct runtime binaries. When you `cd` into a directory containing a `mise.toml`/`.tool-versions` file, mise will -automatically set the appropriate tool versions in `PATH`. +mise hooks into your shell (with `mise activate zsh`) and sets the `PATH` +environment variable to point your shell to the correct runtime binaries. When you `cd` into a +directory containing a `mise.toml`/`.tool-versions` file, mise will automatically set the +appropriate tool versions in `PATH`. -::: info After activating, mise will update env vars like PATH whenever the directory is changed or the prompt is -_displayed_. See the [FAQ](/faq#what-does-mise-activate-do). ::: +::: info +After activating, mise will update env vars like PATH whenever the directory is changed or the prompt is _displayed_. +See the [FAQ](/faq#what-does-mise-activate-do). +::: -After activating, every time your prompt displays it will call `mise hook-env` to fetch new environment variables. This -should be very fast. It exits early if the directory wasn't changed or `mise.toml`/`.tool-versions` files haven't been -modified. +After activating, every time your prompt displays it will call `mise hook-env` to fetch new +environment variables. +This should be very fast. It exits early if the directory wasn't changed or +`mise.toml`/`.tool-versions` files haven't been modified. -`mise` modifies `PATH` ahead of time so the runtimes are called directly. This means that calling a tool has zero -overhead and commands like `which node` returns the real path to the binary. Other tools like asdf only support shim -files to dynamically locate runtimes when they're called which adds a small delay and can cause issues with some -commands. See [shims](/dev-tools/shims) for more information. +`mise` modifies `PATH` ahead of time so the runtimes are called directly. This means that calling a tool has zero overhead and commands like `which node` returns the real path to the binary. +Other tools like asdf only support shim files to dynamically locate runtimes when they're called which adds a small delay and can cause issues with some commands. See [shims](/dev-tools/shims) for more information. ## Common commands -Here are some of the most important commands when it comes to working with dev tools. Click the header for each command -to go to its reference documentation page to see all available flags/options and more examples. +Here are some of the most important commands when it comes to working with dev tools. Click the +header +for each command to go to its reference documentation page to see all available flags/options and +more +examples. ### [`mise use`](/cli/use) @@ -75,40 +81,50 @@ mise ~/my-project/mise.toml tools: node@22.12.0 # mise.toml created/updated ~/.local/share/installs/node/22.12.0/bin/node ``` -`mise use node@22` will install the latest version of node-22 and create/update the `mise.toml` config file in the local -directory. Anytime you're in that directory, that version of `node` will be used. +`mise use node@22` will install the latest version of node-22 and create/update the +`mise.toml` +config file in the local directory. Anytime you're in that directory, that version of `node` will be +used. -`mise use -g node@22` will do the same but update the -[global config](/configuration.html#global-config-config-mise-config-toml) (~/.config/mise/config.toml) so unless there -is a config file in the local directory hierarchy, node-22 will be the default version for the user. +`mise use -g node@22` will do the same but update the [global config](/configuration.html#global-config-config-mise-config-toml) (~/.config/mise/config.toml) so +unless there is a config file in the local directory hierarchy, node-22 will be the default version +for +the user. ### [`mise install`](/cli/install) -`mise install` will install but not activate toolsโ€”meaning it will download/build/compile the tool into -`~/.local/share/mise/installs` but you won't be able to use it without "setting" the version in a `.mise-toml` or -`.tool-versions` file. +`mise install` will install but not activate toolsโ€”meaning it will download/build/compile the tool +into `~/.local/share/mise/installs` but you won't be able to use it without "setting" the version +in a `.mise-toml` or `.tool-versions` file. -::: tip If you're coming from `asdf`, there is no need to also run `mise plugin add` to first install the plugin, that -will be done automatically if needed. Of course, you can manually install plugins if you wish or you want to use a -plugin not in the default registry. ::: +::: tip +If you're coming from `asdf`, there is no need to also run `mise plugin add` to first install +the plugin, that will be done automatically if needed. Of course, you can manually install plugins +if you wish or you want to use a plugin not in the default registry. +::: There are many ways it can be used: - `mise install node@20.0.0` - install a specific version - `mise install node@20` - install the latest version matching this prefix -- `mise install node` - install whatever version of node currently specified in `mise.toml` (or other config files) +- `mise install node` - install whatever version of node currently specified in `mise.toml` (or other + config files) - `mise install` - install all plugins and tools specified in the config files ### [`mise exec`|`mise x`](/cli/exec) -`mise x` can be used for one-off commands using specific tools. e.g.: if you want to run a script with python3.12: +`mise x` can be used for one-off commands using specific tools. e.g.: if you want to run a script +with python3.12: ```sh mise x python@3.12 -- ./myscript.py ``` -Python will be installed if it is not already. `mise x` will read local/global `.mise-toml`/`.tool-versions` files as -well, so if you don't want to use `mise activate` or shims you can use mise by just prefixing commands with `mise x --`: +Python will be installed if it is not already. `mise x` will read local/global +`.mise-toml`/`.tool-versions` files +as well, so if you don't want to use `mise activate` or shims you can use mise by just prefixing +commands with +`mise x --`: ```sh $ mise use node@20 @@ -116,7 +132,8 @@ $ mise x -- node -v 20.x.x ``` -::: tip If you use this a lot, an alias can be helpful: +::: tip +If you use this a lot, an alias can be helpful: ```sh alias mx="mise x --" @@ -124,8 +141,8 @@ alias mx="mise x --" ::: -Similarly, `mise run` can be used to [execute tasks](/tasks/) which will also activate the mise environment with all of -your tools. +Similarly, `mise run` can be used to [execute tasks](/tasks/) which will also activate the mise +environment with all of your tools. ## Tool Options @@ -145,8 +162,7 @@ All tools can accept a `postinstall` option which is a shell command to run afte node = { version = '20', postinstall = 'corepack enable' } ``` -It's yet not possible to specify this via the CLI in `mise use`. As a workaround, you can use -[mise config set](/cli/config/set.html): +It's yet not possible to specify this via the CLI in `mise use`. As a workaround, you can use [mise config set](/cli/config/set.html): ```shell mise config set tools.node.version 20 diff --git a/docs/dev-tools/shims.md b/docs/dev-tools/shims.md index 8a4baa868d..67c9f2e0fd 100644 --- a/docs/dev-tools/shims.md +++ b/docs/dev-tools/shims.md @@ -1,11 +1,13 @@ # Shims -::: tip The [beginner's guide](https://dev.to/jdxcode/beginners-guide-to-rtx-ac4), and my -[blog post](https://jdx.dev/posts/2024-04-13-shims-how-they-work-in-mise-en-place/) are helpful resources to dive deeper -into shims. ::: +::: tip +The [beginner's guide](https://dev.to/jdxcode/beginners-guide-to-rtx-ac4), and my [blog post](https://jdx.dev/posts/2024-04-13-shims-how-they-work-in-mise-en-place/) are helpful resources to dive deeper into shims. +::: -::: warning `mise activate --shims` does not support all the features of `mise activate`.
See -[shims vs path](/dev-tools/shims.html#shims-vs-path) for more info. ::: +::: warning +`mise activate --shims` does not support all the features of `mise activate`.
+See [shims vs path](/dev-tools/shims.html#shims-vs-path) for more info. +::: ## Introduction @@ -14,8 +16,8 @@ There are two ways for dev tools to be loaded into your shell: `mise activate` a - Mise's "PATH" activation method updates environment variables at each prompt by modifying `PATH` - The "shims" method uses symlinks to the mise binary that intercept commands and load the appropriate environment -While the `PATH` design of mise works great in most cases, there are some situations where shims are preferable. One -example is when calling mise binaries from an IDE. +While the `PATH` design of mise works great in most cases, there are some situations where shims are +preferable. One example is when calling mise binaries from an IDE. To support this, mise does have a shim dir that can be used. It's located at `~/.local/share/mise/shims`. @@ -29,25 +31,29 @@ $ ~/.local/share/mise/shims/prettier -v 3.1.0 ``` -::: tip `mise activate --shims` is a shorthand for adding the shims directory to PATH. ::: +::: tip +`mise activate --shims` is a shorthand for adding the shims directory to PATH. +::: -::: info `mise reshim` actually should get called automatically if you're using npm so an explicit reshim should not be -necessary in that scenario. Also, this bears repeating but: `mise reshim` just creates/removes the shims. People use it -as a "fix it" button but it really should only be necessary if `~/.local/share/mise/shims` doesn't contain something it -should. +::: info +`mise reshim` actually should get called automatically if you're using npm so an explicit reshim should not be necessary +in that scenario. Also, this bears repeating but: `mise reshim` just creates/removes the shims. People use it as a +"fix it" button but it really should only be necessary if `~/.local/share/mise/shims` doesn't contain something it should. mise also runs a reshim anytime a tool is installed/updated/removed so you don't need to use it for those scenarios. -Also don't put things in there manually, mise will just delete it next reshim. ::: +Also don't put things in there manually, mise will just delete it next reshim. +::: ## How to add mise shims to PATH If you prefer to use shims, you can run the following to use mise without activating it. -You can use `.bashrc`/`.zshrc` instead of `.bash_profile`/`.zprofile` if you prefer to only use mise in interactive -sessions (`.bash_profile`/`.zprofile` will work in non-interactive places like scripts or IDEs). Note that -`mise activate` will remove the shims directory so it's fine to call `mise activate --shims` in the profile file then -later call `mise activate` in an interactive session. +You can use `.bashrc`/`.zshrc` instead of `.bash_profile`/`.zprofile` if you prefer to only use +mise in interactive sessions (`.bash_profile`/`.zprofile` will work in non-interactive places +like scripts or IDEs). Note that `mise activate` will remove the shims directory so it's fine +to call `mise activate --shims` in the profile file then later call `mise activate` in an interactive +session. ::: code-group @@ -68,9 +74,11 @@ echo 'mise activate fish --shims | source' >> ~/.config/fish/config.fish echo 'mise activate fish | source' >> ~/.config/fish/fish.config ``` -:::tip You can also run `export PATH="$HOME/.local/share/mise/shims:$PATH"` which is what `mise activate --shims` does. -This can be helpful is mise may not be available at that point in time. It's also a tiny bit faster, but since this is -only run once per shell session it's not a big deal. ::: +:::tip +You can also run `export PATH="$HOME/.local/share/mise/shims:$PATH"` which is what `mise activate --shims` does. +This can be helpful is mise may not be available at that point in time. It's also a tiny bit faster, +but since this is only run once per shell session it's not a big deal. +::: ## Shims vs PATH @@ -80,10 +88,11 @@ The following features are affected when shims are used **instead** of PATH acti - Most hooks won't trigger - The unix `which` command points to the shim, obscuring the real executable -In general, I recommend using PATH (`mise activate`) instead of shims for _interactive_ situations. The way activate -works is every time the prompt is displayed, mise-en-place will determine what PATH and other env vars should be and -export them. This is why it doesn't work well for non-interactive situations like scripts. The prompt never gets -displayed so you have to manually call `mise hook-env` to get mise to update the env vars. +In general, I recommend using PATH (`mise activate`) instead of shims for _interactive_ situations. The +way activate works is every time the prompt is displayed, mise-en-place will determine what PATH and other +env vars should be and export them. This is why it doesn't work well for non-interactive situations like +scripts. The prompt never gets displayed so you have to manually call `mise hook-env` to get mise to update +the env vars. Also, if you run a set of commands in a single line like the following: @@ -92,21 +101,24 @@ cd ~ cd ~/src/proj1 && node -v && cd ~/src/proj2 && node -v ``` -Using `mise activate`, this will use the tools from `~`, not from `~/src/proj1` or `~/src/proj2` even after the -directory changed because the prompt never got displayed. That might be obvious to you, not sure, what I'm trying to -convey though is just think of mise running just before your prompt gets displayedโ€”because that literally is what is -happening. It's not a magical utility that is capable of having your environment always setup perfectly in every -situation even though it might normally "feel" that way. +Using `mise activate`, this will use the tools from `~`, not from `~/src/proj1` or `~/src/proj2` even +after the directory changed because the prompt never got displayed. That might be obvious to you, not sure, +what I'm trying to convey though is just think of mise running just before your prompt gets displayedโ€”because +that literally is what is happening. It's not a magical utility that is capable of having your environment +always setup perfectly in every situation even though it might normally "feel" that way. Note that shims _will_ work with the inline example above. -::: info This may be fixable at least for some shells if they support a hook for directory change, however some -investigation will need to be done. See [#1294](https://github.com/jdx/mise/issues/1294) for details. ::: +::: info +This may be fixable at least for some shells if they support a hook for directory change, however +some investigation will need to be done. See [#1294](https://github.com/jdx/mise/issues/1294) for details. +::: ### Env vars and shims -A downside of shims is the "mise environment" is only loaded when a shim is called. This means if you set an environment -variable in `mise.toml`, it will only be run when a shim is called. So the following only works under `mise activate`: +A downside of shims is the "mise environment" is only loaded when a shim is called. This means if you +set an environment variable in `mise.toml`, it will only be run when a shim is called. So the following +only works under `mise activate`: ```sh $ mise set NODE_ENV=production @@ -122,7 +134,8 @@ $ node -p process.env.NODE_ENV production ``` -Also, `mise x|exec` and `mise r|run` can be used to get the environment even if you don't need any mise tools: +Also, `mise x|exec` and `mise r|run` can be used to get the environment even if you don't need any mise +tools: ```sh $ mise set NODE_ENV=production @@ -132,19 +145,21 @@ $ mise r some_task_that_uses_NODE_ENV production ``` -::: tip In general, [tasks](/tasks/) are a good way to ensure that the mise environment is always loaded so this isn't a -problem. ::: +::: tip +In general, [tasks](/tasks/) are a good way to ensure that the mise environment is always loaded so +this isn't a problem. +::: ### Hooks and shims -The [hooks](/hooks.html) `cd`, `enter`, `exit`, and `watch_files` only trigger with `mise activate`. However -`preinstall` and `postinstall` still work with shims because they don't require shell integration. +The [hooks](/hooks.html) `cd`, `enter`, `exit`, and `watch_files` only trigger with `mise activate`. However `preinstall` and `postinstall` still work with shims because they don't require shell integration. ### `which` -`which` is a command that I personally find great value in. shims effectively "break" `which` and cause it to show the -location of the shim. Of course `mise which` will show the location but I prefer the "cleanliness" of running -`which node` and getting back a real path with a version number inside of it. e.g: +`which` is a command that I personally find great value in. shims effectively "break" `which` and +cause it to show the location of the shim. Of course `mise which` will show the location but I prefer +the "cleanliness" of running `which node` and getting back a real path with a version number inside of it. +e.g: ```sh $ which node @@ -153,17 +168,17 @@ $ which node ## Hook on `cd` -Some version managers modify the behavior of `cd`. That might seem like the ideal method of making a version manager, it -has tons of gaps. It doesn't work if you use `pushd|popd` or other commands that modify PWDโ€”though some shells have a -"chpwd" hook that would. It doesn't run if you modify the `mise.toml` file. +Some version managers modify the behavior of `cd`. That might seem like the ideal method of making a version +manager, it has tons of gaps. It doesn't work if you use `pushd|popd` or other commands that modify PWDโ€”though +some shells have a "chpwd" hook that would. It doesn't run if you modify the `mise.toml` file. -The upside is that it doesn't run as frequently but since mise is written in rust the cost for executing mise is -negligible (~4-5ms). +The upside is that it doesn't run as frequently but since mise is written in rust the cost for executing +mise is negligible (~4-5ms). ## .zshrc/.bashrc files -rc files like `.zshrc` are unusual. It's a script but also runs only for interactive sessions. If you need to access -tools provided by mise inside of an rc file you have 2 options: +rc files like `.zshrc` are unusual. It's a script but also runs only for interactive sessions. If you need +to access tools provided by mise inside of an rc file you have 2 options: ::: code-group @@ -181,23 +196,23 @@ node some_script.js ::: -The only difference I can think of between these would be that using `hook-env` you will need to call it again if you -change directories but with shims that won't be necessary. The shims directory will be removed by `mise activate` -automatically so you won't need to worry about dealing with shims in your PATH. +The only difference I can think of between these would be that using `hook-env` you will need to call +it again if you change directories but with shims that won't be necessary. The shims directory will be +removed by `mise activate` automatically so you won't need to worry about dealing with shims in your PATH. ## Performance -Truthfully, you're probably not going to notice much in the way of performance with any solution here. However, I would -like to document what the tradeoffs are since it's not as simple as "shims are slow". In asdf they are, but that's -because asdf is written in bash. In mise the cost of the shims are negligible. +Truthfully, you're probably not going to notice much in the way of performance with any solution here. +However, I would like to document what the tradeoffs are since it's not as simple as "shims are slow". +In asdf they are, but that's because asdf is written in bash. In mise the cost of the shims are negligible. -First, since mise runs every time the prompt is displayed with `mise activate`, you'll pay a few ms cost every time the -prompt is displayed. Regardless of whether or not you're actively using a mise tool, you'll pay that penalty every time -you run any command. It does have some short-circuiting logic to make it faster if there are no changes but it doesn't -help much unless you have a very complex setup. +First, since mise runs every time the prompt is displayed with `mise activate`, you'll pay a few ms cost +every time the prompt is displayed. Regardless of whether or not you're actively using a mise tool, you'll +pay that penalty every time you run any command. It does have some short-circuiting logic to make it faster +if there are no changes but it doesn't help much unless you have a very complex setup. -shims have basically the same performance profile but run when the shim is called. This makes some situations better, -and some worse. +shims have basically the same performance profile but run when the shim is called. This makes some situations +better, and some worse. If you are calling a shim from within a bash script like this: @@ -207,29 +222,31 @@ for i in {1..500}; do done ``` -You'll pay the mise penalty every time you call it within the loop. However, if you did the same thing but call a -subprocess from within a shim (say, node creating a node subprocess), you will _not_ pay a new penalty. This is because -when a shim is called, mise sets up the environment with PATH for all tools and those PATH entries will be before the -shim directory. +You'll pay the mise penalty every time you call it within the loop. However, if you did the same thing +but call a subprocess from within a shim (say, node creating a node subprocess), you will _not_ pay a new +penalty. This is because when a shim is called, mise sets up the environment with PATH for all tools and +those PATH entries will be before the shim directory. -In other words, which is better in terms of performance just depends on how you're calling mise. Really though I think -most users won't notice a 5ms lag on their terminal so I suggest `mise activate`. +In other words, which is better in terms of performance just depends on how you're calling mise. Really +though I think most users won't notice a 5ms lag on their terminal so I suggest `mise activate`. ## Neither shims nor PATH -[I don't actually use either of these methods](https://mise.jdx.dev/how-i-use-mise.html). There are many ways to load -the mise environment that don't require either, chiefly: `mise x|exec` and `mise r|run`. +[I don't actually use either of these methods](https://mise.jdx.dev/how-i-use-mise.html). There are many +ways to load the mise environment that don't require either, chiefly: `mise x|exec` and `mise r|run`. -These will both load all of the tools and env vars before executing something. I find this to be ideal because I don't -need to modify my shell rc file at all and my environment is always loaded explicitly. I find this a "clean" way of -working. +These will both load all of the tools and env vars before executing something. I find this to be +ideal because I don't need to modify my shell rc file at all and my environment is always loaded +explicitly. I find this a "clean" way of working. -The obvious downside is that anytime I want to use `mise` I need to prefix it with `mise exec|run`, though I alias them -to `mx|mr`. +The obvious downside is that anytime I want to use `mise` I need to prefix it with `mise exec|run`, +though I alias them to `mx|mr`. -This is what I'd recommend if you're like me and prefer things to be precise over "easy". Or perhaps if you're just -wanting to use mise on a single project because that's what your team uses and prefer not to use it to manage anything -else on your system. IMO using a shell extension for that use-case would be overkill. +This is what I'd recommend if you're like me and prefer things to be precise over "easy". Or perhaps +if you're just wanting to use mise on a single project because that's what your team uses and prefer +not to use it to manage anything else on your system. IMO using a shell extension for that use-case +would be overkill. -Part of the reason for this is I often need to make sure I'm on my development version of mise. If you work on mise -yourself I would recommend working in a similar way and disabling `mise activate` or shims while you are working on it. +Part of the reason for this is I often need to make sure I'm on my development version of mise. If you +work on mise yourself I would recommend working in a similar way and disabling `mise activate` or shims +while you are working on it. diff --git a/docs/directories.md b/docs/directories.md index 9737e2fcd3..497cf68546 100644 --- a/docs/directories.md +++ b/docs/directories.md @@ -2,8 +2,9 @@ The following are the directories that mise uses. -::: tip If you often find yourself using these directories (as I do), I suggest setting all of them to `~/.mise` for -easy access. ::: +::: tip +If you often find yourself using these directories (as I do), I suggest setting all of them to `~/.mise` for easy access. +::: ## `~/.config/mise` @@ -18,9 +19,10 @@ dotfiles repo to share across machines. - Override: `$MISE_CACHE_DIR` - Default: `${XDG_CACHE_HOME:-$HOME/.cache}/mise`, _macOS: `~/Library/Caches/mise`._ -Stores internal cache that mise uses for things like the list of all available versions of a plugin. Do not share this -across machines. You may delete this directory any time mise isn't actively installing something. Do this with -`mise cache clear`. See [Cache Behavior](/cache-behavior) for more information. +Stores internal cache that mise uses for things like the list of all available versions of a +plugin. Do not share this across machines. You may delete this directory any time mise isn't actively installing something. +Do this with `mise cache clear`. +See [Cache Behavior](/cache-behavior) for more information. ## `~/.local/state/mise` @@ -35,21 +37,23 @@ machines. - Override: `$MISE_DATA_DIR` - Default: `${XDG_DATA_HOME:-$HOME/.local/share}/mise` -This is the main directory that mise uses and is where plugins and tools are installed into. It is nearly identical to -`~/.asdf` in asdf, so much so that you may be able to get by symlinking these together and using asdf and mise -simultaneously. (Supporting this isn't a project goal, however). +This is the main directory that mise uses and is where plugins and tools are installed into. +It is nearly identical to `~/.asdf` in asdf, so much so that you may be able to get by +symlinking these together and using asdf and mise simultaneously. (Supporting this isn't a +project goal, however). This directory _could_ be shared across machines but only if they run the same OS/arch. In general I wouldn't advise doing so. ### `~/.local/share/mise/downloads` -This is where plugins may optionally cache downloaded assets such as tarballs. Use the `always_keep_downloads` setting -to prevent mise from removing files from here. +This is where plugins may optionally cache downloaded assets such as tarballs. Use the +`always_keep_downloads` setting to prevent mise from removing files from here. ### `~/.local/share/mise/plugins` -mise installs plugins to this directory when running `mise plugins install`. If you are working on a plugin, I suggest +mise installs plugins to this directory when running `mise plugins install`. If you are working on a +plugin, I suggest symlinking it manually by running: ```sh @@ -58,11 +62,12 @@ ln -s ~/src/mise-my-tool ~/.local/share/mise/plugins/my-tool ### `~/.local/share/mise/installs` -This is where tools are installed to when running `mise install`. For example, `mise install node@20.0.0` will install -to `~/.local/share/mise/installs/node/20.0.0` +This is where tools are installed to when running `mise install`. For example, `mise install +node@20.0.0` will install to `~/.local/share/mise/installs/node/20.0.0` -This will also create other symlinks to this directory for version prefixes ("20" and "20.15") and matching aliases -("lts", "latest"). For example: +This will also create other symlinks to this directory for version prefixes ("20" and "20.15") +and matching aliases ("lts", "latest"). +For example: ```sh $ tree ~/.local/share/mise/installs/node @@ -74,5 +79,5 @@ latest -> ./20.15.0 ### `~/.local/share/mise/shims` -This is where mise places shims. Generally these are used for IDE integration or if `mise activate` does not work for -some reason. +This is where mise places shims. Generally these are used for IDE integration or if `mise activate` +does not work for some reason. diff --git a/docs/direnv.md b/docs/direnv.md index 7d77b25bec..1aef158193 100644 --- a/docs/direnv.md +++ b/docs/direnv.md @@ -1,31 +1,43 @@ # direnv -[direnv](https://direnv.net) and mise both manage environment variables based on directory. Because they both analyze -the current environment variables before and after their respective "hook" commands are run, they can sometimes conflict -with each other. - -::: warning The official stance is you should not use direnv with mise. Issues arising from incompatibilities are not -considered bugs. If mise has feature gaps that direnv resolves, please open an issue so we can close those gaps. While -that's the official stance, the reality is mise and direnv usually will work together just fine despite this. It's only -more advanced use-cases where problems arise. ::: - -If you have an issue, it's likely to do with the ordering of PATH. This means it would really only be a problem if you -were trying to manage the same tool with direnv and mise. For example, you may use `layout python` in an `.envrc` but -also be maintaining a `.tool-versions` file with python in it as well. - -A more typical usage of direnv would be to set some arbitrary environment variables, or add unrelated binaries to PATH. -In these cases, mise will not interfere with direnv. +[direnv](https://direnv.net) and mise both manage environment variables based on directory. Because +they both analyze +the current environment variables before and after their respective "hook" commands are run, they +can sometimes conflict with each other. + +::: warning +The official stance is you should not use direnv with mise. Issues arising +from incompatibilities are not considered bugs. If mise has feature gaps +that direnv resolves, please open an issue so we can close those gaps. +While that's the official stance, the reality is mise and direnv usually +will work together just fine despite this. It's only more advanced use-cases +where problems arise. +::: + +If you have an issue, it's likely to do with the ordering of PATH. This means it would +really only be a problem if you were trying to manage the same tool with direnv and mise. For +example, +you may use `layout python` in an `.envrc` but also be maintaining a `.tool-versions` file with +python +in it as well. + +A more typical usage of direnv would be to set some arbitrary environment variables, or add +unrelated +binaries to PATH. In these cases, mise will not interfere with direnv. ## mise inside of direnv (`use mise` in `.envrc`) -::: warning `use mise` is deprecated and no longer supported. If `mise activate` does not fit your use-case please post -an issue. ::: +::: warning +`use mise` is deprecated and no longer supported. If `mise activate` does +not fit your use-case please post an issue. +::: -If you do encounter issues with `mise activate`, or just want to use direnv in an alternate way, this is a simpler setup -that's less likely to cause issuesโ€”at the cost of functionality. +If you do encounter issues with `mise activate`, or just want to use direnv in an alternate way, +this is a simpler setup that's less likely to cause issuesโ€”at the cost of functionality. -This may be required if you want to use direnv's `layout python` with mise. Otherwise there are situations where mise -will override direnv's PATH. `use mise` ensures that direnv always has control. +This may be required if you want to use direnv's `layout python` with mise. Otherwise there are +situations where mise will override direnv's PATH. `use mise` ensures that direnv always has +control. To do this, first use `mise` to build a `use_mise` function that you can use in `.envrc` files: @@ -39,27 +51,32 @@ Now in your `.envrc` file add the following: use mise ``` -direnv will now call mise to export its environment variables. You'll need to make sure to add `use_mise` to all -projects that use mise (or use direnv's `source_up` to load it from a subdirectory). You can also add `use mise` to -`~/.config/direnv/direnvrc`. +direnv will now call mise to export its environment variables. You'll need to make sure to +add `use_mise` +to all projects that use mise (or use direnv's `source_up` to load it from a subdirectory). You can +also add `use mise` to `~/.config/direnv/direnvrc`. -Note that in this method direnv typically won't know to refresh `.tool-versions` files unless they're at the same level -as a `.envrc` file. You'll likely always want to have a `.envrc` file next to your `.tool-versions` for this reason. To -make this a little easier to manage, I encourage _not_ actually using `.tool-versions` at all, and instead setting -environment variables entirely in `.envrc`: +Note that in this method direnv typically won't know to refresh `.tool-versions` files +unless they're at the same level as a `.envrc` file. You'll likely always want to have +a `.envrc` file next to your `.tool-versions` for this reason. To make this a little +easier to manage, I encourage _not_ actually using `.tool-versions` at all, and instead +setting environment variables entirely in `.envrc`: ```sh export MISE_NODE_VERSION=20.0.0 export MISE_PYTHON_VERSION=3.11 ``` -Of course if you use `mise activate`, then these steps won't have been necessary and you can use mise as if direnv was -not used. +Of course if you use `mise activate`, then these steps won't have been necessary and you can use +mise +as if direnv was not used. If you continue to struggle, you can also try using the [shims method](dev-tools/shims.md). ### Do you need direnv? -While making mise compatible with direnv is, and will always be a major goal of this project, I also want mise to be -capable of replacing direnv if needed. This is why mise includes support for managing env vars and -[virtualenv](lang/python.md#automatic-virtualenv-activation) for python using `mise.toml`. +While making mise compatible with direnv is, and will always be a major goal of this project, I also +want mise to be capable of replacing direnv if needed. This is why mise includes support for +managing +env vars and [virtualenv](lang/python.md#automatic-virtualenv-activation) +for python using `mise.toml`. diff --git a/docs/environments/index.md b/docs/environments/index.md index c89cc04c9b..40ad405611 100644 --- a/docs/environments/index.md +++ b/docs/environments/index.md @@ -1,9 +1,11 @@ # Environments -> Like [direnv](https://github.com/direnv/direnv) it manages _environment variables_ for different project directories. +> Like [direnv](https://github.com/direnv/direnv) it +> manages _environment variables_ for +> different project directories. -Use mise to specify environment variables used for different projects. Create a `mise.toml` file in the root of your -project directory: +Use mise to specify environment variables used for different projects. Create a `mise.toml` file +in the root of your project directory: ```toml [env] @@ -31,9 +33,9 @@ $ mise unset NODE_ENV ## Lazy eval -Environment variables typically are resolved before toolsโ€”that way you can configure tool installation with environment -variables. However, sometimes you want to access environment variables produced by tools. To do that, turn the value -into a map with `tools = true`: +Environment variables typically are resolved before toolsโ€”that way you can configure tool installation +with environment variables. However, sometimes you want to access environment variables produced by +tools. To do that, turn the value into a map with `tools = true`: ```toml [env] @@ -53,25 +55,29 @@ _.file = { path = [".env.json"], redact = true } ## `env._` directives -`env._.*` define special behavior for setting environment variables. (e.g.: reading env vars from a file). Since nested -environment variables do not make sense, we make use of this fact by creating a key named "\_" which is a TOML table for -the configuration of these directives. +`env._.*` define special behavior for setting environment variables. (e.g.: reading env vars +from a file). Since nested environment variables do not make sense, +we make use of this fact by creating a key named "\_" which is a +TOML table for the configuration of these directives. ### `env._.file` -In `mise.toml`: `env._.file` can be used to specify a [dotenv](https://dotenv.org) file to load. It can be a string or -array and uses relative or absolute paths: +In `mise.toml`: `env._.file` can be used to specify a [dotenv](https://dotenv.org) file to load. +It can be a string or array and uses relative or absolute paths: ```toml [env] _.file = '.env' ``` -::: info This uses [dotenvy](https://crates.io/crates/dotenvy) under the hood. If you have problems with the way -`env._.file` works, you will likely need to post an issue there, not to mise since there is not much mise can do about -the way that crate works. ::: +::: info +This uses [dotenvy](https://crates.io/crates/dotenvy) under the hood. If you have problems with +the way `env._.file` works, you will likely need to post an issue there, +not to mise since there is not much mise can do about the way that crate works. +::: -Or set [`MISE_ENV_FILE=.env`](/configuration#mise-env-file) to automatically load dotenv files in any directory. +Or set [`MISE_ENV_FILE=.env`](/configuration#mise-env-file) to automatically load dotenv files in any +directory. You can also use json or yaml files: @@ -98,11 +104,7 @@ _.path = [ ] ``` -Adding a relative path like `tools/bin` or `./tools/bin` is similar to adding a path rooted at -`{{config_root}}`, but behaves differently if your config file is nested in a subdirectory like -`/path/to/project/.config/mise/config.toml`. Including `tools/bin` will add the path -`/path/to/project/.config/mise/tools/bin`, whereas including `{{config_root}}/tools/bin` will add the -path `/path/to/project/tools/bin`. +Adding a relative path like `tools/bin` or `./tools/bin` is similar to adding a path rooted at `{{config_root}}`, but behaves differently if your config file is nested in a subdirectory like `/path/to/project/.config/mise/config.toml`. Including `tools/bin` will add the path `/path/to/project/.config/mise/tools/bin`, whereas including `{{config_root}}/tools/bin` will add the path `/path/to/project/tools/bin`. ### `env._.source` @@ -113,24 +115,25 @@ Source an external bash script and pull exported environment variables out of it _.source = "./script.sh" ``` -::: info This **must** be a script that runs in bash as if it were executed like this: +::: info +This **must** be a script that runs in bash as if it were executed like this: ```sh source ./script.sh ``` -The shebang will be **ignored**. See [#1448](https://github.com/jdx/mise/issues/1448) for a potential alternative that -would work with binaries or other script languages. ::: +The shebang will be **ignored**. See [#1448](https://github.com/jdx/mise/issues/1448) +for a potential alternative that would work with binaries or other script languages. +::: ## Plugin-provided `env._` Directives -Plugins can provide their own `env._` directives. See [mise-env-sample](https://github.com/jdx/mise-env-sample) for an -example of one. +Plugins can provide their own `env._` directives. See [mise-env-sample](https://github.com/jdx/mise-env-sample) for an example of one. ## Multiple `env._` Directives -It may be necessary to use multiple `env._` directives, however TOML fails with this syntax because it has 2 identical -keys in a table: +It may be necessary to use multiple `env._` directives, however TOML fails with this syntax +because it has 2 identical keys in a table: ```toml [env] diff --git a/docs/environments/secrets.md b/docs/environments/secrets.md index 67b3071325..ddace64589 100644 --- a/docs/environments/secrets.md +++ b/docs/environments/secrets.md @@ -1,8 +1,8 @@ # Secrets -Because env vars in mise.toml can store sensitive information, mise has built-in support for reading encrypted secrets -from files. Currently, this is done with a [sops](https://getsops.io) implementation however other secret backends could -be added in the future. +Because env vars in mise.toml can store sensitive information, mise has built-in support for reading +encrypted secrets from files. Currently, this is done with a [sops](https://getsops.io) implementation +however other secret backends could be added in the future. Secrets are `.env.(json|yaml|toml)` files with a simple structure, for example: @@ -24,19 +24,21 @@ mise will automatically use a secret backend like sops if the file is encrypted. ## sops -mise uses the rust [rops](https://github.com/gibbz00/rops) library to interact with [sops](https://getsops.io) files. If -you encrypt a sops file, mise will automatically decrypt it when reading the file. sops files can be in json, yaml, or -toml formatโ€”however if you want to use toml you'll need to use the rops cli instead of sops. Otherwise, either sops or -rops will work fine. +mise uses the rust [rops](https://github.com/gibbz00/rops) library to interact with [sops](https://getsops.io) files. +If you encrypt a sops file, mise will automatically decrypt it when reading the file. sops files can +be in json, yaml, or toml formatโ€”however if you want to use toml you'll need to use the rops cli instead +of sops. Otherwise, either sops or rops will work fine. -::: info Currently age is the only sops encryption method supported. ::: +::: info +Currently age is the only sops encryption method supported. +::: -In order to encrypt a file with sops, you'll first need to install it (`mise use -g sops`). You'll also need to install -[age](https://github.com/FiloSottile/age) (`mise use -g age`) to generate a keypair for sops to use if you have not -already done so. +In order to encrypt a file with sops, you'll first need to install it (`mise use -g sops`). You'll +also need to install [age](https://github.com/FiloSottile/age) (`mise use -g age`) to generate a keypair for sops to use +if you have not already done so. -To generate a keypair with age run the following and note the public key that is output to use in the next command to -`sops`: +To generate a keypair with age run the following and note the public key that is output to use +in the next command to `sops`: ```sh $ age-keygen -o ~/.config/mise/age.txt @@ -49,11 +51,13 @@ Assuming we have a `.env.json` file like at the top of this doc, we can now encr sops encrypt -i --age "" .env.json ``` -::: tip The `-i` here overwrites the file with an encrypted version. This encrypted version is safe to commit into your -repo as without the private key (`~/.config/mise/age.txt` in this case) the file is useless. +::: tip +The `-i` here overwrites the file with an encrypted version. This encrypted version is safe to commit +into your repo as without the private key (`~/.config/mise/age.txt` in this case) the file is useless. You can later decrypt the file with `sops decrypt -i .env.json` or edit it in EDITOR with `sops edit .env.json`. -However, you'll first need to set SOPS_AGE_KEY_FILE to `~/.config/mise/age.txt` to decrypt the file. ::: +However, you'll first need to set SOPS_AGE_KEY_FILE to `~/.config/mise/age.txt` to decrypt the file. +::: Lastly, we need to add the file to our mise config which can be done with `mise set _.file=.env.json`. diff --git a/docs/external-resources.md b/docs/external-resources.md index 7a94419f46..b30a9d9091 100644 --- a/docs/external-resources.md +++ b/docs/external-resources.md @@ -3,12 +3,9 @@ Links to articles, videos, and other resources that are relevant to mise. - 2024-11-20 - Migrating from nvm to mise - -- 2024-06-27 - Managing Development Tool Versions with mise - - -- 2024-06-09 - Replacing pyenv, nvm, direnv with Mise - - +- 2024-06-27 - Managing Development Tool Versions with mise - +- 2024-06-09 - Replacing pyenv, nvm, direnv with Mise - - 2024-04-07 - Lalaluka stream: Grroxy, Cook, and jdx/mise - -- 2024-01-14 - Manage all your runtime versions with one tool (asdf, mise) - - +- 2024-01-14 - Manage all your runtime versions with one tool (asdf, mise) - - 2023-12-30 - You should be using mise - - 2023-03-04 - Beginner's Guide to rtx (mise) - diff --git a/docs/faq.md b/docs/faq.md index 1c69f6393d..b5e6cc6a7b 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -2,98 +2,114 @@ ## I don't want to put a `mise.toml`/`.tool-versions` file into my project since git shows it as an untracked file -Use [`mise.local.toml`](https://mise.jdx.dev/configuration.html#mise-toml) and put that into your global gitignore file. -This file should never be committed. +Use [`mise.local.toml`](https://mise.jdx.dev/configuration.html#mise-toml) and put that into your global gitignore file. This file should never be committed. If you really want to use a `mise.toml` or `.tool-versions`, here are 3 ways to make git ignore these files: -- Adding `mise.toml` to project's `.git/info/exclude`. This file is local to your project so there is no need to commit - it. -- Adding `mise.toml` to project's `.gitignore` file. This has the downside that you need to commit the change to the - ignore file. -- Adding `mise.toml` to global gitignore (`core.excludesFile`). This will cause git to ignore `mise.toml` files in all - projects. You can explicitly add one to a project if needed with `git add --force mise.toml`. +- Adding `mise.toml` to project's `.git/info/exclude`. This file is local to your project so + there is no need to commit it. +- Adding `mise.toml` to project's `.gitignore` file. This has the downside that you need to + commit the change to the ignore file. +- Adding `mise.toml` to global gitignore (`core.excludesFile`). This will cause git to + ignore `mise.toml` files in all projects. You can explicitly add one to a project if needed + with `git add --force mise.toml`. ## What is the difference between "nodejs" and "node" (or "golang" and "go")? -These are aliased. For example, `mise use nodejs@14.0` is the same as `mise install node@14.0`. This means it is not -possible to have these be different plugins. +These are aliased. For example, `mise use nodejs@14.0` is the same as `mise install node@14.0`. This +means it is not possible to have these be different plugins. -This is for convenience so you don't need to remember which one is the "official" name. However if something with the -aliasing is acting up, submit a ticket or just stick to using "node" and "go". Under the hood, when mise reads a config -file or takes CLI input it will swap out "nodejs" and "golang". +This is for convenience so you don't need to remember which one is the "official" name. However if +something with the aliasing is acting up, submit a ticket or just stick to using "node" and "go". +Under the hood, when mise reads a config file or takes CLI input it will swap out "nodejs" and +"golang". -While this change is rolling out, there is some migration code that will move installs/plugins from the "nodejs" and -"golang" directories to the new names. If this runs for you you'll see a message but it should not run again unless -there is some kind of problem. In this case, it's probably easiest to just run +While this change is rolling out, there is some migration code that will move installs/plugins from +the "nodejs" and "golang" directories to the new names. If this runs for you you'll see a message +but it should not run again unless there is some kind of problem. In this case, it's probably +easiest to just +run `rm -rf ~/.local/share/mise/installs/{golang,nodejs} ~/.local/share/mise/plugins/{golang,nodejs}`. Once most users have migrated over this migration code will be removed. ## What does `mise activate` do? -It registers a shell hook to run `mise hook-env` every time the shell prompt is displayed. `mise hook-env` checks the -current env vars (most importantly `PATH` but there are others like `GOROOT` or `JAVA_HOME` for some tools) and -adds/removes/updates the ones that have changed. +It registers a shell hook to run `mise hook-env` every time the shell prompt is displayed. +`mise hook-env` checks the current env vars (most importantly `PATH` but there are others like +`GOROOT` or `JAVA_HOME` for some tools) and adds/removes/updates the ones that have changed. -For example, if you `cd` into a different directory that has `java 18` instead of `java 17` specified, just before the -next prompt is displayed the shell runs: `eval "$(mise hook-env)"` which will execute something like this in the current -shell session: +For example, if you `cd` into a different directory that has `java 18` instead of `java 17` +specified, just before the next prompt is displayed the shell runs: `eval "$(mise hook-env)"` +which will execute something like this in the current shell session: ```sh export JAVA_HOME=$HOME/.local/share/installs/java/18 export PATH=$HOME/.local/share/installs/java/18/bin:$PATH ``` -In reality updating `PATH` is a bit more complex than that because it also needs to remove java-17, but you get the -idea. - -You may think that is excessive to run `mise hook-env` every time the prompt is displayed and it should only run on -`cd`, however there are plenty of situations where it needs to run without the directory changing, for example if -`.tool-versions` or `mise.toml` was just edited in the current shell. - -Because it runs on prompt display, if you attempt to use `mise activate` in a non-interactive session (like a bash -script), it will never call `mise hook-env` and in effect will never modify PATH because it never displays a prompt. For -this type of setup, you can either call `mise hook-env` manually every time you wish to update PATH, or use -[shims](/dev-tools/shims.md) instead (preferred). Or if you only need to use mise for certain commands, just prefix the -commands with [`mise x --`](./cli/exec). For example, `mise x -- npm test` or `mise x -- ./my_script.sh`. - -`mise hook-env` will exit early in different situations if no changes have been made. This prevents adding latency to -your shell prompt every time you run a command. You can run `mise hook-env` yourself to see what it outputs, however it -is likely nothing if you're in a shell that has already been activated. - -`mise activate` also creates a shell function (in most shells) called `mise`. This is a trick that makes it possible for -`mise shell` and `mise deactivate` to work without wrapping them in `eval "$(mise shell)"`. +In reality updating `PATH` is a bit more complex than that because it also needs to remove java-17, +but you get the idea. + +You may think that is excessive to run `mise hook-env` every time the prompt is displayed +and it should only run on `cd`, however there are plenty of +situations where it needs to run without the directory changing, for example if `.tool-versions` or +`mise.toml` was just edited in the current shell. + +Because it runs on prompt display, if you attempt to use `mise activate` in a +non-interactive session (like a bash script), it will never call `mise hook-env` and in effect will +never modify PATH because it never displays a prompt. For this type of setup, you can either call +`mise hook-env` manually every time you wish to update PATH, or use [shims](/dev-tools/shims.md) +instead (preferred). +Or if you only need to use mise for certain commands, just prefix the commands with +[`mise x --`](./cli/exec). +For example, `mise x -- npm test` or `mise x -- ./my_script.sh`. + +`mise hook-env` will exit early in different situations if no changes have been made. This prevents +adding latency to your shell prompt every time you run a command. You can run `mise hook-env` +yourself +to see what it outputs, however it is likely nothing if you're in a shell that has already been +activated. + +`mise activate` also creates a shell function (in most shells) called `mise`. +This is a trick that makes it possible for `mise shell` +and `mise deactivate` to work without wrapping them in `eval "$(mise shell)"`. ## Windows support? -While mise runs great in WSL, native Windows is also supported, though via the use of shims until someone adds -[powershell](https://github.com/jdx/mise/issues/3451) support. +While mise runs great in WSL, native Windows is also supported, though via the use of shims until +someone adds [powershell](https://github.com/jdx/mise/issues/3451) support. As you'll need to use shims, this means you won't have environment variables from mise.toml unless you run mise via -[`mise x`](/cli/exec) or [`mise run`](/cli/run)โ€”though that's actually how I use mise on my mac so for me that's my -preferred workflow anyway. +[`mise x`](/cli/exec) or [`mise run`](/cli/run)โ€”though that's actually how I use mise on my mac so +for me that's my preferred workflow anyway. ## How do I use mise with http proxies? -Short answer: just set `http_proxy` and `https_proxy` environment variables. These should be lowercase. +Short answer: just set `http_proxy` and `https_proxy` environment variables. These should be +lowercase. -This may not work with all plugins if they are not configured to use these env vars. If you're having a proxy-related -issue installing something specific you should post an issue on the plugin's repository. +This may not work with all plugins if they are not configured to use these env vars. +If you're having a proxy-related issue installing something specific you should post an issue on the +plugin's repository. ## How do the shorthand plugin names map to repositories? e.g.: how does `mise plugin install elixir` know to fetch ? -We maintain [an index](https://github.com/mise-plugins/registry) of shorthands that mise uses as a base. This is -regularly updated every time that mise has a release. This repository is stored directly into the codebase -[here](https://github.com/jdx/mise/blob/main/registry.toml). +We maintain [an index](https://github.com/mise-plugins/registry) of shorthands that mise uses as a +base. +This is regularly updated every time that mise has a release. This repository is stored directly +into +the codebase [here](https://github.com/jdx/mise/blob/main/registry.toml). ## Does "node@20" mean the newest available version of node? -It depends on the command. Normally, for most commands and inside of config files, "node@20" will point to the latest -_installed_ version of node-20.x. You can find this version by running `mise latest --installed node@20` or by seeing -what the `~/.local/share/mise/installs/node/20` symlink points to: +It depends on the command. Normally, for most commands and inside of config files, "node@20" will +point to the latest _installed_ version of node-20.x. You can find this version by running +`mise latest --installed node@20` or by seeing what the `~/.local/share/mise/installs/node/20` +symlink +points to: ```sh $ ls -l ~/.local/share/mise/installs/node/20 @@ -106,8 +122,8 @@ There are some exceptions to this, such as the following: - `mise latest node@20` - `mise upgrade node@20` -These will use the latest _available_ version of node-20.x. This generally makes sense because you wouldn't want to -install a version that is already installed. +These will use the latest _available_ version of node-20.x. This generally makes sense because you +wouldn't want to install a version that is already installed. ## How do I migrate from asdf? @@ -125,37 +141,36 @@ mv ~/.tool-versions ~/.tool-versions.bak cat ~/.tool-versions.bak | tr ' ' '@' | xargs -n2 mise use -g ``` -Once you are comfortable with mise, you can remove the `.tool-versions.bak` file and -[uninstall `asdf`](https://asdf-vm.com/manage/core.html#uninstall) +Once you are comfortable with mise, you can remove the `.tool-versions.bak` file and [uninstall `asdf`](https://asdf-vm.com/manage/core.html#uninstall) ## How compatible is mise with asdf? -mise should be able to read/install any `.tool-versions` file used by asdf. Any asdf plugin should be usable in mise. -The commands in mise are slightly different, such as `mise install node@20.0.0` vs `asdf install node 20.0.0`โ€”this is -done so multiple tools can be specified at once. However, asdf-style syntax is still supported: -(`mise install node 20.0.0`). This is the case for most commands, though the help for the command may say that -asdf-style syntax is supported. When in doubt, just try asdf syntax and see if it worksโ€”it probably does. +mise should be able to read/install any `.tool-versions` file used by asdf. Any asdf plugin +should be usable in mise. The commands in mise are slightly +different, such as `mise install node@20.0.0` vs `asdf install node 20.0.0`โ€”this is done so +multiple tools can be specified at once. However, asdf-style syntax is still supported: (`mise +install node 20.0.0`). This is the case for most commands, though the help for the command may +say that asdf-style syntax is supported. When in doubt, just try asdf syntax and see if it worksโ€”it probably does. -UPDATE (2025-01-01): mise was designed to be compatible with the asdf written in bash (<=0.15). The new asdf written in -go (>=0.16) has commands mise does not support like `asdf set`. `mise set` is an existing command that is completely -different than `asdf set`โ€”in mise that sets env vars. +UPDATE (2025-01-01): mise was designed to be compatible with the asdf written in bash (<=0.15). The new asdf written in go (>=0.16) +has commands mise does not support like `asdf set`. `mise set` is an existing command that is completely different than `asdf set`โ€”in mise that sets env vars. -This isn't important for usability reasons so much as making it so plugins continue to work that call asdf commands -inside of the plugin code. +This isn't important for usability reasons so much as making it so plugins continue to work that +call asdf commands inside of the plugin code. -Using commands like `mise use` may output `.tool-versions` files that are not compatible with asdf, such as using fuzzy -versions. You can set `--pin` or `MISE_PIN=1` to make `mise use` output asdf-compatible versions in `.tool-versions`. -Alternatively, you can have `mise.toml` and `.tool-versions` sitting side-by-side. `mise.toml` tools will override tools -defined in a `.tool-versions` in the same directory. +Using commands like `mise use` may output `.tool-versions` files that are not compatible with asdf, +such as using fuzzy versions. You can set `--pin` or `MISE_PIN=1` to make `mise use` output asdf-compatible versions +in `.tool-versions`. Alternatively, you can have `mise.toml` and `.tool-versions` sitting side-by-side. `mise.toml` tools +will override tools defined in a `.tool-versions` in the same directory. -That said, in general compatibility with asdf is no longer a design goal. It's long been the case that there is no -reason to prefer asdf to mise so users should migrate. While plenty of users have teams which use both in tandem, issues -with such a setup are unlikely to be prioritized. +That said, in general compatibility with asdf is no longer a design goal. It's long been the case +that there is no reason to prefer asdf to mise so users should migrate. While plenty of users have +teams which use both in tandem, issues with such a setup are unlikely to be prioritized. ## How do I disable/force CLI color output? -mise uses [console.rs](https://docs.rs/console/latest/console/fn.colors_enabled.html) which honors the -[clicolors spec](https://bixense.com/clicolors/): +mise uses [console.rs](https://docs.rs/console/latest/console/fn.colors_enabled.html) which +honors the [clicolors spec](https://bixense.com/clicolors/): - `CLICOLOR != 0`: ANSI colors are supported and should be used when the program isnโ€™t piped. - `CLICOLOR == 0`: Donโ€™t output ANSI color escape codes. @@ -163,9 +178,10 @@ mise uses [console.rs](https://docs.rs/console/latest/console/fn.colors_enabled. ## Is mise secure? -Providing a secure supply chain is incredibly important. mise already provides a more secure experience when compared to -asdf. Security-oriented evaluations and contributions are welcome. We also urge users to look after the plugins they -use, and urge plugin authors to look after the users they serve. +Providing a secure supply chain is incredibly important. mise already provides a more secure +experience when compared to asdf. Security-oriented evaluations and contributions are welcome. +We also urge users to look after the plugins they use, and urge plugin authors to look after +the users they serve. For more details see [SECURITY.md](https://github.com/jdx/mise/blob/main/SECURITY.md). @@ -173,11 +189,8 @@ For more details see [SECURITY.md](https://github.com/jdx/mise/blob/main/SECURIT usage () is a spec and CLI for defining CLI tools. -Arguments, flags, environment variables, and config files can all be defined in a Usage spec. It can be thought of like -OpenAPI (swagger) for CLIs. +Arguments, flags, environment variables, and config files can all be defined in a Usage spec. It can be thought of like OpenAPI (swagger) for CLIs. -`usage` can be installed with `mise` using `mise use -g usage` and is required to get the autocompetion working. See -[autocompletion](/installing-mise.html#autocompletion). +`usage` can be installed with `mise` using `mise use -g usage` and is required to get the autocompetion working. See [autocompletion](/installing-mise.html#autocompletion). -You can leverage usage in file tasks to get auto-completion working, see -[file tasks arguments](/tasks/file-tasks.html#arguments). +You can leverage usage in file tasks to get auto-completion working, see [file tasks arguments](/tasks/file-tasks.html#arguments). diff --git a/docs/getting-started.md b/docs/getting-started.md index 001e3f437a..facc568038 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -1,13 +1,13 @@ # Getting Started -This will show you how to install mise and get started with it. This is a suitable way when using an interactive shell -like `bash`, `zsh`, or `fish`. +This will show you how to install mise and get started with it. This is a suitable way when using an interactive shell like `bash`, `zsh`, or `fish`. ## 1. Install `mise` CLI See [installing mise](/installing-mise) for other ways to install mise (`macport`, `apt`, `yum`, `nix`, etc.). -:::tabs key:installing-mise == Linux/macOS +:::tabs key:installing-mise +== Linux/macOS ```shell curl https://mise.run | sh @@ -21,15 +21,18 @@ You can verify the installation by running: # mise 2024.x.x ``` -- `~/.local/bin` does not need to be in `PATH`. mise will automatically add its own directory to `PATH` when activated. +- `~/.local/bin` does not need to be in `PATH`. mise will automatically add its own directory to `PATH` + when activated. -== Brew Using [brew](https://brew.sh/) package manager +== Brew +Using [brew](https://brew.sh/) package manager ```shell brew install mise ``` -== Windows ::: code-group +== Windows +::: code-group ```shell [winget] winget install jdx.mise @@ -66,24 +69,23 @@ sudo apt install -y mise ::: -`mise` respects [`MISE_DATA_DIR`](/configuration) and [`XDG_DATA_HOME`](/configuration) if you'd like to change these -locations. +`mise` respects [`MISE_DATA_DIR`](/configuration) and [`XDG_DATA_HOME`](/configuration) if you'd like +to change these locations. ## 2. Activate `mise` Now that `mise` is installed, you can optionally activate it or add its [shims](dev-tools/shims.md) to `PATH`. -- [`mise activate`](/cli/activate) method updates your environment variable and `PATH` every time your prompt is run to - ensure you use the correct versions. -- [Shims](dev-tools/shims.md) are symlinks to the `mise` binary that intercept commands and load the appropriate - environment +- [`mise activate`](/cli/activate) method updates your environment variable and `PATH` every time your prompt is run to ensure you use the correct versions. +- [Shims](dev-tools/shims.md) are symlinks to the `mise` binary that intercept commands and load the appropriate environment -::: warning Shims do not support all the features of `mise activate`.
See -[shims vs path](/dev-tools/shims.html#shims-vs-path) for more info. ::: +::: warning +Shims do not support all the features of `mise activate`.
+See [shims vs path](/dev-tools/shims.html#shims-vs-path) for more info. +::: -For interactive shells, `mise activate` is recommended. In non-interactive sessions, like CI/CD, IDEs, and scripts, -using `shims` might work best. You can also not use any and call `mise exec/run` directly instead. See -[this guide](dev-tools/shims.md) for more information. +For interactive shells, `mise activate` is recommended. In non-interactive sessions, like CI/CD, IDEs, and scripts, using `shims` might work best. You can also not use any and call `mise exec/run` directly instead. +See [this guide](dev-tools/shims.md) for more information. :::tabs key:installing-mise @@ -103,9 +105,12 @@ echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc echo '~/.local/bin/mise activate fish | source' >> ~/.config/fish/config.fish ``` -- Make sure you restart your shell session after modifying your rc file in order for it to take effect. -- Also note that this uses `~/.local/bin/mise` as the binary location since that's what uses by - default. If you've installed mise by some other means it may be on `PATH` or somewhere different. +- Make sure you restart your shell session after modifying your rc file in order for it to take + effect. +- Also note that + this uses `~/.local/bin/mise` as the binary location since that's what uses by + default. If you've + installed mise by some other means it may be on `PATH` or somewhere different. == Brew @@ -119,8 +124,7 @@ echo 'eval "$(/opt/homebrew/bin/mise activate bash)"' >> ~/.bashrc echo 'eval "$(/opt/homebrew/bin/mise activate zsh)"' >> ~/.zshrc ``` -- Activation will be handled automatically if you use `fish` shell and installed via `homebrew`. This can be disabled - with `set -Ux MISE_FISH_AUTO_ACTIVATE 0`. +- Activation will be handled automatically if you use `fish` shell and installed via `homebrew`. This can be disabled with `set -Ux MISE_FISH_AUTO_ACTIVATE 0`. - Make sure you restart your shell session after modifying your rc file in order for it to take effect. == Windows @@ -157,8 +161,11 @@ echo 'mise activate fish | source' >> ~/.config/fish/config.fish ## 3. Using `mise` -:::info Of course, if using mise solely for [environment management](/environments/) or [running tasks](/tasks/) this -step is not necessary. You can use it to make sure `mise` is correctly setup. ::: +:::info +Of course, if using mise solely for [environment management](/environments/) +or [running tasks](/tasks/) +this step is not necessary. You can use it to make sure `mise` is correctly setup. +::: As an example, here is how you can install `node` and set it as the global default: @@ -173,8 +180,10 @@ mise exec -- node -v # v22.x.x ``` -:::tip Use `mise x -- node -v` or set a shell alias in your shell's rc file like `alias x="mise x --"` to save some -keystrokes. ::: +:::tip +Use `mise x -- node -v` or set a shell alias in your shell's rc file like `alias x="mise x --"` to +save some keystrokes. +::: If you did activate `mise` or add its shims to `PATH`, then `node` is also available directly! diff --git a/docs/hooks.md b/docs/hooks.md index 3b6ea1ce8b..f87307550b 100644 --- a/docs/hooks.md +++ b/docs/hooks.md @@ -1,8 +1,8 @@ # Hooks -You can have mise automatically execute scripts during a `mise activate` session. You cannot use these without the -`mise activate` shell hook installed in your shellโ€”except the `preinstall` and `postinstall` hooks. The configuration -goes into `mise.toml`. +You can have mise automatically execute scripts during a `mise activate` session. You cannot use these +without the `mise activate` shell hook installed in your shellโ€”except the `preinstall` and `postinstall` hooks. +The configuration goes into `mise.toml`. ## CD hook @@ -15,8 +15,7 @@ cd = "echo 'I changed directories'" ## Enter hook -This hook is run when the project is entered. Changing directories while in the project will not trigger this hook -again. +This hook is run when the project is entered. Changing directories while in the project will not trigger this hook again. ```toml [hooks] @@ -54,8 +53,7 @@ script = "cargo fmt" This hook will have the following environment variables set: -- `MISE_WATCH_FILES_MODIFIED`: A colon-separated list of the files that have been modified. Colons are escaped with a - backslash. +- `MISE_WATCH_FILES_MODIFIED`: A colon-separated list of the files that have been modified. Colons are escaped with a backslash. ## Hook execution @@ -63,8 +61,7 @@ Hooks are executed with the following environment variables set: - `MISE_ORIGINAL_CWD`: The directory that the user is in. - `MISE_PROJECT_DIR`: The root directory of the project. -- `MISE_PREVIOUS_DIR`: The directory that the user was in before the directory change (only if a directory change - occurred). +- `MISE_PREVIOUS_DIR`: The directory that the user was in before the directory change (only if a directory change occurred). ## Shell hooks @@ -76,10 +73,12 @@ shell = "bash" script = "source completions.sh" ``` -::: warning I feel this should be obvious but in case it's not, this isn't going to do any sort of cleanup when you -_leave_ the directory like using `[env]` does in `mise.toml`. You're literally just executing shell code when you enter -the directory which mise has no way to track at all. I don't think there is a solution to this problem and it's likely -the reason direnv has never implemented something similar. +::: warning +I feel this should be obvious but in case it's not, this isn't going to do any sort of cleanup +when you _leave_ the directory like using `[env]` does in `mise.toml`. You're literally just +executing shell code when you enter the directory which mise has no way to track at all. +I don't think there is a solution to this problem and it's likely the reason direnv has never +implemented something similar. I think in most situations this is probably fine, though worth keeping in mind. diff --git a/docs/how-i-use-mise.md b/docs/how-i-use-mise.md index b3c7ca3df4..d30a0da9a8 100644 --- a/docs/how-i-use-mise.md +++ b/docs/how-i-use-mise.md @@ -1,33 +1,41 @@ # How I use mise -This is a very different doc than the rest of the site. It's not my intention to make this valuable to anyone. In fact -it may end up being useful to 0 people. +This is a very different doc than the rest of the site. It's not my +intention to make this valuable to anyone. In fact it may end up being +useful to 0 people. -I'm probably the strangest user of mise out there. My use case is the most atypical for a number of reasons I'll get to. -That said, I often find myself saying to friends "you know the way I use mise..." and thought it might be useful to -actually write down the way I use it in case anyone is interested. +I'm probably the strangest user of mise out there. My use case is the +most atypical for a number of reasons I'll get to. That said, I often +find myself saying to friends "you know the way I use mise..." and thought +it might be useful to actually write down the way I use it in case +anyone is interested. -This is an advanced article. I'm not going to take the time to explain the tools and techniques here. If you're curious, -file an issue or ask me in the Discord. +This is an advanced article. I'm not going to take the time to explain +the tools and techniques here. If you're curious, file an issue or ask +me in the Discord. ## My setup -I use a mac with fish shell and am a heavy homebrew user. I've been using both for over a decade. +I use a mac with fish shell and am a heavy homebrew user. I've been using +both for over a decade. -My main editor(s) are JetBrains products (IntelliJ, RustRover, Webstorm). I also use nvim as a secondary editor -(Astronvim with some minimal config). I probably spend 70% of my time in JetBrains. +My main editor(s) are JetBrains products (IntelliJ, RustRover, Webstorm). +I also use nvim as a secondary editor (Astronvim with some minimal config). +I probably spend 70% of my time in JetBrains. -I tend to keep a terminal open (kitty) while working in JetBrains. I do not often run tests or builds with in the IDE. -Not sure why, just never been in the habit of that. (Because of that these docs and possibly mise support in IDEs may -not be what it should be-it's just not how I work personally). +I tend to keep a terminal open (kitty) while working in JetBrains. I do not +often run tests or builds with in the IDE. Not sure why, just never been +in the habit of that. (Because of that these docs and possibly mise support in +IDEs may not be what it should be-it's just not how I work personally). ## `mise activate` -Unlike most mise users, I don't use `mise activate` or shims at all unless I'm explicitly testing them-and that's rarely -the case. It certainly doesn't go into my `~/.config/fish/config.fish`. +Unlike most mise users, I don't use `mise activate` or +shims at all unless I'm explicitly testing them-and that's rarely the +case. It certainly doesn't go into my `~/.config/fish/config.fish`. -Because I work on mise itself, I often need to rebuild it and run the code from my repo. For this, I have the following -bash shim located in `~/bin/@mise`: +Because I work on mise itself, I often need to rebuild it and run the code from my repo. For this, I have the following bash shim located in +`~/bin/@mise`: ```fish #!/usr/bin/env bash @@ -36,10 +44,12 @@ set -euo pipefail exec cargo run -q --all-features --manifest-path ~/src/mise/Cargo.toml -- "$@" ``` -:::info The "@" prefix I use for things that will perform a rebuild-i.e.: they're slow. ::: +:::info +The "@" prefix I use for things that will perform a rebuild-i.e.: they're slow. +::: -This way I can easily test mise in any directory with `@mise`. I probably run this more often than without just out of -habit. For example, if I want to test `mise activate` in zsh: +This way I can easily test mise in any directory with `@mise`. I probably +run this more often than without just out of habit. For example, if I want to test `mise activate` in zsh: ```sh zsh @@ -48,38 +58,52 @@ eval "$(@mise activate zsh)" ## Minimal tools -Might be surprising to folks but I don't use too many mise plugins. Well I have a lot in my config, but I don't actually -use them. They're for testing. +Might be surprising to folks but I don't use too many mise plugins. Well +I have a lot in my config, but I don't actually use them. They're for +testing. -I tend to basically just use core plugins. I like mise for managing things where I really care about the major version -(like node). If it's something like `shfmt` or `jq` I don't really care about the version. I just want the latest and -for me, I find `brew` to be better suited to that purpose. +I tend to basically just use core plugins. I like mise for managing +things where I really care about the major version (like node). If it's +something like `shfmt` or `jq` I don't really care about the version. +I just want the latest and for me, I find `brew` to be better suited to +that purpose. -I recognize that some people really like locking down their versions across a team to keep things consistent. I think -that's great too. Part of this is that I'm currently at Amazon where the tooling story is complicated let's just say-not -in a bad way, just one where integrating mise into the setup isn't as straightforward as a smaller company would be. +I recognize that some people really like locking down their versions +across a team to keep things consistent. I think that's great too. +Part of this is that I'm currently at Amazon where the tooling story +is complicated let's just say-not in a bad way, just one where +integrating mise into the setup isn't as straightforward as a smaller +company would be. -Outside of Amazon I have a handful of open source projects, mostly mise-related and mostly fairly simple. Also mostly -rust where I don't use mise anyways. +Outside of Amazon I have a handful of open source projects, mostly +mise-related and mostly fairly simple. Also mostly rust where I don't +use mise anyways. -The one big exception here is node which I quite like mise for. I assume others do to because it's by far the most -popular language. You'd probably guess that since it's my example in nearly all of the docs. +The one big exception here is node which I quite like mise for. I assume +others do to because it's by far the most popular language. You'd +probably guess that since it's my example in nearly all of the docs. -That said, part of the reason for doing that in the docs is that it's 4 characters and everyone knows what it is. +That said, part of the reason for doing that in the docs is that it's 4 +characters and everyone knows what it is. ## `.mise.local.toml` -I'm a heavy user of this concept. I rarely like to actually commit `mise.toml` files into projects. I tend to see my -mise config as my personal config that I use within other projects that I don't particularly want to share with others. +I'm a heavy user of this concept. I rarely like to actually commit `mise.toml` +files into projects. I tend to see my mise config as my personal config that +I use within other projects that I don't particularly want to share with others. -Of course, this goes into my global gitconfig so I can easily add this to shared projects without submitting a PR. +Of course, this goes into my global gitconfig so I can easily add this to +shared projects without submitting a PR. -One day when tasks is out of experimental, I may do this a lot less since I think tasks are one thing I really want to -share. For me, the `[tools]` section is just so easy to write I don't mind doing it and don't like imposing the way that -**I** setup my machine on others. +One day when tasks is out of experimental, I may do this a lot less since I +think tasks are one thing I really want to share. For me, the `[tools]` +section is just so easy to write I don't mind doing it and don't like +imposing the way that **I** setup my machine on others. -There is a social aspect of this as well that I'm conscious of. I'm the author of `mise`. To me it's a little -self-serving to go into a project and add a config for my own project. I'd love if _someone else_ did that instead. +There is a social aspect of this as well that I'm conscious of. I'm +the author of `mise`. To me it's a little self-serving to go into a project +and add a config for my own project. I'd love if _someone else_ did that +instead. ## `~/.mise` @@ -92,5 +116,7 @@ ln -s ~/.mise ~/.local/state/mise ln -s ~/.mise/cache ~/.cache/mise ``` -It is good that mise generally follows XDG spec, but for tools that I interact with a lot I like to put them at the top -level like this. Obviously, mise doesn't mind if all of these point to the same place or else it would not work for me. +It is good that mise generally follows XDG spec, but for tools that I interact +with a lot I like to put them at the top level like this. Obviously, +mise doesn't mind if all of these point to the same place or else it would +not work for me. diff --git a/docs/ide-integration.md b/docs/ide-integration.md index 52089ee9e5..9dcde7e9fc 100644 --- a/docs/ide-integration.md +++ b/docs/ide-integration.md @@ -2,36 +2,24 @@ Code editors and IDEs work differently than interactive shells. -Usually, they will either inherit the environment from your current shell (this is the case if you start it from a -terminal like `nvim .` or `code .`) or will have -[their own way](https://github.com/microsoft/vscode-docs/blob/906acccd6180d8425577f8297ed29e221ad3daca/docs/supporting/faq.md?plain=1#L238) -to set up the environment. +Usually, they will either inherit the environment from your current shell (this is the case if you start it from a terminal like `nvim .` or `code .`) or will have [their own way](https://github.com/microsoft/vscode-docs/blob/906acccd6180d8425577f8297ed29e221ad3daca/docs/supporting/faq.md?plain=1#L238) to set up the environment. -Once you have launched the IDE, it won't reload the environment variables or the `PATH` provided by `mise` if you update -your mise configuration files. Therefore, we cannot rely on the default `mise activate` method to automatically set up -the editor. +Once you have launched the IDE, it won't reload the environment variables or the `PATH` provided by `mise` if you update your mise configuration files. Therefore, we cannot rely on the default `mise activate` method to automatically set up the editor. There are a few ways to make `mise` work with your editor: -- Some editors or IDE plugins have direct support for `mise` and can let you select the tools/sdk path from the IDE - settings. This will let you access to the tool binaries but won't load the environment variables. -- Most editors (and language plugins) will look for tools on the `PATH` and run them in the context of your project. - Therefore, adding the `mise` shims to the `PATH` might be enough (see [below](#adding-shims-to-path-default-shell)). - This will run the tool provided by mise and load the environment variables. -- In other cases, you may need to manually indicate the path to the tools provided by `mise` in the IDE settings. This - can be done by using [`mise which `](./cli/which.md) or [`mise where`](./cli/where). You can also provide the - path to the tool shim (e.g. `~/.local/share/mise/shims/node`) if the plugin supports it as this will also load the - environment variables when the tool is run. -- Finally, some custom plugins have been developed to work with `mise`. You can find them in the - [IDE Plugins](#ide-plugins) section. +- Some editors or IDE plugins have direct support for `mise` and can let you select the tools/sdk path from the IDE settings. This will let you access to the tool binaries but won't load the environment variables. +- Most editors (and language plugins) will look for tools on the `PATH` and run them in the context of your project. Therefore, adding the `mise` shims to the `PATH` might be enough (see [below](#adding-shims-to-path-default-shell)). This will run the tool provided by mise and load the environment variables. +- In other cases, you may need to manually indicate the path to the tools provided by `mise` in the IDE settings. This can be done by using [`mise which `](./cli/which.md) or [`mise where`](./cli/where). You can also provide the path to the tool shim (e.g. `~/.local/share/mise/shims/node`) if the plugin supports it as this will also load the environment variables when the tool is run. +- Finally, some custom plugins have been developed to work with `mise`. You can find them in the [IDE Plugins](#ide-plugins) section. ## Adding shims to PATH in your default shell profile {#adding-shims-to-path-default-shell} -IDEs work better with [shims](./dev-tools/shims) than they do environment variable modifications. The simplest way is to -add the mise shim directory to `PATH`. +IDEs work better with [shims](./dev-tools/shims) than they do environment variable modifications. The simplest way is +to add the mise shim directory to `PATH`. -For IntelliJ and VSCodeโ€”and likely others, you can modify your default shell's profile script. Your default shell can be -found with: +For IntelliJ and VSCodeโ€”and likely others, you can modify your default shell's profile +script. Your default shell can be found with: ::: code-group @@ -45,8 +33,8 @@ getent passwd $USER | cut -d: -f7 ::: -You can change your default shell with `chsh -s /path/to/shell` but you may need to first add it to `/etc/shells`. Once -you know the right one, modify the appropriate file: +You can change your default shell with `chsh -s /path/to/shell` but you may need +to first add it to `/etc/shells`. Once you know the right one, modify the appropriate file: ::: code-group @@ -71,20 +59,22 @@ end ::: -This assumes that `mise` is on `PATH`. If it is not, you'll need to use the absolute path ( e.g.: -`eval "$($HOME/.local/bin/mise activate zsh --shims)"`). +This assumes that `mise` is on `PATH`. If it is not, you'll need to use the absolute path ( +e.g.: `eval "$($HOME/.local/bin/mise activate zsh --shims)"`). Here is an example showing that VSCode will use `node` provided by `mise`: -::: tabs === VSCode +::: tabs +=== VSCode [![vscode using shims](./shims-vscode.png)](./shims-vscode.png) -=== IntelliJ [![intellij using shims](./shims-intellij.png)](./shims-intellij.png) ::: +=== IntelliJ +[![intellij using shims](./shims-intellij.png)](./shims-intellij.png) +::: -As mentioned above, using `shims` doesn't work with all mise features. For example, arbitrary -[env vars](./environments/) in `[env]` will only be set if a shim is executed. For this we need tighter integration with -the IDE and/or a custom plugin. +As mentioned above, using `shims` doesn't work with all mise features. For example, arbitrary [env vars](./environments/) in `[env]` will +only be set if a shim is executed. For this we need tighter integration with the IDE and/or a custom plugin. ## IDE Plugins @@ -94,9 +84,9 @@ Here are some community plugins that have been developed to work with `mise`: - IntelliJ: [intellij-mise](https://github.com/134130/intellij-mise) - VSCode: [mise-vscode](https://github.com/hverlin/mise-vscode) -If you want to build a custom plugin for your editor, have a look at the existing plugins or take a look at existing -direnv extensions and see if you can modify it to work for `mise`.`direnv` and `mise` work similarly and there should be -a direnv extension that can be used as a starting point. +If you want to build a custom plugin for your editor, have a look at the existing plugins or take a look at existing direnv extensions and see if you can modify it to +work for `mise`.`direnv` and `mise` work similarly and there should be a direnv extension that can be used as a starting +point. ## Vim @@ -127,8 +117,7 @@ vim.env.PATH = vim.env.HOME .. "/.local/share/mise/shims:" .. vim.env.PATH -> A GNU Emacs library which uses the mise tool to determine per-directory/project environment variables and then set -> those environment variables on a per-buffer basis. +> A GNU Emacs library which uses the mise tool to determine per-directory/project environment variables and then set those environment variables on a per-buffer basis. ```lisp (require 'mise) @@ -141,20 +130,19 @@ vim.env.PATH = vim.env.HOME .. "/.local/share/mise/shims:" .. vim.env.PATH -This plugin can automatically configure the IDE to use the tools provided by mise. It has also some support for running -mise tasks and loading environment variables in the run configurations. +This plugin can automatically configure the IDE to use the tools provided by mise. It has also some support for running mise tasks and loading environment variables in the run configurations. ### Direct SDK selection -Some JetBrains IDEs (or language plugins) have direct support for `mise`. This allows you to select the SDK version from -the IDE settings. Example for Java: +Some JetBrains IDEs (or language plugins) have direct support for `mise`. This allows you to select the SDK version from the IDE settings. +Example for Java: ![SDK settings](./intellij-sdk-selection.png) ### SDK selection using asdf layout -Some plugins cannot find SDK installed by `mise` yet but might have support for asdf. In that case, a workaround is to -symlink the mise tool directory which has same layout as asdf: +Some plugins cannot find SDK installed by `mise` yet but might have support for asdf. +In that case, a workaround is to symlink the mise tool directory which has same layout as asdf: ```sh ln -s ~/.local/share/mise ~/.asdf @@ -172,8 +160,7 @@ Or in the case of node (possibly other languages), it's under "Languages & Frame ### VSCode Plugin -There is a [VSCode plugin](https://marketplace.visualstudio.com/items?itemName=hverlin.mise-vscode) which can configure -other extensions for you, without having to modify your shell profile to add the shims to `PATH`. +There is a [VSCode plugin](https://marketplace.visualstudio.com/items?itemName=hverlin.mise-vscode) which can configure other extensions for you, without having to modify your shell profile to add the shims to `PATH`. In addition, it provides additional features such as: @@ -187,7 +174,8 @@ In addition, it provides additional features such as: ### Use [`mise exec`](./cli/exec) in launch Configuration -While modifying your default shell profile is likely the easiest solution, you can also set the tools in `launch.json`: +While modifying your default shell profile is likely the easiest solution, you can also set +the tools in `launch.json`: ::: details mise exec launch.json example @@ -216,10 +204,11 @@ While modifying your default shell profile is likely the easiest solution, you c ## Xcode -Xcode projects can run system commands from script build phases and schemes. Since Xcode sandboxes the execution of the -script using the tool `/usr/bin/sandbox-exec`, don't expect Mise and the automatically-activated tools to work out of -the box. First, you'll need to add `$(SRCROOT)/mise.toml` to the list of **Input files**. This is necessary for Xcode to -allow reads to that file. Then, you can use `mise activate` to activate the tools you need: +Xcode projects can run system commands from script build phases and schemes. Since Xcode sandboxes +the execution of the script using the tool `/usr/bin/sandbox-exec`, don't expect Mise and the +automatically-activated tools to work out of the box. First, you'll need to +add `$(SRCROOT)/mise.toml` to the list of **Input files**. This is necessary for Xcode to allow +reads to that file. Then, you can use `mise activate` to activate the tools you need: ```bash # -C ensures that Mise loads the configuration from the Mise configuration @@ -231,9 +220,13 @@ swiftlint ## [YOUR IDE HERE] -I am not a heavy IDE user. I use JetBrains products but I don't actually like to execute code directly inside of them -often so I don't have much personal advice to offer for IDEs generally. That said, people often ask about how to get -their IDE to work with mise so if you've done this for your IDE, please consider sending a PR to this page with some -instructions (however rough they are, starting somewhere is better than nothing). +I am not a heavy IDE user. I use JetBrains products but I don't actually +like to execute code directly inside of them often so I don't have much +personal advice to offer for IDEs generally. That said, people often +ask about how to get their IDE to work with mise so if you've done this +for your IDE, please consider sending a PR to this page with some +instructions (however rough they are, starting somewhere is better than +nothing). -Also if you've found a setup that you prefer to what is listed here consider adding it as a suggestion. +Also if you've found a setup that you prefer to what is listed here consider +adding it as a suggestion. diff --git a/docs/installing-mise.md b/docs/installing-mise.md index f44f540d55..acb4b4813a 100644 --- a/docs/installing-mise.md +++ b/docs/installing-mise.md @@ -8,8 +8,9 @@ This page lists various ways to install `mise` on your system. ### -Note that it isn't necessary for `mise` to be on `PATH`. If you run the activate script in your shell's rc file, mise -will automatically add itself to `PATH`. +Note that it isn't necessary for `mise` to be on `PATH`. If you run the activate script in your +shell's rc +file, mise will automatically add itself to `PATH`. ```sh curl https://mise.run | sh @@ -34,9 +35,11 @@ curl https://mise.jdx.dev/install.sh.sig | gpg --decrypt > install.sh sh ./install.sh ``` -::: tip As long as you don't change the version with `MISE_VERSION`, the install script will be pinned to whatever the -latest version was when it was downloaded with checksums inside the file. This makes downloading the file and putting it -into a project a great way to ensure that anyone installing with that script fetches the exact same mise bin. ::: +::: tip +As long as you don't change the version with `MISE_VERSION`, the install script will be pinned to whatever the latest +version was when it was downloaded with checksums inside the file. This makes downloading the file and putting it into +a project a great way to ensure that anyone installing with that script fetches the exact same mise bin. +::: or if you're allergic to `| sh`: @@ -89,8 +92,8 @@ For Alpine Linux: apk add mise ``` -_mise lives in the -[community repository](https://gitlab.alpinelinux.org/alpine/aports/-/blob/master/community/mise/APKBUILD)._ +_mise lives in +the [community repository](https://gitlab.alpinelinux.org/alpine/aports/-/blob/master/community/mise/APKBUILD)._ ### apt @@ -173,8 +176,8 @@ brew install mise ### npm -mise is available on npm as a precompiled binary. This isn't a Node.js packageโ€”just distributed via npm. This is useful -for JS projects that want to setup mise via `package.json` or `npx`. +mise is available on npm as a precompiled binary. This isn't a Node.js packageโ€”just distributed +via npm. This is useful for JS projects that want to setup mise via `package.json` or `npx`. ```sh npm install -g @jdxcode/mise @@ -209,7 +212,8 @@ For the Nix package manager, at release 23.05 or later: nix-env -iA mise ``` -You can also import the package directly using `mise-flake.packages.${system}.mise`. It supports all default Nix +You can also import the package directly using +`mise-flake.packages.${system}.mise`. It supports all default Nix systems. ### yum @@ -222,7 +226,8 @@ yum install -y mise ### Windows - Scoop -> [!NOTE] We're currently waiting for mise to be merged to the Scoop main bucket: +> [!NOTE] +> We're currently waiting for mise to be merged to the Scoop main bucket: > > - @@ -240,7 +245,9 @@ winget install jdx.mise ### Windows - Chocolatey -::: info chocolatey version is currently outdated. ::: +::: info +chocolatey version is currently outdated. +::: ```sh choco install mise @@ -248,10 +255,10 @@ choco install mise ### Windows - manual -Download the latest release from [GitHub](https://github.com/jdx/mise/releases) and add the binary to your PATH. +Download the latest release from [GitHub](https://github.com/jdx/mise/releases) and add the binary +to your PATH. -If your shell does not support `mise activate`, you would want to edit PATH to include the shims directory (by default: -`%LOCALAPPDATA%\mise\shims`). +If your shell does not support `mise activate`, you would want to edit PATH to include the shims directory (by default: `%LOCALAPPDATA%\mise\shims`). ## Shells @@ -273,15 +280,19 @@ echo 'eval "$(mise activate zsh)"' >> "${ZDOTDIR-$HOME}/.zshrc" echo 'mise activate fish | source' >> ~/.config/fish/config.fish ``` -::: tip For homebrew and possibly other installs mise is automatically activated so this is not necessary. +::: tip +For homebrew and possibly other installs mise is automatically activated so +this is not necessary. -See [`MISE_FISH_AUTO_ACTIVATE=1`](/configuration#mise_fish_auto_activate1) for more information. ::: +See [`MISE_FISH_AUTO_ACTIVATE=1`](/configuration#mise_fish_auto_activate1) for more information. +::: ### Powershell -::: warning See -[about_Profiles](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_profiles) -docs to find your actual profile location. You will need to first create the parent directory if it does not exist. ::: +::: warning +See [about_Profiles](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_profiles) docs to find your actual profile location. +You will need to first create the parent directory if it does not exist. +::: ```powershell echo '~/.local/bin/mise activate mise activate pwsh | Out-String | Invoke-Expression' >> $HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 @@ -289,8 +300,9 @@ echo '~/.local/bin/mise activate mise activate pwsh | Out-String | Invoke-Expres ### Nushell -Nu does [not support `eval`](https://www.nushell.sh/book/how_nushell_code_gets_run.html#eval-function) Install Mise by -appending `env.nu` and `config.nu`: +Nu +does [not support `eval`](https://www.nushell.sh/book/how_nushell_code_gets_run.html#eval-function) +Install Mise by appending `env.nu` and `config.nu`: ```nushell ' @@ -300,7 +312,8 @@ let mise_path = $nu.default-config-dir | path join mise.nu "\nuse ($nu.default-config-dir | path join mise.nu)" | save $nu.config-path --append ``` -If you prefer to keep your dotfiles clean you can save it to a different directory then update `$env.NU_LIB_DIRS`: +If you prefer to keep your dotfiles clean you can save it to a different directory then +update `$env.NU_LIB_DIRS`: ```nushell "\n$env.NU_LIB_DIRS ++= ($mise_path | path dirname | to nuon)" | save $nu.env-path --append @@ -308,9 +321,9 @@ If you prefer to keep your dotfiles clean you can save it to a different directo ### Xonsh -Since `.xsh` files are [not compiled](https://github.com/xonsh/xonsh/issues/3953) you may shave a bit off startup time -by using a pure Python import: add the code below to, for example, `~/.config/xonsh/mise.py` config file and -`import mise` it in `~/.config/xonsh/rc.xsh`: +Since `.xsh` files are [not compiled](https://github.com/xonsh/xonsh/issues/3953) you may shave a +bit off startup time by using a pure Python import: add the code below to, for +example, `~/.config/xonsh/mise.py` config file and `import mise` it in `~/.config/xonsh/rc.xsh`: ```python from pathlib import Path @@ -327,9 +340,10 @@ Or continue to use `rc.xsh`/`.xonshrc`: echo 'execx($(~/bin/mise activate xonsh))' >> ~/.config/xonsh/rc.xsh # or ~/.xonshrc ``` -Given that `mise` replaces both shell env `$PATH` and OS environ `PATH`, watch out that your configs don't have these -two set differently (might throw `os.environ['PATH'] = xonsh.built_ins.XSH.env.get_detyped('PATH')` at the end of a -config to make sure they match) +Given that `mise` replaces both shell env `$PATH` and OS environ `PATH`, watch out that your configs +don't have these two set differently (might +throw `os.environ['PATH'] = xonsh.built_ins.XSH.env.get_detyped('PATH')` at the end of a config to +make sure they match) ### Elvish @@ -349,16 +363,20 @@ edit:add-var mise~ {|@args| mise:mise $@args } ### Something else? -Adding a new shell is not hard at all since very little shell code is in this project. -[See here](https://github.com/jdx/mise/tree/main/src/shell) for how the others are implemented. If your shell isn't -currently supported I'd be happy to help you get yours integrated. +Adding a new shell is not hard at all since very little shell code is +in this project. +[See here](https://github.com/jdx/mise/tree/main/src/shell) for how +the others are implemented. If your shell isn't currently supported +I'd be happy to help you get yours integrated. ## Autocompletion -::: tip Some installation methods automatically install autocompletion scripts. ::: +::: tip +Some installation methods automatically install autocompletion scripts. +::: -The [`mise completion`](/cli/completion.html) command can generate autocompletion scripts for your shell. This requires -`usage` to be installed. If you don't have it, install it with: +The [`mise completion`](/cli/completion.html) command can generate autocompletion scripts for your shell. +This requires `usage` to be installed. If you don't have it, install it with: ```shell mise use -g usage @@ -397,8 +415,8 @@ Then source your shell's rc file or restart your shell. ## Uninstalling -Use `mise implode` to uninstall mise. This will remove the mise binary and all of its data. Use `mise implode --help` -for more information. +Use `mise implode` to uninstall mise. This will remove the mise binary and all of its data. Use +`mise implode --help` for more information. Alternatively, manually remove the following directories to fully clean up: diff --git a/docs/lang/bun.md b/docs/lang/bun.md index ea51a23dab..d30178b508 100644 --- a/docs/lang/bun.md +++ b/docs/lang/bun.md @@ -1,7 +1,7 @@ # Bun -The following are instructions for using the bun mise core plugin. This is used when there isn't a git plugin installed -named "bun". +The following are instructions for using the bun mise core plugin. This is used when there isn't a +git plugin installed named "bun". The code for this is inside the mise repository at [`./src/plugins/core/bun.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/bun.rs). diff --git a/docs/lang/deno.md b/docs/lang/deno.md index 81b8d40fde..3208f1f60b 100644 --- a/docs/lang/deno.md +++ b/docs/lang/deno.md @@ -1,10 +1,10 @@ # Deno -The following are instructions for using the deno mise core plugin. This is used when there isn't a git plugin installed -named "deno". +The following are instructions for using the deno mise core plugin. This is used when there isn't a +git plugin installed named "deno". -If you want to use [asdf-deno](https://github.com/asdf-community/asdf-deno) then run -`mise plugins install deno https://github.com/asdf-community/asdf-deno`. +If you want to use [asdf-deno](https://github.com/asdf-community/asdf-deno) +then run `mise plugins install deno https://github.com/asdf-community/asdf-deno`. The code for this is inside the mise repository at [`./src/plugins/core/deno.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/deno.rs). diff --git a/docs/lang/erlang.md b/docs/lang/erlang.md index d367b86890..a0ca8a39e4 100644 --- a/docs/lang/erlang.md +++ b/docs/lang/erlang.md @@ -1,7 +1,7 @@ # Erlang -The following are instructions for using the erlang core plugin. This is used when there isn't a git plugin installed -named "erlang". +The following are instructions for using the erlang core plugin. +This is used when there isn't a git plugin installed named "erlang". The code for this is inside the mise repository at [`./src/plugins/core/erlang.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/erlang.rs). @@ -18,8 +18,8 @@ See available versions with `mise ls-remote erlang`. ## kerl -The plugin uses [kerl](https://github.com/kerl/kerl) under the hood to build erlang. See kerl's docs for information on -configuring kerl. +The plugin uses [kerl](https://github.com/kerl/kerl) under the hood to build erlang. +See kerl's docs for information on configuring kerl. ## Settings diff --git a/docs/lang/go.md b/docs/lang/go.md index 162ea654a8..dd6fe8deb1 100644 --- a/docs/lang/go.md +++ b/docs/lang/go.md @@ -1,24 +1,25 @@ # Go -The following are instructions for using the go mise core plugin. This is used when there isn't a git plugin installed -named "go". +The following are instructions for using the go mise core plugin. This is used when there isn't a +git plugin installed named "go". -If you want to use [asdf-golang](https://github.com/kennyp/asdf-golang) then use `mise plugins install go GIT_URL`. +If you want to use [asdf-golang](https://github.com/kennyp/asdf-golang) +then use `mise plugins install go GIT_URL`. The code for this is inside the mise repository at [`./src/plugins/core/go.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/go.rs). ## Usage -The following installs the latest version of go-1.21.x (if some version of 1.21.x is not already installed) and makes it -the global default: +The following installs the latest version of go-1.21.x (if some version of 1.21.x is not already +installed) and makes it the global default: ```sh mise use -g go@1.21 ``` -Minor go versions 1.20 and below require specifying `prefix` before the version number because the first version of each -series was released without a `.0` suffix, making 1.20 an exact version match: +Minor go versions 1.20 and below require specifying `prefix` before the version number because the +first version of each series was released without a `.0` suffix, making 1.20 an exact version match: ```sh mise use -g go@prefix:1.20 @@ -33,8 +34,9 @@ import Settings from '/components/settings.vue'; ## Default packages -mise can automatically install a default set of packages right after installing a new go version. To enable this -feature, provide a `$HOME/.default-go-packages` file that lists one packages per line, for example: +mise can automatically install a default set of packages right after installing a new go version. +To enable this feature, provide a `$HOME/.default-go-packages` file that lists one packages per +line, for example: ```text github.com/Dreamacro/clash # allows comments @@ -43,5 +45,5 @@ github.com/jesseduffield/lazygit ## `.go-version` file support -mise uses a `mise.toml` or `.tool-versions` file for auto-switching between software versions. However it can also read -go-specific version files named `.go-version`. +mise uses a `mise.toml` or `.tool-versions` file for auto-switching between software versions. +However it can also read go-specific version files named `.go-version`. diff --git a/docs/lang/java.md b/docs/lang/java.md index 1181b7f365..8f61884feb 100644 --- a/docs/lang/java.md +++ b/docs/lang/java.md @@ -1,17 +1,18 @@ # Java -The following are instructions for using the java mise core plugin. This is used when there isn't a git plugin installed -named "java". +The following are instructions for using the java mise core plugin. This is used when there isn't a +git plugin installed named "java". -If you want to use [asdf-java](https://github.com/halcyon/asdf-java) then use `mise plugins install java GIT_URL`. +If you want to use [asdf-java](https://github.com/halcyon/asdf-java) +then use `mise plugins install java GIT_URL`. The code for this is inside the mise repository at [`./src/plugins/core/java.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/java.rs). ## Usage -The following installs the latest version of openjdk-21.x (if some version of openjdk-21.x is not already installed) and -makes it the global default: +The following installs the latest version of openjdk-21.x (if some version of openjdk-21.x is +not already installed) and makes it the global default: ```sh mise use -g java@openjdk-21 @@ -20,18 +21,20 @@ mise use -g java@21 # alternate shorthands for openjdk-only See available versions with `mise ls-remote java`. -::: warning Note that shorthand versions (like `21` in the example) use `OpenJDK` as the vendor. The OpenJDK versions -will only be updated for a 6-month period. Updates and security patches will not be available after this short period. -This also applies for LTS versions. Also see for more information. ::: +::: warning +Note that shorthand versions (like `21` in the example) use `OpenJDK` as the vendor. +The OpenJDK versions will only be updated for a 6-month period. Updates and security patches will not be available after this short period. This also applies for LTS versions. Also see for more information. +::: ## Tool Options -The following [tool-options](/dev-tools/#tool-options) are available for the `java` backendโ€”these go in `[tools]` in -`mise.toml`. +The following [tool-options](/dev-tools/#tool-options) are available for the `java` backendโ€”these +go in `[tools]` in `mise.toml`. ### `release_type` -The `release_type` option allows you to specify the type of release to install. The following values are supported: +The `release_type` option allows you to specify the type of release to install. The following values +are supported: - `ga` (default): General Availability release - `ea`: Early Access release @@ -45,7 +48,8 @@ The `release_type` option allows you to specify the type of release to install. Some applications in macOS rely on `/usr/libexec/java_home` to find installed Java runtimes. -To integrate an installed Java runtime with macOS run the following commands for the proper version (e.g. openjdk-21). +To integrate an installed Java runtime with macOS run the following commands for the proper +version (e.g. openjdk-21). ```sh sudo mkdir /Library/Java/JavaVirtualMachines/openjdk-21.jdk @@ -58,10 +62,11 @@ sudo ln -s ~/.local/share/mise/installs/java/openjdk-21/Contents /Library/Java/J The Java core plugin supports the idiomatic version files `.java-version` and `.sdkmanrc`. -For `.sdkmanrc` files, mise will try to map the vendor and version to the appropriate version string. For example, the -version `20.0.2-tem` will be mapped to `temurin-20.0.2`. Due to Azul's Zulu versioning, the version `11.0.12-zulu` will -be mapped to the major version `zulu-11`. Not all vendors available in SDKMAN are supported by mise. The following -vendors are NOT supported: `bsg` ( Bisheng), `graal` (GraalVM), `nik` (Liberica NIK). +For `.sdkmanrc` files, mise will try to map the vendor and version to the appropriate version +string. For example, the version `20.0.2-tem` will be mapped to `temurin-20.0.2`. Due to Azul's Zulu +versioning, the version `11.0.12-zulu` will be mapped to the major version `zulu-11`. Not all +vendors available in SDKMAN are supported by mise. The following vendors are NOT supported: `bsg` ( +Bisheng), `graal` (GraalVM), `nik` (Liberica NIK). In case an unsupported version of java is needed, some manual work is required: @@ -82,8 +87,8 @@ ln -s ~/.sdkman/candidates/java/21.0.1-open ~/.local/share/mise/installs/java/21 cp ~/.local/share/mise/installs/java/21.0.1-open/lib/libjli.dylib ~/.local/share/mise/installs/java/21.0.1-open/Contents/MacOS/libjli.dylib ``` -4. Don't forget to make sure the cache is blocked and valid, by making sure an **empty** directory **exists** for your - version in the [mise cache](https://mise.jdx.dev/directories.html#cache-mise): e.g. +4. Don't forget to make sure the cache is blocked and valid, by making sure an **empty** directory **exists** for your version in the [mise cache](https://mise.jdx.dev/directories.html#cache-mise): + e.g. ```sh $ ls -R $MISE_CACHE_DIR/java diff --git a/docs/lang/node.md b/docs/lang/node.md index 03b1d72cf5..ed050b8177 100644 --- a/docs/lang/node.md +++ b/docs/lang/node.md @@ -1,17 +1,17 @@ # Node -The following are instructions for using the node mise core plugin. This is used when there isn't a git plugin installed -named "node". +The following are instructions for using the node mise core plugin. This is used when there isn't a +git plugin installed named "node". -If you want to use [asdf-nodejs](https://github.com/asdf-vm/asdf-nodejs) then run -`mise plugins install node https://github.com/asdf-vm/asdf-nodejs` +If you want to use [asdf-nodejs](https://github.com/asdf-vm/asdf-nodejs) +then run `mise plugins install node https://github.com/asdf-vm/asdf-nodejs` -The code for this is inside the mise repository at -[`./src/plugins/core/node.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/node.rs). +The code for this is inside the mise repository at [`./src/plugins/core/node.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/node.rs). ## Usage -The following installs the latest version of node-20.x and makes it the global default: +The following installs the latest version of node-20.x and makes it the global +default: ```sh mise use -g node@20 @@ -19,8 +19,8 @@ mise use -g node@20 ## Requirements -See [BUILDING.md](https://github.com/nodejs/node/blob/main/BUILDING.md#building-nodejs-on-supported-platforms) in node's -documentation for required system dependencies. +See [BUILDING.md](https://github.com/nodejs/node/blob/main/BUILDING.md#building-nodejs-on-supported-platforms) in node's documentation for +required system dependencies. ## Settings @@ -34,21 +34,20 @@ import Settings from '/components/settings.vue'; - `MISE_NODE_VERIFY` [bool]: Verify the downloaded assets using GPG. Defaults to `true`. - `MISE_NODE_NINJA` [bool]: Use ninja instead of make to compile node. Defaults to `true` if installed. - `MISE_NODE_CONCURRENCY` [uint]: How many jobs should be used in compilation. Defaults to half the computer cores -- `MISE_NODE_DEFAULT_PACKAGES_FILE` [string]: location of default packages file, defaults to - `$HOME/.default-npm-packages` +- `MISE_NODE_DEFAULT_PACKAGES_FILE` [string]: location of default packages file, defaults to `$HOME/.default-npm-packages` - `MISE_NODE_CFLAGS` [string]: Additional CFLAGS options (e.g., to override -O3). - `MISE_NODE_CONFIGURE_OPTS` [string]: Additional `./configure` options. - `MISE_NODE_MAKE_OPTS` [string]: Additional `make` options. - `MISE_NODE_MAKE_INSTALL_OPTS` [string]: Additional `make install` options. -- `MISE_NODE_COREPACK` [bool]: Installs the default corepack shims after installing any node version that ships with - [corepack](https://github.com/nodejs/corepack). +- `MISE_NODE_COREPACK` [bool]: Installs the default corepack shims after installing any node version that ships with [corepack](https://github.com/nodejs/corepack). -::: info TODO: these env vars should be migrated to compatible settings in the future. ::: +::: info +TODO: these env vars should be migrated to compatible settings in the future. +::: ## Default node packages -mise-node can automatically install a default set of npm packages right after installing a node version. To enable this -feature, provide a `$HOME/.default-npm-packages` file that lists one package per line, for example: +mise-node can automatically install a default set of npm packages right after installing a node version. To enable this feature, provide a `$HOME/.default-npm-packages` file that lists one package per line, for example: ```text lodash @@ -60,20 +59,19 @@ You can specify a non-default location of this file by setting a `MISE_NODE_DEFA ## `.nvmrc` and `.node-version` support -mise uses a `mise.toml` or `.tool-versions` file for auto-switching between software versions. To ease migration, you -can have also have it read an existing `.nvmrc` or `.node-version` file to find out what version of Node.js should be -used. This will be used if `node` isn't defined in `mise.toml`/`.tool-versions`. +mise uses a `mise.toml` or `.tool-versions` file for auto-switching between software versions. To ease migration, you can have also have it read an existing `.nvmrc` or `.node-version` file to find out what version of Node.js should be used. This will be used if `node` isn't defined in `mise.toml`/`.tool-versions`. ## "nodejs" -> "node" Alias -You cannot install/use a plugin named "nodejs". If you attempt this, mise will just rename it to "node". See the -[FAQ](https://github.com/jdx/mise#what-is-the-difference-between-nodejs-and-node-or-golang-and-go) for an explanation. +You cannot install/use a plugin named "nodejs". If you attempt this, mise will just rename it to +"node". See the [FAQ](https://github.com/jdx/mise#what-is-the-difference-between-nodejs-and-node-or-golang-and-go) +for an explanation. ## Unofficial Builds -Nodejs.org offers a set of [unofficial builds](https://unofficial-builds.nodejs.org/) which are compatible with some -platforms that are not supported by the official binaries. These are a nice alternative to compiling from source for -these platforms. +Nodejs.org offers a set of [unofficial builds](https://unofficial-builds.nodejs.org/) which are +compatible with some platforms that are not supported by the official binaries. These are a nice alternative to +compiling from source for these platforms. To use, first set the mirror url to point to the unofficial builds: @@ -81,9 +79,9 @@ To use, first set the mirror url to point to the unofficial builds: mise settings node.mirror_url=https://unofficial-builds.nodejs.org/download/release/ ``` -If your goal is to simply support an alternative arch/os like linux-loong64 or linux-armv6l, this is all that is -required. Node also provides flavors such as musl or glibc-217 (an older glibc version than what the official binaries -are built with). +If your goal is to simply support an alternative arch/os like linux-loong64 or linux-armv6l, this is +all that is required. Node also provides flavors such as musl or glibc-217 (an older glibc version +than what the official binaries are built with). To use these, set `node.flavor`: diff --git a/docs/lang/python.md b/docs/lang/python.md index b390d55278..e701751453 100644 --- a/docs/lang/python.md +++ b/docs/lang/python.md @@ -1,14 +1,16 @@ # Python -The following are instructions for using the python mise core plugin. The core plugin will be used so long as no plugin -is manually installed named "python" using `mise plugins install python [GIT_URL]`. +The following are instructions for using the python mise core plugin. The core plugin will be used +so long as no plugin is manually +installed named "python" using `mise plugins install python [GIT_URL]`. -The code for this is inside of the mise repository at -[`./src/plugins/core/python.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/python.rs). +The code for this is inside of the mise repository +at [`./src/plugins/core/python.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/python.rs). ## Usage -The following installs the latest version of python-3.11.x and makes it the global default: +The following installs the latest version of python-3.11.x and makes it the global +default: ```sh mise use -g python@3.11 @@ -26,7 +28,8 @@ $ python3.11 -V ## Settings -`python-build` already has a [handful of settings](https://github.com/pyenv/pyenv/tree/master/plugins/python-build), in +`python-build` already has +a [handful of settings](https://github.com/pyenv/pyenv/tree/master/plugins/python-build), in additional to that python in mise has a few extra configuration variables. Set these with `mise settings set [VARIABLE] [VALUE]` or by setting the environment variable. @@ -38,44 +41,53 @@ import Settings from '/components/settings.vue'; ## Default Python packages -mise can automatically install a default set of Python packages with pip right after installing a Python version. To -enable this feature, provide a `$HOME/.default-python-packages` file that lists one package per line, for example: +mise can automatically install a default set of Python packages with pip right after installing a +Python version. To enable this feature, provide a `$HOME/.default-python-packages` file that lists +one package per line, for example: ```text ansible pipenv ``` -You can specify a non-default location of this file by setting a `MISE_PYTHON_DEFAULT_PACKAGES_FILE` variable. +You can specify a non-default location of this file by setting a `MISE_PYTHON_DEFAULT_PACKAGES_FILE` +variable. ## Precompiled python binaries -By default, mise will download [precompiled binaries](https://github.com/astral-sh/python-build-standalone) for python -instead of compiling them with python-build. This makes installing python much faster. +By default, mise will +download [precompiled binaries](https://github.com/astral-sh/python-build-standalone) +for python instead of compiling them with python-build. This makes installing python much faster. -In addition to being faster, it also means you don't have to install all of the system dependencies either. +In addition to being faster, it also means you don't have to install all of the system dependencies +either. -That said, there are some [quirks](https://github.com/astral-sh/python-build-standalone/blob/main/docs/quirks.rst) with -the precompiled binaries to be aware of. +That said, there are +some [quirks](https://github.com/astral-sh/python-build-standalone/blob/main/docs/quirks.rst) +with the precompiled binaries to be aware of. If you'd like to disable these binaries, set `mise settings python.compile=1`. -These binaries may not work on older CPUs however you may opt into binaries which are more compatible with older CPUs by -setting `MISE_PYTHON_PRECOMPILED_ARCH` with a different version. See - for more information on this option. Set it to -"x86_64" for the most compatible binaries. +These binaries may not work on older CPUs however you may opt into binaries which +are more compatible with older CPUs by setting `MISE_PYTHON_PRECOMPILED_ARCH` with +a different version. See for +more information +on this option. Set it to "x86_64" for the most compatible binaries. ## python-build -Optionally, mise uses [python-build](https://github.com/pyenv/pyenv/tree/master/plugins/python-build) (part of pyenv) to -compile python runtimes, you need to ensure its -[dependencies](https://github.com/pyenv/pyenv/wiki#suggested-build-environment) are installed before installing python -with python-build. +Optionally, mise +uses [python-build](https://github.com/pyenv/pyenv/tree/master/plugins/python-build) (part of pyenv) +to compile python runtimes, +you need to ensure +its [dependencies](https://github.com/pyenv/pyenv/wiki#suggested-build-environment) are installed +before installing python with +python-build. ## Troubleshooting errors with Homebrew -If you normally use Homebrew and you see errors regarding OpenSSL, your best bet might be using the following command to -install Python: +If you normally use Homebrew and you see errors regarding OpenSSL, +your best bet might be using the following command to install Python: ```sh CFLAGS="-I$(brew --prefix openssl)/include" \ @@ -83,10 +95,15 @@ LDFLAGS="-L$(brew --prefix openssl)/lib" \ mise install python@latest; ``` -Homebrew installs its own OpenSSL version, which may collide with system-expected ones. You could even add that to your -`.profile`, `.bashrc`, `.zshrc`... to avoid setting them every time +Homebrew installs its own OpenSSL version, which may collide with system-expected ones. +You could even add that to your +`.profile`, +`.bashrc`, +`.zshrc`... +to avoid setting them every time -Additionally, if you encounter issues with python-build, you may benefit from unlinking pkg-config prior to install +Additionally, if you encounter issues with python-build, +you may benefit from unlinking pkg-config prior to install ([reason](https://github.com/pyenv/pyenv/issues/2823#issuecomment-1769081965)). ```sh @@ -107,7 +124,8 @@ brew link pkg-config ## Automatic virtualenv activation -Python comes with virtualenv support built in, use it with `mise.toml` configuration like one of the following: +Python comes with virtualenv support built in, use it with `mise.toml` configuration like +one of the following: ```toml [tools] diff --git a/docs/lang/ruby.md b/docs/lang/ruby.md index da8fd81e88..e76711b5e5 100644 --- a/docs/lang/ruby.md +++ b/docs/lang/ruby.md @@ -1,32 +1,34 @@ # Ruby -The following are instructions for using the ruby mise core plugin. This is used when there isn't a git plugin installed -named "ruby". +The following are instructions for using the ruby mise core plugin. This is used when there isn't a +git plugin installed named "ruby". -If you want to use [asdf-ruby](https://github.com/asdf-vm/asdf-ruby) then use `mise plugins install ruby GIT_URL`. +If you want to use [asdf-ruby](https://github.com/asdf-vm/asdf-ruby) +then use `mise plugins install ruby GIT_URL`. The code for this is inside the mise repository at [`./src/plugins/core/ruby.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/ruby.rs). ## Usage -The following installs the latest version of ruby-3.2.x (if some version of 3.2.x is not already installed) and makes it -the global default: +The following installs the latest version of ruby-3.2.x (if some version of 3.2.x is not already +installed) and makes it the global default: ```sh mise use -g ruby@3.2 ``` -Behind the scenes, mise uses [`ruby-build`](https://github.com/rbenv/ruby-build) to compile ruby from source. Ensure -that you have the necessary [dependencies](https://github.com/rbenv/ruby-build/wiki#suggested-build-environment) -installed. You can check its [README](https://github.com/rbenv/ruby-build/blob/master/README.md) for additional settings -and some troubleshooting. +Behind the scenes, mise uses [`ruby-build`](https://github.com/rbenv/ruby-build) to compile ruby +from source. Ensure that you have the necessary +[dependencies](https://github.com/rbenv/ruby-build/wiki#suggested-build-environment) installed. +You can check its [README](https://github.com/rbenv/ruby-build/blob/master/README.md) for additional settings and some +troubleshooting. ## Settings `ruby-build` already has a -[handful of settings](https://github.com/rbenv/ruby-build?tab=readme-ov-file#custom-build-configuration), in additional -to that mise has a few extra settings: +[handful of settings](https://github.com/rbenv/ruby-build?tab=readme-ov-file#custom-build-configuration), +in additional to that mise has a few extra settings: diff --git a/docs/configuration.md b/docs/configuration.md index 24cc9d09fe..14da1a7655 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -257,7 +257,7 @@ Both `mise.toml` and `.tool-versions` support "scopes" which modify the behavior mise supports "idiomatic version files" just like asdf. They're language-specific files like `.node-version` and `.python-version`. These are ideal for setting the runtime version of a project without forcing -other developers to use a specific tool like mise/asdf. +other developers to use a specific tool like mise or asdf. They support aliases, which means you can have an `.nvmrc` file with `lts/hydrogen` and it will work in mise and nvm. Here are some of the supported idiomatic version files: @@ -274,8 +274,8 @@ in mise and nvm. Here are some of the supported idiomatic version files: | terraform | `.terraform-version`, `.packer-version`, `main.tf` | | yarn | `.yarnrc` | -In mise these are enabled by default. You can disable them -with `mise settings idiomatic_version_file=false`. +In mise these are enabled by default. You can disable them with [`mise settings idiomatic_version_file=false`](/configuration/settings.html#idiomatic_version_file) or for specific tools with [`mise settings idiomatic_version_file_disable_tools=['python']`](/configuration/settings.html#idiomatic_version_file_disable_tools). + There is a performance cost to having these when they're parsed as it's performed by the plugin in `bin/parse-version-file`. However, these are [cached](/cache-behavior) so it's not a huge deal. You may not even notice. diff --git a/docs/lang/go.md b/docs/lang/go.md index dd6fe8deb1..d78b9ed3c0 100644 --- a/docs/lang/go.md +++ b/docs/lang/go.md @@ -46,4 +46,6 @@ github.com/jesseduffield/lazygit ## `.go-version` file support mise uses a `mise.toml` or `.tool-versions` file for auto-switching between software versions. -However it can also read go-specific version files named `.go-version`. +However, it can also read go-specific version files named `.go-version`. + +See [idiomatic version files](/configuration.html#idiomatic-version-files) diff --git a/docs/lang/java.md b/docs/lang/java.md index 8f61884feb..93404f45ef 100644 --- a/docs/lang/java.md +++ b/docs/lang/java.md @@ -58,9 +58,9 @@ sudo ln -s ~/.local/share/mise/installs/java/openjdk-21/Contents /Library/Java/J > Note: Not all distributions of the Java SDK support this integration (e.g liberica). -## Idiomatic version files +## `.java-version` and `.sdkmanrc` files support -The Java core plugin supports the idiomatic version files `.java-version` and `.sdkmanrc`. +The Java core plugin supports the idiomatic version files `.java-version` and `.sdkmanrc`. See [idiomatic version files](/configuration.html#idiomatic-version-files). For `.sdkmanrc` files, mise will try to map the vendor and version to the appropriate version string. For example, the version `20.0.2-tem` will be mapped to `temurin-20.0.2`. Due to Azul's Zulu diff --git a/docs/lang/node.md b/docs/lang/node.md index ed050b8177..201c08f757 100644 --- a/docs/lang/node.md +++ b/docs/lang/node.md @@ -59,7 +59,11 @@ You can specify a non-default location of this file by setting a `MISE_NODE_DEFA ## `.nvmrc` and `.node-version` support -mise uses a `mise.toml` or `.tool-versions` file for auto-switching between software versions. To ease migration, you can have also have it read an existing `.nvmrc` or `.node-version` file to find out what version of Node.js should be used. This will be used if `node` isn't defined in `mise.toml`/`.tool-versions`. +mise uses a `mise.toml` or `.tool-versions` file for auto-switching between software versions. + +To ease migration, you can have also it read an existing `.nvmrc` or `.node-version` file to find out what version of Node.js should be used. This will be used if `node` isn't defined in `mise.toml`/`.tool-versions`. + +See [idiomatic version files](/configuration.html#idiomatic-version-files) ## "nodejs" -> "node" Alias diff --git a/docs/lang/python.md b/docs/lang/python.md index e701751453..0676e32ca4 100644 --- a/docs/lang/python.md +++ b/docs/lang/python.md @@ -156,3 +156,7 @@ Or to compile with python-build: ```bash MISE_PYTHON_COMPILE=1 PYTHON_BUILD_FREE_THREADING=1 mise install python ``` + +## `.python-version` support + +`.python-version`/`.python-versions` files are supported by mise. See [idiomatic version files](/configuration.html#idiomatic-version-files). diff --git a/docs/lang/ruby.md b/docs/lang/ruby.md index e76711b5e5..0b88b1c9fe 100644 --- a/docs/lang/ruby.md +++ b/docs/lang/ruby.md @@ -51,7 +51,7 @@ rubocop --pre # install prerelease version ## `.ruby-version` and `Gemfile` support mise uses a `mise.toml` or `.tool-versions` file for auto-switching between software versions. -However it can also read ruby-specific version files `.ruby-version` or `Gemfile` +However, it can also read ruby-specific version files `.ruby-version` or `Gemfile` (if it specifies a ruby version). Create a `.ruby-version` file for the current version of ruby: @@ -60,6 +60,8 @@ Create a `.ruby-version` file for the current version of ruby: ruby -v > .ruby-version ``` +See [idiomatic version files](/configuration.html#idiomatic-version-files) for more information. + ### Manually updating ruby-build ruby-build should update daily, however if you find versions do not yet exist you can force an diff --git a/mise.lock b/mise.lock index 03e4c80b70..c45d303c80 100644 --- a/mise.lock +++ b/mise.lock @@ -4,6 +4,7 @@ backend = "aqua:rhysd/actionlint" [tools.actionlint.checksums] "actionlint_1.7.7_darwin_arm64.tar.gz" = "sha256:2693315b9093aeacb4ebd91a993fea54fc215057bf0da2659056b4bc033873db" +"actionlint_1.7.7_linux_amd64.tar.gz" = "sha256:023070a287cd8cccd71515fedc843f1985bf96c436b7effaecce67290e7e0757" [tools.bun] version = "1.1.44" From f342d0a4fce7c6b2e4ec25506c690a64805a98e5 Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Wed, 29 Jan 2025 13:17:43 +0100 Subject: [PATCH 246/289] fix: path option should take precedence over global configuration (#4249) --- e2e/cli/test_use | 15 +++++++++++++++ src/cli/use.rs | 24 ++++++++++++------------ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/e2e/cli/test_use b/e2e/cli/test_use index d1abcc7a35..c5d6a808d3 100644 --- a/e2e/cli/test_use +++ b/e2e/cli/test_use @@ -17,6 +17,16 @@ dummy = "2"' assert "mise current dummy" "2.0.0" rm mise.local.toml +assert_contains "mise use --env local dummy@1" "dummy@1." +assert "cat mise.local.toml" '[tools] +dummy = "1"' +mv mise.local.toml .mise.local.toml +assert_contains "mise use --env local dummy@2" "dummy@2." +assert_fail "test -f mise.local.toml" +assert "cat .mise.local.toml" '[tools] +dummy = "2"' +rm .mise.local.toml + mise use dummy@1 dummy@2 assert "mise current dummy" "1.0.0 2.0.0" @@ -75,3 +85,8 @@ assert_contains "mise ls dummy" "dummy path:~/workdir/mydummy ~/workdir/mise.t cd "$HOME" || exit 1 assert_contains "mise use dummy@system" "mise ~/.config/mise/config.toml tools: dummy@system" + +assert_contains "mise use --path mise.path.toml dummy@1" "dummy@1." +assert "cat mise.path.toml" '[tools] +dummy = "1"' +rm mise.path.toml diff --git a/src/cli/use.rs b/src/cli/use.rs index 129b15f546..da31deff0c 100644 --- a/src/cli/use.rs +++ b/src/cli/use.rs @@ -195,11 +195,13 @@ impl Use { fn get_config_file(&self) -> Result> { let cwd = env::current_dir()?; - let path = if !env::MISE_ENV.is_empty() { - let env = env::MISE_ENV.last().unwrap(); - config_file_from_dir(&cwd.join(format!("mise.{env}.toml"))) - } else if self.global || env::in_home_dir() { - MISE_GLOBAL_CONFIG_FILE.clone() + let path = if let Some(p) = &self.path { + let from_dir = config_file_from_dir(p).absolutize()?.to_path_buf(); + if from_dir.starts_with(&cwd) { + from_dir + } else { + p.clone() + } } else if let Some(env) = &self.env { let p = cwd.join(format!(".mise.{env}.toml")); if p.exists() { @@ -207,13 +209,11 @@ impl Use { } else { cwd.join(format!("mise.{env}.toml")) } - } else if let Some(p) = &self.path { - let from_dir = config_file_from_dir(p).absolutize()?.to_path_buf(); - if from_dir.starts_with(&cwd) { - from_dir - } else { - p.clone() - } + } else if !env::MISE_ENV.is_empty() { + let env = env::MISE_ENV.last().unwrap(); + config_file_from_dir(&cwd.join(format!("mise.{env}.toml"))) + } else if self.global || env::in_home_dir() { + MISE_GLOBAL_CONFIG_FILE.clone() } else { config_file_from_dir(&cwd) }; From a8ea4f31f0aa30ad15a742c54e554501196a6435 Mon Sep 17 00:00:00 2001 From: mise-en-dev Date: Wed, 29 Jan 2025 06:57:03 -0600 Subject: [PATCH 247/289] chore: release 2025.1.16 (#4231) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### ๐Ÿš€ Features - **(registry)** add duckdb by [@swfz](https://github.com/swfz) in [#4248](https://github.com/jdx/mise/pull/4248) ### ๐Ÿ› Bug Fixes - Swift on Ubuntu 24.04 arm64 generates the incorrect download URL by [@spyder-ian](https://github.com/spyder-ian) in [#4235](https://github.com/jdx/mise/pull/4235) - Do not attempt to parse directories by [@adamcohen2](https://github.com/adamcohen2) in [#4256](https://github.com/jdx/mise/pull/4256) - path option should take precedence over global configuration by [@roele](https://github.com/roele) in [#4249](https://github.com/jdx/mise/pull/4249) ### ๐Ÿ“š Documentation - Add devtools.fm episode about mise to external-resources.md by [@CanRau](https://github.com/CanRau) in [#4253](https://github.com/jdx/mise/pull/4253) - Update sections about idiomatic version files by [@hverlin](https://github.com/hverlin) in [#4252](https://github.com/jdx/mise/pull/4252) ### Chore - make self_update optional by [@jdx](https://github.com/jdx) in [#4230](https://github.com/jdx/mise/pull/4230) - added some defaul reqwest features by [@jdx](https://github.com/jdx) in [#4232](https://github.com/jdx/mise/pull/4232) ### New Contributors - @adamcohen2 made their first contribution in [#4256](https://github.com/jdx/mise/pull/4256) - @CanRau made their first contribution in [#4253](https://github.com/jdx/mise/pull/4253) - @spyder-ian made their first contribution in [#4235](https://github.com/jdx/mise/pull/4235) --- CHANGELOG.md | 28 +++++++++++ Cargo.lock | 100 ++++++++++++++++++++++++++-------------- Cargo.toml | 2 +- README.md | 2 +- aqua-registry | 2 +- completions/_mise | 6 +-- completions/mise.bash | 6 +-- completions/mise.fish | 8 ++-- default.nix | 2 +- packaging/rpm/mise.spec | 2 +- 10 files changed, 108 insertions(+), 50 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e9c61319d..c81d36a2f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,33 @@ # Changelog +## [2025.1.16](https://github.com/jdx/mise/compare/v2025.1.15..v2025.1.16) - 2025-01-29 + +### ๐Ÿš€ Features + +- **(registry)** add duckdb by [@swfz](https://github.com/swfz) in [#4248](https://github.com/jdx/mise/pull/4248) + +### ๐Ÿ› Bug Fixes + +- Swift on Ubuntu 24.04 arm64 generates the incorrect download URL by [@spyder-ian](https://github.com/spyder-ian) in [#4235](https://github.com/jdx/mise/pull/4235) +- Do not attempt to parse directories by [@adamcohen2](https://github.com/adamcohen2) in [#4256](https://github.com/jdx/mise/pull/4256) +- path option should take precedence over global configuration by [@roele](https://github.com/roele) in [#4249](https://github.com/jdx/mise/pull/4249) + +### ๐Ÿ“š Documentation + +- Add devtools.fm episode about mise to external-resources.md by [@CanRau](https://github.com/CanRau) in [#4253](https://github.com/jdx/mise/pull/4253) +- Update sections about idiomatic version files by [@hverlin](https://github.com/hverlin) in [#4252](https://github.com/jdx/mise/pull/4252) + +### Chore + +- make self_update optional by [@jdx](https://github.com/jdx) in [#4230](https://github.com/jdx/mise/pull/4230) +- added some defaul reqwest features by [@jdx](https://github.com/jdx) in [#4232](https://github.com/jdx/mise/pull/4232) + +### New Contributors + +- @adamcohen2 made their first contribution in [#4256](https://github.com/jdx/mise/pull/4256) +- @CanRau made their first contribution in [#4253](https://github.com/jdx/mise/pull/4253) +- @spyder-ian made their first contribution in [#4235](https://github.com/jdx/mise/pull/4235) + ## [2025.1.15](https://github.com/jdx/mise/compare/v2025.1.14..v2025.1.15) - 2025-01-26 ### ๐Ÿš€ Features diff --git a/Cargo.lock b/Cargo.lock index 86ffcd6774..ba5db56555 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -108,7 +108,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom", + "getrandom 0.2.15", "once_cell", "version_check", "zerocopy", @@ -411,9 +411,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bytecount" @@ -1638,10 +1638,22 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets 0.52.6", +] + [[package]] name = "ghash" version = "0.5.1" @@ -2714,9 +2726,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.5" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "httpdate" @@ -2747,9 +2759,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "1.5.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", @@ -3137,9 +3149,9 @@ dependencies = [ [[package]] name = "indicatif" -version = "0.17.9" +version = "0.17.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf675b85ed934d3c67b5c5469701eec7db22689d0a2139d856e0925fa28b281" +checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" dependencies = [ "console", "number_prefix", @@ -3261,9 +3273,9 @@ checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jiff" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a85348106ab244d90fe2d70faad939b71c5dad1258e5da9116e176064fc6c078" +checksum = "c607c728e28764fecde611a2764a3a5db19ae21dcec46f292244f5cc5c085a81" dependencies = [ "jiff-tzdb-platform", "log", @@ -3619,13 +3631,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] [[package]] name = "mise" -version = "2025.1.15" +version = "2025.1.16" dependencies = [ "base64 0.22.1", "built", @@ -3728,9 +3740,9 @@ dependencies = [ [[package]] name = "mlua" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea43c3ffac2d0798bd7128815212dd78c98316b299b7a902dabef13dc7b6b8d" +checksum = "d3f763c1041eff92ffb5d7169968a327e1ed2ebfe425dac0ee5a35f29082534b" dependencies = [ "bstr", "either", @@ -3747,9 +3759,9 @@ dependencies = [ [[package]] name = "mlua-sys" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63a11d485edf0f3f04a508615d36c7d50d299cf61a7ee6d3e2530651e0a31771" +checksum = "1901c1a635a22fe9250ffcc4fcc937c16b47c2e9e71adba8784af8bca1f69594" dependencies = [ "cc", "cfg-if", @@ -4458,7 +4470,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", - "getrandom", + "getrandom 0.2.15", "rand", "ring", "rustc-hash 2.1.0", @@ -4521,7 +4533,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] @@ -4559,7 +4571,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom", + "getrandom 0.2.15", "libredox", "thiserror 1.0.69", ] @@ -4669,7 +4681,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", "spin", "untrusted", @@ -4858,9 +4870,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" dependencies = [ "web-time", ] @@ -4884,9 +4896,9 @@ checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "salsa20" @@ -5089,9 +5101,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.137" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "930cfb6e6abf99298aaad7d29abbef7a9999a9a8806a40088f55f0dcec03146b" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ "indexmap 2.7.1", "itoa", @@ -5563,13 +5575,13 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.15.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" +checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" dependencies = [ "cfg-if", "fastrand", - "getrandom", + "getrandom 0.3.1", "once_cell", "rustix", "windows-sys 0.59.0", @@ -6101,9 +6113,9 @@ checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217" [[package]] name = "unicode-ident" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11cd88e12b17c6494200a9c1b683a04fcac9573ed74cd1b62aeb2727c5592243" +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "unicode-normalization" @@ -6311,6 +6323,15 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" version = "0.2.100" @@ -6702,9 +6723,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.24" +version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a" +checksum = "ad699df48212c6cc6eb4435f35500ac6fd3b9913324f938aea302022ce19d310" dependencies = [ "memchr", ] @@ -6715,6 +6736,15 @@ version = "0.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags", +] + [[package]] name = "write16" version = "1.0.0" diff --git a/Cargo.toml b/Cargo.toml index e5252e4bf9..5324d4b2f7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mise" -version = "2025.1.15" +version = "2025.1.16" edition = "2021" description = "The front-end to your dev env" authors = ["Jeff Dickey (@jdx)"] diff --git a/README.md b/README.md index 749358b7df..46a144bac2 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Install mise (other methods [here](https://mise.jdx.dev/getting-started.html)): ```sh-session $ curl https://mise.run | sh $ ~/.local/bin/mise --version -2025.1.15 macos-arm64 (a1b2d3e 2025-01-26) +2025.1.16 macos-arm64 (a1b2d3e 2025-01-29) ``` or install a specific a version: diff --git a/aqua-registry b/aqua-registry index bd04b04e99..f0e4dd947a 160000 --- a/aqua-registry +++ b/aqua-registry @@ -1 +1 @@ -Subproject commit bd04b04e9900b191299a411e75776f4253e12d51 +Subproject commit f0e4dd947a80d8c8deb2f24bdfe1e14f8ab4cb40 diff --git a/completions/_mise b/completions/_mise index ddb256052c..b65c22f2fd 100644 --- a/completions/_mise +++ b/completions/_mise @@ -27,11 +27,11 @@ _mise() { zstyle ":completion:${curcontext}:" cache-policy _usage_mise_cache_policy fi - if ( [[ -z "${_usage_spec_mise_2025_1_15:-}" ]] || _cache_invalid _usage_spec_mise_2025_1_15 ) \ - && ! _retrieve_cache _usage_spec_mise_2025_1_15; + if ( [[ -z "${_usage_spec_mise_2025_1_16:-}" ]] || _cache_invalid _usage_spec_mise_2025_1_16 ) \ + && ! _retrieve_cache _usage_spec_mise_2025_1_16; then spec="$(mise usage)" - _store_cache _usage_spec_mise_2025_1_15 spec + _store_cache _usage_spec_mise_2025_1_16 spec fi _arguments "*: :(($(usage complete-word --shell zsh -s "$spec" -- "${words[@]}" )))" diff --git a/completions/mise.bash b/completions/mise.bash index 926aa979ca..7ce4a0cab0 100644 --- a/completions/mise.bash +++ b/completions/mise.bash @@ -6,14 +6,14 @@ _mise() { return 1 fi - if [[ -z ${_usage_spec_mise_2025_1_15:-} ]]; then - _usage_spec_mise_2025_1_15="$(mise usage)" + if [[ -z ${_usage_spec_mise_2025_1_16:-} ]]; then + _usage_spec_mise_2025_1_16="$(mise usage)" fi local cur prev words cword was_split comp_args _comp_initialize -n : -- "$@" || return # shellcheck disable=SC2207 - _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2025_1_15}" --cword="$cword" -- "${words[@]}")" + _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2025_1_16}" --cword="$cword" -- "${words[@]}")" _comp_ltrim_colon_completions "$cur" # shellcheck disable=SC2181 if [[ $? -ne 0 ]]; then diff --git a/completions/mise.fish b/completions/mise.fish index 27a17775d7..0f40e993bc 100644 --- a/completions/mise.fish +++ b/completions/mise.fish @@ -6,12 +6,12 @@ if ! command -v usage &> /dev/null return 1 end -if ! set -q _usage_spec_mise_2025_1_15 - set -g _usage_spec_mise_2025_1_15 (mise usage | string collect) +if ! set -q _usage_spec_mise_2025_1_16 + set -g _usage_spec_mise_2025_1_16 (mise usage | string collect) end set -l tokens if commandline -x >/dev/null 2>&1 - complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_1_15" -- (commandline -xpc) (commandline -t))' + complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_1_16" -- (commandline -xpc) (commandline -t))' else - complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_1_15" -- (commandline -opc) (commandline -t))' + complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_1_16" -- (commandline -opc) (commandline -t))' end diff --git a/default.nix b/default.nix index 7aa5777f13..43ecb2b5fc 100644 --- a/default.nix +++ b/default.nix @@ -2,7 +2,7 @@ rustPlatform.buildRustPackage { pname = "mise"; - version = "2025.1.15"; + version = "2025.1.16"; src = lib.cleanSource ./.; diff --git a/packaging/rpm/mise.spec b/packaging/rpm/mise.spec index 34958d2150..31582542ca 100644 --- a/packaging/rpm/mise.spec +++ b/packaging/rpm/mise.spec @@ -1,6 +1,6 @@ Summary: The front-end to your dev env Name: mise -Version: 2025.1.15 +Version: 2025.1.16 Release: 1 URL: https://github.com/jdx/mise/ Group: System From 3156d3c690763c708f054fc326016dbd60c81c14 Mon Sep 17 00:00:00 2001 From: Hugues Verlin Date: Wed, 29 Jan 2025 15:27:16 +0100 Subject: [PATCH 248/289] docs: Update python documentation (#4260) - Update python documentation. - Indicate how one might use it with `uv` in the cookbook (at least according to my understanding and after experimenting a bit with it) - Re-order the sections in the python page with the section about `uv`, `.python-version` and virtual env first - Update the `mise` json schema to match the documentation (and observed behavior) --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- docs/configuration.md | 2 +- docs/lang/python.md | 100 ++++++++++++++++------------ docs/mise-cookbook/python.md | 111 ++++++++++++++++++++++++++++++- e2e/core/test_python_precompiled | 11 +++ schema/mise.json | 10 ++- src/config/settings.rs | 5 -- 6 files changed, 186 insertions(+), 53 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index 14da1a7655..776e57a703 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -274,7 +274,7 @@ in mise and nvm. Here are some of the supported idiomatic version files: | terraform | `.terraform-version`, `.packer-version`, `main.tf` | | yarn | `.yarnrc` | -In mise these are enabled by default. You can disable them with [`mise settings idiomatic_version_file=false`](/configuration/settings.html#idiomatic_version_file) or for specific tools with [`mise settings idiomatic_version_file_disable_tools=['python']`](/configuration/settings.html#idiomatic_version_file_disable_tools). +In mise these are enabled by default. You can disable them with [`mise settings idiomatic_version_file false](/configuration/settings.html#idiomatic_version_file) or for specific tools with [`mise settings idiomatic_version_file_disable_tools python`](/configuration/settings.html#idiomatic_version_file_disable_tools). There is a performance cost to having these when they're parsed as it's performed by the plugin in `bin/parse-version-file`. However, these are [cached](/cache-behavior) so it's not a huge deal. diff --git a/docs/lang/python.md b/docs/lang/python.md index 0676e32ca4..e6443b3dd1 100644 --- a/docs/lang/python.md +++ b/docs/lang/python.md @@ -26,18 +26,42 @@ $ python3.11 -V 3.11.0 ``` -## Settings +See the [Python Cookbook](/mise-cookbook/python.html) for common tasks and examples. -`python-build` already has -a [handful of settings](https://github.com/pyenv/pyenv/tree/master/plugins/python-build), in -additional to that python in mise has a few extra configuration variables. +## `.python-version` support -Set these with `mise settings set [VARIABLE] [VALUE]` or by setting the environment variable. +`.python-version`/`.python-versions` files are supported by mise. See [idiomatic version files](/configuration.html#idiomatic-version-files). - - +## Automatic virtualenv activation + +Python comes with virtualenv support built in, use it with `mise.toml` configuration like +one of the following: + +```toml +[tools] +python = "3.11" # [optional] will be used for the venv + +[env] +_.python.venv = ".venv" # relative to this file's directory +_.python.venv = "/root/.venv" # can be absolute +_.python.venv = "{{env.HOME}}/.cache/venv/myproj" # can use templates +_.python.venv = { path = ".venv", create = true } # create the venv if it doesn't exist +_.python.venv = { path = ".venv", create = true, python = "3.10" } # use a specific python version +_.python.venv = { path = ".venv", create = true, python_create_args = ["--without-pip"] } # pass args to python -m venv +_.python.venv = { path = ".venv", create = true, uv_create_args = ["--system-site-packages"] } # pass args to uv venv +# Install seed packages (pip, setuptools, and wheel) into the virtual environment. +_.python.venv = { path = ".venv", create = true, uv_create_args = ['--seed'] } +``` + +The venv will need to be created manually with `python -m venv /path/to/venv` unless `create=true`. + +## mise & uv + +If you have installed `uv` (for example, with `mise use -g uv@latest`), `mise` will use it to create virtual environments. Otherwise, it will use the built-in `python -m venv` command. + +Note that `uv` does not include `pip` by default (as `uv` provides `uv pip` instead). If you need the `pip` package, add the `uv_create_args = ['--seed']` option. + +See the [mise + uv Cookbook](/mise-cookbook/python.html#mise-uv) for more examples. ## Default Python packages @@ -84,6 +108,20 @@ its [dependencies](https://github.com/pyenv/pyenv/wiki#suggested-build-environme before installing python with python-build. +## Installing free-threaded python + +Free-threaded python can be installed via python-build by running the following: + +```bash +MISE_PYTHON_COMPILE=0 MISE_PYTHON_PRECOMPILED_FLAVOR=freethreaded+pgo-full mise install python +``` + +Or to compile with python-build: + +```bash +MISE_PYTHON_COMPILE=1 PYTHON_BUILD_FREE_THREADING=1 mise install python +``` + ## Troubleshooting errors with Homebrew If you normally use Homebrew and you see errors regarding OpenSSL, @@ -122,41 +160,15 @@ CFLAGS="-I$(brew --prefix openssl)/include" \ brew link pkg-config ``` -## Automatic virtualenv activation - -Python comes with virtualenv support built in, use it with `mise.toml` configuration like -one of the following: - -```toml -[tools] -python = "3.11" # [optional] will be used for the venv - -[env] -_.python.venv = ".venv" # relative to this file's directory -_.python.venv = "/root/.venv" # can be absolute -_.python.venv = "{{env.HOME}}/.cache/venv/myproj" # can use templates -_.python.venv = { path = ".venv", create = true } # create the venv if it doesn't exist -_.python.venv = { path = ".venv", create = true, python = "3.10" } # use a specific python version -_.python.venv = { path = ".venv", create = true, python_create_args = ["--without-pip"] } # pass args to python -m venv -_.python.venv = { path = ".venv", create = true, uv_create_args = ["--system-site-packages"] } # pass args to uv venv -``` - -The venv will need to be created manually with `python -m venv /path/to/venv` unless `create=true`. - -## Installing free-threaded python - -Free-threaded python can be installed via python-build by running the following: - -```bash -MISE_PYTHON_COMPILE=0 MISE_PYTHON_PRECOMPILED_FLAVOR=freethreaded+pgo-full mise install python -``` - -Or to compile with python-build: +## Settings -```bash -MISE_PYTHON_COMPILE=1 PYTHON_BUILD_FREE_THREADING=1 mise install python -``` +`python-build` already has +a [handful of settings](https://github.com/pyenv/pyenv/tree/master/plugins/python-build), in +additional to that python in mise has a few extra configuration variables. -## `.python-version` support +Set these with `mise settings set [VARIABLE] [VALUE]` or by setting the environment variable. -`.python-version`/`.python-versions` files are supported by mise. See [idiomatic version files](/configuration.html#idiomatic-version-files). + + diff --git a/docs/mise-cookbook/python.md b/docs/mise-cookbook/python.md index 2a8938b912..8841a8fe69 100644 --- a/docs/mise-cookbook/python.md +++ b/docs/mise-cookbook/python.md @@ -1,6 +1,6 @@ # Mise + Python Cookbook -Here are some tips on managing Python projects with mise. +Here are some tips on managing [Python](/lang/python.html) projects with mise. ## A Python Project with virtualenv @@ -44,3 +44,112 @@ echo "Project: $PROJECT_NAME" echo "Virtual Environment: $VIRTUAL_ENV" ''' ``` + +## mise + uv + +If you are using a `uv` project initialized with `uv init .`, here is how you can use it with mise. + +Here is how the `uv` project will look like: + +```shell [uv-project] +. +โ”œโ”€โ”€ .gitignore +โ”œโ”€โ”€ .python-version +โ”œโ”€โ”€ hello.py +โ”œโ”€โ”€ pyproject.toml +โ””โ”€โ”€ README.md + +cat .python-version +# 3.12 +``` + +If you run `uv run hello.py` in the `uv` project, `uv` will automatically create a virtual environment for you using the python version specified in the `.python-version` file. This will also create a `uv.lock` file. + +`mise` will detect the python version in `.python-version`, however, it won't use the virtual env created by `uv` by default. So, using `which python` will show a global python installation from `mise`. + +```shell +mise i +which python +# ~/.local/share/mise/installs/python/3.12.4/bin/python +``` + +If you want `mise` to use the virtual environment created by `uv`, you can set the [`python.uv_venv_auto`](/lang/python.html#python.uv_venv_auto) setting to `true` in your `mise.toml` file. + +```toml [mise.toml] +[settings] +python.uv_venv_auto = true +``` + +Using `which python` will now show the python version from the virtual environment created by `uv`. + +```shell +which python +# ./uv-project/.venv/bin/python +``` + +Another option is to use `_.python.venv` in your `mise.toml` file to specify the path to the virtual environment created by `uv`. + +```toml [mise.toml] +[env] +_.python.venv = { path = ".venv" } +``` + +### Syncing python versions installed by mise and uv + +You can use [uv sync python --uv](/cli/sync/python.html#uv) to sync the python version installed by `mise` with the python version specified in the `.python-version` file in the `uv` project. + +### uv scripts + +You can take advantage of `uv run` in [`shebang`](/tasks/toml-tasks.html#shell-shebang) in toml or file tasks. +Note that using `--script` is required if the filename does not end in `.py`. + +Here is an example toml task: + +```toml [mise.toml] +[tools] +uv = 'latest' + +[tasks.print_peps] +run = """ +#!/usr/bin/env -S uv run --script +# /// script +# dependencies = ["requests<3", "rich"] +# /// + +import requests +from rich.pretty import pprint + +resp = requests.get("https://peps.python.org/api/peps.json") +data = resp.json() +pprint([(k, v["title"]) for k, v in data.items()][:10]) +""" +``` + +Or as a file task: + +```python [mise-tasks/print_peps.py] +#!/usr/bin/env -S uv run --script +# /// script +# dependencies = ["requests<3", "rich"] +# /// + +import requests +from rich.pretty import pprint + +resp = requests.get("https://peps.python.org/api/peps.json") +data = resp.json() +pprint([(k, v["title"]) for k, v in data.items()][:10]) +``` + +You can then run it with `mise run print_peps`: + +```shell +โฏ mise run print_peps +[print_peps] $ ~/uv-project/mise-tasks/print_peps.py +Installed 9 packages in 8ms +[ +โ”‚ ('1', 'PEP Purpose and Guidelines'), +โ”‚ ('2', 'Procedure for Adding New Modules'), + #... +] +``` diff --git a/e2e/core/test_python_precompiled b/e2e/core/test_python_precompiled index 7f7fc7c07e..cf3d5c40f8 100644 --- a/e2e/core/test_python_precompiled +++ b/e2e/core/test_python_precompiled @@ -3,3 +3,14 @@ export MISE_PYTHON_COMPILE=0 assert_contains "mise use python@3.12.3 2>&1" "cpython-" assert_contains "mise x -- python --version" "Python 3.12.3" + +rm mise.toml +mise rm python@3.12.3 + +echo '3.12.3' >.python-version +assert_contains "mise i 2>&1" "mise python@3.12.3" +assert_contains "mise x -- python --version" "Python 3.12.3" + +mise settings idiomatic_version_file_disable_tools python +mise use python@3.13 +assert_contains "mise x -- python --version" "Python 3.13" diff --git a/schema/mise.json b/schema/mise.json index b97250da27..7e3867abe0 100644 --- a/schema/mise.json +++ b/schema/mise.json @@ -157,11 +157,17 @@ }, "python_create_args": { "description": "additional arguments to pass to python when creating a virtual environment", - "type": "string" + "type": "array", + "items": { + "type": "string" + } }, "uv_create_args": { "description": "additional arguments to pass to uv when creating a virtual environment", - "type": "string" + "type": "array", + "items": { + "type": "string" + } } }, "required": ["path"], diff --git a/src/config/settings.rs b/src/config/settings.rs index 6efedcb7db..de12483a71 100644 --- a/src/config/settings.rs +++ b/src/config/settings.rs @@ -120,11 +120,6 @@ impl Settings { if !settings.legacy_version_file { settings.idiomatic_version_file = false; } - if !settings.idiomatic_version_file_disable_tools.is_empty() { - settings - .disable_tools - .extend(settings.idiomatic_version_file_disable_tools.clone()); - } if settings.raw { settings.jobs = 1; } From c610d185630d8f4571f1e0c4075e79ef0f92ebaf Mon Sep 17 00:00:00 2001 From: Abdul Rafay Shaikh Date: Wed, 29 Jan 2025 16:46:03 +0000 Subject: [PATCH 249/289] docs: fix postinstall typo in nodejs cookbook (#4251) Fix the error in hooks replace `post_install` with `postinstall` --- docs/mise-cookbook/nodejs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/mise-cookbook/nodejs.md b/docs/mise-cookbook/nodejs.md index 03311b9186..10fe3533fa 100644 --- a/docs/mise-cookbook/nodejs.md +++ b/docs/mise-cookbook/nodejs.md @@ -87,7 +87,7 @@ node = '22' [hooks] # Enabling corepack will install the `pnpm` package manager specified in your package.json # alternatively, you can also install `pnpm` with mise -post_install = 'npx corepack enable' +postinstall = 'npx corepack enable' [env] _.path = ['./node_modules/.bin'] From d10ba775db0e55ea24737a59cba909de7b2469d5 Mon Sep 17 00:00:00 2001 From: Jurgen Braam <2862977+jubr@users.noreply.github.com> Date: Thu, 30 Jan 2025 14:32:21 +0100 Subject: [PATCH 250/289] hooks.md: MISE_PROJECT_DIR -> MISE_PROJECT_ROOT (#4269) Found minor discrepancy in var name. This is the correct one, right? PS. Mise rocks! :P --- docs/hooks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hooks.md b/docs/hooks.md index f87307550b..083a42151e 100644 --- a/docs/hooks.md +++ b/docs/hooks.md @@ -60,7 +60,7 @@ This hook will have the following environment variables set: Hooks are executed with the following environment variables set: - `MISE_ORIGINAL_CWD`: The directory that the user is in. -- `MISE_PROJECT_DIR`: The root directory of the project. +- `MISE_PROJECT_ROOT`: The root directory of the project. - `MISE_PREVIOUS_DIR`: The directory that the user was in before the directory change (only if a directory change occurred). ## Shell hooks From 575063067d29f0bffd468587c7efee3a8f4c6dab Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Thu, 30 Jan 2025 16:14:34 +0100 Subject: [PATCH 251/289] fix: mise does not operate well under Git Bash on Windows (#4048) Fixes #4011 Gave this a try but detection of `msys` or `cygwin` does not work via `$OSTYPE` as this is not available via `env` so `env::var()` does not return anything. Not sure how reliable my approach via `MSYSTEM` and `PWD` is though. Another unresolved issue seems to be related to line breaks on cygwin. The `.bashrc` file does not source successfully until its opened and saved (without changes). Probably would require a `dos2unix` on cygwin, not sure why that is not an issue on msys. ```bash $ source .bashrc ': not a valid identifiernctions -bash: .bashrc: line 35: syntax error near unexpected token `$'\r'' 'bash: .bashrc: line 35: `function __zsh_like_cd() { ``` --- src/shims.rs | 46 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/src/shims.rs b/src/shims.rs index d53c7a6d45..cdbd23b1d4 100644 --- a/src/shims.rs +++ b/src/shims.rs @@ -129,6 +129,22 @@ pub fn reshim(ts: &Toolset, force: bool) -> Result<()> { #[cfg(windows)] fn add_shim(mise_bin: &Path, symlink_path: &Path, shim: &str) -> Result<()> { let shim = shim.trim_end_matches(".cmd"); + // write a shim file without extension for use in Git Bash/Cygwin + file::write( + symlink_path.with_extension(""), + formatdoc! {r#" + #!/bin/bash + + exec mise x -- {shim} "$@" + "#}, + ) + .wrap_err_with(|| { + eyre!( + "Failed to create symlink from {} to {}", + display_path(mise_bin), + display_path(symlink_path) + ) + })?; file::write( symlink_path.with_extension("cmd"), formatdoc! {r#" @@ -180,7 +196,7 @@ pub fn get_shim_diffs( fn get_actual_shims(mise_bin: impl AsRef) -> Result> { let mise_bin = mise_bin.as_ref(); - Ok(list_executables_in_dir(&dirs::SHIMS)? + Ok(list_shims()? .into_par_iter() .filter(|bin| { let path = dirs::SHIMS.join(bin); @@ -211,6 +227,27 @@ fn list_executables_in_dir(dir: &Path) -> Result> { .collect()) } +fn list_shims() -> Result> { + Ok(dirs::SHIMS + .read_dir()? + .par_bridge() + .map(|bin| { + let bin = bin?; + // files and symlinks which are executable or extensionless files (Git Bash/Cygwin) + if (file::is_executable(&bin.path()) || bin.path().extension().is_none()) + && (bin.file_type()?.is_file() || bin.file_type()?.is_symlink()) + { + Ok(Some(bin.file_name().into_string().unwrap())) + } else { + Ok(None) + } + }) + .collect::>>()? + .into_iter() + .flatten() + .collect()) +} + fn get_desired_shims(toolset: &Toolset) -> Result> { Ok(toolset .list_installed_versions()? @@ -222,9 +259,12 @@ fn get_desired_shims(toolset: &Toolset) -> Result> { }); if cfg!(windows) { bins.into_iter() - .map(|b| { + .flat_map(|b| { let p = PathBuf::from(&b); - p.with_extension("cmd").to_string_lossy().to_string() + vec![ + p.with_extension("").to_string_lossy().to_string(), + p.with_extension("cmd").to_string_lossy().to_string(), + ] }) .collect() } else { From c85741e41d939e95f849537c27706a5177a0fde9 Mon Sep 17 00:00:00 2001 From: mangkoran Date: Fri, 31 Jan 2025 01:15:24 +0700 Subject: [PATCH 252/289] feat(registry): use aqua for duckdb (#4270) Ref: https://github.com/aquaproj/aqua-registry/tree/1b78f46b6dd03d96fd16a9ea2c4bfdda533aaab7/pkgs/duckdb --- docs/registry.md | 2 +- registry.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/registry.md b/docs/registry.md index b1cde76919..a7df8d6e95 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -219,7 +219,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | dt | [aqua:so-dang-cool/dt](https://github.com/so-dang-cool/dt) [asdf:so-dang-cool/asdf-dt](https://github.com/so-dang-cool/asdf-dt) | | dtm | [ubi:devstream-io/devstream](https://github.com/devstream-io/devstream) [asdf:zhenyuanlau/asdf-dtm](https://github.com/zhenyuanlau/asdf-dtm) | | dua | [aqua:Byron/dua-cli](https://github.com/Byron/dua-cli) [ubi:Byron/dua-cli](https://github.com/Byron/dua-cli) | -| duckdb | [ubi:duckdb/duckdb](https://github.com/duckdb/duckdb) | +| duckdb | [aqua:duckdb/duckdb](https://github.com/duckdb/duckdb) [ubi:duckdb/duckdb](https://github.com/duckdb/duckdb) | | duf | [aqua:muesli/duf](https://github.com/muesli/duf) [asdf:NeoHsu/asdf-duf](https://github.com/NeoHsu/asdf-duf) | | dust | [ubi:bootandy/dust](https://github.com/bootandy/dust) [asdf:looztra/asdf-dust](https://github.com/looztra/asdf-dust) | | dvc | [asdf:mise-plugins/mise-dvc](https://github.com/mise-plugins/mise-dvc) | diff --git a/registry.toml b/registry.toml index 4808a58f92..9848f6dddb 100644 --- a/registry.toml +++ b/registry.toml @@ -547,7 +547,7 @@ dtm.backends = [ ] dua.backends = ["aqua:Byron/dua-cli", "ubi:Byron/dua-cli[exe=dua]"] dua.test = ["dua --version", "dua {{version}}"] -duckdb.backends = ["ubi:duckdb/duckdb"] +duckdb.backends = ["aqua:duckdb/duckdb", "ubi:duckdb/duckdb"] duckdb.test = ["duckdb --version", "{{version}}"] duf.backends = ["aqua:muesli/duf", "asdf:NeoHsu/asdf-duf"] dust.backends = ["ubi:bootandy/dust", "asdf:looztra/asdf-dust"] From 0527f18ba310aa3d68cd31cf20d705bb32c9fa5b Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Thu, 30 Jan 2025 23:52:37 +0100 Subject: [PATCH 253/289] fix: mise rm removes/reports wrong version of tool (#4272) --- e2e/cli/test_unuse | 15 +++++++++++---- src/cli/unuse.rs | 17 +++++++++++++---- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/e2e/cli/test_unuse b/e2e/cli/test_unuse index aef0aaeeaf..edd2f96b80 100644 --- a/e2e/cli/test_unuse +++ b/e2e/cli/test_unuse @@ -6,7 +6,7 @@ assert_empty "mise ls" assert "mise use dummy@1.0.0" assert_contains "mise ls dummy" "1.0.0" -assert "mise unuse dummy" +assert "mise unuse dummy@1.0.0" assert_empty "mise ls dummy" assert "mise use dummy@1.0.0" @@ -14,13 +14,20 @@ mkdir subdir cd subdir || exit 1 assert "mise use -p mise.toml dummy@1.0.0" assert "mise ls dummy" "dummy 1.0.0 ~/workdir/subdir/mise.toml 1.0.0" -assert "mise unuse dummy" +assert "mise unuse dummy@1.0.0" # version is not pruned because it's in ~/workdir/mise.toml assert "mise ls dummy" "dummy 1.0.0 ~/workdir/mise.toml 1.0.0" -assert "mise unuse dummy" +assert "mise unuse dummy@1.0.0" assert_empty "mise ls dummy" +cd - || exit 1 assert "mise use -g dummy@1.0.0" assert "mise ls dummy" "dummy 1.0.0 ~/.config/mise/config.toml 1.0.0" -assert "mise unuse dummy" +assert "mise unuse dummy@1.0.0" assert_empty "mise ls dummy" + +assert "mise use dummy@2.0.0" +assert "mise ls dummy" "dummy 2.0.0 ~/workdir/mise.toml 2.0.0" +# tool is not removed because version does not match +assert "mise unuse dummy@1.0.0" +assert "mise ls dummy" "dummy 2.0.0 ~/workdir/mise.toml 2.0.0" diff --git a/src/cli/unuse.rs b/src/cli/unuse.rs index 11bb5ceb8c..488b201af0 100644 --- a/src/cli/unuse.rs +++ b/src/cli/unuse.rs @@ -4,6 +4,7 @@ use crate::config; use crate::config::config_file::ConfigFile; use crate::config::{config_file, Config}; use crate::file::display_path; +use crate::toolset::ToolRequest; use eyre::Result; use itertools::Itertools; @@ -31,12 +32,20 @@ impl Unuse { let config = Config::get(); let mut cf = self.get_config_file(&config)?; let tools = cf.to_tool_request_set()?.tools; - let mut removed = vec![]; + let mut removed: Vec<&ToolArg> = vec![]; for ta in &self.installed_tool { - if tools.contains_key(&ta.ba) { - removed.push(ta); + if let Some(tool_requests) = tools.get(&ta.ba) { + let tools_to_remove: Vec<&ToolRequest> = tool_requests + .iter() + .filter(|tv| { + tv.version() == ta.version.as_ref().map_or("latest", |v| v.as_str()) + }) + .collect(); + for _tool in tools_to_remove { + removed.push(ta); + cf.remove_tool(&ta.ba)?; + } } - cf.remove_tool(&ta.ba)?; } if removed.is_empty() { debug!("no tools to remove"); From 9457278c91284bcc06f92d5439e49541f228612c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henr=C3=A9=20Botha?= Date: Fri, 31 Jan 2025 15:30:41 +0100 Subject: [PATCH 254/289] docs: Fix typo (#4277) --- docs/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/faq.md b/docs/faq.md index b5e6cc6a7b..fc192ff8d4 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -191,6 +191,6 @@ usage () is a spec and CLI for defining CLI tools. Arguments, flags, environment variables, and config files can all be defined in a Usage spec. It can be thought of like OpenAPI (swagger) for CLIs. -`usage` can be installed with `mise` using `mise use -g usage` and is required to get the autocompetion working. See [autocompletion](/installing-mise.html#autocompletion). +`usage` can be installed with `mise` using `mise use -g usage` and is required to get the autocompletion working. See [autocompletion](/installing-mise.html#autocompletion). You can leverage usage in file tasks to get auto-completion working, see [file tasks arguments](/tasks/file-tasks.html#arguments). From d877a53a7daba802116a1fd13a5288481c5f09c2 Mon Sep 17 00:00:00 2001 From: mise-en-dev Date: Fri, 31 Jan 2025 13:40:48 -0600 Subject: [PATCH 255/289] chore: release 2025.1.17 (#4261) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### ๐Ÿš€ Features - **(registry)** use aqua for duckdb by [@mangkoran](https://github.com/mangkoran) in [#4270](https://github.com/jdx/mise/pull/4270) ### ๐Ÿ› Bug Fixes - mise does not operate well under Git Bash on Windows by [@roele](https://github.com/roele) in [#4048](https://github.com/jdx/mise/pull/4048) - mise rm removes/reports wrong version of tool by [@roele](https://github.com/roele) in [#4272](https://github.com/jdx/mise/pull/4272) ### ๐Ÿ“š Documentation - Update python documentation by [@hverlin](https://github.com/hverlin) in [#4260](https://github.com/jdx/mise/pull/4260) - fix postinstall typo in nodejs cookbook by [@arafays](https://github.com/arafays) in [#4251](https://github.com/jdx/mise/pull/4251) - Fix typo by [@henrebotha](https://github.com/henrebotha) in [#4277](https://github.com/jdx/mise/pull/4277) ### Hooks.md - MISE_PROJECT_DIR -> MISE_PROJECT_ROOT by [@jubr](https://github.com/jubr) in [#4269](https://github.com/jdx/mise/pull/4269) ### New Contributors - @mangkoran made their first contribution in [#4270](https://github.com/jdx/mise/pull/4270) - @jubr made their first contribution in [#4269](https://github.com/jdx/mise/pull/4269) - @arafays made their first contribution in [#4251](https://github.com/jdx/mise/pull/4251) --- CHANGELOG.md | 27 +++++++++++++++++++++++++++ Cargo.lock | 41 +++++++++++++++++++++++++---------------- Cargo.toml | 2 +- README.md | 2 +- aqua-registry | 2 +- completions/_mise | 6 +++--- completions/mise.bash | 6 +++--- completions/mise.fish | 8 ++++---- default.nix | 2 +- packaging/rpm/mise.spec | 2 +- 10 files changed, 67 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c81d36a2f7..c37957d25b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,32 @@ # Changelog +## [2025.1.17](https://github.com/jdx/mise/compare/v2025.1.16..v2025.1.17) - 2025-01-31 + +### ๐Ÿš€ Features + +- **(registry)** use aqua for duckdb by [@mangkoran](https://github.com/mangkoran) in [#4270](https://github.com/jdx/mise/pull/4270) + +### ๐Ÿ› Bug Fixes + +- mise does not operate well under Git Bash on Windows by [@roele](https://github.com/roele) in [#4048](https://github.com/jdx/mise/pull/4048) +- mise rm removes/reports wrong version of tool by [@roele](https://github.com/roele) in [#4272](https://github.com/jdx/mise/pull/4272) + +### ๐Ÿ“š Documentation + +- Update python documentation by [@hverlin](https://github.com/hverlin) in [#4260](https://github.com/jdx/mise/pull/4260) +- fix postinstall typo in nodejs cookbook by [@arafays](https://github.com/arafays) in [#4251](https://github.com/jdx/mise/pull/4251) +- Fix typo by [@henrebotha](https://github.com/henrebotha) in [#4277](https://github.com/jdx/mise/pull/4277) + +### Hooks.md + +- MISE_PROJECT_DIR -> MISE_PROJECT_ROOT by [@jubr](https://github.com/jubr) in [#4269](https://github.com/jdx/mise/pull/4269) + +### New Contributors + +- @mangkoran made their first contribution in [#4270](https://github.com/jdx/mise/pull/4270) +- @jubr made their first contribution in [#4269](https://github.com/jdx/mise/pull/4269) +- @arafays made their first contribution in [#4251](https://github.com/jdx/mise/pull/4251) + ## [2025.1.16](https://github.com/jdx/mise/compare/v2025.1.15..v2025.1.16) - 2025-01-29 ### ๐Ÿš€ Features diff --git a/Cargo.lock b/Cargo.lock index ba5db56555..0f83e4f47b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1742,7 +1742,7 @@ dependencies = [ "gix-utils", "itoa", "thiserror 2.0.11", - "winnow", + "winnow 0.6.26", ] [[package]] @@ -1838,7 +1838,7 @@ dependencies = [ "smallvec", "thiserror 2.0.11", "unicode-bom", - "winnow", + "winnow 0.6.26", ] [[package]] @@ -2129,7 +2129,7 @@ dependencies = [ "itoa", "smallvec", "thiserror 2.0.11", - "winnow", + "winnow 0.6.26", ] [[package]] @@ -2262,7 +2262,7 @@ dependencies = [ "gix-utils", "maybe-async", "thiserror 2.0.11", - "winnow", + "winnow 0.6.26", ] [[package]] @@ -2294,7 +2294,7 @@ dependencies = [ "gix-validate", "memmap2", "thiserror 2.0.11", - "winnow", + "winnow 0.6.26", ] [[package]] @@ -3338,7 +3338,7 @@ dependencies = [ "miette", "num", "thiserror 1.0.69", - "winnow", + "winnow 0.6.26", ] [[package]] @@ -3637,7 +3637,7 @@ dependencies = [ [[package]] name = "mise" -version = "2025.1.16" +version = "2025.1.17" dependencies = [ "base64 0.22.1", "built", @@ -4835,9 +4835,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.21" +version = "0.23.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" +checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" dependencies = [ "once_cell", "ring", @@ -5856,15 +5856,15 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.22.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "02a8b472d1a3d7c18e2d61a489aee3453fd9031c33e4f55bd533f4a7adca1bee" dependencies = [ "indexmap 2.7.1", "serde", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.7.0", ] [[package]] @@ -6425,9 +6425,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.7" +version = "0.26.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" dependencies = [ "rustls-pki-types", ] @@ -6723,9 +6723,18 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.25" +version = "0.6.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad699df48212c6cc6eb4435f35500ac6fd3b9913324f938aea302022ce19d310" +checksum = "1e90edd2ac1aa278a5c4599b1d89cf03074b610800f866d4026dc199d7929a28" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e49d2d35d3fad69b39b94139037ecfb4f359f08958b9c11e7315ce770462419" dependencies = [ "memchr", ] diff --git a/Cargo.toml b/Cargo.toml index 5324d4b2f7..5c7a8aa649 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mise" -version = "2025.1.16" +version = "2025.1.17" edition = "2021" description = "The front-end to your dev env" authors = ["Jeff Dickey (@jdx)"] diff --git a/README.md b/README.md index 46a144bac2..89e4fbef27 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Install mise (other methods [here](https://mise.jdx.dev/getting-started.html)): ```sh-session $ curl https://mise.run | sh $ ~/.local/bin/mise --version -2025.1.16 macos-arm64 (a1b2d3e 2025-01-29) +2025.1.17 macos-arm64 (a1b2d3e 2025-01-31) ``` or install a specific a version: diff --git a/aqua-registry b/aqua-registry index f0e4dd947a..2b8e0a5bd7 160000 --- a/aqua-registry +++ b/aqua-registry @@ -1 +1 @@ -Subproject commit f0e4dd947a80d8c8deb2f24bdfe1e14f8ab4cb40 +Subproject commit 2b8e0a5bd7197f52199154d3dfb9af37ba94eac8 diff --git a/completions/_mise b/completions/_mise index b65c22f2fd..7719edc6a9 100644 --- a/completions/_mise +++ b/completions/_mise @@ -27,11 +27,11 @@ _mise() { zstyle ":completion:${curcontext}:" cache-policy _usage_mise_cache_policy fi - if ( [[ -z "${_usage_spec_mise_2025_1_16:-}" ]] || _cache_invalid _usage_spec_mise_2025_1_16 ) \ - && ! _retrieve_cache _usage_spec_mise_2025_1_16; + if ( [[ -z "${_usage_spec_mise_2025_1_17:-}" ]] || _cache_invalid _usage_spec_mise_2025_1_17 ) \ + && ! _retrieve_cache _usage_spec_mise_2025_1_17; then spec="$(mise usage)" - _store_cache _usage_spec_mise_2025_1_16 spec + _store_cache _usage_spec_mise_2025_1_17 spec fi _arguments "*: :(($(usage complete-word --shell zsh -s "$spec" -- "${words[@]}" )))" diff --git a/completions/mise.bash b/completions/mise.bash index 7ce4a0cab0..c0f73e140f 100644 --- a/completions/mise.bash +++ b/completions/mise.bash @@ -6,14 +6,14 @@ _mise() { return 1 fi - if [[ -z ${_usage_spec_mise_2025_1_16:-} ]]; then - _usage_spec_mise_2025_1_16="$(mise usage)" + if [[ -z ${_usage_spec_mise_2025_1_17:-} ]]; then + _usage_spec_mise_2025_1_17="$(mise usage)" fi local cur prev words cword was_split comp_args _comp_initialize -n : -- "$@" || return # shellcheck disable=SC2207 - _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2025_1_16}" --cword="$cword" -- "${words[@]}")" + _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2025_1_17}" --cword="$cword" -- "${words[@]}")" _comp_ltrim_colon_completions "$cur" # shellcheck disable=SC2181 if [[ $? -ne 0 ]]; then diff --git a/completions/mise.fish b/completions/mise.fish index 0f40e993bc..98128176ab 100644 --- a/completions/mise.fish +++ b/completions/mise.fish @@ -6,12 +6,12 @@ if ! command -v usage &> /dev/null return 1 end -if ! set -q _usage_spec_mise_2025_1_16 - set -g _usage_spec_mise_2025_1_16 (mise usage | string collect) +if ! set -q _usage_spec_mise_2025_1_17 + set -g _usage_spec_mise_2025_1_17 (mise usage | string collect) end set -l tokens if commandline -x >/dev/null 2>&1 - complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_1_16" -- (commandline -xpc) (commandline -t))' + complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_1_17" -- (commandline -xpc) (commandline -t))' else - complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_1_16" -- (commandline -opc) (commandline -t))' + complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_1_17" -- (commandline -opc) (commandline -t))' end diff --git a/default.nix b/default.nix index 43ecb2b5fc..32752baf33 100644 --- a/default.nix +++ b/default.nix @@ -2,7 +2,7 @@ rustPlatform.buildRustPackage { pname = "mise"; - version = "2025.1.16"; + version = "2025.1.17"; src = lib.cleanSource ./.; diff --git a/packaging/rpm/mise.spec b/packaging/rpm/mise.spec index 31582542ca..cc88ad7f65 100644 --- a/packaging/rpm/mise.spec +++ b/packaging/rpm/mise.spec @@ -1,6 +1,6 @@ Summary: The front-end to your dev env Name: mise -Version: 2025.1.16 +Version: 2025.1.17 Release: 1 URL: https://github.com/jdx/mise/ Group: System From 73d125ef16c2c591b5616f18ef6382ec8d2b835e Mon Sep 17 00:00:00 2001 From: ELLIOTTCABLE Date: Fri, 31 Jan 2025 17:56:13 -0700 Subject: [PATCH 256/289] Fix typo in the Python cookbook (#4280) --- docs/mise-cookbook/python.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/mise-cookbook/python.md b/docs/mise-cookbook/python.md index 8841a8fe69..9d12379266 100644 --- a/docs/mise-cookbook/python.md +++ b/docs/mise-cookbook/python.md @@ -96,7 +96,7 @@ _.python.venv = { path = ".venv" } ### Syncing python versions installed by mise and uv -You can use [uv sync python --uv](/cli/sync/python.html#uv) to sync the python version installed by `mise` with the python version specified in the `.python-version` file in the `uv` project. +You can use [mise sync python --uv](/cli/sync/python.html#uv) to sync the python version installed by `mise` with the python version specified in the `.python-version` file in the `uv` project. ### uv scripts From c8546efbe1f5d126711f1718b0231bcf46cdc234 Mon Sep 17 00:00:00 2001 From: mangkoran Date: Sat, 1 Feb 2025 20:58:09 +0700 Subject: [PATCH 257/289] feat(registry): add kwokctl (#4282) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ref: https://github.com/kubernetes-sigs/kwok Ref: https://github.com/aquaproj/aqua-registry/tree/9124d9fb77ded25d95ff22bde80624be5bbadc66/pkgs/kubernetes-sigs/kwok/kwokctl `kwokctl.test` version template ``` โฏ ./kwokctl-linux-amd64 --version kwokctl version v0.6.1 go1.22.3 (linux/amd64) ``` Note: Please reword my commit message to include the two refs later when merging. Currently it's only one. Thank you. --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- docs/registry.md | 1 + registry.toml | 2 ++ 2 files changed, 3 insertions(+) diff --git a/docs/registry.md b/docs/registry.md index a7df8d6e95..e94fd5a78d 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -455,6 +455,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | kubevela | [aqua:kubevela/kubevela](https://github.com/kubevela/kubevela) [asdf:gustavclausen/asdf-kubevela](https://github.com/gustavclausen/asdf-kubevela) | | kubie | [aqua:sbstp/kubie](https://github.com/sbstp/kubie) [asdf:johnhamelink/asdf-kubie](https://github.com/johnhamelink/asdf-kubie) | | kustomize | [aqua:kubernetes-sigs/kustomize](https://github.com/kubernetes-sigs/kustomize) [asdf:Banno/asdf-kustomize](https://github.com/Banno/asdf-kustomize) | +| kwokctl | [aqua:kubernetes-sigs/kwok/kwokctl](https://github.com/kubernetes-sigs/kwok/kwokctl) | | kwt | [aqua:carvel-dev/kwt](https://github.com/carvel-dev/kwt) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | | kyverno | [aqua:kyverno/kyverno](https://github.com/kyverno/kyverno) [asdf:https://github.com/hobaen/asdf-kyverno-cli.git](https://github.com/hobaen/asdf-kyverno-cli) | | lab | [aqua:zaquestion/lab](https://github.com/zaquestion/lab) [asdf:particledecay/asdf-lab](https://github.com/particledecay/asdf-lab) | diff --git a/registry.toml b/registry.toml index 9848f6dddb..1b81e67654 100644 --- a/registry.toml +++ b/registry.toml @@ -1121,6 +1121,8 @@ kustomize.backends = [ "asdf:Banno/asdf-kustomize" ] kustomize.test = ["kustomize version", "v{{version}}"] +kwokctl.backends = ["aqua:kubernetes-sigs/kwok/kwokctl"] +kwokctl.test = ["kwokctl --version", "kwokctl version v{{version}}"] kwt.backends = ["aqua:carvel-dev/kwt", "asdf:vmware-tanzu/asdf-carvel"] kyverno.backends = [ "aqua:kyverno/kyverno", From d2604680978e40570fc16200b684a65a6798c931 Mon Sep 17 00:00:00 2001 From: KITAGAWA Yasutaka Date: Sat, 1 Feb 2025 23:24:09 +0900 Subject: [PATCH 258/289] feat: add biome to registry (#4283) Add [biome](https://github.com/biomejs/biome) to registry using aqua and ubi backends. --- docs/registry.md | 1 + registry.toml | 2 ++ 2 files changed, 3 insertions(+) diff --git a/docs/registry.md b/docs/registry.md index e94fd5a78d..91f8dea60a 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -87,6 +87,7 @@ You can also specify the full name for a tool using `mise use aqua:1password/cli | benthos | [aqua:benthosdev/benthos](https://github.com/benthosdev/benthos) [asdf:benthosdev/benthos-asdf](https://github.com/benthosdev/benthos-asdf) | | bfs | [asdf:mise-plugins/mise-bfs](https://github.com/mise-plugins/mise-bfs) | | binnacle | [aqua:Traackr/binnacle](https://github.com/Traackr/binnacle) [asdf:Traackr/asdf-binnacle](https://github.com/Traackr/asdf-binnacle) | +| biome | [aqua:biomejs/biome](https://github.com/biomejs/biome) [ubi:biomejs/biome](https://github.com/biomejs/biome) | | bitwarden | [aqua:bitwarden/clients](https://github.com/bitwarden/clients) [asdf:vixus0/asdf-bitwarden](https://github.com/vixus0/asdf-bitwarden) | | bitwarden-secrets-manager | [ubi:bitwarden/sdk](https://github.com/bitwarden/sdk) [asdf:asdf-community/asdf-bitwarden-secrets-manager](https://github.com/asdf-community/asdf-bitwarden-secrets-manager) | | black | [aqua:psf/black](https://github.com/psf/black) | diff --git a/registry.toml b/registry.toml index 1b81e67654..9e0edaf9f2 100644 --- a/registry.toml +++ b/registry.toml @@ -195,6 +195,8 @@ bbr-s3-config-validator.backends = ["asdf:mise-plugins/tanzu-plug-in-for-asdf"] benthos.backends = ["aqua:benthosdev/benthos", "asdf:benthosdev/benthos-asdf"] bfs.backends = ["asdf:mise-plugins/mise-bfs"] binnacle.backends = ["aqua:Traackr/binnacle", "asdf:Traackr/asdf-binnacle"] +biome.backends = ["aqua:biomejs/biome", "ubi:biomejs/biome"] +biome.test = ["biome --version", "Version: {{version}}"] bitwarden.backends = ["aqua:bitwarden/clients", "asdf:vixus0/asdf-bitwarden"] bitwarden.test = [ "bw --version", From fca4aa439625c42ac9152fa3d0155a200ab11734 Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Sat, 1 Feb 2025 20:57:05 +0100 Subject: [PATCH 259/289] docs: add filtering support to registry docs page (#4285) Fixes #3986 --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- docs/bun.lockb | Bin 82351 -> 86577 bytes docs/components/registry.vue | 91 ++++ docs/package.json | 2 +- docs/registry.data.ts | 57 +++ docs/registry.md | 831 +---------------------------------- docs/registry.toml | 1 + docs/settings.data.ts | 4 +- scripts/render-registry.js | 81 ---- tasks.md | 6 - tasks.toml | 4 - 10 files changed, 157 insertions(+), 920 deletions(-) create mode 100644 docs/components/registry.vue create mode 100644 docs/registry.data.ts create mode 120000 docs/registry.toml delete mode 100755 scripts/render-registry.js diff --git a/docs/bun.lockb b/docs/bun.lockb index 263eb4a24d87accc42666d40cb94dc9371ed9723..9377ed494ca832a1c36022daa3b2b618c8bc1626 100755 GIT binary patch delta 3755 zcmchacUV(d7Qo*N5C|9%LDZom9g@%#MnO=T%7-(S5l}<|M8E+Ol7N9xgCZ(LRGtE2 zS#e}7Sirb;(3O=kR2xl2v8>p}MMOjq=iHD7Z}oHk-1mLI@7z=Fx#iv5cXBFCrRD+_6NDsf$VkXs*O-(;19C(3%N$8j&#Fh0zY0z~;;cpDJwZ4}dDcWm*ykm}*Q3czyy87%?;x zTe-Cwth2zX1Xe4E1*;W94K~Uhj2c9biHlY#XlN?R5CZ#)O(0V;UV#TKOdiLuokP`D zfrf?~_FVvNBqQTJX#NTxhY&E8WlucejhOk_EsursLxVx$L87C?SLg{yfrl#Tps!Zg z|CdDhk|9n>cHh(E|1nH?K&m&fE7zaclFKAs=lbKd#E(QE;Yu)xeS|+=M?43u8?=C( zUQ!$z(j0=>HK64w9_8b!rKTA%x^cUnOx~>K>&B>6l~sC`Z3=$5e!#m8>wXb?>TYY- z7$QUId7j3qw6pz<9R>4rXFsTY+HG$9TB9fw@{xHP$)q5a*A#ay$*lZf*K&E;jKzAH z0ULCsFO!t+ypERXkL#)0{bFlG+A%M@6dw~Wu`{)~IWweA_Sm;)OG$~Lw7JbaB}zz1 z+(b?MtUxQUuIjkyq?JkA4b&_9!@GxcmG4^(oL%{+bPm_R@YS}kyp41G7Bz9>PwiYh z^^H!PXu&VF>2sB(C4s5yieFEpByOfAPR!^sG_bTtGurPP+a2@wjlq^!!%G;Z!h8Ni_&HWeKbf>%V zU^(|ZU1e54b2pqSGVx7nVj=6G*}5!A2FIf{W7!ew3s2pIN!%-q-mGo*J<;iB+UoVk zE?s@>XV$^!_gwS3FVaSma)HA>*@8jI@D2i z;`V4>DW)7=8|&UZb=r!12^| zK}Y-6*na0d!aX@Rt~xNY^!sdDiztcjj3&mEH`HX`wB~lD=f!87@~V%TtM~Vd2_?C#)uE_8h;JG^WJXeD}NRu3N2}gDZYo z@0`=Cc4<+=d2dSIRw*^{$KO{7(<0w^z4iZ8R_OjTiwGY#rJ{YqZl01}q4Nvxt<6Hc z%Z64SUUwgEPnmQ7Xh2Ry{lJObbA^IuV|}`B4t%C0ZlmUlrDMd|1{-{c z=xWfDE`<1HKqL?XL;!&R4_FQ?0z!cxU?mU@tN@~bFkmqd3~+&8fN)?bumoTO9KaqB z0H`4O6<7@<074WR4-Gz$2#A3sAQ?yj;s6mK0b&3h0KFbtzyh!YOaNoR5I`R^0T2#w zi5rc9w9Ob{(PTsa0!|DkmNv~(f7pTA7}op{y$vR6>H&E`gRH$NOC_ovn&=(Y0e=9s zK#c-)8=*@d-OuRCL)R%fjp!A(0O&V*8$g!}Y9on!WE<-O1)c&`oXENp>_paMWU)lU zLmk-mY=_}>!V66u9JqESELrCQ@;I}>DVx}$X@<`yEI&HoLBz6;0aCJ9BP%Hsin2J3 zlzC(g2A-*q1JaX)A6b=w$A#@MjXf13OF*(d1CJBi$)4?qkwqd|!GQ;+>MUj3V`TY9 z7H2eEF$0V&5Xtgw)T5{&Q^^8v)I(O8WC=LxA?r}GNJJhOAC`)dr7BrR(s0-=7q+7V z_Wg9<@ALg>f0KsEy$36GT;PMFkd6ICCD>OpG5w%rS4vp<=7pWEqyr{Vb- z*0`Rz;#hE497T&IKNW0oR7ylNFGESrI5(UZ%Mm8V zi(}$=tO&jk%6}*5rJrAFh12JK<$x4lSy-@p)7UQZQK2&n<|0TG^3Y$0c%G0e<_lTF zJ@R)L;QH)u?L3t8n`j;jof=}tkcknR6PXrbsVd8f?VMj^gquo7SByeNmd_eKVe*xZ zS~(FSF)LCmV!<3eDds4yNKDm-|Np?BA=Xz8ak79XqDC?k#WAs>Sbii|6wTu0&r-tm z^+`={H-G(`ur$Hb1E1%Cm831asE delta 996 zcmXxjSxggA6b9fsV38>nL5*9JA|QfWTd4_EP(aHjs729&3R2kwWwCr18}ui3p1YT|tKmF1=T zc`Xe57&}>&r!Fndvy?X&CiBw#DhqF@MJ~s6v!$rQY&lq9PoApx@ty04%WraBO`($t ztv$g1#R~Dydd9Tq^Co9llo*R$vB>=CR%n!rkm>1qXtd}+v=((Q3XYBv#RSG8-5K8# zjVuP4%zZ*NGQIoStuPHO@SkGOFz9^*MjO+0cB3K26MjfPZisV?S;dxi+n>C&w&3uu zna|nJD>M4Lzh$T9YRje-+~_!K8(m6ir=ER0rHVgS;kuR>{P3u)@M%fynZK*gFZG9?8mq*TE{S(1r-TNLyd*((xTHq#H=d%Ll1ia1~ zSPc7szvEIUgL0^V17LxJPzhCV2&$n54#N@H0$U*iw!wBVK_+Cu4%i91ARBUEH*d>D zV1_-A2l-F{g-`^0K@A$fpNh=_KHfzT4og7=3m_QGn9d#=88VT6I6_{J3ZLl&qr%}0 z@;7}v$ME|x$q-SA&rs+I{lp+UMU6E^z&`aOAo-o>QbQ-wPDUe{z{PW+=tUm?UG cC8z{tAU{*HT*H5syAOM0OcUw_`fh9a2c_r;f&c&j diff --git a/docs/components/registry.vue b/docs/components/registry.vue new file mode 100644 index 0000000000..c534eb8c8b --- /dev/null +++ b/docs/components/registry.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/docs/package.json b/docs/package.json index 2133abf72c..f83f127ff8 100644 --- a/docs/package.json +++ b/docs/package.json @@ -12,8 +12,8 @@ }, "dependencies": { "@types/markdown-it": "^14.1.2", + "js-toml": "^1.0.1", "markdown-it": "^14.1.0", - "toml": "^3.0.0", "vitepress-plugin-group-icons": "^1.3.1", "vitepress-plugin-tabs": "^0.5.0" } diff --git a/docs/registry.data.ts b/docs/registry.data.ts new file mode 100644 index 0000000000..8a7d570015 --- /dev/null +++ b/docs/registry.data.ts @@ -0,0 +1,57 @@ +import * as fs from "node:fs"; +import { load } from "js-toml"; + +type Registry = { + [key: string]: { + short: string; + aliases?: string[]; + backends?: [{ name: string; url: string }?]; + os?: string[]; + }; +}; + +type Backend = string | { full: string; platforms: string[] }; + +export default { + watch: ["./registry.toml"], + load() { + const raw = fs.readFileSync("./registry.toml", "utf-8"); + const doc: any = load(raw); + const registry: Registry = {}; + + const tools = doc["tools"]; + for (const key in tools) { + const tool = tools[key]; + const backends = tool.backends || []; + + registry[key] = { + short: key, + aliases: tool.aliases || [], + backends: backends.map((backend: Backend) => { + let name = typeof backend === "string" ? backend : backend.full; + let parts = name.toString().split(":"); + let prefix = parts[0]; + let slug = parts[1]; + let urlMap: { [key: string]: string } = { + core: `https://mise.jdx.dev/lang/${slug}.html`, + cargo: `https://crates.io/crates/${slug}`, + go: `https://pkg.go.dev/${slug}`, + pipx: `https://pypi.org/project/${slug}`, + npm: `https://www.npmjs.com/package/${slug}`, + }; + let url = urlMap[prefix] || `https://github.com/${slug}`; + return { + // replace selector square brackets + name: name.replace(/(.*?)\[.*\]/g, "$1"), + url, + }; + }), + os: tool.os || [], + }; + } + + return Object.values(registry).sort((a, b) => + a.short.localeCompare(b.short), + ); + }, +}; diff --git a/docs/registry.md b/docs/registry.md index 91f8dea60a..bfbdc2dde3 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -4,6 +4,10 @@ editLink: false # Registry + + In general, the preferred backend to use for new tools is the following: - [aqua](./dev-tools/backends/aqua.html) - offers the most features and security while not requiring plugins @@ -21,829 +25,4 @@ And it will be skipped. See [Aliases](/dev-tools/aliases.html) for a way to set You can also specify the full name for a tool using `mise use aqua:1password/cli` if you want to use a specific backend. -| Short | Full | -| ----------- | --------------- | -| 1password | [asdf:mise-plugins/mise-1password-cli](https://github.com/mise-plugins/mise-1password-cli) [aqua:1password/cli](https://github.com/1password/cli) | -| aapt2 | [asdf:mise-plugins/mise-aapt2](https://github.com/mise-plugins/mise-aapt2) | -| act | [aqua:nektos/act](https://github.com/nektos/act) [ubi:nektos/act](https://github.com/nektos/act) [asdf:gr1m0h/asdf-act](https://github.com/gr1m0h/asdf-act) | -| action-validator | [aqua:mpalmer/action-validator](https://github.com/mpalmer/action-validator) [ubi:mpalmer/action-validator](https://github.com/mpalmer/action-validator) [asdf:mpalmer/action-validator](https://github.com/mpalmer/action-validator) | -| actionlint | [aqua:rhysd/actionlint](https://github.com/rhysd/actionlint) [ubi:rhysd/actionlint](https://github.com/rhysd/actionlint) [asdf:crazy-matt/asdf-actionlint](https://github.com/crazy-matt/asdf-actionlint) | -| adr-tools | [aqua:npryce/adr-tools](https://github.com/npryce/adr-tools) [asdf:https://gitlab.com/td7x/asdf/adr-tools](https://gitlab.com/td7x/asdf/adr-tools) | -| ag | [asdf:mise-plugins/mise-ag](https://github.com/mise-plugins/mise-ag) | -| age | [aqua:FiloSottile/age](https://github.com/FiloSottile/age) [asdf:threkk/asdf-age](https://github.com/threkk/asdf-age) | -| age-plugin-yubikey | [ubi:str4d/age-plugin-yubikey](https://github.com/str4d/age-plugin-yubikey) [asdf:joke/asdf-age-plugin-yubikey](https://github.com/joke/asdf-age-plugin-yubikey) | -| agebox | [ubi:slok/agebox](https://github.com/slok/agebox) [asdf:slok/asdf-agebox](https://github.com/slok/asdf-agebox) | -| air | [aqua:air-verse/air](https://github.com/air-verse/air) [asdf:pdemagny/asdf-air](https://github.com/pdemagny/asdf-air) | -| aks-engine | [aqua:Azure/aks-engine](https://github.com/Azure/aks-engine) [asdf:robsonpeixoto/asdf-aks-engine](https://github.com/robsonpeixoto/asdf-aks-engine) | -| allure | [asdf:mise-plugins/mise-allure](https://github.com/mise-plugins/mise-allure) | -| allurectl | [ubi:allure-framework/allurectl](https://github.com/allure-framework/allurectl) | -| alp | [aqua:tkuchiki/alp](https://github.com/tkuchiki/alp) [asdf:asdf-community/asdf-alp](https://github.com/asdf-community/asdf-alp) | -| amass | [ubi:owasp-amass/amass](https://github.com/owasp-amass/amass) [asdf:dhoeric/asdf-amass](https://github.com/dhoeric/asdf-amass) | -| amazon-ecr-credential-helper | [aqua:awslabs/amazon-ecr-credential-helper](https://github.com/awslabs/amazon-ecr-credential-helper) [asdf:dex4er/asdf-amazon-ecr-credential-helper](https://github.com/dex4er/asdf-amazon-ecr-credential-helper) | -| ansible | [pipx:ansible](https://pypi.org/project/ansible) | -| ansible-core | [pipx:ansible-core](https://pypi.org/project/ansible-core) | -| ant | [asdf:mise-plugins/mise-ant](https://github.com/mise-plugins/mise-ant) | -| apko | [aqua:chainguard-dev/apko](https://github.com/chainguard-dev/apko) [ubi:chainguard-dev/apko](https://github.com/chainguard-dev/apko) [asdf:omissis/asdf-apko](https://github.com/omissis/asdf-apko) | -| apollo-ios | [asdf:mise-plugins/mise-apollo-ios-cli](https://github.com/mise-plugins/mise-apollo-ios-cli) | -| apollo-router | [ubi:apollographql/router](https://github.com/apollographql/router) [asdf:safx/asdf-apollo-router](https://github.com/safx/asdf-apollo-router) | -| apollo-rover | [ubi:apollographql/rover](https://github.com/apollographql/rover) | -| aqua | [ubi:aquaproj/aqua](https://github.com/aquaproj/aqua) | -| arduino | [aqua:arduino/arduino-cli](https://github.com/arduino/arduino-cli) [asdf:egnor/asdf-arduino-cli](https://github.com/egnor/asdf-arduino-cli) | -| argc | [ubi:sigoden/argc](https://github.com/sigoden/argc) | -| argo | [aqua:argoproj/argo-workflows](https://github.com/argoproj/argo-workflows) [asdf:sudermanjr/asdf-argo](https://github.com/sudermanjr/asdf-argo) | -| argo-rollouts | [aqua:argoproj/argo-rollouts](https://github.com/argoproj/argo-rollouts) [asdf:abatilo/asdf-argo-rollouts](https://github.com/abatilo/asdf-argo-rollouts) | -| argocd | [aqua:argoproj/argo-cd](https://github.com/argoproj/argo-cd) [ubi:argoproj/argo-cd](https://github.com/argoproj/argo-cd) [asdf:beardix/asdf-argocd](https://github.com/beardix/asdf-argocd) | -| asciidoctorj | [asdf:mise-plugins/mise-asciidoctorj](https://github.com/mise-plugins/mise-asciidoctorj) | -| assh | [asdf:mise-plugins/mise-assh](https://github.com/mise-plugins/mise-assh) | -| atlas | [aqua:ariga/atlas](https://github.com/ariga/atlas) [asdf:komi1230/asdf-atlas](https://github.com/komi1230/asdf-atlas) | -| atmos | [aqua:cloudposse/atmos](https://github.com/cloudposse/atmos) [asdf:cloudposse/asdf-atmos](https://github.com/cloudposse/asdf-atmos) | -| auto-doc | [asdf:mise-plugins/mise-auto-doc](https://github.com/mise-plugins/mise-auto-doc) | -| aws-amplify | [ubi:aws-amplify/amplify-cli](https://github.com/aws-amplify/amplify-cli) [asdf:LozanoMatheus/asdf-aws-amplify-cli](https://github.com/LozanoMatheus/asdf-aws-amplify-cli) | -| aws-cli | [aqua:aws/aws-cli](https://github.com/aws/aws-cli) [asdf:MetricMike/asdf-awscli](https://github.com/MetricMike/asdf-awscli) | -| aws-copilot | [aqua:aws/copilot-cli](https://github.com/aws/copilot-cli) [asdf:NeoHsu/asdf-copilot](https://github.com/NeoHsu/asdf-copilot) | -| aws-iam-authenticator | [aqua:kubernetes-sigs/aws-iam-authenticator](https://github.com/kubernetes-sigs/aws-iam-authenticator) [asdf:zekker6/asdf-aws-iam-authenticator](https://github.com/zekker6/asdf-aws-iam-authenticator) | -| aws-nuke | [aqua:rebuy-de/aws-nuke](https://github.com/rebuy-de/aws-nuke) [asdf:bersalazar/asdf-aws-nuke](https://github.com/bersalazar/asdf-aws-nuke) | -| aws-sam | [pipx:aws-sam-cli](https://pypi.org/project/aws-sam-cli) [asdf:mise-plugins/mise-pyapp](https://github.com/mise-plugins/mise-pyapp) | -| aws-sso | [aqua:synfinatic/aws-sso-cli](https://github.com/synfinatic/aws-sso-cli) [asdf:adamcrews/asdf-aws-sso-cli](https://github.com/adamcrews/asdf-aws-sso-cli) | -| aws-vault | [aqua:99designs/aws-vault](https://github.com/99designs/aws-vault) [asdf:karancode/asdf-aws-vault](https://github.com/karancode/asdf-aws-vault) | -| awscli-local | [asdf:mise-plugins/mise-awscli-local](https://github.com/mise-plugins/mise-awscli-local) | -| awsebcli | [pipx:awsebcli](https://pypi.org/project/awsebcli) [asdf:mise-plugins/mise-pyapp](https://github.com/mise-plugins/mise-pyapp) | -| awsls | [ubi:jckuester/awsls](https://github.com/jckuester/awsls) [asdf:chessmango/asdf-awsls](https://github.com/chessmango/asdf-awsls) | -| awsrm | [ubi:jckuester/awsrm](https://github.com/jckuester/awsrm) [asdf:chessmango/asdf-awsrm](https://github.com/chessmango/asdf-awsrm) | -| awsweeper | [ubi:jckuester/awsweeper](https://github.com/jckuester/awsweeper) [asdf:chessmango/asdf-awsweeper](https://github.com/chessmango/asdf-awsweeper) | -| azure | [asdf:mise-plugins/mise-azure-cli](https://github.com/mise-plugins/mise-azure-cli) | -| azure-functions-core-tools | [asdf:mise-plugins/mise-azure-functions-core-tools](https://github.com/mise-plugins/mise-azure-functions-core-tools) | -| azure-kubelogin | [aqua:Azure/kubelogin](https://github.com/Azure/kubelogin) [asdf:sechmann/asdf-kubelogin](https://github.com/sechmann/asdf-kubelogin) | -| babashka | [ubi:babashka/babashka](https://github.com/babashka/babashka) [asdf:pitch-io/asdf-babashka](https://github.com/pitch-io/asdf-babashka) | -| balena | [ubi:balena-io/balena-cli](https://github.com/balena-io/balena-cli) [asdf:boatkit-io/asdf-balena-cli](https://github.com/boatkit-io/asdf-balena-cli) | -| bashbot | [aqua:mathew-fleisch/bashbot](https://github.com/mathew-fleisch/bashbot) [asdf:mathew-fleisch/asdf-bashbot](https://github.com/mathew-fleisch/asdf-bashbot) | -| bashly | [asdf:mise-plugins/mise-bashly](https://github.com/mise-plugins/mise-bashly) | -| bat | [ubi:sharkdp/bat](https://github.com/sharkdp/bat) [cargo:bat](https://crates.io/crates/bat) [asdf:https://gitlab.com/wt0f/asdf-bat](https://gitlab.com/wt0f/asdf-bat) | -| bat-extras | [asdf:mise-plugins/mise-bat-extras](https://github.com/mise-plugins/mise-bat-extras) | -| bats | [aqua:bats-core/bats-core](https://github.com/bats-core/bats-core) [asdf:timgluz/asdf-bats](https://github.com/timgluz/asdf-bats) | -| bazel | [ubi:bazelbuild/bazel](https://github.com/bazelbuild/bazel) [asdf:rajatvig/asdf-bazel](https://github.com/rajatvig/asdf-bazel) | -| bazelisk | [aqua:bazelbuild/bazelisk](https://github.com/bazelbuild/bazelisk) [asdf:josephtate/asdf-bazelisk](https://github.com/josephtate/asdf-bazelisk) | -| bbr-s3-config-validator | [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | -| benthos | [aqua:benthosdev/benthos](https://github.com/benthosdev/benthos) [asdf:benthosdev/benthos-asdf](https://github.com/benthosdev/benthos-asdf) | -| bfs | [asdf:mise-plugins/mise-bfs](https://github.com/mise-plugins/mise-bfs) | -| binnacle | [aqua:Traackr/binnacle](https://github.com/Traackr/binnacle) [asdf:Traackr/asdf-binnacle](https://github.com/Traackr/asdf-binnacle) | -| biome | [aqua:biomejs/biome](https://github.com/biomejs/biome) [ubi:biomejs/biome](https://github.com/biomejs/biome) | -| bitwarden | [aqua:bitwarden/clients](https://github.com/bitwarden/clients) [asdf:vixus0/asdf-bitwarden](https://github.com/vixus0/asdf-bitwarden) | -| bitwarden-secrets-manager | [ubi:bitwarden/sdk](https://github.com/bitwarden/sdk) [asdf:asdf-community/asdf-bitwarden-secrets-manager](https://github.com/asdf-community/asdf-bitwarden-secrets-manager) | -| black | [aqua:psf/black](https://github.com/psf/black) | -| bombardier | [aqua:codesenberg/bombardier](https://github.com/codesenberg/bombardier) [asdf:NeoHsu/asdf-bombardier](https://github.com/NeoHsu/asdf-bombardier) | -| borg | [aqua:borgbackup/borg](https://github.com/borgbackup/borg) [asdf:lwiechec/asdf-borg](https://github.com/lwiechec/asdf-borg) | -| bosh | [aqua:cloudfoundry/bosh-cli](https://github.com/cloudfoundry/bosh-cli) [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | -| bosh-backup-and-restore | [ubi:cloudfoundry-incubator/bosh-backup-and-restore](https://github.com/cloudfoundry-incubator/bosh-backup-and-restore) [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | -| bottom | [aqua:ClementTsang/bottom](https://github.com/ClementTsang/bottom) [asdf:carbonteq/asdf-btm](https://github.com/carbonteq/asdf-btm) | -| boundary | [aqua:hashicorp/boundary](https://github.com/hashicorp/boundary) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | -| bpkg | [asdf:mise-plugins/mise-bpkg](https://github.com/mise-plugins/mise-bpkg) | -| brig | [aqua:brigadecore/brigade](https://github.com/brigadecore/brigade) [asdf:Ibotta/asdf-brig](https://github.com/Ibotta/asdf-brig) | -| btop | [ubi:aristocratos/btop](https://github.com/aristocratos/btop) | -| btrace | [asdf:mise-plugins/mise-btrace](https://github.com/mise-plugins/mise-btrace) | -| buf | [aqua:bufbuild/buf](https://github.com/bufbuild/buf) [ubi:bufbuild/buf](https://github.com/bufbuild/buf) [asdf:truepay/asdf-buf](https://github.com/truepay/asdf-buf) | -| buildpack | [aqua:buildpacks/pack](https://github.com/buildpacks/pack) [asdf:johnlayton/asdf-buildpack](https://github.com/johnlayton/asdf-buildpack) | -| bun | [core:bun](https://mise.jdx.dev/lang/bun.html) | -| cabal | [aqua:haskell/cabal/cabal-install](https://github.com/haskell/cabal/cabal-install) | -| caddy | [aqua:caddyserver/caddy](https://github.com/caddyserver/caddy) [asdf:salasrod/asdf-caddy](https://github.com/salasrod/asdf-caddy) | -| calendarsync | [ubi:inovex/CalendarSync](https://github.com/inovex/CalendarSync) [asdf:FeryET/asdf-calendarsync](https://github.com/FeryET/asdf-calendarsync) | -| calicoctl | [aqua:projectcalico/calico/calicoctl](https://github.com/projectcalico/calico/calicoctl) [asdf:TheCubicleJockey/asdf-calicoctl](https://github.com/TheCubicleJockey/asdf-calicoctl) | -| cargo-binstall | [aqua:cargo-bins/cargo-binstall](https://github.com/cargo-bins/cargo-binstall) [ubi:cargo-bins/cargo-binstall](https://github.com/cargo-bins/cargo-binstall) [cargo:cargo-binstall](https://crates.io/crates/cargo-binstall) | -| cargo-insta | [aqua:mitsuhiko/insta](https://github.com/mitsuhiko/insta) [ubi:mitsuhiko/insta](https://github.com/mitsuhiko/insta) | -| cargo-make | [ubi:sagiegurari/cargo-make](https://github.com/sagiegurari/cargo-make) [asdf:mise-plugins/asdf-cargo-make](https://github.com/mise-plugins/asdf-cargo-make) | -| carp | [ubi:carp-lang/Carp](https://github.com/carp-lang/Carp) [asdf:susurri/asdf-carp](https://github.com/susurri/asdf-carp) | -| carthage | [asdf:mise-plugins/mise-carthage](https://github.com/mise-plugins/mise-carthage) | -| ccache | [ubi:ccache/ccache](https://github.com/ccache/ccache) [asdf:asdf-community/asdf-ccache](https://github.com/asdf-community/asdf-ccache) | -| certstrap | [ubi:square/certstrap](https://github.com/square/certstrap) [asdf:carnei-ro/asdf-certstrap](https://github.com/carnei-ro/asdf-certstrap) | -| cf | [asdf:mise-plugins/mise-cf](https://github.com/mise-plugins/mise-cf) | -| cfssl | [aqua:cloudflare/cfssl/cfssl](https://github.com/cloudflare/cfssl/cfssl) [asdf:mathew-fleisch/asdf-cfssl](https://github.com/mathew-fleisch/asdf-cfssl) | -| chamber | [ubi:segmentio/chamber](https://github.com/segmentio/chamber) [asdf:mintel/asdf-chamber](https://github.com/mintel/asdf-chamber) | -| changie | [ubi:miniscruff/changie](https://github.com/miniscruff/changie) [asdf:pdemagny/asdf-changie](https://github.com/pdemagny/asdf-changie) | -| cheat | [aqua:cheat/cheat](https://github.com/cheat/cheat) [asdf:jmoratilla/asdf-cheat-plugin](https://github.com/jmoratilla/asdf-cheat-plugin) | -| checkov | [ubi:bridgecrewio/checkov](https://github.com/bridgecrewio/checkov) [asdf:bosmak/asdf-checkov](https://github.com/bosmak/asdf-checkov) | -| chezmoi | [ubi:twpayne/chezmoi](https://github.com/twpayne/chezmoi) [asdf:joke/asdf-chezmoi](https://github.com/joke/asdf-chezmoi) | -| chezscheme | [asdf:mise-plugins/mise-chezscheme](https://github.com/mise-plugins/mise-chezscheme) | -| chicken | [asdf:mise-plugins/mise-chicken](https://github.com/mise-plugins/mise-chicken) | -| chisel | [ubi:jpillora/chisel](https://github.com/jpillora/chisel) [go:github.com/jpillora/chisel](https://pkg.go.dev/github.com/jpillora/chisel) [asdf:lwiechec/asdf-chisel](https://github.com/lwiechec/asdf-chisel) | -| choose | [ubi:theryangeary/choose](https://github.com/theryangeary/choose) [cargo:choose](https://crates.io/crates/choose) [asdf:carbonteq/asdf-choose](https://github.com/carbonteq/asdf-choose) | -| chromedriver | [asdf:mise-plugins/mise-chromedriver](https://github.com/mise-plugins/mise-chromedriver) | -| cidr-merger | [ubi:zhanhb/cidr-merger](https://github.com/zhanhb/cidr-merger) [asdf:ORCID/asdf-cidr-merger](https://github.com/ORCID/asdf-cidr-merger) | -| cidrchk | [ubi:mhausenblas/cidrchk](https://github.com/mhausenblas/cidrchk) [asdf:ORCID/asdf-cidrchk](https://github.com/ORCID/asdf-cidrchk) | -| cilium-cli | [ubi:cilium/cilium-cli](https://github.com/cilium/cilium-cli) [asdf:carnei-ro/asdf-cilium-cli](https://github.com/carnei-ro/asdf-cilium-cli) | -| cilium-hubble | [ubi:cilium/hubble](https://github.com/cilium/hubble) [asdf:NitriKx/asdf-cilium-hubble](https://github.com/NitriKx/asdf-cilium-hubble) | -| circleci | [ubi:CircleCI-Public/circleci-cli](https://github.com/CircleCI-Public/circleci-cli) [asdf:ucpr/asdf-circleci-cli](https://github.com/ucpr/asdf-circleci-cli) | -| clang | [asdf:mise-plugins/mise-llvm](https://github.com/mise-plugins/mise-llvm) [vfox:mise-plugins/vfox-clang](https://github.com/mise-plugins/vfox-clang) | -| clang-format | [asdf:mise-plugins/mise-llvm](https://github.com/mise-plugins/mise-llvm) | -| clangd | [asdf:mise-plugins/mise-llvm](https://github.com/mise-plugins/mise-llvm) | -| clarinet | [ubi:hirosystems/clarinet](https://github.com/hirosystems/clarinet) [asdf:alexgo-io/asdf-clarinet](https://github.com/alexgo-io/asdf-clarinet) | -| clickhouse | [asdf:mise-plugins/mise-clickhouse](https://github.com/mise-plugins/mise-clickhouse) | -| clj-kondo | [ubi:clj-kondo/clj-kondo](https://github.com/clj-kondo/clj-kondo) [asdf:rynkowsg/asdf-clj-kondo](https://github.com/rynkowsg/asdf-clj-kondo) | -| cljstyle | [ubi:greglook/cljstyle](https://github.com/greglook/cljstyle) [asdf:abogoyavlensky/asdf-cljstyle](https://github.com/abogoyavlensky/asdf-cljstyle) | -| clojure | [asdf:mise-plugins/mise-clojure](https://github.com/mise-plugins/mise-clojure) | -| cloud-sql-proxy | [aqua:GoogleCloudPlatform/cloud-sql-proxy](https://github.com/GoogleCloudPlatform/cloud-sql-proxy) [asdf:pbr0ck3r/asdf-cloud-sql-proxy](https://github.com/pbr0ck3r/asdf-cloud-sql-proxy) | -| cloudflared | [aqua:cloudflare/cloudflared](https://github.com/cloudflare/cloudflared) [asdf:threkk/asdf-cloudflared](https://github.com/threkk/asdf-cloudflared) | -| clusterawsadm | [ubi:kubernetes-sigs/cluster-api-provider-aws](https://github.com/kubernetes-sigs/cluster-api-provider-aws) [asdf:kahun/asdf-clusterawsadm](https://github.com/kahun/asdf-clusterawsadm) | -| clusterctl | [aqua:kubernetes-sigs/cluster-api](https://github.com/kubernetes-sigs/cluster-api) [asdf:pfnet-research/asdf-clusterctl](https://github.com/pfnet-research/asdf-clusterctl) | -| cmake | [asdf:mise-plugins/mise-cmake](https://github.com/mise-plugins/mise-cmake) [vfox:mise-plugins/vfox-cmake](https://github.com/mise-plugins/vfox-cmake) | -| cmctl | [aqua:cert-manager/cmctl](https://github.com/cert-manager/cmctl) [asdf:asdf-community/asdf-cmctl](https://github.com/asdf-community/asdf-cmctl) | -| cmdx | [ubi:suzuki-shunsuke/cmdx](https://github.com/suzuki-shunsuke/cmdx) | -| cockroach | [aqua:cockroachdb/cockroach](https://github.com/cockroachdb/cockroach) [asdf:salasrod/asdf-cockroach](https://github.com/salasrod/asdf-cockroach) | -| cocoapods | [asdf:mise-plugins/mise-cocoapods](https://github.com/mise-plugins/mise-cocoapods) | -| codefresh | [ubi:codefresh-io/cli](https://github.com/codefresh-io/cli) [asdf:gurukulkarni/asdf-codefresh](https://github.com/gurukulkarni/asdf-codefresh) | -| codeql | [asdf:mise-plugins/mise-codeql](https://github.com/mise-plugins/mise-codeql) | -| coder | [aqua:coder/coder](https://github.com/coder/coder) [asdf:mise-plugins/asdf-coder](https://github.com/mise-plugins/asdf-coder) | -| colima | [ubi:abiosoft/colima](https://github.com/abiosoft/colima) [asdf:CrouchingMuppet/asdf-colima](https://github.com/CrouchingMuppet/asdf-colima) | -| committed | [aqua:crate-ci/committed](https://github.com/crate-ci/committed) | -| conan | [pipx:conan](https://pypi.org/project/conan) [asdf:mise-plugins/mise-pyapp](https://github.com/mise-plugins/mise-pyapp) | -| concourse | [aqua:concourse/concourse/concourse](https://github.com/concourse/concourse/concourse) [asdf:mattysweeps/asdf-concourse](https://github.com/mattysweeps/asdf-concourse) | -| conduit | [ubi:ConduitIO/conduit](https://github.com/ConduitIO/conduit) [asdf:gmcabrita/asdf-conduit](https://github.com/gmcabrita/asdf-conduit) | -| conform | [aqua:siderolabs/conform](https://github.com/siderolabs/conform) [asdf:skyzyx/asdf-conform](https://github.com/skyzyx/asdf-conform) | -| conftest | [aqua:open-policy-agent/conftest](https://github.com/open-policy-agent/conftest) [asdf:looztra/asdf-conftest](https://github.com/looztra/asdf-conftest) | -| consul | [aqua:hashicorp/consul](https://github.com/hashicorp/consul) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | -| container-structure-test | [aqua:GoogleContainerTools/container-structure-test](https://github.com/GoogleContainerTools/container-structure-test) [asdf:FeryET/asdf-container-structure-test](https://github.com/FeryET/asdf-container-structure-test) | -| cookiecutter | [pipx:cookiecutter](https://pypi.org/project/cookiecutter) [asdf:shawon-crosen/asdf-cookiecutter](https://github.com/shawon-crosen/asdf-cookiecutter) | -| copper | [ubi:cloud66-oss/copper](https://github.com/cloud66-oss/copper) [asdf:vladlosev/asdf-copper](https://github.com/vladlosev/asdf-copper) | -| coq | [asdf:mise-plugins/mise-coq](https://github.com/mise-plugins/mise-coq) | -| coredns | [ubi:coredns/coredns](https://github.com/coredns/coredns) [asdf:s3than/asdf-coredns](https://github.com/s3than/asdf-coredns) | -| cosign | [aqua:sigstore/cosign](https://github.com/sigstore/cosign) [asdf:https://gitlab.com/wt0f/asdf-cosign](https://gitlab.com/wt0f/asdf-cosign) | -| coursier | [ubi:coursier/coursier](https://github.com/coursier/coursier) [asdf:jiahuili430/asdf-coursier](https://github.com/jiahuili430/asdf-coursier) | -| cowsay | [npm:cowsay](https://www.npmjs.com/package/cowsay) | -| crane | [aqua:google/go-containerregistry](https://github.com/google/go-containerregistry) [ubi:google/go-containerregistry](https://github.com/google/go-containerregistry) [asdf:dmpe/asdf-crane](https://github.com/dmpe/asdf-crane) | -| crc | [asdf:mise-plugins/mise-crc](https://github.com/mise-plugins/mise-crc) | -| credhub | [aqua:cloudfoundry/credhub-cli](https://github.com/cloudfoundry/credhub-cli) [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | -| crictl | [aqua:kubernetes-sigs/cri-tools/crictl](https://github.com/kubernetes-sigs/cri-tools/crictl) [asdf:FairwindsOps/asdf-crictl](https://github.com/FairwindsOps/asdf-crictl) | -| crossplane | [aqua:crossplane/crossplane](https://github.com/crossplane/crossplane) [asdf:joke/asdf-crossplane-cli](https://github.com/joke/asdf-crossplane-cli) | -| crystal | [asdf:mise-plugins/mise-crystal](https://github.com/mise-plugins/mise-crystal) [vfox:mise-plugins/vfox-crystal](https://github.com/mise-plugins/vfox-crystal) | -| ctlptl | [aqua:tilt-dev/ctlptl](https://github.com/tilt-dev/ctlptl) [asdf:ezcater/asdf-ctlptl](https://github.com/ezcater/asdf-ctlptl) | -| ctop | [ubi:bcicen/ctop](https://github.com/bcicen/ctop) [asdf:NeoHsu/asdf-ctop](https://github.com/NeoHsu/asdf-ctop) | -| cue | [aqua:cue-lang/cue](https://github.com/cue-lang/cue) [asdf:asdf-community/asdf-cue](https://github.com/asdf-community/asdf-cue) | -| cyclonedx | [aqua:CycloneDX/cyclonedx-cli](https://github.com/CycloneDX/cyclonedx-cli) [asdf:xeedio/asdf-cyclonedx](https://github.com/xeedio/asdf-cyclonedx) | -| dagger | [aqua:dagger/dagger](https://github.com/dagger/dagger) [asdf:virtualstaticvoid/asdf-dagger](https://github.com/virtualstaticvoid/asdf-dagger) | -| danger-js | [asdf:mise-plugins/mise-danger-js](https://github.com/mise-plugins/mise-danger-js) | -| danger-swift | [spm:danger/swift](https://github.com/danger/swift) | -| dapr | [aqua:dapr/cli](https://github.com/dapr/cli) [asdf:asdf-community/asdf-dapr-cli](https://github.com/asdf-community/asdf-dapr-cli) | -| dart | [asdf:mise-plugins/mise-dart](https://github.com/mise-plugins/mise-dart) [vfox:mise-plugins/vfox-dart](https://github.com/mise-plugins/vfox-dart) | -| dasel | [aqua:TomWright/dasel](https://github.com/TomWright/dasel) [asdf:asdf-community/asdf-dasel](https://github.com/asdf-community/asdf-dasel) | -| databricks-cli | [ubi:databricks/cli](https://github.com/databricks/cli) | -| datree | [aqua:datreeio/datree](https://github.com/datreeio/datree) [asdf:lukeab/asdf-datree](https://github.com/lukeab/asdf-datree) | -| daytona | [asdf:mise-plugins/mise-daytona](https://github.com/mise-plugins/mise-daytona) | -| dbmate | [aqua:amacneil/dbmate](https://github.com/amacneil/dbmate) [asdf:juusujanar/asdf-dbmate](https://github.com/juusujanar/asdf-dbmate) | -| deck | [aqua:Kong/deck](https://github.com/Kong/deck) [asdf:nutellinoit/asdf-deck](https://github.com/nutellinoit/asdf-deck) | -| delta | [ubi:dandavison/delta](https://github.com/dandavison/delta) [asdf:andweeb/asdf-delta](https://github.com/andweeb/asdf-delta) | -| deno | [core:deno](https://mise.jdx.dev/lang/deno.html) | -| depot | [ubi:depot/cli](https://github.com/depot/cli) [asdf:depot/asdf-depot](https://github.com/depot/asdf-depot) | -| desk | [aqua:jamesob/desk](https://github.com/jamesob/desk) [asdf:endorama/asdf-desk](https://github.com/endorama/asdf-desk) | -| devspace | [aqua:devspace-sh/devspace](https://github.com/devspace-sh/devspace) [asdf:NeoHsu/asdf-devspace](https://github.com/NeoHsu/asdf-devspace) | -| dhall | [asdf:mise-plugins/mise-dhall](https://github.com/mise-plugins/mise-dhall) | -| difftastic | [ubi:wilfred/difftastic](https://github.com/wilfred/difftastic) [asdf:volf52/asdf-difftastic](https://github.com/volf52/asdf-difftastic) | -| digdag | [asdf:mise-plugins/mise-digdag](https://github.com/mise-plugins/mise-digdag) | -| direnv | [aqua:direnv/direnv](https://github.com/direnv/direnv) [asdf:asdf-community/asdf-direnv](https://github.com/asdf-community/asdf-direnv) | -| dive | [ubi:wagoodman/dive](https://github.com/wagoodman/dive) [asdf:looztra/asdf-dive](https://github.com/looztra/asdf-dive) | -| djinni | [ubi:cross-language-cpp/djinni-generator](https://github.com/cross-language-cpp/djinni-generator) [asdf:cross-language-cpp/asdf-djinni](https://github.com/cross-language-cpp/asdf-djinni) | -| dmd | [asdf:mise-plugins/mise-dmd](https://github.com/mise-plugins/mise-dmd) | -| docker-compose | [aqua:docker/compose](https://github.com/docker/compose) | -| docker-slim | [ubi:slimtoolkit/slim](https://github.com/slimtoolkit/slim) [asdf:xataz/asdf-docker-slim](https://github.com/xataz/asdf-docker-slim) | -| dockle | [aqua:goodwithtech/dockle](https://github.com/goodwithtech/dockle) [asdf:mathew-fleisch/asdf-dockle](https://github.com/mathew-fleisch/asdf-dockle) | -| doctl | [ubi:digitalocean/doctl](https://github.com/digitalocean/doctl) [asdf:maristgeek/asdf-doctl](https://github.com/maristgeek/asdf-doctl) | -| doctoolchain | [asdf:mise-plugins/mise-doctoolchain](https://github.com/mise-plugins/mise-doctoolchain) | -| docuum | [ubi:stepchowfun/docuum](https://github.com/stepchowfun/docuum) [cargo:docuum](https://crates.io/crates/docuum) [asdf:bradym/asdf-docuum](https://github.com/bradym/asdf-docuum) | -| dome | [asdf:mise-plugins/mise-dome](https://github.com/mise-plugins/mise-dome) | -| doppler | [ubi:DopplerHQ/cli](https://github.com/DopplerHQ/cli) [asdf:takutakahashi/asdf-doppler](https://github.com/takutakahashi/asdf-doppler) | -| dotenv-linter | [ubi:dotenv-linter/dotenv-linter](https://github.com/dotenv-linter/dotenv-linter) [asdf:wesleimp/asdf-dotenv-linter](https://github.com/wesleimp/asdf-dotenv-linter) | -| dotnet | [asdf:mise-plugins/mise-dotnet](https://github.com/mise-plugins/mise-dotnet) [vfox:mise-plugins/vfox-dotnet](https://github.com/mise-plugins/vfox-dotnet) | -| dotnet-core | [asdf:mise-plugins/mise-dotnet-core](https://github.com/mise-plugins/mise-dotnet-core) | -| dotty | [asdf:mise-plugins/mise-dotty](https://github.com/mise-plugins/mise-dotty) | -| dprint | [aqua:dprint/dprint](https://github.com/dprint/dprint) [asdf:asdf-community/asdf-dprint](https://github.com/asdf-community/asdf-dprint) | -| draft | [aqua:Azure/draft](https://github.com/Azure/draft) [asdf:kristoflemmens/asdf-draft](https://github.com/kristoflemmens/asdf-draft) | -| driftctl | [aqua:snyk/driftctl](https://github.com/snyk/driftctl) [asdf:nlamirault/asdf-driftctl](https://github.com/nlamirault/asdf-driftctl) | -| drone | [ubi:harness/drone-cli](https://github.com/harness/drone-cli) [asdf:virtualstaticvoid/asdf-drone](https://github.com/virtualstaticvoid/asdf-drone) | -| dt | [aqua:so-dang-cool/dt](https://github.com/so-dang-cool/dt) [asdf:so-dang-cool/asdf-dt](https://github.com/so-dang-cool/asdf-dt) | -| dtm | [ubi:devstream-io/devstream](https://github.com/devstream-io/devstream) [asdf:zhenyuanlau/asdf-dtm](https://github.com/zhenyuanlau/asdf-dtm) | -| dua | [aqua:Byron/dua-cli](https://github.com/Byron/dua-cli) [ubi:Byron/dua-cli](https://github.com/Byron/dua-cli) | -| duckdb | [aqua:duckdb/duckdb](https://github.com/duckdb/duckdb) [ubi:duckdb/duckdb](https://github.com/duckdb/duckdb) | -| duf | [aqua:muesli/duf](https://github.com/muesli/duf) [asdf:NeoHsu/asdf-duf](https://github.com/NeoHsu/asdf-duf) | -| dust | [ubi:bootandy/dust](https://github.com/bootandy/dust) [asdf:looztra/asdf-dust](https://github.com/looztra/asdf-dust) | -| dvc | [asdf:mise-plugins/mise-dvc](https://github.com/mise-plugins/mise-dvc) | -| dyff | [aqua:homeport/dyff](https://github.com/homeport/dyff) [asdf:https://gitlab.com/wt0f/asdf-dyff](https://gitlab.com/wt0f/asdf-dyff) | -| dynatrace-monaco | [ubi:Dynatrace/dynatrace-configuration-as-code](https://github.com/Dynatrace/dynatrace-configuration-as-code) [asdf:nsaputro/asdf-monaco](https://github.com/nsaputro/asdf-monaco) | -| earthly | [aqua:earthly/earthly](https://github.com/earthly/earthly) [asdf:YR-ZR0/asdf-earthly](https://github.com/YR-ZR0/asdf-earthly) | -| ecspresso | [aqua:kayac/ecspresso](https://github.com/kayac/ecspresso) [asdf:kayac/asdf-ecspresso](https://github.com/kayac/asdf-ecspresso) | -| editorconfig-checker | [aqua:editorconfig-checker/editorconfig-checker](https://github.com/editorconfig-checker/editorconfig-checker) [asdf:gabitchov/asdf-editorconfig-checker](https://github.com/gabitchov/asdf-editorconfig-checker) | -| ejson | [aqua:Shopify/ejson](https://github.com/Shopify/ejson) [asdf:cipherstash/asdf-ejson](https://github.com/cipherstash/asdf-ejson) | -| eksctl | [aqua:eksctl-io/eksctl](https://github.com/eksctl-io/eksctl) [asdf:elementalvoid/asdf-eksctl](https://github.com/elementalvoid/asdf-eksctl) | -| elasticsearch | [asdf:mise-plugins/mise-elasticsearch](https://github.com/mise-plugins/mise-elasticsearch) | -| elixir | [core:elixir](https://mise.jdx.dev/lang/elixir.html) | -| elixir-ls | [asdf:mise-plugins/mise-elixir-ls](https://github.com/mise-plugins/mise-elixir-ls) | -| elm | [ubi:elm/compiler](https://github.com/elm/compiler) [asdf:asdf-community/asdf-elm](https://github.com/asdf-community/asdf-elm) | -| emsdk | [asdf:mise-plugins/mise-emsdk](https://github.com/mise-plugins/mise-emsdk) | -| envcli | [ubi:EnvCLI/EnvCLI](https://github.com/EnvCLI/EnvCLI) [asdf:zekker6/asdf-envcli](https://github.com/zekker6/asdf-envcli) | -| envsubst | [aqua:a8m/envsubst](https://github.com/a8m/envsubst) [asdf:dex4er/asdf-envsubst](https://github.com/dex4er/asdf-envsubst) | -| ephemeral-postgres | [asdf:mise-plugins/mise-ephemeral-postgres](https://github.com/mise-plugins/mise-ephemeral-postgres) | -| erlang | [core:erlang](https://mise.jdx.dev/lang/erlang.html) | -| esc | [ubi:pulumi/esc](https://github.com/pulumi/esc) [asdf:fxsalazar/asdf-esc](https://github.com/fxsalazar/asdf-esc) | -| esy | [asdf:mise-plugins/mise-esy](https://github.com/mise-plugins/mise-esy) | -| etcd | [aqua:etcd-io/etcd](https://github.com/etcd-io/etcd) [asdf:particledecay/asdf-etcd](https://github.com/particledecay/asdf-etcd) [vfox:mise-plugins/vfox-etcd](https://github.com/mise-plugins/vfox-etcd) | -| evans | [aqua:ktr0731/evans](https://github.com/ktr0731/evans) [asdf:goki90210/asdf-evans](https://github.com/goki90210/asdf-evans) | -| eza | [aqua:eza-community/eza](https://github.com/eza-community/eza) [asdf:mise-plugins/mise-eza](https://github.com/mise-plugins/mise-eza) [cargo:eza](https://crates.io/crates/eza) | -| fd | [aqua:sharkdp/fd](https://github.com/sharkdp/fd) [ubi:sharkdp/fd](https://github.com/sharkdp/fd) [asdf:https://gitlab.com/wt0f/asdf-fd](https://gitlab.com/wt0f/asdf-fd) | -| ffmpeg | [asdf:mise-plugins/mise-ffmpeg](https://github.com/mise-plugins/mise-ffmpeg) | -| figma-export | [ubi:RedMadRobot/figma-export](https://github.com/RedMadRobot/figma-export) [asdf:younke/asdf-figma-export](https://github.com/younke/asdf-figma-export) | -| fillin | [aqua:itchyny/fillin](https://github.com/itchyny/fillin) [asdf:ouest/asdf-fillin](https://github.com/ouest/asdf-fillin) | -| firebase | [aqua:firebase/firebase-tools](https://github.com/firebase/firebase-tools) [asdf:jthegedus/asdf-firebase](https://github.com/jthegedus/asdf-firebase) | -| fission | [aqua:fission/fission](https://github.com/fission/fission) [asdf:virtualstaticvoid/asdf-fission](https://github.com/virtualstaticvoid/asdf-fission) | -| flamingo | [ubi:flux-subsystem-argo/flamingo](https://github.com/flux-subsystem-argo/flamingo) [asdf:log2/asdf-flamingo](https://github.com/log2/asdf-flamingo) | -| flarectl | [ubi:cloudflare/cloudflare-go](https://github.com/cloudflare/cloudflare-go) [asdf:mise-plugins/asdf-flarectl](https://github.com/mise-plugins/asdf-flarectl) | -| flatc | [ubi:google/flatbuffers](https://github.com/google/flatbuffers) [asdf:TheOpenDictionary/asdf-flatc](https://github.com/TheOpenDictionary/asdf-flatc) | -| flutter | [asdf:mise-plugins/mise-flutter](https://github.com/mise-plugins/mise-flutter) [vfox:mise-plugins/vfox-flutter](https://github.com/mise-plugins/vfox-flutter) | -| fluttergen | [ubi:FlutterGen/flutter_gen](https://github.com/FlutterGen/flutter_gen) [asdf:FlutterGen/asdf-fluttergen](https://github.com/FlutterGen/asdf-fluttergen) | -| flux2 | [aqua:fluxcd/flux2](https://github.com/fluxcd/flux2) [asdf:tablexi/asdf-flux2](https://github.com/tablexi/asdf-flux2) | -| fly | [aqua:concourse/concourse/fly](https://github.com/concourse/concourse/fly) [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | -| flyctl | [aqua:superfly/flyctl](https://github.com/superfly/flyctl) [ubi:superfly/flyctl](https://github.com/superfly/flyctl) [asdf:chessmango/asdf-flyctl](https://github.com/chessmango/asdf-flyctl) | -| flyway | [asdf:mise-plugins/mise-flyway](https://github.com/mise-plugins/mise-flyway) | -| func-e | [asdf:mise-plugins/mise-func-e](https://github.com/mise-plugins/mise-func-e) | -| furyctl | [ubi:sighupio/furyctl](https://github.com/sighupio/furyctl) [asdf:sighupio/asdf-furyctl](https://github.com/sighupio/asdf-furyctl) | -| fx | [aqua:antonmedv/fx](https://github.com/antonmedv/fx) [asdf:https://gitlab.com/wt0f/asdf-fx](https://gitlab.com/wt0f/asdf-fx) | -| fzf | [aqua:junegunn/fzf](https://github.com/junegunn/fzf) [ubi:junegunn/fzf](https://github.com/junegunn/fzf) [asdf:kompiro/asdf-fzf](https://github.com/kompiro/asdf-fzf) | -| gallery-dl | [asdf:mise-plugins/mise-gallery-dl](https://github.com/mise-plugins/mise-gallery-dl) | -| gam | [ubi:GAM-team/GAM](https://github.com/GAM-team/GAM) [asdf:offbyone/asdf-gam](https://github.com/offbyone/asdf-gam) | -| gator | [ubi:open-policy-agent/gatekeeper](https://github.com/open-policy-agent/gatekeeper) [asdf:MxNxPx/asdf-gator](https://github.com/MxNxPx/asdf-gator) | -| gauche | [asdf:mise-plugins/mise-gauche](https://github.com/mise-plugins/mise-gauche) | -| gcc-arm-none-eabi | [asdf:mise-plugins/mise-gcc-arm-none-eabi](https://github.com/mise-plugins/mise-gcc-arm-none-eabi) | -| gcloud | [asdf:mise-plugins/mise-gcloud](https://github.com/mise-plugins/mise-gcloud) | -| gdu | [aqua:dundee/gdu](https://github.com/dundee/gdu) | -| getenvoy | [asdf:mise-plugins/mise-getenvoy](https://github.com/mise-plugins/mise-getenvoy) | -| ghc | [asdf:mise-plugins/mise-ghcup](https://github.com/mise-plugins/mise-ghcup) | -| ghcup | [ubi:haskell/ghcup-hs](https://github.com/haskell/ghcup-hs) [asdf:mise-plugins/mise-ghcup](https://github.com/mise-plugins/mise-ghcup) | -| ghidra | [asdf:mise-plugins/mise-ghidra](https://github.com/mise-plugins/mise-ghidra) | -| ghorg | [aqua:gabrie30/ghorg](https://github.com/gabrie30/ghorg) [asdf:gbloquel/asdf-ghorg](https://github.com/gbloquel/asdf-ghorg) | -| ghq | [aqua:x-motemen/ghq](https://github.com/x-motemen/ghq) [asdf:kajisha/asdf-ghq](https://github.com/kajisha/asdf-ghq) | -| ginkgo | [go:github.com/onsi/ginkgo/v2/ginkgo](https://pkg.go.dev/github.com/onsi/ginkgo/v2/ginkgo) [asdf:mise-plugins/mise-ginkgo](https://github.com/mise-plugins/mise-ginkgo) | -| git-chglog | [aqua:git-chglog/git-chglog](https://github.com/git-chglog/git-chglog) [asdf:GoodwayGroup/asdf-git-chglog](https://github.com/GoodwayGroup/asdf-git-chglog) | -| git-cliff | [aqua:orhun/git-cliff](https://github.com/orhun/git-cliff) [asdf:jylenhof/asdf-git-cliff](https://github.com/jylenhof/asdf-git-cliff) | -| gitconfig | [ubi:0ghny/gitconfig](https://github.com/0ghny/gitconfig) [asdf:0ghny/asdf-gitconfig](https://github.com/0ghny/asdf-gitconfig) | -| github-cli | [aqua:cli/cli](https://github.com/cli/cli) [ubi:cli/cli](https://github.com/cli/cli) [asdf:bartlomiejdanek/asdf-github-cli](https://github.com/bartlomiejdanek/asdf-github-cli) | -| github-markdown-toc | [aqua:ekalinin/github-markdown-toc](https://github.com/ekalinin/github-markdown-toc) [asdf:skyzyx/asdf-github-markdown-toc](https://github.com/skyzyx/asdf-github-markdown-toc) | -| gitleaks | [aqua:gitleaks/gitleaks](https://github.com/gitleaks/gitleaks) [asdf:jmcvetta/asdf-gitleaks](https://github.com/jmcvetta/asdf-gitleaks) | -| gitsign | [aqua:sigstore/gitsign](https://github.com/sigstore/gitsign) [asdf:spencergilbert/asdf-gitsign](https://github.com/spencergilbert/asdf-gitsign) | -| gitu | [ubi:altsem/gitu](https://github.com/altsem/gitu) [cargo:gitu](https://crates.io/crates/gitu) | -| gitui | [aqua:extrawurst/gitui](https://github.com/extrawurst/gitui) [asdf:looztra/asdf-gitui](https://github.com/looztra/asdf-gitui) | -| glab | [asdf:mise-plugins/mise-glab](https://github.com/mise-plugins/mise-glab) | -| gleam | [aqua:gleam-lang/gleam](https://github.com/gleam-lang/gleam) [asdf:asdf-community/asdf-gleam](https://github.com/asdf-community/asdf-gleam) | -| glen | [ubi:lingrino/glen](https://github.com/lingrino/glen) [asdf:bradym/asdf-glen](https://github.com/bradym/asdf-glen) | -| glooctl | [ubi:solo-io/gloo](https://github.com/solo-io/gloo) [asdf:halilkaya/asdf-glooctl](https://github.com/halilkaya/asdf-glooctl) | -| glow | [aqua:charmbracelet/glow](https://github.com/charmbracelet/glow) [asdf:mise-plugins/asdf-glow](https://github.com/mise-plugins/asdf-glow) | -| go | [core:go](https://mise.jdx.dev/lang/go.html) | -| go-containerregistry | [aqua:google/go-containerregistry](https://github.com/google/go-containerregistry) [asdf:dex4er/asdf-go-containerregistry](https://github.com/dex4er/asdf-go-containerregistry) | -| go-getter | [aqua:hashicorp/go-getter](https://github.com/hashicorp/go-getter) [asdf:mise-plugins/mise-go-getter](https://github.com/mise-plugins/mise-go-getter) | -| go-jira | [aqua:go-jira/jira](https://github.com/go-jira/jira) [asdf:dguihal/asdf-go-jira](https://github.com/dguihal/asdf-go-jira) | -| go-jsonnet | [aqua:google/go-jsonnet](https://github.com/google/go-jsonnet) [asdf:https://gitlab.com/craigfurman/asdf-go-jsonnet](https://gitlab.com/craigfurman/asdf-go-jsonnet) | -| go-junit-report | [ubi:jstemmer/go-junit-report](https://github.com/jstemmer/go-junit-report) [asdf:jwillker/asdf-go-junit-report](https://github.com/jwillker/asdf-go-junit-report) | -| go-sdk | [asdf:mise-plugins/mise-go-sdk](https://github.com/mise-plugins/mise-go-sdk) | -| go-swagger | [aqua:go-swagger/go-swagger](https://github.com/go-swagger/go-swagger) [asdf:jfreeland/asdf-go-swagger](https://github.com/jfreeland/asdf-go-swagger) | -| goconvey | [go:github.com/smartystreets/goconvey](https://pkg.go.dev/github.com/smartystreets/goconvey) [asdf:mise-plugins/mise-goconvey](https://github.com/mise-plugins/mise-goconvey) | -| gocryptfs | [aqua:rfjakob/gocryptfs](https://github.com/rfjakob/gocryptfs) [ubi:rfjakob/gocryptfs](https://github.com/rfjakob/gocryptfs) | -| gofumpt | [ubi:mvdan/gofumpt](https://github.com/mvdan/gofumpt) [asdf:looztra/asdf-gofumpt](https://github.com/looztra/asdf-gofumpt) | -| gojq | [aqua:itchyny/gojq](https://github.com/itchyny/gojq) [asdf:jimmidyson/asdf-gojq](https://github.com/jimmidyson/asdf-gojq) | -| golangci-lint | [aqua:golangci/golangci-lint](https://github.com/golangci/golangci-lint) [ubi:golangci/golangci-lint](https://github.com/golangci/golangci-lint) [asdf:hypnoglow/asdf-golangci-lint](https://github.com/hypnoglow/asdf-golangci-lint) | -| golangci-lint-langserver | [ubi:nametake/golangci-lint-langserver](https://github.com/nametake/golangci-lint-langserver) [go:github.com/nametake/golangci-lint-langserver](https://pkg.go.dev/github.com/nametake/golangci-lint-langserver) | -| golines | [ubi:segmentio/golines](https://github.com/segmentio/golines) [go:github.com/segmentio/golines](https://pkg.go.dev/github.com/segmentio/golines) | -| gomigrate | [aqua:golang-migrate/migrate](https://github.com/golang-migrate/migrate) [asdf:joschi/asdf-gomigrate](https://github.com/joschi/asdf-gomigrate) | -| gomplate | [aqua:hairyhenderson/gomplate](https://github.com/hairyhenderson/gomplate) [asdf:sneakybeaky/asdf-gomplate](https://github.com/sneakybeaky/asdf-gomplate) | -| gopass | [aqua:gopasspw/gopass](https://github.com/gopasspw/gopass) [asdf:trallnag/asdf-gopass](https://github.com/trallnag/asdf-gopass) | -| goreleaser | [aqua:goreleaser/goreleaser](https://github.com/goreleaser/goreleaser) [ubi:goreleaser/goreleaser](https://github.com/goreleaser/goreleaser) [asdf:kforsthoevel/asdf-goreleaser](https://github.com/kforsthoevel/asdf-goreleaser) | -| goss | [aqua:goss-org/goss](https://github.com/goss-org/goss) [asdf:raimon49/asdf-goss](https://github.com/raimon49/asdf-goss) | -| gotestsum | [aqua:gotestyourself/gotestsum](https://github.com/gotestyourself/gotestsum) [asdf:pmalek/mise-gotestsum](https://github.com/pmalek/mise-gotestsum) | -| graalvm | [asdf:mise-plugins/mise-graalvm](https://github.com/mise-plugins/mise-graalvm) | -| gradle | [aqua:gradle/gradle](https://github.com/gradle/gradle) [vfox:mise-plugins/vfox-gradle](https://github.com/mise-plugins/vfox-gradle) | -| gradle-profiler | [asdf:mise-plugins/mise-gradle-profiler](https://github.com/mise-plugins/mise-gradle-profiler) | -| grails | [asdf:mise-plugins/mise-grails](https://github.com/mise-plugins/mise-grails) | -| grain | [asdf:mise-plugins/mise-grain](https://github.com/mise-plugins/mise-grain) | -| granted | [aqua:common-fate/granted](https://github.com/common-fate/granted) [asdf:dex4er/asdf-granted](https://github.com/dex4er/asdf-granted) | -| grex | [aqua:pemistahl/grex](https://github.com/pemistahl/grex) [asdf:ouest/asdf-grex](https://github.com/ouest/asdf-grex) | -| gron | [aqua:tomnomnom/gron](https://github.com/tomnomnom/gron) [ubi:tomnomnom/gron](https://github.com/tomnomnom/gron) | -| groovy | [asdf:mise-plugins/mise-groovy](https://github.com/mise-plugins/mise-groovy) [vfox:mise-plugins/vfox-groovy](https://github.com/mise-plugins/vfox-groovy) | -| grpc-health-probe | [aqua:grpc-ecosystem/grpc-health-probe](https://github.com/grpc-ecosystem/grpc-health-probe) [asdf:zufardhiyaulhaq/asdf-grpc-health-probe](https://github.com/zufardhiyaulhaq/asdf-grpc-health-probe) | -| grpcurl | [aqua:fullstorydev/grpcurl](https://github.com/fullstorydev/grpcurl) [asdf:asdf-community/asdf-grpcurl](https://github.com/asdf-community/asdf-grpcurl) | -| grype | [ubi:anchore/grype](https://github.com/anchore/grype) [asdf:poikilotherm/asdf-grype](https://github.com/poikilotherm/asdf-grype) | -| guile | [asdf:mise-plugins/mise-guile](https://github.com/mise-plugins/mise-guile) | -| gum | [aqua:charmbracelet/gum](https://github.com/charmbracelet/gum) [asdf:lwiechec/asdf-gum](https://github.com/lwiechec/asdf-gum) | -| gup | [aqua:nao1215/gup](https://github.com/nao1215/gup) | -| gwvault | [aqua:GoodwayGroup/gwvault](https://github.com/GoodwayGroup/gwvault) [asdf:GoodwayGroup/asdf-gwvault](https://github.com/GoodwayGroup/asdf-gwvault) | -| hadolint | [ubi:hadolint/hadolint](https://github.com/hadolint/hadolint) [asdf:devlincashman/asdf-hadolint](https://github.com/devlincashman/asdf-hadolint) | -| hamler | [asdf:mise-plugins/mise-hamler](https://github.com/mise-plugins/mise-hamler) | -| has | [aqua:kdabir/has](https://github.com/kdabir/has) [asdf:sylvainmetayer/asdf-has](https://github.com/sylvainmetayer/asdf-has) | -| haskell | [asdf:mise-plugins/mise-haskell](https://github.com/mise-plugins/mise-haskell) | -| hasura-cli | [aqua:hasura/graphql-engine](https://github.com/hasura/graphql-engine) [asdf:gurukulkarni/asdf-hasura](https://github.com/gurukulkarni/asdf-hasura) | -| haxe | [asdf:mise-plugins/mise-haxe](https://github.com/mise-plugins/mise-haxe) | -| hcl2json | [aqua:tmccombs/hcl2json](https://github.com/tmccombs/hcl2json) [asdf:dex4er/asdf-hcl2json](https://github.com/dex4er/asdf-hcl2json) | -| hcloud | [aqua:hetznercloud/cli](https://github.com/hetznercloud/cli) [asdf:chessmango/asdf-hcloud](https://github.com/chessmango/asdf-hcloud) | -| helix | [ubi:helix-editor/helix](https://github.com/helix-editor/helix) | -| helm | [aqua:helm/helm](https://github.com/helm/helm) [asdf:Antiarchitect/asdf-helm](https://github.com/Antiarchitect/asdf-helm) | -| helm-cr | [aqua:helm/chart-releaser](https://github.com/helm/chart-releaser) [asdf:Antiarchitect/asdf-helm-cr](https://github.com/Antiarchitect/asdf-helm-cr) | -| helm-ct | [aqua:helm/chart-testing](https://github.com/helm/chart-testing) [asdf:tablexi/asdf-helm-ct](https://github.com/tablexi/asdf-helm-ct) | -| helm-diff | [asdf:mise-plugins/mise-helm-diff](https://github.com/mise-plugins/mise-helm-diff) | -| helm-docs | [aqua:norwoodj/helm-docs](https://github.com/norwoodj/helm-docs) [asdf:sudermanjr/asdf-helm-docs](https://github.com/sudermanjr/asdf-helm-docs) | -| helmfile | [ubi:helmfile/helmfile](https://github.com/helmfile/helmfile) [asdf:feniix/asdf-helmfile](https://github.com/feniix/asdf-helmfile) | -| helmsman | [ubi:Praqma/helmsman](https://github.com/Praqma/helmsman) [asdf:luisdavim/asdf-helmsman](https://github.com/luisdavim/asdf-helmsman) | -| heroku | [asdf:mise-plugins/mise-heroku-cli](https://github.com/mise-plugins/mise-heroku-cli) | -| hey | [asdf:mise-plugins/mise-hey](https://github.com/mise-plugins/mise-hey) | -| hishtory | [ubi:ddworken/hishtory](https://github.com/ddworken/hishtory) [asdf:asdf-community/asdf-hishtory](https://github.com/asdf-community/asdf-hishtory) | -| hivemind | [ubi:DarthSim/hivemind](https://github.com/DarthSim/hivemind) [go:github.com/DarthSim/hivemind](https://pkg.go.dev/github.com/DarthSim/hivemind) | -| hledger | [ubi:simonmichael/hledger](https://github.com/simonmichael/hledger) [asdf:airtonix/asdf-hledger](https://github.com/airtonix/asdf-hledger) | -| hledger-flow | [ubi:apauley/hledger-flow](https://github.com/apauley/hledger-flow) [asdf:airtonix/asdf-hledger-flow](https://github.com/airtonix/asdf-hledger-flow) | -| hls | [asdf:mise-plugins/mise-ghcup](https://github.com/mise-plugins/mise-ghcup) | -| hostctl | [aqua:guumaster/hostctl](https://github.com/guumaster/hostctl) [asdf:svenluijten/asdf-hostctl](https://github.com/svenluijten/asdf-hostctl) | -| httpie-go | [aqua:nojima/httpie-go](https://github.com/nojima/httpie-go) [asdf:abatilo/asdf-httpie-go](https://github.com/abatilo/asdf-httpie-go) | -| hub | [aqua:mislav/hub](https://github.com/mislav/hub) [asdf:mise-plugins/asdf-hub](https://github.com/mise-plugins/asdf-hub) | -| hugo | [aqua:gohugoio/hugo](https://github.com/gohugoio/hugo) [ubi:gohugoio/hugo](https://github.com/gohugoio/hugo) [asdf:NeoHsu/asdf-hugo](https://github.com/NeoHsu/asdf-hugo) [asdf:nklmilojevic/asdf-hugo](https://github.com/nklmilojevic/asdf-hugo) | -| hugo-extended | [aqua:gohugoio/hugo/hugo-extended](https://github.com/gohugoio/hugo/hugo-extended) | -| hurl | [aqua:Orange-OpenSource/hurl](https://github.com/Orange-OpenSource/hurl) [asdf:raimon49/asdf-hurl](https://github.com/raimon49/asdf-hurl) | -| hwatch | [ubi:blacknon/hwatch](https://github.com/blacknon/hwatch) [asdf:chessmango/asdf-hwatch](https://github.com/chessmango/asdf-hwatch) | -| hygen | [ubi:jondot/hygen](https://github.com/jondot/hygen) [asdf:brentjanderson/asdf-hygen](https://github.com/brentjanderson/asdf-hygen) | -| hyperfine | [aqua:sharkdp/hyperfine](https://github.com/sharkdp/hyperfine) [ubi:sharkdp/hyperfine](https://github.com/sharkdp/hyperfine) [asdf:volf52/asdf-hyperfine](https://github.com/volf52/asdf-hyperfine) | -| iam-policy-json-to-terraform | [aqua:flosell/iam-policy-json-to-terraform](https://github.com/flosell/iam-policy-json-to-terraform) [asdf:carlduevel/asdf-iam-policy-json-to-terraform](https://github.com/carlduevel/asdf-iam-policy-json-to-terraform) | -| iamlive | [aqua:iann0036/iamlive](https://github.com/iann0036/iamlive) [asdf:chessmango/asdf-iamlive](https://github.com/chessmango/asdf-iamlive) | -| ibmcloud | [asdf:mise-plugins/mise-ibmcloud](https://github.com/mise-plugins/mise-ibmcloud) | -| idris | [asdf:mise-plugins/mise-idris](https://github.com/mise-plugins/mise-idris) | -| idris2 | [asdf:mise-plugins/mise-idris2](https://github.com/mise-plugins/mise-idris2) | -| imagemagick | [asdf:mise-plugins/mise-imagemagick](https://github.com/mise-plugins/mise-imagemagick) | -| imgpkg | [aqua:carvel-dev/imgpkg](https://github.com/carvel-dev/imgpkg) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | -| infracost | [aqua:infracost/infracost](https://github.com/infracost/infracost) [asdf:dex4er/asdf-infracost](https://github.com/dex4er/asdf-infracost) | -| inlets | [aqua:inlets/inletsctl](https://github.com/inlets/inletsctl) [asdf:nlamirault/asdf-inlets](https://github.com/nlamirault/asdf-inlets) | -| io | [asdf:mise-plugins/mise-io](https://github.com/mise-plugins/mise-io) | -| istioctl | [aqua:istio/istio/istioctl](https://github.com/istio/istio/istioctl) [asdf:virtualstaticvoid/asdf-istioctl](https://github.com/virtualstaticvoid/asdf-istioctl) | -| janet | [asdf:mise-plugins/mise-janet](https://github.com/mise-plugins/mise-janet) | -| java | [core:java](https://mise.jdx.dev/lang/java.html) | -| jbang | [asdf:mise-plugins/jbang-asdf](https://github.com/mise-plugins/jbang-asdf) | -| jfrog-cli | [asdf:mise-plugins/mise-jfrog-cli](https://github.com/mise-plugins/mise-jfrog-cli) | -| jib | [asdf:mise-plugins/mise-jib](https://github.com/mise-plugins/mise-jib) | -| jiq | [aqua:fiatjaf/jiq](https://github.com/fiatjaf/jiq) [asdf:chessmango/asdf-jiq](https://github.com/chessmango/asdf-jiq) | -| jj | [aqua:jj-vcs/jj](https://github.com/jj-vcs/jj) [ubi:jj-vcs/jj](https://github.com/jj-vcs/jj) | -| jless | [aqua:PaulJuliusMartinez/jless](https://github.com/PaulJuliusMartinez/jless) [asdf:jc00ke/asdf-jless](https://github.com/jc00ke/asdf-jless) | -| jmespath | [aqua:jmespath/jp](https://github.com/jmespath/jp) [asdf:skyzyx/asdf-jmespath](https://github.com/skyzyx/asdf-jmespath) | -| jmeter | [asdf:mise-plugins/mise-jmeter](https://github.com/mise-plugins/mise-jmeter) | -| jnv | [aqua:ynqa/jnv](https://github.com/ynqa/jnv) [asdf:raimon49/asdf-jnv](https://github.com/raimon49/asdf-jnv) | -| jq | [aqua:jqlang/jq](https://github.com/jqlang/jq) [asdf:mise-plugins/asdf-jq](https://github.com/mise-plugins/asdf-jq) | -| jqp | [aqua:noahgorstein/jqp](https://github.com/noahgorstein/jqp) [asdf:https://gitlab.com/wt0f/asdf-jqp](https://gitlab.com/wt0f/asdf-jqp) | -| jreleaser | [aqua:jreleaser/jreleaser](https://github.com/jreleaser/jreleaser) [asdf:joschi/asdf-jreleaser](https://github.com/joschi/asdf-jreleaser) | -| jsonnet-bundler | [aqua:jsonnet-bundler/jsonnet-bundler](https://github.com/jsonnet-bundler/jsonnet-bundler) [asdf:beardix/asdf-jb](https://github.com/beardix/asdf-jb) | -| julia | [asdf:mise-plugins/mise-julia](https://github.com/mise-plugins/mise-julia) | -| just | [ubi:casey/just](https://github.com/casey/just) [asdf:olofvndrhr/asdf-just](https://github.com/olofvndrhr/asdf-just) | -| jwt | [ubi:mike-engel/jwt-cli](https://github.com/mike-engel/jwt-cli) [cargo:jwt-cli](https://crates.io/crates/jwt-cli) | -| jwtui | [ubi:jwt-rs/jwt-ui](https://github.com/jwt-rs/jwt-ui) [cargo:jwt-ui](https://crates.io/crates/jwt-ui) | -| jx | [ubi:jenkins-x/jx](https://github.com/jenkins-x/jx) [asdf:vbehar/asdf-jx](https://github.com/vbehar/asdf-jx) | -| k0sctl | [ubi:k0sproject/k0sctl](https://github.com/k0sproject/k0sctl) [asdf:Its-Alex/asdf-plugin-k0sctl](https://github.com/Its-Alex/asdf-plugin-k0sctl) | -| k2tf | [ubi:sl1pm4t/k2tf](https://github.com/sl1pm4t/k2tf) [asdf:carlduevel/asdf-k2tf](https://github.com/carlduevel/asdf-k2tf) | -| k3d | [ubi:k3d-io/k3d](https://github.com/k3d-io/k3d) [asdf:spencergilbert/asdf-k3d](https://github.com/spencergilbert/asdf-k3d) | -| k3kcli | [ubi:rancher/k3k](https://github.com/rancher/k3k) [asdf:xanmanning/asdf-k3kcli](https://github.com/xanmanning/asdf-k3kcli) | -| k3s | [asdf:mise-plugins/mise-k3s](https://github.com/mise-plugins/mise-k3s) | -| k3sup | [aqua:alexellis/k3sup](https://github.com/alexellis/k3sup) [asdf:cgroschupp/asdf-k3sup](https://github.com/cgroschupp/asdf-k3sup) | -| k6 | [ubi:grafana/k6](https://github.com/grafana/k6) [asdf:gr1m0h/asdf-k6](https://github.com/gr1m0h/asdf-k6) | -| k9s | [ubi:derailed/k9s](https://github.com/derailed/k9s) [asdf:looztra/asdf-k9s](https://github.com/looztra/asdf-k9s) | -| kafka | [asdf:mise-plugins/mise-kafka](https://github.com/mise-plugins/mise-kafka) | -| kafkactl | [aqua:deviceinsight/kafkactl](https://github.com/deviceinsight/kafkactl) [asdf:anweber/asdf-kafkactl](https://github.com/anweber/asdf-kafkactl) | -| kapp | [aqua:carvel-dev/kapp](https://github.com/carvel-dev/kapp) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | -| kbld | [aqua:carvel-dev/kbld](https://github.com/carvel-dev/kbld) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | -| kcat | [asdf:mise-plugins/mise-kcat](https://github.com/mise-plugins/mise-kcat) | -| kcctl | [ubi:kcctl/kcctl](https://github.com/kcctl/kcctl) [asdf:joschi/asdf-kcctl](https://github.com/joschi/asdf-kcctl) | -| kcl | [aqua:kcl-lang/cli](https://github.com/kcl-lang/cli) [asdf:mise-plugins/mise-kcl](https://github.com/mise-plugins/mise-kcl) | -| kconf | [aqua:particledecay/kconf](https://github.com/particledecay/kconf) [asdf:particledecay/asdf-kconf](https://github.com/particledecay/asdf-kconf) | -| ki | [ubi:Kotlin/kotlin-interactive-shell](https://github.com/Kotlin/kotlin-interactive-shell) [asdf:comdotlinux/asdf-ki](https://github.com/comdotlinux/asdf-ki) | -| killport | [ubi:jkfran/killport](https://github.com/jkfran/killport) | -| kind | [ubi:kubernetes-sigs/kind](https://github.com/kubernetes-sigs/kind) [asdf:johnlayton/asdf-kind](https://github.com/johnlayton/asdf-kind) | -| kiota | [aqua:microsoft/kiota](https://github.com/microsoft/kiota) [asdf:asdf-community/asdf-kiota](https://github.com/asdf-community/asdf-kiota) | -| kn | [aqua:knative/client](https://github.com/knative/client) [asdf:joke/asdf-kn](https://github.com/joke/asdf-kn) | -| ko | [aqua:ko-build/ko](https://github.com/ko-build/ko) [asdf:zasdaym/asdf-ko](https://github.com/zasdaym/asdf-ko) | -| koka | [ubi:koka-lang/koka](https://github.com/koka-lang/koka) [asdf:susurri/asdf-koka](https://github.com/susurri/asdf-koka) | -| kompose | [ubi:kubernetes/kompose](https://github.com/kubernetes/kompose) [asdf:technikhil314/asdf-kompose](https://github.com/technikhil314/asdf-kompose) | -| kops | [aqua:kubernetes/kops](https://github.com/kubernetes/kops) [asdf:Antiarchitect/asdf-kops](https://github.com/Antiarchitect/asdf-kops) | -| kotlin | [asdf:mise-plugins/mise-kotlin](https://github.com/mise-plugins/mise-kotlin) [vfox:mise-plugins/vfox-kotlin](https://github.com/mise-plugins/vfox-kotlin) | -| kpack | [ubi:vmware-tanzu/kpack-cli](https://github.com/vmware-tanzu/kpack-cli) [asdf:asdf-community/asdf-kpack-cli](https://github.com/asdf-community/asdf-kpack-cli) | -| kpt | [aqua:kptdev/kpt](https://github.com/kptdev/kpt) [asdf:nlamirault/asdf-kpt](https://github.com/nlamirault/asdf-kpt) | -| krab | [ubi:ohkrab/krab](https://github.com/ohkrab/krab) [asdf:ohkrab/asdf-krab](https://github.com/ohkrab/asdf-krab) | -| krew | [aqua:kubernetes-sigs/krew](https://github.com/kubernetes-sigs/krew) [asdf:bjw-s/asdf-krew](https://github.com/bjw-s/asdf-krew) | -| kscript | [ubi:kscripting/kscript](https://github.com/kscripting/kscript) [asdf:edgelevel/asdf-kscript](https://github.com/edgelevel/asdf-kscript) | -| ksops | [ubi:viaduct-ai/kustomize-sops](https://github.com/viaduct-ai/kustomize-sops) [asdf:janpieper/asdf-ksops](https://github.com/janpieper/asdf-ksops) | -| ktlint | [aqua:pinterest/ktlint](https://github.com/pinterest/ktlint) [asdf:mise-plugins/mise-ktlint](https://github.com/mise-plugins/mise-ktlint) | -| kube-capacity | [aqua:robscott/kube-capacity](https://github.com/robscott/kube-capacity) [asdf:looztra/asdf-kube-capacity](https://github.com/looztra/asdf-kube-capacity) | -| kube-code-generator | [asdf:mise-plugins/mise-kube-code-generator](https://github.com/mise-plugins/mise-kube-code-generator) | -| kube-controller-tools | [ubi:kubernetes-sigs/controller-tools](https://github.com/kubernetes-sigs/controller-tools) [asdf:jimmidyson/asdf-kube-controller-tools](https://github.com/jimmidyson/asdf-kube-controller-tools) | -| kube-credential-cache | [aqua:ryodocx/kube-credential-cache](https://github.com/ryodocx/kube-credential-cache) [asdf:ryodocx/kube-credential-cache](https://github.com/ryodocx/kube-credential-cache) | -| kube-linter | [aqua:stackrox/kube-linter](https://github.com/stackrox/kube-linter) [asdf:devlincashman/asdf-kube-linter](https://github.com/devlincashman/asdf-kube-linter) | -| kube-score | [aqua:zegl/kube-score](https://github.com/zegl/kube-score) [asdf:bageljp/asdf-kube-score](https://github.com/bageljp/asdf-kube-score) | -| kubebuilder | [aqua:kubernetes-sigs/kubebuilder](https://github.com/kubernetes-sigs/kubebuilder) [asdf:virtualstaticvoid/asdf-kubebuilder](https://github.com/virtualstaticvoid/asdf-kubebuilder) | -| kubecm | [aqua:sunny0826/kubecm](https://github.com/sunny0826/kubecm) [asdf:samhvw8/asdf-kubecm](https://github.com/samhvw8/asdf-kubecm) | -| kubecolor | [aqua:hidetatz/kubecolor](https://github.com/hidetatz/kubecolor) [asdf:dex4er/asdf-kubecolor](https://github.com/dex4er/asdf-kubecolor) | -| kubeconform | [aqua:yannh/kubeconform](https://github.com/yannh/kubeconform) [asdf:lirlia/asdf-kubeconform](https://github.com/lirlia/asdf-kubeconform) | -| kubectl | [aqua:kubernetes/kubectl](https://github.com/kubernetes/kubectl) [asdf:asdf-community/asdf-kubectl](https://github.com/asdf-community/asdf-kubectl) | -| kubectl-convert | [aqua:kubernetes/kubectl-convert](https://github.com/kubernetes/kubectl-convert) [asdf:iul1an/asdf-kubectl-convert](https://github.com/iul1an/asdf-kubectl-convert) | -| kubectl-kots | [aqua:replicatedhq/kots](https://github.com/replicatedhq/kots) [asdf:ganta/asdf-kubectl-kots](https://github.com/ganta/asdf-kubectl-kots) | -| kubectl-kuttl | [aqua:kudobuilder/kuttl](https://github.com/kudobuilder/kuttl) [asdf:jimmidyson/asdf-kuttl](https://github.com/jimmidyson/asdf-kuttl) | -| kubectl-rolesum | [aqua:Ladicle/kubectl-rolesum](https://github.com/Ladicle/kubectl-rolesum) [asdf:looztra/asdf-kubectl-bindrole](https://github.com/looztra/asdf-kubectl-bindrole) | -| kubectx | [aqua:ahmetb/kubectx](https://github.com/ahmetb/kubectx) [asdf:https://gitlab.com/wt0f/asdf-kubectx](https://gitlab.com/wt0f/asdf-kubectx) | -| kubefedctl | [aqua:kubernetes-retired/kubefed](https://github.com/kubernetes-retired/kubefed) [asdf:kvokka/asdf-kubefedctl](https://github.com/kvokka/asdf-kubefedctl) | -| kubefirst | [ubi:konstructio/kubefirst](https://github.com/konstructio/kubefirst) [asdf:Claywd/asdf-kubefirst](https://github.com/Claywd/asdf-kubefirst) | -| kubelogin | [aqua:int128/kubelogin](https://github.com/int128/kubelogin) | -| kubemqctl | [aqua:kubemq-io/kubemqctl](https://github.com/kubemq-io/kubemqctl) [asdf:johnlayton/asdf-kubemqctl](https://github.com/johnlayton/asdf-kubemqctl) | -| kubens | [aqua:ahmetb/kubectx/kubens](https://github.com/ahmetb/kubectx/kubens) | -| kubent | [aqua:doitintl/kube-no-trouble](https://github.com/doitintl/kube-no-trouble) [asdf:virtualstaticvoid/asdf-kubent](https://github.com/virtualstaticvoid/asdf-kubent) | -| kubergrunt | [aqua:gruntwork-io/kubergrunt](https://github.com/gruntwork-io/kubergrunt) [asdf:NeoHsu/asdf-kubergrunt](https://github.com/NeoHsu/asdf-kubergrunt) | -| kubeseal | [aqua:bitnami-labs/sealed-secrets](https://github.com/bitnami-labs/sealed-secrets) [asdf:stefansedich/asdf-kubeseal](https://github.com/stefansedich/asdf-kubeseal) | -| kubesec | [aqua:controlplaneio/kubesec](https://github.com/controlplaneio/kubesec) [asdf:vitalis/asdf-kubesec](https://github.com/vitalis/asdf-kubesec) | -| kubeshark | [aqua:kubeshark/kubeshark](https://github.com/kubeshark/kubeshark) [asdf:carnei-ro/asdf-kubeshark](https://github.com/carnei-ro/asdf-kubeshark) | -| kubespy | [aqua:pulumi/kubespy](https://github.com/pulumi/kubespy) [asdf:jfreeland/asdf-kubespy](https://github.com/jfreeland/asdf-kubespy) | -| kubeval | [aqua:instrumenta/kubeval](https://github.com/instrumenta/kubeval) [asdf:stefansedich/asdf-kubeval](https://github.com/stefansedich/asdf-kubeval) | -| kubevela | [aqua:kubevela/kubevela](https://github.com/kubevela/kubevela) [asdf:gustavclausen/asdf-kubevela](https://github.com/gustavclausen/asdf-kubevela) | -| kubie | [aqua:sbstp/kubie](https://github.com/sbstp/kubie) [asdf:johnhamelink/asdf-kubie](https://github.com/johnhamelink/asdf-kubie) | -| kustomize | [aqua:kubernetes-sigs/kustomize](https://github.com/kubernetes-sigs/kustomize) [asdf:Banno/asdf-kustomize](https://github.com/Banno/asdf-kustomize) | -| kwokctl | [aqua:kubernetes-sigs/kwok/kwokctl](https://github.com/kubernetes-sigs/kwok/kwokctl) | -| kwt | [aqua:carvel-dev/kwt](https://github.com/carvel-dev/kwt) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | -| kyverno | [aqua:kyverno/kyverno](https://github.com/kyverno/kyverno) [asdf:https://github.com/hobaen/asdf-kyverno-cli.git](https://github.com/hobaen/asdf-kyverno-cli) | -| lab | [aqua:zaquestion/lab](https://github.com/zaquestion/lab) [asdf:particledecay/asdf-lab](https://github.com/particledecay/asdf-lab) | -| lane | [ubi:CodeReaper/lane](https://github.com/CodeReaper/lane) [asdf:CodeReaper/asdf-lane](https://github.com/CodeReaper/asdf-lane) | -| lazydocker | [aqua:jesseduffield/lazydocker](https://github.com/jesseduffield/lazydocker) [ubi:jesseduffield/lazydocker](https://github.com/jesseduffield/lazydocker) | -| lazygit | [aqua:jesseduffield/lazygit](https://github.com/jesseduffield/lazygit) [asdf:nklmilojevic/asdf-lazygit](https://github.com/nklmilojevic/asdf-lazygit) | -| lean | [asdf:mise-plugins/mise-lean](https://github.com/mise-plugins/mise-lean) | -| lefthook | [aqua:evilmartians/lefthook](https://github.com/evilmartians/lefthook) [ubi:evilmartians/lefthook](https://github.com/evilmartians/lefthook) [asdf:jtzero/asdf-lefthook](https://github.com/jtzero/asdf-lefthook) | -| leiningen | [asdf:mise-plugins/mise-lein](https://github.com/mise-plugins/mise-lein) | -| levant | [aqua:hashicorp/levant](https://github.com/hashicorp/levant) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | -| lfe | [asdf:mise-plugins/mise-lfe](https://github.com/mise-plugins/mise-lfe) | -| libsql-server | [ubi:tursodatabase/libsql](https://github.com/tursodatabase/libsql) [asdf:jonasb/asdf-libsql-server](https://github.com/jonasb/asdf-libsql-server) | -| license-plist | [ubi:mono0926/LicensePlist](https://github.com/mono0926/LicensePlist) [asdf:MacPaw/asdf-license-plist](https://github.com/MacPaw/asdf-license-plist) | -| lima | [aqua:lima-vm/lima](https://github.com/lima-vm/lima) [asdf:CrouchingMuppet/asdf-lima](https://github.com/CrouchingMuppet/asdf-lima) | -| linkerd | [aqua:linkerd/linkerd2](https://github.com/linkerd/linkerd2) [asdf:kforsthoevel/asdf-linkerd](https://github.com/kforsthoevel/asdf-linkerd) | -| liqoctl | [aqua:liqotech/liqo](https://github.com/liqotech/liqo) [asdf:pdemagny/asdf-liqoctl](https://github.com/pdemagny/asdf-liqoctl) | -| liquibase | [asdf:mise-plugins/mise-liquibase](https://github.com/mise-plugins/mise-liquibase) | -| litestream | [aqua:benbjohnson/litestream](https://github.com/benbjohnson/litestream) [asdf:threkk/asdf-litestream](https://github.com/threkk/asdf-litestream) | -| llvm-objcopy | [asdf:mise-plugins/mise-llvm](https://github.com/mise-plugins/mise-llvm) | -| llvm-objdump | [asdf:mise-plugins/mise-llvm](https://github.com/mise-plugins/mise-llvm) | -| logtalk | [asdf:mise-plugins/mise-logtalk](https://github.com/mise-plugins/mise-logtalk) | -| loki-logcli | [aqua:grafana/loki/logcli](https://github.com/grafana/loki/logcli) [asdf:comdotlinux/asdf-loki-logcli](https://github.com/comdotlinux/asdf-loki-logcli) | -| ls-lint | [aqua:loeffel-io/ls-lint](https://github.com/loeffel-io/ls-lint) [asdf:Ameausoone/asdf-ls-lint](https://github.com/Ameausoone/asdf-ls-lint) | -| lsd | [aqua:lsd-rs/lsd](https://github.com/lsd-rs/lsd) [asdf:mise-plugins/asdf-lsd](https://github.com/mise-plugins/asdf-lsd) | -| lua | [asdf:mise-plugins/mise-lua](https://github.com/mise-plugins/mise-lua) | -| lua-language-server | [aqua:LuaLS/lua-language-server](https://github.com/LuaLS/lua-language-server) [asdf:bellini666/asdf-lua-language-server](https://github.com/bellini666/asdf-lua-language-server) | -| luajit | [asdf:mise-plugins/mise-luaJIT](https://github.com/mise-plugins/mise-luaJIT) | -| maestro | [ubi:mobile-dev-inc/maestro](https://github.com/mobile-dev-inc/maestro) [asdf:dotanuki-labs/asdf-maestro](https://github.com/dotanuki-labs/asdf-maestro) | -| mage | [aqua:magefile/mage](https://github.com/magefile/mage) [asdf:mathew-fleisch/asdf-mage](https://github.com/mathew-fleisch/asdf-mage) | -| make | [asdf:mise-plugins/mise-make](https://github.com/mise-plugins/mise-make) | -| mani | [ubi:alajmo/mani](https://github.com/alajmo/mani) [asdf:anweber/asdf-mani](https://github.com/anweber/asdf-mani) | -| mark | [ubi:kovetskiy/mark](https://github.com/kovetskiy/mark) [asdf:jfreeland/asdf-mark](https://github.com/jfreeland/asdf-mark) | -| markdownlint-cli2 | [npm:markdownlint-cli2](https://www.npmjs.com/package/markdownlint-cli2) [asdf:paulo-ferraz-oliveira/asdf-markdownlint-cli2](https://github.com/paulo-ferraz-oliveira/asdf-markdownlint-cli2) | -| marp-cli | [aqua:marp-team/marp-cli](https://github.com/marp-team/marp-cli) [asdf:xataz/asdf-marp-cli](https://github.com/xataz/asdf-marp-cli) | -| mask | [aqua:jacobdeichert/mask](https://github.com/jacobdeichert/mask) [asdf:aaaaninja/asdf-mask](https://github.com/aaaaninja/asdf-mask) | -| maven | [asdf:mise-plugins/mise-maven](https://github.com/mise-plugins/mise-maven) [vfox:mise-plugins/vfox-maven](https://github.com/mise-plugins/vfox-maven) | -| mc | [asdf:mise-plugins/mise-mc](https://github.com/mise-plugins/mise-mc) | -| mdbook | [aqua:rust-lang/mdBook](https://github.com/rust-lang/mdBook) [asdf:cipherstash/asdf-mdbook](https://github.com/cipherstash/asdf-mdbook) | -| mdbook-linkcheck | [asdf:mise-plugins/mise-mdbook-linkcheck](https://github.com/mise-plugins/mise-mdbook-linkcheck) | -| melange | [aqua:chainguard-dev/melange](https://github.com/chainguard-dev/melange) [asdf:omissis/asdf-melange](https://github.com/omissis/asdf-melange) | -| melt | [ubi:charmbracelet/melt](https://github.com/charmbracelet/melt) [asdf:chessmango/asdf-melt](https://github.com/chessmango/asdf-melt) | -| memcached | [asdf:mise-plugins/mise-memcached](https://github.com/mise-plugins/mise-memcached) | -| mercury | [asdf:mise-plugins/mise-mercury](https://github.com/mise-plugins/mise-mercury) | -| meson | [asdf:mise-plugins/mise-meson](https://github.com/mise-plugins/mise-meson) | -| micronaut | [asdf:mise-plugins/mise-micronaut](https://github.com/mise-plugins/mise-micronaut) | -| mill | [asdf:mise-plugins/mise-mill](https://github.com/mise-plugins/mise-mill) | -| mimirtool | [aqua:grafana/mimir/mimirtool](https://github.com/grafana/mimir/mimirtool) [asdf:asdf-community/asdf-mimirtool](https://github.com/asdf-community/asdf-mimirtool) | -| minify | [aqua:tdewolff/minify](https://github.com/tdewolff/minify) [asdf:axilleas/asdf-minify](https://github.com/axilleas/asdf-minify) | -| minikube | [aqua:kubernetes/minikube](https://github.com/kubernetes/minikube) [asdf:alvarobp/asdf-minikube](https://github.com/alvarobp/asdf-minikube) | -| minio | [asdf:mise-plugins/mise-minio](https://github.com/mise-plugins/mise-minio) | -| minishift | [aqua:minishift/minishift](https://github.com/minishift/minishift) [asdf:sqtran/asdf-minishift](https://github.com/sqtran/asdf-minishift) | -| minisign | [aqua:jedisct1/minisign](https://github.com/jedisct1/minisign) | -| mint | [ubi:mint-lang/mint](https://github.com/mint-lang/mint) [asdf:mint-lang/asdf-mint](https://github.com/mint-lang/asdf-mint) | -| mirrord | [ubi:metalbear-co/mirrord](https://github.com/metalbear-co/mirrord) [asdf:metalbear-co/asdf-mirrord](https://github.com/metalbear-co/asdf-mirrord) | -| mitmproxy | [asdf:mise-plugins/mise-mitmproxy](https://github.com/mise-plugins/mise-mitmproxy) | -| mkcert | [ubi:FiloSottile/mkcert](https://github.com/FiloSottile/mkcert) [asdf:salasrod/asdf-mkcert](https://github.com/salasrod/asdf-mkcert) | -| mlton | [asdf:mise-plugins/mise-mlton](https://github.com/mise-plugins/mise-mlton) | -| mockery | [aqua:vektra/mockery](https://github.com/vektra/mockery) [asdf:cabify/asdf-mockery](https://github.com/cabify/asdf-mockery) | -| mockolo | [asdf:mise-plugins/mise-mockolo](https://github.com/mise-plugins/mise-mockolo) | -| mold | [ubi:rui314/mold](https://github.com/rui314/mold) | -| monarch | [asdf:mise-plugins/mise-monarch](https://github.com/mise-plugins/mise-monarch) | -| mongodb | [asdf:mise-plugins/mise-mongodb](https://github.com/mise-plugins/mise-mongodb) | -| mongosh | [ubi:mongodb-js/mongosh](https://github.com/mongodb-js/mongosh) [asdf:itspngu/asdf-mongosh](https://github.com/itspngu/asdf-mongosh) | -| mprocs | [ubi:pvolok/mprocs](https://github.com/pvolok/mprocs) | -| mssqldef | [aqua:sqldef/sqldef/mssqldef](https://github.com/sqldef/sqldef/mssqldef) | -| mutanus | [asdf:mise-plugins/mise-mutanus](https://github.com/mise-plugins/mise-mutanus) | -| mvnd | [aqua:apache/maven-mvnd](https://github.com/apache/maven-mvnd) [asdf:joschi/asdf-mvnd](https://github.com/joschi/asdf-mvnd) | -| mysql | [asdf:mise-plugins/mise-mysql](https://github.com/mise-plugins/mise-mysql) | -| mysqldef | [aqua:sqldef/sqldef/mysqldef](https://github.com/sqldef/sqldef/mysqldef) | -| nancy | [aqua:sonatype-nexus-community/nancy](https://github.com/sonatype-nexus-community/nancy) [asdf:iilyak/asdf-nancy](https://github.com/iilyak/asdf-nancy) | -| nano | [asdf:mise-plugins/mise-nano](https://github.com/mise-plugins/mise-nano) | -| nasm | [asdf:mise-plugins/mise-nasm](https://github.com/mise-plugins/mise-nasm) | -| navi | [aqua:denisidoro/navi](https://github.com/denisidoro/navi) [ubi:denisidoro/navi](https://github.com/denisidoro/navi) | -| neko | [ubi:HaxeFoundation/neko](https://github.com/HaxeFoundation/neko) [asdf:asdf-community/asdf-neko](https://github.com/asdf-community/asdf-neko) | -| neovim | [aqua:neovim/neovim](https://github.com/neovim/neovim) [asdf:richin13/asdf-neovim](https://github.com/richin13/asdf-neovim) | -| nerdctl | [aqua:containerd/nerdctl](https://github.com/containerd/nerdctl) [asdf:dmpe/asdf-nerdctl](https://github.com/dmpe/asdf-nerdctl) | -| newrelic | [ubi:newrelic/newrelic-cli](https://github.com/newrelic/newrelic-cli) [asdf:NeoHsu/asdf-newrelic-cli](https://github.com/NeoHsu/asdf-newrelic-cli) | -| nfpm | [aqua:goreleaser/nfpm](https://github.com/goreleaser/nfpm) [ubi:goreleaser/nfpm](https://github.com/goreleaser/nfpm) [asdf:ORCID/asdf-nfpm](https://github.com/ORCID/asdf-nfpm) | -| nim | [asdf:mise-plugins/mise-nim](https://github.com/mise-plugins/mise-nim) | -| ninja | [aqua:ninja-build/ninja](https://github.com/ninja-build/ninja) [asdf:asdf-community/asdf-ninja](https://github.com/asdf-community/asdf-ninja) | -| node | [core:node](https://mise.jdx.dev/lang/node.html) | -| nomad | [aqua:hashicorp/nomad](https://github.com/hashicorp/nomad) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | -| nomad-pack | [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | -| notation | [aqua:notaryproject/notation](https://github.com/notaryproject/notation) [asdf:bodgit/asdf-notation](https://github.com/bodgit/asdf-notation) | -| nova | [aqua:FairwindsOps/nova](https://github.com/FairwindsOps/nova) [asdf:elementalvoid/asdf-nova](https://github.com/elementalvoid/asdf-nova) | -| nsc | [ubi:nats-io/nsc](https://github.com/nats-io/nsc) [asdf:dex4er/asdf-nsc](https://github.com/dex4er/asdf-nsc) | -| oapi-codegen | [go:github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen](https://pkg.go.dev/github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen) [asdf:dylanrayboss/asdf-oapi-codegen](https://github.com/dylanrayboss/asdf-oapi-codegen) | -| oc | [asdf:mise-plugins/mise-oc](https://github.com/mise-plugins/mise-oc) | -| ocaml | [asdf:mise-plugins/mise-ocaml](https://github.com/mise-plugins/mise-ocaml) | -| oci | [asdf:mise-plugins/mise-oci](https://github.com/mise-plugins/mise-oci) | -| odin | [ubi:odin-lang/Odin](https://github.com/odin-lang/Odin) [asdf:jtakakura/asdf-odin](https://github.com/jtakakura/asdf-odin) | -| odo | [aqua:redhat-developer/odo](https://github.com/redhat-developer/odo) [asdf:rm3l/asdf-odo](https://github.com/rm3l/asdf-odo) | -| okta-aws | [aqua:okta/okta-aws-cli](https://github.com/okta/okta-aws-cli) [asdf:bennythejudge/asdf-plugin-okta-aws-cli](https://github.com/bennythejudge/asdf-plugin-okta-aws-cli) | -| okteto | [aqua:okteto/okteto](https://github.com/okteto/okteto) [asdf:BradenM/asdf-okteto](https://github.com/BradenM/asdf-okteto) | -| ollama | [aqua:ollama/ollama](https://github.com/ollama/ollama) [asdf:virtualstaticvoid/asdf-ollama](https://github.com/virtualstaticvoid/asdf-ollama) | -| om | [aqua:pivotal-cf/om](https://github.com/pivotal-cf/om) [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | -| onyx | [ubi:onyx-lang/onyx](https://github.com/onyx-lang/onyx) [asdf:jtakakura/asdf-onyx](https://github.com/jtakakura/asdf-onyx) | -| opa | [aqua:open-policy-agent/opa](https://github.com/open-policy-agent/opa) [asdf:tochukwuvictor/asdf-opa](https://github.com/tochukwuvictor/asdf-opa) | -| opam | [ubi:ocaml/opam](https://github.com/ocaml/opam) [asdf:asdf-community/asdf-opam](https://github.com/asdf-community/asdf-opam) | -| openbao | [ubi:openbao/openbao](https://github.com/openbao/openbao) | -| openfaas-cli | [aqua:openfaas/faas-cli](https://github.com/openfaas/faas-cli) [asdf:zekker6/asdf-faas-cli](https://github.com/zekker6/asdf-faas-cli) | -| openresty | [asdf:mise-plugins/mise-openresty](https://github.com/mise-plugins/mise-openresty) | -| opensearch | [asdf:mise-plugins/mise-opensearch](https://github.com/mise-plugins/mise-opensearch) | -| opensearch-cli | [asdf:mise-plugins/mise-opensearch-cli](https://github.com/mise-plugins/mise-opensearch-cli) | -| openshift-install | [asdf:mise-plugins/mise-openshift-install](https://github.com/mise-plugins/mise-openshift-install) | -| opentofu | [aqua:opentofu/opentofu](https://github.com/opentofu/opentofu) [ubi:opentofu/opentofu](https://github.com/opentofu/opentofu) [asdf:virtualroot/asdf-opentofu](https://github.com/virtualroot/asdf-opentofu) | -| operator-sdk | [aqua:operator-framework/operator-sdk](https://github.com/operator-framework/operator-sdk) [asdf:Medium/asdf-operator-sdk](https://github.com/Medium/asdf-operator-sdk) | -| opsgenie-lamp | [asdf:mise-plugins/mise-opsgenie-lamp](https://github.com/mise-plugins/mise-opsgenie-lamp) | -| oras | [aqua:oras-project/oras](https://github.com/oras-project/oras) [asdf:bodgit/asdf-oras](https://github.com/bodgit/asdf-oras) | -| osqueryi | [asdf:mise-plugins/mise-osqueryi](https://github.com/mise-plugins/mise-osqueryi) | -| overmind | [ubi:DarthSim/overmind](https://github.com/DarthSim/overmind) [go:github.com/DarthSim/overmind/v2](https://pkg.go.dev/github.com/DarthSim/overmind/v2) | -| pachctl | [aqua:pachyderm/pachyderm](https://github.com/pachyderm/pachyderm) [asdf:abatilo/asdf-pachctl](https://github.com/abatilo/asdf-pachctl) | -| packer | [aqua:hashicorp/packer](https://github.com/hashicorp/packer) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | -| pandoc | [ubi:jgm/pandoc](https://github.com/jgm/pandoc) [asdf:Fbrisset/asdf-pandoc](https://github.com/Fbrisset/asdf-pandoc) | -| patat | [ubi:jaspervdj/patat](https://github.com/jaspervdj/patat) [asdf:airtonix/asdf-patat](https://github.com/airtonix/asdf-patat) | -| pdm | [pipx:pdm](https://pypi.org/project/pdm) [asdf:1oglop1/asdf-pdm](https://github.com/1oglop1/asdf-pdm) | -| peco | [aqua:peco/peco](https://github.com/peco/peco) [asdf:asdf-community/asdf-peco](https://github.com/asdf-community/asdf-peco) | -| periphery | [aqua:peripheryapp/periphery](https://github.com/peripheryapp/periphery) [asdf:mise-plugins/mise-periphery](https://github.com/mise-plugins/mise-periphery) | -| perl | [aqua:skaji/relocatable-perl](https://github.com/skaji/relocatable-perl) [asdf:ouest/asdf-perl](https://github.com/ouest/asdf-perl) | -| php | [asdf:mise-plugins/mise-php](https://github.com/mise-plugins/mise-php) [vfox:mise-plugins/vfox-php](https://github.com/mise-plugins/vfox-php) | -| pint | [aqua:cloudflare/pint](https://github.com/cloudflare/pint) [asdf:sam-burrell/asdf-pint](https://github.com/sam-burrell/asdf-pint) | -| pipectl | [aqua:pipe-cd/pipecd/pipectl](https://github.com/pipe-cd/pipecd/pipectl) [asdf:pipe-cd/asdf-pipectl](https://github.com/pipe-cd/asdf-pipectl) | -| pipelight | [asdf:mise-plugins/mise-pipelight](https://github.com/mise-plugins/mise-pipelight) | -| pipenv | [asdf:mise-plugins/mise-pipenv](https://github.com/mise-plugins/mise-pipenv) | -| pipx | [asdf:mise-plugins/mise-pipx](https://github.com/mise-plugins/mise-pipx) | -| pitchfork | [ubi:jdx/pitchfork](https://github.com/jdx/pitchfork) | -| pivnet | [aqua:pivotal-cf/pivnet-cli](https://github.com/pivotal-cf/pivnet-cli) [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | -| pixi | [ubi:prefix-dev/pixi](https://github.com/prefix-dev/pixi) | -| pkl | [aqua:apple/pkl](https://github.com/apple/pkl) [asdf:mise-plugins/asdf-pkl](https://github.com/mise-plugins/asdf-pkl) | -| please | [aqua:thought-machine/please](https://github.com/thought-machine/please) [asdf:asdf-community/asdf-please](https://github.com/asdf-community/asdf-please) | -| pluto | [ubi:FairwindsOps/pluto](https://github.com/FairwindsOps/pluto) [asdf:FairwindsOps/asdf-pluto](https://github.com/FairwindsOps/asdf-pluto) | -| pnpm | [aqua:pnpm/pnpm](https://github.com/pnpm/pnpm) [asdf:jonathanmorley/asdf-pnpm](https://github.com/jonathanmorley/asdf-pnpm) | -| podman | [ubi:containers/podman](https://github.com/containers/podman) [asdf:tvon/asdf-podman](https://github.com/tvon/asdf-podman) | -| poetry | [asdf:mise-plugins/mise-poetry](https://github.com/mise-plugins/mise-poetry) | -| polaris | [aqua:FairwindsOps/polaris](https://github.com/FairwindsOps/polaris) [asdf:particledecay/asdf-polaris](https://github.com/particledecay/asdf-polaris) | -| popeye | [aqua:derailed/popeye](https://github.com/derailed/popeye) [asdf:nlamirault/asdf-popeye](https://github.com/nlamirault/asdf-popeye) | -| postgis | [asdf:mise-plugins/mise-postgis](https://github.com/mise-plugins/mise-postgis) | -| postgres | [asdf:mise-plugins/mise-postgres](https://github.com/mise-plugins/mise-postgres) | -| powerline-go | [aqua:justjanne/powerline-go](https://github.com/justjanne/powerline-go) [ubi:justjanne/powerline-go](https://github.com/justjanne/powerline-go) [asdf:dex4er/asdf-powerline-go](https://github.com/dex4er/asdf-powerline-go) | -| powerpipe | [aqua:turbot/powerpipe](https://github.com/turbot/powerpipe) [asdf:jc00ke/asdf-powerpipe](https://github.com/jc00ke/asdf-powerpipe) | -| powershell-core | [aqua:PowerShell/PowerShell](https://github.com/PowerShell/PowerShell) [asdf:daveneeley/asdf-powershell-core](https://github.com/daveneeley/asdf-powershell-core) | -| pre-commit | [aqua:pre-commit/pre-commit](https://github.com/pre-commit/pre-commit) [asdf:jonathanmorley/asdf-pre-commit](https://github.com/jonathanmorley/asdf-pre-commit) | -| promtool | [aqua:prometheus/prometheus](https://github.com/prometheus/prometheus) [asdf:asdf-community/asdf-promtool](https://github.com/asdf-community/asdf-promtool) | -| protoc | [aqua:protocolbuffers/protobuf/protoc](https://github.com/protocolbuffers/protobuf/protoc) [asdf:paxosglobal/asdf-protoc](https://github.com/paxosglobal/asdf-protoc) | -| protoc-gen-connect-go | [go:connectrpc.com/connect/cmd/protoc-gen-connect-go](https://pkg.go.dev/connectrpc.com/connect/cmd/protoc-gen-connect-go) [asdf:dylanrayboss/asdf-protoc-gen-connect-go](https://github.com/dylanrayboss/asdf-protoc-gen-connect-go) | -| protoc-gen-go | [aqua:protocolbuffers/protobuf-go/protoc-gen-go](https://github.com/protocolbuffers/protobuf-go/protoc-gen-go) [asdf:pbr0ck3r/asdf-protoc-gen-go](https://github.com/pbr0ck3r/asdf-protoc-gen-go) | -| protoc-gen-go-grpc | [aqua:grpc/grpc-go/protoc-gen-go-grpc](https://github.com/grpc/grpc-go/protoc-gen-go-grpc) [asdf:pbr0ck3r/asdf-protoc-gen-go-grpc](https://github.com/pbr0ck3r/asdf-protoc-gen-go-grpc) | -| protoc-gen-grpc-web | [asdf:mise-plugins/mise-protoc-gen-grpc-web](https://github.com/mise-plugins/mise-protoc-gen-grpc-web) | -| protoc-gen-js | [ubi:protocolbuffers/protobuf-javascript](https://github.com/protocolbuffers/protobuf-javascript) [asdf:pbr0ck3r/asdf-protoc-gen-js](https://github.com/pbr0ck3r/asdf-protoc-gen-js) | -| protolint | [aqua:yoheimuta/protolint](https://github.com/yoheimuta/protolint) [asdf:spencergilbert/asdf-protolint](https://github.com/spencergilbert/asdf-protolint) | -| protonge | [asdf:mise-plugins/mise-protonge](https://github.com/mise-plugins/mise-protonge) | -| psc-package | [ubi:purescript/psc-package](https://github.com/purescript/psc-package) [asdf:nsaunders/asdf-psc-package](https://github.com/nsaunders/asdf-psc-package) | -| psqldef | [aqua:sqldef/sqldef/psqldef](https://github.com/sqldef/sqldef/psqldef) | -| pulumi | [aqua:pulumi/pulumi](https://github.com/pulumi/pulumi) [asdf:canha/asdf-pulumi](https://github.com/canha/asdf-pulumi) | -| purerl | [ubi:purerl/purerl](https://github.com/purerl/purerl) [asdf:GoNZooo/asdf-purerl](https://github.com/GoNZooo/asdf-purerl) | -| purescript | [ubi:purescript/purescript](https://github.com/purescript/purescript) [asdf:jrrom/asdf-purescript](https://github.com/jrrom/asdf-purescript) | -| purty | [asdf:mise-plugins/mise-purty](https://github.com/mise-plugins/mise-purty) | -| python | [core:python](https://mise.jdx.dev/lang/python.html) | -| qdns | [ubi:natesales/q](https://github.com/natesales/q) [asdf:moritz-makandra/asdf-plugin-qdns](https://github.com/moritz-makandra/asdf-plugin-qdns) | -| quarkus | [asdf:mise-plugins/mise-quarkus](https://github.com/mise-plugins/mise-quarkus) | -| r | [asdf:mise-plugins/mise-r](https://github.com/mise-plugins/mise-r) | -| rabbitmq | [asdf:mise-plugins/mise-rabbitmq](https://github.com/mise-plugins/mise-rabbitmq) | -| racket | [asdf:mise-plugins/mise-racket](https://github.com/mise-plugins/mise-racket) | -| raku | [asdf:mise-plugins/mise-raku](https://github.com/mise-plugins/mise-raku) | -| rancher | [aqua:rancher/cli](https://github.com/rancher/cli) [asdf:abinet/asdf-rancher](https://github.com/abinet/asdf-rancher) | -| rbac-lookup | [aqua:FairwindsOps/rbac-lookup](https://github.com/FairwindsOps/rbac-lookup) [asdf:looztra/asdf-rbac-lookup](https://github.com/looztra/asdf-rbac-lookup) | -| rclone | [ubi:rclone/rclone](https://github.com/rclone/rclone) [asdf:johnlayton/asdf-rclone](https://github.com/johnlayton/asdf-rclone) | -| rebar | [asdf:mise-plugins/mise-rebar](https://github.com/mise-plugins/mise-rebar) | -| reckoner | [ubi:FairwindsOps/reckoner](https://github.com/FairwindsOps/reckoner) [asdf:FairwindsOps/asdf-reckoner](https://github.com/FairwindsOps/asdf-reckoner) | -| redis | [asdf:mise-plugins/mise-redis](https://github.com/mise-plugins/mise-redis) | -| redis-cli | [asdf:mise-plugins/mise-redis-cli](https://github.com/mise-plugins/mise-redis-cli) | -| redo | [ubi:barthr/redo](https://github.com/barthr/redo) [asdf:chessmango/asdf-redo](https://github.com/chessmango/asdf-redo) | -| reg | [aqua:genuinetools/reg](https://github.com/genuinetools/reg) [asdf:looztra/asdf-reg](https://github.com/looztra/asdf-reg) | -| regal | [aqua:StyraInc/regal](https://github.com/StyraInc/regal) [asdf:mise-plugins/mise-regal](https://github.com/mise-plugins/mise-regal) | -| regctl | [aqua:regclient/regclient/regctl](https://github.com/regclient/regclient/regctl) [asdf:ORCID/asdf-regctl](https://github.com/ORCID/asdf-regctl) | -| regsync | [aqua:regclient/regclient/regsync](https://github.com/regclient/regclient/regsync) [asdf:rsrchboy/asdf-regsync](https://github.com/rsrchboy/asdf-regsync) | -| restic | [aqua:restic/restic](https://github.com/restic/restic) [asdf:xataz/asdf-restic](https://github.com/xataz/asdf-restic) | -| restish | [ubi:danielgtaylor/restish](https://github.com/danielgtaylor/restish) [go:github.com/danielgtaylor/restish](https://pkg.go.dev/github.com/danielgtaylor/restish) | -| revive | [aqua:mgechev/revive](https://github.com/mgechev/revive) [asdf:bjw-s/asdf-revive](https://github.com/bjw-s/asdf-revive) | -| richgo | [aqua:kyoh86/richgo](https://github.com/kyoh86/richgo) [asdf:paxosglobal/asdf-richgo](https://github.com/paxosglobal/asdf-richgo) | -| ripgrep | [aqua:BurntSushi/ripgrep](https://github.com/BurntSushi/ripgrep) [ubi:BurntSushi/ripgrep](https://github.com/BurntSushi/ripgrep) [asdf:https://gitlab.com/wt0f/asdf-ripgrep](https://gitlab.com/wt0f/asdf-ripgrep) | -| ripgrep-all | [aqua:phiresky/ripgrep-all](https://github.com/phiresky/ripgrep-all) | -| ripsecret | [aqua:sirwart/ripsecrets](https://github.com/sirwart/ripsecrets) [asdf:https://github.com/boris-smidt-klarrio/asdf-ripsecrets](https://github.com/boris-smidt-klarrio/asdf-ripsecrets) | -| ripsecrets | [aqua:sirwart/ripsecrets](https://github.com/sirwart/ripsecrets) [asdf:https://github.com/boris-smidt-klarrio/asdf-ripsecrets](https://github.com/boris-smidt-klarrio/asdf-ripsecrets) | -| rke | [aqua:rancher/rke](https://github.com/rancher/rke) [asdf:particledecay/asdf-rke](https://github.com/particledecay/asdf-rke) | -| rlwrap | [asdf:mise-plugins/mise-rlwrap](https://github.com/mise-plugins/mise-rlwrap) | -| ruby | [core:ruby](https://mise.jdx.dev/lang/ruby.html) | -| ruff | [aqua:astral-sh/ruff](https://github.com/astral-sh/ruff) [ubi:astral-sh/ruff](https://github.com/astral-sh/ruff) [asdf:simhem/asdf-ruff](https://github.com/simhem/asdf-ruff) | -| rust | [core:rust](https://mise.jdx.dev/lang/rust.html) [asdf:code-lever/asdf-rust](https://github.com/code-lever/asdf-rust) | -| rust-analyzer | [aqua:rust-lang/rust-analyzer](https://github.com/rust-lang/rust-analyzer) [asdf:Xyven1/asdf-rust-analyzer](https://github.com/Xyven1/asdf-rust-analyzer) | -| rustic | [ubi:rustic-rs/rustic](https://github.com/rustic-rs/rustic) | -| rye | [aqua:astral-sh/rye](https://github.com/astral-sh/rye) [asdf:Azuki-bar/asdf-rye](https://github.com/Azuki-bar/asdf-rye) | -| saml2aws | [aqua:Versent/saml2aws](https://github.com/Versent/saml2aws) [asdf:elementalvoid/asdf-saml2aws](https://github.com/elementalvoid/asdf-saml2aws) | -| sbcl | [asdf:mise-plugins/mise-sbcl](https://github.com/mise-plugins/mise-sbcl) | -| sbt | [asdf:mise-plugins/mise-sbt](https://github.com/mise-plugins/mise-sbt) | -| scala | [asdf:mise-plugins/mise-scala](https://github.com/mise-plugins/mise-scala) [vfox:mise-plugins/vfox-scala](https://github.com/mise-plugins/vfox-scala) | -| scala-cli | [ubi:VirtusLab/scala-cli](https://github.com/VirtusLab/scala-cli) [asdf:mise-plugins/mise-scala-cli](https://github.com/mise-plugins/mise-scala-cli) | -| scaleway | [aqua:scaleway/scaleway-cli](https://github.com/scaleway/scaleway-cli) [asdf:albarralnunez/asdf-plugin-scaleway-cli](https://github.com/albarralnunez/asdf-plugin-scaleway-cli) | -| scalingo-cli | [aqua:Scalingo/cli](https://github.com/Scalingo/cli) [asdf:brandon-welsch/asdf-scalingo-cli](https://github.com/brandon-welsch/asdf-scalingo-cli) | -| scarb | [ubi:software-mansion/scarb](https://github.com/software-mansion/scarb) [asdf:software-mansion/asdf-scarb](https://github.com/software-mansion/asdf-scarb) | -| sccache | [ubi:mozilla/sccache](https://github.com/mozilla/sccache) [asdf:emersonmx/asdf-sccache](https://github.com/emersonmx/asdf-sccache) | -| schemacrawler | [asdf:mise-plugins/mise-schemacrawler](https://github.com/mise-plugins/mise-schemacrawler) | -| scie-pants | [ubi:pantsbuild/scie-pants](https://github.com/pantsbuild/scie-pants) [asdf:robzr/asdf-scie-pants](https://github.com/robzr/asdf-scie-pants) | -| seed7 | [asdf:mise-plugins/mise-seed7](https://github.com/mise-plugins/mise-seed7) | -| semgrep | [asdf:mise-plugins/mise-semgrep](https://github.com/mise-plugins/mise-semgrep) | -| semtag | [asdf:mise-plugins/mise-semtag](https://github.com/mise-plugins/mise-semtag) | -| semver | [aqua:fsaintjacques/semver-tool](https://github.com/fsaintjacques/semver-tool) [asdf:mathew-fleisch/asdf-semver](https://github.com/mathew-fleisch/asdf-semver) | -| sentinel | [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | -| sentry | [ubi:getsentry/sentry-cli](https://github.com/getsentry/sentry-cli) | -| serf | [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | -| serverless | [asdf:mise-plugins/mise-serverless](https://github.com/mise-plugins/mise-serverless) | -| setup-envtest | [asdf:mise-plugins/mise-setup-envtest](https://github.com/mise-plugins/mise-setup-envtest) | -| shell2http | [aqua:msoap/shell2http](https://github.com/msoap/shell2http) [asdf:ORCID/asdf-shell2http](https://github.com/ORCID/asdf-shell2http) | -| shellcheck | [aqua:koalaman/shellcheck](https://github.com/koalaman/shellcheck) [ubi:koalaman/shellcheck](https://github.com/koalaman/shellcheck) [asdf:luizm/asdf-shellcheck](https://github.com/luizm/asdf-shellcheck) | -| shellspec | [aqua:shellspec/shellspec](https://github.com/shellspec/shellspec) [asdf:poikilotherm/asdf-shellspec](https://github.com/poikilotherm/asdf-shellspec) | -| shfmt | [aqua:mvdan/sh](https://github.com/mvdan/sh) [asdf:luizm/asdf-shfmt](https://github.com/luizm/asdf-shfmt) | -| shorebird | [asdf:mise-plugins/mise-shorebird](https://github.com/mise-plugins/mise-shorebird) | -| sinker | [aqua:plexsystems/sinker](https://github.com/plexsystems/sinker) [asdf:elementalvoid/asdf-sinker](https://github.com/elementalvoid/asdf-sinker) | -| skaffold | [aqua:GoogleContainerTools/skaffold](https://github.com/GoogleContainerTools/skaffold) [asdf:nklmilojevic/asdf-skaffold](https://github.com/nklmilojevic/asdf-skaffold) | -| skate | [aqua:charmbracelet/skate](https://github.com/charmbracelet/skate) [asdf:chessmango/asdf-skate](https://github.com/chessmango/asdf-skate) | -| sloth | [aqua:slok/sloth](https://github.com/slok/sloth) [asdf:slok/asdf-sloth](https://github.com/slok/asdf-sloth) | -| slsa-verifier | [ubi:slsa-framework/slsa-verifier](https://github.com/slsa-framework/slsa-verifier) | -| smithy | [asdf:mise-plugins/mise-smithy](https://github.com/mise-plugins/mise-smithy) | -| smlnj | [asdf:mise-plugins/mise-smlnj](https://github.com/mise-plugins/mise-smlnj) | -| snyk | [aqua:snyk/cli](https://github.com/snyk/cli) [asdf:nirfuchs/asdf-snyk](https://github.com/nirfuchs/asdf-snyk) | -| soft-serve | [ubi:charmbracelet/soft-serve](https://github.com/charmbracelet/soft-serve) [asdf:chessmango/asdf-soft-serve](https://github.com/chessmango/asdf-soft-serve) | -| solidity | [ubi:ethereum/solidity](https://github.com/ethereum/solidity) [asdf:diegodorado/asdf-solidity](https://github.com/diegodorado/asdf-solidity) | -| sonobuoy | [ubi:vmware-tanzu/sonobuoy](https://github.com/vmware-tanzu/sonobuoy) [asdf:Nick-Triller/asdf-sonobuoy](https://github.com/Nick-Triller/asdf-sonobuoy) | -| sops | [ubi:getsops/sops](https://github.com/getsops/sops) [asdf:mise-plugins/mise-sops](https://github.com/mise-plugins/mise-sops) | -| sopstool | [aqua:ibotta/sopstool](https://github.com/ibotta/sopstool) [asdf:elementalvoid/asdf-sopstool](https://github.com/elementalvoid/asdf-sopstool) | -| soracom | [ubi:soracom/soracom-cli](https://github.com/soracom/soracom-cli) [asdf:gr1m0h/asdf-soracom](https://github.com/gr1m0h/asdf-soracom) | -| sourcery | [asdf:mise-plugins/mise-sourcery](https://github.com/mise-plugins/mise-sourcery) | -| spacectl | [aqua:spacelift-io/spacectl](https://github.com/spacelift-io/spacectl) [asdf:bodgit/asdf-spacectl](https://github.com/bodgit/asdf-spacectl) | -| spago | [ubi:purescript/spago](https://github.com/purescript/spago) [asdf:jrrom/asdf-spago](https://github.com/jrrom/asdf-spago) | -| spark | [aqua:apache/spark](https://github.com/apache/spark) [asdf:mise-plugins/mise-spark](https://github.com/mise-plugins/mise-spark) | -| spectral | [aqua:stoplightio/spectral](https://github.com/stoplightio/spectral) [asdf:vbyrd/asdf-spectral](https://github.com/vbyrd/asdf-spectral) | -| spin | [aqua:spinnaker/spin](https://github.com/spinnaker/spin) [asdf:pavloos/asdf-spin](https://github.com/pavloos/asdf-spin) | -| spring-boot | [asdf:mise-plugins/mise-spring-boot](https://github.com/mise-plugins/mise-spring-boot) | -| spruce | [aqua:geofffranks/spruce](https://github.com/geofffranks/spruce) [asdf:woneill/asdf-spruce](https://github.com/woneill/asdf-spruce) | -| sqlite | [asdf:mise-plugins/mise-sqlite](https://github.com/mise-plugins/mise-sqlite) | -| sqlite3def | [aqua:sqldef/sqldef/sqlite3def](https://github.com/sqldef/sqldef/sqlite3def) | -| sshuttle | [asdf:mise-plugins/mise-sshuttle](https://github.com/mise-plugins/mise-sshuttle) | -| stack | [aqua:commercialhaskell/stack](https://github.com/commercialhaskell/stack) [asdf:mise-plugins/mise-ghcup](https://github.com/mise-plugins/mise-ghcup) | -| starboard | [aqua:aquasecurity/starboard](https://github.com/aquasecurity/starboard) [asdf:zufardhiyaulhaq/asdf-starboard](https://github.com/zufardhiyaulhaq/asdf-starboard) | -| starknet-foundry | [ubi:foundry-rs/starknet-foundry](https://github.com/foundry-rs/starknet-foundry) | -| starknet-foundry-sncast | [ubi:foundry-rs/starknet-foundry](https://github.com/foundry-rs/starknet-foundry) | -| starship | [ubi:starship/starship](https://github.com/starship/starship) [asdf:gr1m0h/asdf-starship](https://github.com/gr1m0h/asdf-starship) | -| staticcheck | [aqua:dominikh/go-tools/staticcheck](https://github.com/dominikh/go-tools/staticcheck) [asdf:pbr0ck3r/asdf-staticcheck](https://github.com/pbr0ck3r/asdf-staticcheck) | -| steampipe | [aqua:turbot/steampipe](https://github.com/turbot/steampipe) [asdf:carnei-ro/asdf-steampipe](https://github.com/carnei-ro/asdf-steampipe) | -| step | [aqua:smallstep/cli](https://github.com/smallstep/cli) [asdf:log2/asdf-step](https://github.com/log2/asdf-step) | -| stern | [aqua:stern/stern](https://github.com/stern/stern) [asdf:looztra/asdf-stern](https://github.com/looztra/asdf-stern) | -| stripe | [aqua:stripe/stripe-cli](https://github.com/stripe/stripe-cli) [asdf:offbyone/asdf-stripe](https://github.com/offbyone/asdf-stripe) | -| stylua | [aqua:JohnnyMorganz/StyLua](https://github.com/JohnnyMorganz/StyLua) [asdf:jc00ke/asdf-stylua](https://github.com/jc00ke/asdf-stylua) | -| sui | [ubi:MystenLabs/sui](https://github.com/MystenLabs/sui) [asdf:placeholder-soft/asdf-sui](https://github.com/placeholder-soft/asdf-sui) | -| superfile | [aqua:yorukot/superfile](https://github.com/yorukot/superfile) | -| sver | [aqua:mitoma/sver](https://github.com/mitoma/sver) [asdf:robzr/asdf-sver](https://github.com/robzr/asdf-sver) | -| svu | [aqua:caarlos0/svu](https://github.com/caarlos0/svu) [asdf:asdf-community/asdf-svu](https://github.com/asdf-community/asdf-svu) | -| swag | [aqua:swaggo/swag](https://github.com/swaggo/swag) [asdf:behoof4mind/asdf-swag](https://github.com/behoof4mind/asdf-swag) | -| swift | [core:swift](https://mise.jdx.dev/lang/swift.html) | -| swift-package-list | [asdf:mise-plugins/mise-swift-package-list](https://github.com/mise-plugins/mise-swift-package-list) | -| swiftformat | [asdf:mise-plugins/mise-swiftformat](https://github.com/mise-plugins/mise-swiftformat) | -| swiftgen | [asdf:mise-plugins/mise-swiftgen](https://github.com/mise-plugins/mise-swiftgen) | -| swiftlint | [asdf:mise-plugins/mise-swiftlint](https://github.com/mise-plugins/mise-swiftlint) | -| swiprolog | [asdf:mise-plugins/mise-swiprolog](https://github.com/mise-plugins/mise-swiprolog) | -| syft | [aqua:anchore/syft](https://github.com/anchore/syft) [asdf:davidgp1701/asdf-syft](https://github.com/davidgp1701/asdf-syft) | -| talhelper | [aqua:budimanjojo/talhelper](https://github.com/budimanjojo/talhelper) [asdf:bjw-s/asdf-talhelper](https://github.com/bjw-s/asdf-talhelper) | -| talos | [ubi:siderolabs/talos](https://github.com/siderolabs/talos) [asdf:particledecay/asdf-talos](https://github.com/particledecay/asdf-talos) | -| talosctl | [ubi:siderolabs/talos](https://github.com/siderolabs/talos) [asdf:bjw-s/asdf-talosctl](https://github.com/bjw-s/asdf-talosctl) | -| tanka | [aqua:grafana/tanka](https://github.com/grafana/tanka) [asdf:trotttrotttrott/asdf-tanka](https://github.com/trotttrotttrott/asdf-tanka) | -| tanzu | [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | -| taplo | [ubi:tamasfe/taplo](https://github.com/tamasfe/taplo) [cargo:taplo-cli](https://crates.io/crates/taplo-cli) | -| task | [ubi:go-task/task](https://github.com/go-task/task) [asdf:particledecay/asdf-task](https://github.com/particledecay/asdf-task) | -| tctl | [aqua:temporalio/tctl](https://github.com/temporalio/tctl) [asdf:eko/asdf-tctl](https://github.com/eko/asdf-tctl) | -| tekton | [aqua:tektoncd/cli](https://github.com/tektoncd/cli) [asdf:johnhamelink/asdf-tekton-cli](https://github.com/johnhamelink/asdf-tekton-cli) | -| teleport-community | [asdf:mise-plugins/mise-teleport-community](https://github.com/mise-plugins/mise-teleport-community) | -| teleport-ent | [asdf:mise-plugins/mise-teleport-ent](https://github.com/mise-plugins/mise-teleport-ent) | -| telepresence | [aqua:telepresenceio/telepresence](https://github.com/telepresenceio/telepresence) [asdf:pirackr/asdf-telepresence](https://github.com/pirackr/asdf-telepresence) | -| teller | [aqua:tellerops/teller](https://github.com/tellerops/teller) [asdf:pdemagny/asdf-teller](https://github.com/pdemagny/asdf-teller) | -| temporal | [aqua:temporalio/temporal](https://github.com/temporalio/temporal) [asdf:asdf-community/asdf-temporal](https://github.com/asdf-community/asdf-temporal) | -| terradozer | [aqua:jckuester/terradozer](https://github.com/jckuester/terradozer) [asdf:chessmango/asdf-terradozer](https://github.com/chessmango/asdf-terradozer) | -| terraform | [aqua:hashicorp/terraform](https://github.com/hashicorp/terraform) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) [vfox:mise-plugins/vfox-terraform](https://github.com/mise-plugins/vfox-terraform) | -| terraform-docs | [aqua:terraform-docs/terraform-docs](https://github.com/terraform-docs/terraform-docs) [asdf:looztra/asdf-terraform-docs](https://github.com/looztra/asdf-terraform-docs) | -| terraform-ls | [aqua:hashicorp/terraform-ls](https://github.com/hashicorp/terraform-ls) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | -| terraform-lsp | [aqua:juliosueiras/terraform-lsp](https://github.com/juliosueiras/terraform-lsp) [asdf:bartlomiejdanek/asdf-terraform-lsp](https://github.com/bartlomiejdanek/asdf-terraform-lsp) | -| terraform-validator | [aqua:thazelart/terraform-validator](https://github.com/thazelart/terraform-validator) [asdf:looztra/asdf-terraform-validator](https://github.com/looztra/asdf-terraform-validator) | -| terraformer | [aqua:GoogleCloudPlatform/terraformer](https://github.com/GoogleCloudPlatform/terraformer) [asdf:gr1m0h/asdf-terraformer](https://github.com/gr1m0h/asdf-terraformer) | -| terragrunt | [aqua:gruntwork-io/terragrunt](https://github.com/gruntwork-io/terragrunt) [asdf:gruntwork-io/asdf-terragrunt](https://github.com/gruntwork-io/asdf-terragrunt) | -| terramate | [aqua:terramate-io/terramate](https://github.com/terramate-io/terramate) [asdf:martinlindner/asdf-terramate](https://github.com/martinlindner/asdf-terramate) | -| terrascan | [aqua:tenable/terrascan](https://github.com/tenable/terrascan) [asdf:hpdobrica/asdf-terrascan](https://github.com/hpdobrica/asdf-terrascan) | -| tf-summarize | [aqua:dineshba/tf-summarize](https://github.com/dineshba/tf-summarize) [asdf:adamcrews/asdf-tf-summarize](https://github.com/adamcrews/asdf-tf-summarize) | -| tfc-agent | [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | -| tfctl | [aqua:flux-iac/tofu-controller/tfctl](https://github.com/flux-iac/tofu-controller/tfctl) [asdf:deas/asdf-tfctl](https://github.com/deas/asdf-tfctl) | -| tfenv | [aqua:tfutils/tfenv](https://github.com/tfutils/tfenv) [asdf:carlduevel/asdf-tfenv](https://github.com/carlduevel/asdf-tfenv) | -| tflint | [aqua:terraform-linters/tflint](https://github.com/terraform-linters/tflint) [ubi:terraform-linters/tflint](https://github.com/terraform-linters/tflint) [asdf:skyzyx/asdf-tflint](https://github.com/skyzyx/asdf-tflint) | -| tfmigrate | [aqua:minamijoyo/tfmigrate](https://github.com/minamijoyo/tfmigrate) [asdf:dex4er/asdf-tfmigrate](https://github.com/dex4er/asdf-tfmigrate) | -| tfnotify | [aqua:mercari/tfnotify](https://github.com/mercari/tfnotify) [asdf:jnavarrof/asdf-tfnotify](https://github.com/jnavarrof/asdf-tfnotify) | -| tfsec | [aqua:aquasecurity/tfsec](https://github.com/aquasecurity/tfsec) [asdf:woneill/asdf-tfsec](https://github.com/woneill/asdf-tfsec) | -| tfstate-lookup | [aqua:fujiwara/tfstate-lookup](https://github.com/fujiwara/tfstate-lookup) [asdf:carnei-ro/asdf-tfstate-lookup](https://github.com/carnei-ro/asdf-tfstate-lookup) | -| tfswitch | [ubi:warrensbox/terraform-switcher](https://github.com/warrensbox/terraform-switcher) [asdf:iul1an/asdf-tfswitch](https://github.com/iul1an/asdf-tfswitch) | -| tfupdate | [aqua:minamijoyo/tfupdate](https://github.com/minamijoyo/tfupdate) [asdf:yuokada/asdf-tfupdate](https://github.com/yuokada/asdf-tfupdate) | -| thrift | [asdf:mise-plugins/mise-thrift](https://github.com/mise-plugins/mise-thrift) | -| tilt | [aqua:tilt-dev/tilt](https://github.com/tilt-dev/tilt) [asdf:eaceaser/asdf-tilt](https://github.com/eaceaser/asdf-tilt) | -| timoni | [aqua:stefanprodan/timoni](https://github.com/stefanprodan/timoni) [asdf:Smana/asdf-timoni](https://github.com/Smana/asdf-timoni) | -| tiny | [asdf:mise-plugins/mise-tiny](https://github.com/mise-plugins/mise-tiny) | -| tinytex | [asdf:mise-plugins/mise-tinytex](https://github.com/mise-plugins/mise-tinytex) | -| titan | [ubi:titan-data/titan](https://github.com/titan-data/titan) [asdf:gabitchov/asdf-titan](https://github.com/gabitchov/asdf-titan) | -| tmux | [asdf:mise-plugins/mise-tmux](https://github.com/mise-plugins/mise-tmux) | -| tokei | [ubi:XAMPPRocky/tokei](https://github.com/XAMPPRocky/tokei) [asdf:gasuketsu/asdf-tokei](https://github.com/gasuketsu/asdf-tokei) | -| tomcat | [asdf:mise-plugins/mise-tomcat](https://github.com/mise-plugins/mise-tomcat) | -| tonnage | [ubi:elementalvoid/tonnage](https://github.com/elementalvoid/tonnage) [asdf:elementalvoid/asdf-tonnage](https://github.com/elementalvoid/asdf-tonnage) | -| traefik | [ubi:traefik/traefik](https://github.com/traefik/traefik) [asdf:Dabolus/asdf-traefik](https://github.com/Dabolus/asdf-traefik) | -| transifex | [ubi:transifex/cli](https://github.com/transifex/cli) [asdf:ORCID/asdf-transifex](https://github.com/ORCID/asdf-transifex) | -| trdsql | [aqua:noborus/trdsql](https://github.com/noborus/trdsql) [asdf:johnlayton/asdf-trdsql](https://github.com/johnlayton/asdf-trdsql) | -| tree-sitter | [aqua:tree-sitter/tree-sitter](https://github.com/tree-sitter/tree-sitter) [asdf:ivanvc/asdf-tree-sitter](https://github.com/ivanvc/asdf-tree-sitter) | -| tridentctl | [aqua:NetApp/trident/tridentctl](https://github.com/NetApp/trident/tridentctl) [asdf:asdf-community/asdf-tridentctl](https://github.com/asdf-community/asdf-tridentctl) | -| trivy | [aqua:aquasecurity/trivy](https://github.com/aquasecurity/trivy) [asdf:zufardhiyaulhaq/asdf-trivy](https://github.com/zufardhiyaulhaq/asdf-trivy) | -| tsuru | [ubi:tsuru/tsuru-client](https://github.com/tsuru/tsuru-client) [asdf:virtualstaticvoid/asdf-tsuru](https://github.com/virtualstaticvoid/asdf-tsuru) | -| ttyd | [aqua:tsl0922/ttyd](https://github.com/tsl0922/ttyd) [asdf:ivanvc/asdf-ttyd](https://github.com/ivanvc/asdf-ttyd) | -| tuist | [asdf:mise-plugins/mise-tuist](https://github.com/mise-plugins/mise-tuist) | -| typos | [aqua:crate-ci/typos](https://github.com/crate-ci/typos) [asdf:aschiavon91/asdf-typos](https://github.com/aschiavon91/asdf-typos) | -| typst | [aqua:typst/typst](https://github.com/typst/typst) [asdf:stephane-klein/asdf-typst](https://github.com/stephane-klein/asdf-typst) | -| uaa | [ubi:cloudfoundry/uaa-cli](https://github.com/cloudfoundry/uaa-cli) [asdf:mise-plugins/tanzu-plug-in-for-asdf](https://github.com/mise-plugins/tanzu-plug-in-for-asdf) | -| ubi | [ubi:houseabsolute/ubi](https://github.com/houseabsolute/ubi) | -| unison | [ubi:unisonweb/unison](https://github.com/unisonweb/unison) [asdf:susurri/asdf-unison](https://github.com/susurri/asdf-unison) | -| upctl | [aqua:UpCloudLtd/upcloud-cli](https://github.com/UpCloudLtd/upcloud-cli) | -| updatecli | [aqua:updatecli/updatecli](https://github.com/updatecli/updatecli) [asdf:updatecli/asdf-updatecli](https://github.com/updatecli/asdf-updatecli) | -| upt | [ubi:sigoden/upt](https://github.com/sigoden/upt) [asdf:ORCID/asdf-upt](https://github.com/ORCID/asdf-upt) | -| upx | [aqua:upx/upx](https://github.com/upx/upx) [asdf:jimmidyson/asdf-upx](https://github.com/jimmidyson/asdf-upx) | -| usage | [ubi:jdx/usage](https://github.com/jdx/usage) [asdf:jdx/mise-usage](https://github.com/jdx/mise-usage) | -| usql | [aqua:xo/usql](https://github.com/xo/usql) [asdf:itspngu/asdf-usql](https://github.com/itspngu/asdf-usql) | -| uv | [aqua:astral-sh/uv](https://github.com/astral-sh/uv) [asdf:asdf-community/asdf-uv](https://github.com/asdf-community/asdf-uv) | -| v | [asdf:mise-plugins/mise-v](https://github.com/mise-plugins/mise-v) | -| vacuum | [aqua:daveshanley/vacuum](https://github.com/daveshanley/vacuum) | -| vale | [aqua:errata-ai/vale](https://github.com/errata-ai/vale) [asdf:pdemagny/asdf-vale](https://github.com/pdemagny/asdf-vale) | -| vals | [aqua:helmfile/vals](https://github.com/helmfile/vals) [asdf:dex4er/asdf-vals](https://github.com/dex4er/asdf-vals) | -| vault | [aqua:hashicorp/vault](https://github.com/hashicorp/vault) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | -| vcluster | [aqua:loft-sh/vcluster](https://github.com/loft-sh/vcluster) [asdf:https://gitlab.com/wt0f/asdf-vcluster](https://gitlab.com/wt0f/asdf-vcluster) | -| velad | [asdf:mise-plugins/mise-velad](https://github.com/mise-plugins/mise-velad) | -| velero | [aqua:vmware-tanzu/velero](https://github.com/vmware-tanzu/velero) [asdf:looztra/asdf-velero](https://github.com/looztra/asdf-velero) | -| vendir | [aqua:carvel-dev/vendir](https://github.com/carvel-dev/vendir) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | -| venom | [aqua:ovh/venom](https://github.com/ovh/venom) [asdf:aabouzaid/asdf-venom](https://github.com/aabouzaid/asdf-venom) | -| vhs | [aqua:charmbracelet/vhs](https://github.com/charmbracelet/vhs) [asdf:chessmango/asdf-vhs](https://github.com/chessmango/asdf-vhs) | -| viddy | [aqua:sachaos/viddy](https://github.com/sachaos/viddy) [asdf:ryodocx/asdf-viddy](https://github.com/ryodocx/asdf-viddy) | -| vim | [asdf:mise-plugins/mise-vim](https://github.com/mise-plugins/mise-vim) | -| virtualos | [asdf:mise-plugins/mise-virtualos](https://github.com/mise-plugins/mise-virtualos) | -| vivid | [ubi:sharkdp/vivid](https://github.com/sharkdp/vivid) | -| vlang | [vfox:mise-plugins/vfox-vlang](https://github.com/mise-plugins/vfox-vlang) | -| vlt | [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | -| vultr | [ubi:vultr/vultr-cli](https://github.com/vultr/vultr-cli) [asdf:ikuradon/asdf-vultr-cli](https://github.com/ikuradon/asdf-vultr-cli) | -| wait-for-gh-rate-limit | [ubi:jdx/wait-for-gh-rate-limit](https://github.com/jdx/wait-for-gh-rate-limit) | -| wasi-sdk | [asdf:mise-plugins/mise-wasi-sdk](https://github.com/mise-plugins/mise-wasi-sdk) | -| wasm3 | [asdf:mise-plugins/mise-wasm3](https://github.com/mise-plugins/mise-wasm3) | -| wasm4 | [ubi:aduros/wasm4](https://github.com/aduros/wasm4) [asdf:jtakakura/asdf-wasm4](https://github.com/jtakakura/asdf-wasm4) | -| wasmer | [aqua:wasmerio/wasmer](https://github.com/wasmerio/wasmer) [asdf:tachyonicbytes/asdf-wasmer](https://github.com/tachyonicbytes/asdf-wasmer) | -| wasmtime | [aqua:bytecodealliance/wasmtime](https://github.com/bytecodealliance/wasmtime) [asdf:tachyonicbytes/asdf-wasmtime](https://github.com/tachyonicbytes/asdf-wasmtime) | -| watchexec | [ubi:watchexec/watchexec](https://github.com/watchexec/watchexec) [asdf:nyrst/asdf-watchexec](https://github.com/nyrst/asdf-watchexec) | -| waypoint | [aqua:hashicorp/waypoint](https://github.com/hashicorp/waypoint) [asdf:mise-plugins/mise-hashicorp](https://github.com/mise-plugins/mise-hashicorp) | -| weave-gitops | [ubi:weaveworks/weave-gitops](https://github.com/weaveworks/weave-gitops) [asdf:deas/asdf-weave-gitops](https://github.com/deas/asdf-weave-gitops) | -| websocat | [aqua:vi/websocat](https://github.com/vi/websocat) [asdf:bdellegrazie/asdf-websocat](https://github.com/bdellegrazie/asdf-websocat) | -| wren | [ubi:wren-lang/wren-cli](https://github.com/wren-lang/wren-cli) [asdf:jtakakura/asdf-wren-cli](https://github.com/jtakakura/asdf-wren-cli) | -| wrk | [asdf:mise-plugins/mise-wrk](https://github.com/mise-plugins/mise-wrk) | -| wtfutil | [aqua:wtfutil/wtf](https://github.com/wtfutil/wtf) [asdf:NeoHsu/asdf-wtfutil](https://github.com/NeoHsu/asdf-wtfutil) | -| xc | [aqua:joerdav/xc](https://github.com/joerdav/xc) [asdf:airtonix/asdf-xc](https://github.com/airtonix/asdf-xc) | -| xcbeautify | [ubi:cpisciotta/xcbeautify](https://github.com/cpisciotta/xcbeautify) [asdf:mise-plugins/asdf-xcbeautify](https://github.com/mise-plugins/asdf-xcbeautify) | -| xchtmlreport | [asdf:mise-plugins/mise-xchtmlreport](https://github.com/mise-plugins/mise-xchtmlreport) | -| xcodegen | [asdf:mise-plugins/mise-xcodegen](https://github.com/mise-plugins/mise-xcodegen) | -| xcresultparser | [asdf:mise-plugins/mise-xcresultparser](https://github.com/mise-plugins/mise-xcresultparser) | -| xh | [aqua:ducaale/xh](https://github.com/ducaale/xh) [ubi:ducaale/xh](https://github.com/ducaale/xh) [asdf:NeoHsu/asdf-xh](https://github.com/NeoHsu/asdf-xh) | -| yadm | [asdf:mise-plugins/mise-yadm](https://github.com/mise-plugins/mise-yadm) | -| yamlfmt | [aqua:google/yamlfmt](https://github.com/google/yamlfmt) [asdf:mise-plugins/asdf-yamlfmt](https://github.com/mise-plugins/asdf-yamlfmt) | -| yamllint | [pipx:yamllint](https://pypi.org/project/yamllint) [asdf:ericcornelissen/asdf-yamllint](https://github.com/ericcornelissen/asdf-yamllint) | -| yamlscript | [asdf:mise-plugins/mise-yamlscript](https://github.com/mise-plugins/mise-yamlscript) | -| yarn | [asdf:mise-plugins/mise-yarn](https://github.com/mise-plugins/mise-yarn) | -| yay | [asdf:mise-plugins/mise-yay](https://github.com/mise-plugins/mise-yay) | -| yazi | [aqua:sxyazi/yazi](https://github.com/sxyazi/yazi) | -| yj | [ubi:sclevine/yj](https://github.com/sclevine/yj) [asdf:ryodocx/asdf-yj](https://github.com/ryodocx/asdf-yj) | -| yor | [aqua:bridgecrewio/yor](https://github.com/bridgecrewio/yor) [asdf:ordinaryexperts/asdf-yor](https://github.com/ordinaryexperts/asdf-yor) | -| youtube-dl | [asdf:mise-plugins/mise-youtube-dl](https://github.com/mise-plugins/mise-youtube-dl) | -| yq | [ubi:mikefarah/yq](https://github.com/mikefarah/yq) [asdf:sudermanjr/asdf-yq](https://github.com/sudermanjr/asdf-yq) | -| yt-dlp | [ubi:yt-dlp/yt-dlp](https://github.com/yt-dlp/yt-dlp) [asdf:duhow/asdf-yt-dlp](https://github.com/duhow/asdf-yt-dlp) | -| ytt | [aqua:carvel-dev/ytt](https://github.com/carvel-dev/ytt) [asdf:vmware-tanzu/asdf-carvel](https://github.com/vmware-tanzu/asdf-carvel) | -| zbctl | [asdf:mise-plugins/mise-zbctl](https://github.com/mise-plugins/mise-zbctl) | -| zellij | [ubi:zellij-org/zellij](https://github.com/zellij-org/zellij) [asdf:chessmango/asdf-zellij](https://github.com/chessmango/asdf-zellij) | -| zephyr | [ubi:MaybeJustJames/zephyr](https://github.com/MaybeJustJames/zephyr) [asdf:nsaunders/asdf-zephyr](https://github.com/nsaunders/asdf-zephyr) | -| zig | [core:zig](https://mise.jdx.dev/lang/zig.html) | -| zigmod | [ubi:nektro/zigmod](https://github.com/nektro/zigmod) [asdf:mise-plugins/asdf-zigmod](https://github.com/mise-plugins/asdf-zigmod) | -| zls | [aqua:zigtools/zls](https://github.com/zigtools/zls) [ubi:zigtools/zls](https://github.com/zigtools/zls) | -| zola | [ubi:getzola/zola](https://github.com/getzola/zola) [asdf:salasrod/asdf-zola](https://github.com/salasrod/asdf-zola) | -| zoxide | [ubi:ajeetdsouza/zoxide](https://github.com/ajeetdsouza/zoxide) [asdf:nyrst/asdf-zoxide](https://github.com/nyrst/asdf-zoxide) | -| zprint | [asdf:mise-plugins/mise-zprint](https://github.com/mise-plugins/mise-zprint) | + diff --git a/docs/registry.toml b/docs/registry.toml new file mode 120000 index 0000000000..08cdb72774 --- /dev/null +++ b/docs/registry.toml @@ -0,0 +1 @@ +../registry.toml \ No newline at end of file diff --git a/docs/settings.data.ts b/docs/settings.data.ts index 136b16b4b3..bb4de16ae7 100644 --- a/docs/settings.data.ts +++ b/docs/settings.data.ts @@ -1,5 +1,5 @@ import * as fs from "node:fs"; -import * as toml from "toml"; +import { load } from "js-toml"; import markdownit from "markdown-it"; const md = markdownit(); @@ -9,7 +9,7 @@ export default { load() { const settings = {}; const raw = fs.readFileSync("./settings.toml", "utf-8"); - const doc = toml.parse(raw); + const doc = load(raw); function getParseEnv(parseEnv) { if (parseEnv === "list_by_comma") { diff --git a/scripts/render-registry.js b/scripts/render-registry.js deleted file mode 100755 index d06f3b9863..0000000000 --- a/scripts/render-registry.js +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env node - -const { execSync } = require("node:child_process"); -const fs = require("node:fs"); - -process.env.MISE_ASDF = 1; -process.env.MISE_VFOX = 1; -process.env.MISE_EXPERIMENTAL = 1; - -const stdout = execSync("mise registry --hide-aliased", { - encoding: "utf-8", - env: { ...process.env, MISE_OS: "linux" }, -}); - -const output = [ - `--- -editLink: false ---- - -# Registry - -In general, the preferred backend to use for new tools is the following: - -- [aqua](./dev-tools/backends/aqua.html) - offers the most features and security while not requiring plugins -- [ubi](./dev-tools/backends/ubi.html) - very simple to use -- [pipx](./dev-tools/backends/pipx.html) - only for python tools, requires python to be installed but this generally would always be the case for python tools -- [npm](./dev-tools/backends/npm.html) - only for node tools, requires node to be installed but this generally would always be the case for node tools -- [vfox](./dev-tools/backends/vfox.html) - only for tools that have unique installation requirements or need to modify env vars -- [asdf](./dev-tools/backends/asdf.html) - only for tools that have unique installation requirements or need to modify env vars, doesn't support windows -- [go](./dev-tools/backends/go.html) - only for go tools, requires go to be installed to compile. Because go tools can be distributed as a single binary, aqua/ubi are definitely preferred. -- [cargo](./dev-tools/backends/cargo.html) - only for rust tools, requires rust to be installed to compile. Because rust tools can be distributed as a single binary, aqua/ubi are definitely preferred. -- [dotnet](./dev-tools/backends/dotnet.html) - only for dotnet tools, requires dotnet to be installed to compile. Because dotnet tools can be distributed as a single binary, aqua/ubi are definitely preferred. - -However, each tool can define its own priority if it has more than 1 backend it supports. You can disable a backend with \`mise settings disable_backends=asdf\`. -And it will be skipped. See [Aliases](/dev-tools/aliases.html) for a way to set a default backend for a tool. - -You can also specify the full name for a tool using \`mise use aqua:1password/cli\` if you want to use a specific backend. -`, -]; - -output.push("| Short | Full |\n| ----------- | --------------- |"); -for (const match of stdout.split("\n")) { - // e.g.: asdf:carlduevel/asdf-zprint - const [short, ...fulls] = match.split(" "); - const full = fulls - .filter((x) => x !== "") - .map((full) => { - const match = full.match(/^(.+?):(.+?)(\[.+])?$/); - if (match[1] === "asdf" || match[1] === "vfox") { - let repoUrl = match[2].replace(/\.git$/, ""); - if (!repoUrl.startsWith("http")) { - repoUrl = `https://github.com/${repoUrl}`; - } - return `[${match[1]}:${match[2]}](${repoUrl})`; - } else if (match[1] === "core") { - return `[${match[1]}:${match[2]}](https://mise.jdx.dev/lang/${match[2]}.html)`; - } else if (match[1] === "cargo") { - return `[${match[1]}:${match[2]}](https://crates.io/crates/${match[2]})`; - } else if (match[1] === "npm") { - return `[${match[1]}:${match[2]}](https://www.npmjs.com/package/${match[2]})`; - } else if (match[1] === "pipx") { - return `[${match[1]}:${match[2]}](https://pypi.org/project/${match[2]})`; - } else if (match[1] === "go") { - return `[${match[1]}:${match[2]}](https://pkg.go.dev/${match[2]})`; - } else if (match[1] === "spm") { - return `[${match[1]}:${match[2]}](https://github.com/${match[2]})`; - } else if (match[1] === "ubi") { - return `[${match[1]}:${match[2]}](https://github.com/${match[2]})`; - } else if (match[1] === "aqua") { - // TODO: handle non-github repos - return `[${match[1]}:${match[2]}](https://github.com/${match[2]})`; - } else { - throw new Error(`Unknown registry: ${full}`); - } - }) - .join(" "); - if (full !== "") output.push(`| ${short} | ${full} |`); -} -output.push(""); - -fs.writeFileSync("docs/registry.md", output.join("\n")); diff --git a/tasks.md b/tasks.md index 58080140b3..69a485cbc0 100644 --- a/tasks.md +++ b/tasks.md @@ -172,12 +172,6 @@ User to run as - **Usage**: `render:mangen` -## `render:registry` - -- Depends: build - -- **Usage**: `render:registry` - ## `render:settings` - Depends: docs:setup diff --git a/tasks.toml b/tasks.toml index 1cc74f89a0..fe01ea6267 100644 --- a/tasks.toml +++ b/tasks.toml @@ -50,10 +50,6 @@ mise completion zsh > completions/_mise mise completion fish > completions/mise.fish ''' -["render:registry"] -depends = ["build"] -run = "./scripts/render-registry.js" - ["render:settings"] run = "tsx xtasks/render/settings.ts" depends = ['docs:setup'] From 2769d89cddb53303ade4a1edd9d2f79aecd875a4 Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Sun, 2 Feb 2025 02:49:17 +0100 Subject: [PATCH 260/289] docs: improve registry filtering performance (#4287) --- docs/components/registry.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/components/registry.vue b/docs/components/registry.vue index c534eb8c8b..13aade1db0 100644 --- a/docs/components/registry.vue +++ b/docs/components/registry.vue @@ -14,7 +14,7 @@ - + @@ -48,6 +48,7 @@ export default { }, computed: { filteredData() { + if (this.filter.trim() === "") return this.data; return this.data.filter((entry) => { const searchTerm = this.filter.toLowerCase(); const short = entry.short.toString().toLowerCase(); @@ -61,6 +62,7 @@ export default { }, methods: { highlightMatches(text) { + if (this.filter.trim() === "") return text; const matchExists = text .toLowerCase() .includes(this.filter.toLowerCase()); From 5de79368fdcfa1d6ce89048516f700ab2e30896d Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Sun, 2 Feb 2025 09:21:10 -0300 Subject: [PATCH 261/289] docs: fix registry table rendering for mobile (#4288) Additional styling for the search input. Remove the table style so table renders with horizontal scrollbar if necessary. --- docs/components/registry.vue | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/docs/components/registry.vue b/docs/components/registry.vue index 13aade1db0..3bac08349b 100644 --- a/docs/components/registry.vue +++ b/docs/components/registry.vue @@ -5,7 +5,7 @@ placeholder="Filter by Short or Full" v-model="filter" /> - +
@@ -83,11 +83,9 @@ export default { width: 100%; padding: 10px; margin-bottom: 10px; - border: 1px solid #ccc; - border-radius: 5px; -} -.filtered-table { - display: table; - width: 100%; + border-radius: 10px; + background: var(--vp-c-bg-soft); + font-size: 15px; + color: var(--vp-c-text-2); } From 48e6aae09003f1a18b36b42fbad899d2893277d2 Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Mercier Date: Sun, 2 Feb 2025 13:27:03 +0100 Subject: [PATCH 262/289] feat: add gittool/gitversion (#4289) - add aqua and ubi for gitools/gitversion - bump aqua-registry --- aqua-registry | 2 +- registry.toml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/aqua-registry b/aqua-registry index 2b8e0a5bd7..bed7e324ea 160000 --- a/aqua-registry +++ b/aqua-registry @@ -1 +1 @@ -Subproject commit 2b8e0a5bd7197f52199154d3dfb9af37ba94eac8 +Subproject commit bed7e324eaccf1827c1c3888dd233ad8cb369135 diff --git a/registry.toml b/registry.toml index 9e0edaf9f2..cfa0abf927 100644 --- a/registry.toml +++ b/registry.toml @@ -727,6 +727,7 @@ gitsign.os = ["linux", "macos"] gitsign.test = ["gitsign --version", "gitsign version v{{version}}"] gitu.backends = ["ubi:altsem/gitu", "cargo:gitu"] gitui.backends = ["aqua:extrawurst/gitui", "asdf:looztra/asdf-gitui"] +gitversion.backends = ["aqua:gittools/gitversion", "ubi:gittools/gitversion"] glab.backends = ["asdf:mise-plugins/mise-glab"] gleam.backends = ["aqua:gleam-lang/gleam", "asdf:asdf-community/asdf-gleam"] # gleam.test = ["gleam --version", "gleam {{version}}"] reporting wrong version From 125e8ff8ee88c824e39bc93cc53996f32fea50b4 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sun, 2 Feb 2025 09:26:56 -0600 Subject: [PATCH 263/289] chore: updated deps (#4290) --- Cargo.lock | 227 ++++++++++++++++++++++++++++----------------- Cargo.toml | 2 +- deny.toml | 1 + e2e/cli/test_ls | 3 +- mise.lock | 24 +++-- mise.toml | 10 +- src/rand.rs | 4 +- src/tera.rs | 5 +- xtasks/release-plz | 1 + 9 files changed, 167 insertions(+), 110 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0f83e4f47b..96bd36faf6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -75,7 +75,7 @@ dependencies = [ "lazy_static", "nom", "pin-project", - "rand", + "rand 0.8.5", "rust-embed", "scrypt", "sha2", @@ -96,7 +96,7 @@ dependencies = [ "hkdf", "io_tee", "nom", - "rand", + "rand 0.8.5", "secrecy", "sha2", ] @@ -111,7 +111,7 @@ dependencies = [ "getrandom 0.2.15", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -273,13 +273,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.85" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -491,9 +491,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.10" +version = "1.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229" +checksum = "e4730490333d58093109dc02c23174c3f4d490998c3fed3cc8e82d57afedb9cf" dependencies = [ "jobserver", "libc", @@ -624,7 +624,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -682,7 +682,7 @@ dependencies = [ "nom", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -744,7 +744,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -926,7 +926,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", - "rand_core", + "rand_core 0.6.4", "typenum", ] @@ -937,7 +937,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -973,7 +973,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -997,7 +997,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1008,7 +1008,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1086,7 +1086,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1099,7 +1099,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1154,7 +1154,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -1478,6 +1478,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" + [[package]] name = "foreign-types" version = "0.3.2" @@ -1577,7 +1583,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -2626,6 +2632,9 @@ name = "hashbrown" version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "foldhash", +] [[package]] name = "heck" @@ -2884,7 +2893,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn 2.0.96", + "syn 2.0.98", "unic-langid", ] @@ -2898,7 +2907,7 @@ dependencies = [ "i18n-config", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3039,7 +3048,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3087,12 +3096,11 @@ dependencies = [ [[package]] name = "imara-diff" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc9da1a252bd44cd341657203722352efc9bc0c847d06ea6d2dc1cd1135e0a01" +checksum = "17d34b7d42178945f775e84bc4c36dde7c1c6cdfea656d3354d009056f2bb3d2" dependencies = [ - "ahash", - "hashbrown 0.14.5", + "hashbrown 0.15.2", ] [[package]] @@ -3104,7 +3112,7 @@ dependencies = [ "autocfg", "impl-tools-lib", "proc-macro-error2", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3116,7 +3124,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3370,7 +3378,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3537,7 +3545,7 @@ checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3567,9 +3575,9 @@ dependencies = [ [[package]] name = "miette" -version = "7.4.0" +version = "7.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317f146e2eb7021892722af37cf1b971f0a70c8406f487e24952667616192c64" +checksum = "1a955165f87b37fd1862df2a59547ac542c77ef6d17c666f619d1ad22dd89484" dependencies = [ "cfg-if", "miette-derive", @@ -3579,13 +3587,13 @@ dependencies = [ [[package]] name = "miette-derive" -version = "7.4.0" +version = "7.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23c9b935fbe1d6cbd1dac857b54a688145e2d93f48db36010514d0f612d0ad67" +checksum = "bf45bf44ab49be92fd1227a3be6fc6f617f1a337c06af54981048574d8783147" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3693,7 +3701,7 @@ dependencies = [ "path-absolutize", "petgraph", "pretty_assertions", - "rand", + "rand 0.9.0", "rayon", "regex", "reqwest", @@ -3782,7 +3790,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -3801,7 +3809,7 @@ dependencies = [ "hyper", "hyper-util", "log", - "rand", + "rand 0.8.5", "regex", "serde_json", "serde_urlencoded", @@ -4007,7 +4015,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -4190,7 +4198,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -4240,7 +4248,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ "phf_shared", - "rand", + "rand 0.8.5", ] [[package]] @@ -4269,7 +4277,7 @@ checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -4356,7 +4364,7 @@ version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -4412,7 +4420,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -4471,7 +4479,7 @@ checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", "getrandom 0.2.15", - "rand", + "rand 0.8.5", "ring", "rustc-hash 2.1.0", "rustls", @@ -4513,8 +4521,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.0", + "zerocopy 0.8.14", ] [[package]] @@ -4524,7 +4543,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.0", ] [[package]] @@ -4536,6 +4565,16 @@ dependencies = [ "getrandom 0.2.15", ] +[[package]] +name = "rand_core" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b08f3c9802962f7e1b25113931d94f43ed9725bebc59db9d0c3e9a23b67e15ff" +dependencies = [ + "getrandom 0.3.1", + "zerocopy 0.8.14", +] + [[package]] name = "rayon" version = "1.10.0" @@ -4733,7 +4772,7 @@ dependencies = [ "hex", "impl-tools", "indexmap 2.7.1", - "rand", + "rand 0.8.5", "regex", "serde", "serde_json", @@ -4779,7 +4818,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.96", + "syn 2.0.98", "walkdir", ] @@ -5087,7 +5126,7 @@ checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -5170,7 +5209,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -5208,7 +5247,7 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -5319,7 +5358,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -5434,7 +5473,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -5456,9 +5495,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.96" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -5482,7 +5521,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -5601,7 +5640,7 @@ dependencies = [ "percent-encoding", "pest", "pest_derive", - "rand", + "rand 0.8.5", "regex", "serde", "serde_json", @@ -5647,7 +5686,7 @@ checksum = "888d0c3c6db53c0fdab160d2ed5e12ba745383d3e85813f2ea0f2b1475ab553f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -5682,7 +5721,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -5693,7 +5732,7 @@ checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -5788,7 +5827,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -5913,7 +5952,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -6186,9 +6225,9 @@ checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" [[package]] name = "usage-lib" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbbaeb12c0a624b90c36daee220349c9084d0c7f619ba9fdb30825c84d14327d" +checksum = "57baf0038580e05341b56bffc4511cf6fff4cd80e825bd5ab936ade1b44cebfc" dependencies = [ "clap", "heck 0.5.0", @@ -6257,9 +6296,9 @@ dependencies = [ [[package]] name = "vfox" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d66bb0124101043f5195f7c0f1c62d7e7a159c06e0c1e9a583774b44cb28718" +checksum = "7a932a911ab6acdcb7d20c481cdbf7eea562ef209c6d1e13204c78a9549e58a3" dependencies = [ "homedir", "indexmap 2.7.1", @@ -6354,7 +6393,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "wasm-bindgen-shared", ] @@ -6389,7 +6428,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -6520,7 +6559,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -6531,7 +6570,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -6773,7 +6812,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" dependencies = [ "curve25519-dalek", - "rand_core", + "rand_core 0.6.4", "serde", "zeroize", ] @@ -6791,11 +6830,11 @@ dependencies = [ [[package]] name = "xx" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43e8a6586de03e05832a7e364b3b94fb86ae16bbaa881f3e7998c4e66c6b900f" +checksum = "660d7629bc5d128108fc09a32b5187442de98ba1ad9c4681c5381cf53733aa0d" dependencies = [ - "bzip2 0.4.4", + "bzip2 0.5.0", "duct", "filetime", "flate2", @@ -6848,7 +6887,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "synstructure", ] @@ -6859,7 +6898,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a367f292d93d4eab890745e75a778da40909cab4d6ff8173693812f79c4a2468" +dependencies = [ + "zerocopy-derive 0.8.14", ] [[package]] @@ -6870,7 +6918,18 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3931cb58c62c13adec22e38686b559c86a30565e16ad6e8510a337cedc611e1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] @@ -6890,7 +6949,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", "synstructure", ] @@ -6911,7 +6970,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -6933,7 +6992,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.98", ] [[package]] @@ -6956,7 +7015,7 @@ dependencies = [ "lzma-rs", "memchr", "pbkdf2", - "rand", + "rand 0.8.5", "sha1", "thiserror 2.0.11", "time", diff --git a/Cargo.toml b/Cargo.toml index 5c7a8aa649..96b3b318ea 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -96,7 +96,7 @@ openssl = { version = "0.10", optional = true } os-release = "0.1" path-absolutize = "3" petgraph = "0.7" -rand = "0.8" +rand = "0.9" rayon = "1" regex = "1" reqwest = { version = "0.12", default-features = false, features = [ diff --git a/deny.toml b/deny.toml index 9ccd28e5e8..87517bb061 100644 --- a/deny.toml +++ b/deny.toml @@ -100,6 +100,7 @@ allow = [ "MPL-2.0", "OpenSSL", "Unicode-3.0", + "Zlib", ] # The confidence threshold for detecting a license from license text. # The higher the value, the more closely the license text must be to the diff --git a/e2e/cli/test_ls b/e2e/cli/test_ls index 9e9823cef8..51367bea57 100644 --- a/e2e/cli/test_ls +++ b/e2e/cli/test_ls @@ -35,5 +35,4 @@ mise i cargo:usage-cli assert_contains "mise ls" "cargo:usage-cli" assert_not_contains "mise ls" "cargo-usage-cli" # if the backend meta file isn't working right these will be displayed -assert "mise ls --prunable" "cargo:usage-cli 2.0.3 -tiny 2.0.0" +assert_contains "mise ls --prunable" "cargo:usage-cli" diff --git a/mise.lock b/mise.lock index c45d303c80..21b03df7fe 100644 --- a/mise.lock +++ b/mise.lock @@ -7,31 +7,29 @@ backend = "aqua:rhysd/actionlint" "actionlint_1.7.7_linux_amd64.tar.gz" = "sha256:023070a287cd8cccd71515fedc843f1985bf96c436b7effaecce67290e7e0757" [tools.bun] -version = "1.1.44" +version = "1.2.2" backend = "core:bun" [tools.bun.checksums] -"bun-darwin-aarch64.zip" = "sha256:f192297d4570165efaf0ed0ff9939f70c554a639cc56cb7d56963948ea18502e" -"bun-linux-x64-baseline.zip" = "sha256:902f414cf6f83996fca2babb9386d30555529505c0d26d29a99030bb900905d3" +"bun-darwin-aarch64.zip" = "sha256:c4d58e06c5c33885b526f4d91a38ca9ebdb9fc3fb4cd547f7d3302055c98e41c" [tools.cargo-binstall] -version = "1.10.17" +version = "1.10.22" backend = "aqua:cargo-bins/cargo-binstall" [tools.cargo-binstall.checksums] -"cargo-binstall-aarch64-apple-darwin.zip" = "sha256:81abb7de75ef130844bb58965bdb93969afadd0821cf5e1e1bd0517e48963199" -"cargo-binstall-x86_64-unknown-linux-musl.tgz" = "sha256:d073d4e8901e176b0f625845f9a0bbd926a063017991d7cc0c863e6b884d2d59" +"cargo-binstall-aarch64-apple-darwin.zip" = "sha256:97ce4a2f18181f052dda266b042d8bb220e48ffe40ca75e796ae4c5e418b9e01" [tools."cargo:cargo-edit"] -version = "0.13.0" +version = "0.13.1" backend = "cargo:cargo-edit" [tools."cargo:cargo-insta"] -version = "1.42.0" +version = "1.42.1" backend = "cargo:cargo-insta" [tools."cargo:git-cliff"] -version = "2.7.0" +version = "2.8.0" backend = "cargo:git-cliff" [tools."cargo:toml-cli"] @@ -39,7 +37,7 @@ version = "0.2.3" backend = "cargo:toml-cli" [tools."cargo:usage-cli"] -version = "2.0.0" +version = "2.0.4" backend = "cargo:usage-cli" [tools.cosign] @@ -63,7 +61,7 @@ jq-macos-arm64 = "sha256:0bbe619e663e0de2c550be2fe0d240d076799d6f8a652b70fa04aea "jq-windows-amd64.exe" = "sha256:7451fbbf37feffb9bf262bd97c54f0da558c63f0748e64152dd87b0a07b6d6ab" [tools."npm:markdownlint-cli"] -version = "0.43.0" +version = "0.44.0" backend = "npm:markdownlint-cli" [tools."npm:prettier"] @@ -75,11 +73,11 @@ version = "0.24.2" backend = "pipx:toml-sort" [tools.pre-commit] -version = "4.0.1" +version = "4.1.0" backend = "aqua:pre-commit/pre-commit" [tools.pre-commit.checksums] -"pre-commit-4.0.1.pyz" = "sha256:f3e65c943795be7879e7ea2beda248321b6c8ae851dabc785522a432fb8ce003" +"pre-commit-4.1.0.pyz" = "sha256:df3ac88cb2d7825af90e887e1eafbdb85481b800541d86e4d437b37f8abf8a39" [tools.ripgrep] version = "14.1.1" diff --git a/mise.toml b/mise.toml index 0aa82cd578..320fdfee2b 100644 --- a/mise.toml +++ b/mise.toml @@ -6,8 +6,8 @@ _.path = ["./target/debug", "./node_modules/.bin"] [tools] "actionlint" = "latest" -bun = "1.1.44" -cargo-binstall = "1.10.17" +bun = "latest" +cargo-binstall = "latest" "cargo:cargo-edit" = "latest" "cargo:cargo-insta" = "latest" "cargo:git-cliff" = "latest" @@ -21,11 +21,11 @@ cosign = "latest" pre-commit = "latest" #"python" = { version = "latest", virtualenv = "{{env.HOME}}/.cache/venv" } "ripgrep" = "latest" -"shellcheck" = "0.10" -"shfmt" = "3" +"shellcheck" = "latest" +"shfmt" = "latest" slsa-verifier = "latest" taplo = "latest" -wait-for-gh-rate-limit = "0.1.8" +wait-for-gh-rate-limit = "latest" [task_config] includes = ["tasks.toml", "xtasks"] diff --git a/src/rand.rs b/src/rand.rs index b5b975ad1b..1309cc9c92 100644 --- a/src/rand.rs +++ b/src/rand.rs @@ -1,8 +1,8 @@ -use rand::distributions::Alphanumeric; +use rand::distr::Alphanumeric; use rand::Rng; pub fn random_string(length: usize) -> String { - rand::thread_rng() + rand::rng() .sample_iter(&Alphanumeric) .take(length) .map(char::from) diff --git a/src/tera.rs b/src/tera.rs index 7a220da1b2..9e8a025f00 100644 --- a/src/tera.rs +++ b/src/tera.rs @@ -5,8 +5,7 @@ use heck::{ ToKebabCase, ToLowerCamelCase, ToShoutyKebabCase, ToShoutySnakeCase, ToSnakeCase, ToUpperCamelCase, }; -use rand::seq::SliceRandom; -use rand::thread_rng; +use rand::prelude::*; use std::sync::LazyLock as Lazy; use tera::{Context, Tera, Value}; use versions::{Requirement, Versioning}; @@ -74,7 +73,7 @@ static TERA: Lazy = Lazy::new(|| { match args.get("alphabet") { Some(Value::String(alphabet)) => { let alphabet = alphabet.chars().collect::>(); - let mut rng = thread_rng(); + let mut rng = rand::rng(); let result = (0..n).map(|_| alphabet.choose(&mut rng).unwrap()).collect(); Ok(Value::String(result)) diff --git a/xtasks/release-plz b/xtasks/release-plz index ba361f3736..78c1d9d571 100755 --- a/xtasks/release-plz +++ b/xtasks/release-plz @@ -38,6 +38,7 @@ sed -i.bak "s/version = \"[0-9]\+\.[0-9]\+\.[0-9]\+\(-rc\.[0-9]\+\)\?\";$/versio mise run render ::: lint-fix +mise up cargo update git add \ Cargo.lock \ From 41c5ce4c6581f856bf0d756e3fe99ec2fae2e7bd Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sun, 2 Feb 2025 09:30:53 -0600 Subject: [PATCH 264/289] chore: do not run autofix on renovate PRs --- .github/workflows/autofix.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/autofix.yml b/.github/workflows/autofix.yml index 989284abe5..d98d171dca 100644 --- a/.github/workflows/autofix.yml +++ b/.github/workflows/autofix.yml @@ -3,6 +3,8 @@ name: autofix.ci on: workflow_call: pull_request: + branches-ignore: + - "renovate/*" permissions: contents: read From fa353cc94c291b473d662eb5d86f4b913b145c71 Mon Sep 17 00:00:00 2001 From: mise-en-dev Date: Sun, 2 Feb 2025 10:50:50 -0600 Subject: [PATCH 265/289] chore: release 2025.2.0 (#4279) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### ๐Ÿš€ Features - **(registry)** add kwokctl by [@mangkoran](https://github.com/mangkoran) in [#4282](https://github.com/jdx/mise/pull/4282) - add biome to registry by [@kit494way](https://github.com/kit494way) in [#4283](https://github.com/jdx/mise/pull/4283) - add gittool/gitversion by [@acesyde](https://github.com/acesyde) in [#4289](https://github.com/jdx/mise/pull/4289) ### ๐Ÿ“š Documentation - add filtering support to registry docs page by [@roele](https://github.com/roele) in [#4285](https://github.com/jdx/mise/pull/4285) - improve registry filtering performance by [@roele](https://github.com/roele) in [#4287](https://github.com/jdx/mise/pull/4287) - fix registry table rendering for mobile by [@roele](https://github.com/roele) in [#4288](https://github.com/jdx/mise/pull/4288) ### Chore - updated deps by [@jdx](https://github.com/jdx) in [#4290](https://github.com/jdx/mise/pull/4290) - do not run autofix on renovate PRs by [@jdx](https://github.com/jdx) in [41c5ce4](https://github.com/jdx/mise/commit/41c5ce4c6581f856bf0d756e3fe99ec2fae2e7bd) ### New Contributors - @ELLIOTTCABLE made their first contribution in [#4280](https://github.com/jdx/mise/pull/4280) --- CHANGELOG.md | 23 +++++++++++++++++++++++ Cargo.lock | 6 +++--- Cargo.toml | 2 +- README.md | 2 +- aqua-registry | 2 +- completions/_mise | 6 +++--- completions/mise.bash | 6 +++--- completions/mise.fish | 8 ++++---- default.nix | 2 +- packaging/rpm/mise.spec | 2 +- 10 files changed, 41 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c37957d25b..6759f4030c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,28 @@ # Changelog +## [2025.2.0](https://github.com/jdx/mise/compare/v2025.1.17..v2025.2.0) - 2025-02-02 + +### ๐Ÿš€ Features + +- **(registry)** add kwokctl by [@mangkoran](https://github.com/mangkoran) in [#4282](https://github.com/jdx/mise/pull/4282) +- add biome to registry by [@kit494way](https://github.com/kit494way) in [#4283](https://github.com/jdx/mise/pull/4283) +- add gittool/gitversion by [@acesyde](https://github.com/acesyde) in [#4289](https://github.com/jdx/mise/pull/4289) + +### ๐Ÿ“š Documentation + +- add filtering support to registry docs page by [@roele](https://github.com/roele) in [#4285](https://github.com/jdx/mise/pull/4285) +- improve registry filtering performance by [@roele](https://github.com/roele) in [#4287](https://github.com/jdx/mise/pull/4287) +- fix registry table rendering for mobile by [@roele](https://github.com/roele) in [#4288](https://github.com/jdx/mise/pull/4288) + +### Chore + +- updated deps by [@jdx](https://github.com/jdx) in [#4290](https://github.com/jdx/mise/pull/4290) +- do not run autofix on renovate PRs by [@jdx](https://github.com/jdx) in [41c5ce4](https://github.com/jdx/mise/commit/41c5ce4c6581f856bf0d756e3fe99ec2fae2e7bd) + +### New Contributors + +- @ELLIOTTCABLE made their first contribution in [#4280](https://github.com/jdx/mise/pull/4280) + ## [2025.1.17](https://github.com/jdx/mise/compare/v2025.1.16..v2025.1.17) - 2025-01-31 ### ๐Ÿš€ Features diff --git a/Cargo.lock b/Cargo.lock index 96bd36faf6..22cb0b0bd0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3281,9 +3281,9 @@ checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jiff" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c607c728e28764fecde611a2764a3a5db19ae21dcec46f292244f5cc5c085a81" +checksum = "c04ef77ae73f3cf50510712722f0c4e8b46f5aaa1bf5ffad2ae213e6495e78e5" dependencies = [ "jiff-tzdb-platform", "log", @@ -3645,7 +3645,7 @@ dependencies = [ [[package]] name = "mise" -version = "2025.1.17" +version = "2025.2.0" dependencies = [ "base64 0.22.1", "built", diff --git a/Cargo.toml b/Cargo.toml index 96b3b318ea..110916c61a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mise" -version = "2025.1.17" +version = "2025.2.0" edition = "2021" description = "The front-end to your dev env" authors = ["Jeff Dickey (@jdx)"] diff --git a/README.md b/README.md index 89e4fbef27..c0de037cf4 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Install mise (other methods [here](https://mise.jdx.dev/getting-started.html)): ```sh-session $ curl https://mise.run | sh $ ~/.local/bin/mise --version -2025.1.17 macos-arm64 (a1b2d3e 2025-01-31) +2025.2.0 macos-arm64 (a1b2d3e 2025-02-02) ``` or install a specific a version: diff --git a/aqua-registry b/aqua-registry index bed7e324ea..c005270de9 160000 --- a/aqua-registry +++ b/aqua-registry @@ -1 +1 @@ -Subproject commit bed7e324eaccf1827c1c3888dd233ad8cb369135 +Subproject commit c005270de9ee77c76e7ef7e8a427142f051d340c diff --git a/completions/_mise b/completions/_mise index 7719edc6a9..0f0978118c 100644 --- a/completions/_mise +++ b/completions/_mise @@ -27,11 +27,11 @@ _mise() { zstyle ":completion:${curcontext}:" cache-policy _usage_mise_cache_policy fi - if ( [[ -z "${_usage_spec_mise_2025_1_17:-}" ]] || _cache_invalid _usage_spec_mise_2025_1_17 ) \ - && ! _retrieve_cache _usage_spec_mise_2025_1_17; + if ( [[ -z "${_usage_spec_mise_2025_2_0:-}" ]] || _cache_invalid _usage_spec_mise_2025_2_0 ) \ + && ! _retrieve_cache _usage_spec_mise_2025_2_0; then spec="$(mise usage)" - _store_cache _usage_spec_mise_2025_1_17 spec + _store_cache _usage_spec_mise_2025_2_0 spec fi _arguments "*: :(($(usage complete-word --shell zsh -s "$spec" -- "${words[@]}" )))" diff --git a/completions/mise.bash b/completions/mise.bash index c0f73e140f..b56484d6e4 100644 --- a/completions/mise.bash +++ b/completions/mise.bash @@ -6,14 +6,14 @@ _mise() { return 1 fi - if [[ -z ${_usage_spec_mise_2025_1_17:-} ]]; then - _usage_spec_mise_2025_1_17="$(mise usage)" + if [[ -z ${_usage_spec_mise_2025_2_0:-} ]]; then + _usage_spec_mise_2025_2_0="$(mise usage)" fi local cur prev words cword was_split comp_args _comp_initialize -n : -- "$@" || return # shellcheck disable=SC2207 - _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2025_1_17}" --cword="$cword" -- "${words[@]}")" + _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2025_2_0}" --cword="$cword" -- "${words[@]}")" _comp_ltrim_colon_completions "$cur" # shellcheck disable=SC2181 if [[ $? -ne 0 ]]; then diff --git a/completions/mise.fish b/completions/mise.fish index 98128176ab..aa13e712cc 100644 --- a/completions/mise.fish +++ b/completions/mise.fish @@ -6,12 +6,12 @@ if ! command -v usage &> /dev/null return 1 end -if ! set -q _usage_spec_mise_2025_1_17 - set -g _usage_spec_mise_2025_1_17 (mise usage | string collect) +if ! set -q _usage_spec_mise_2025_2_0 + set -g _usage_spec_mise_2025_2_0 (mise usage | string collect) end set -l tokens if commandline -x >/dev/null 2>&1 - complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_1_17" -- (commandline -xpc) (commandline -t))' + complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_2_0" -- (commandline -xpc) (commandline -t))' else - complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_1_17" -- (commandline -opc) (commandline -t))' + complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_2_0" -- (commandline -opc) (commandline -t))' end diff --git a/default.nix b/default.nix index 32752baf33..15186111e7 100644 --- a/default.nix +++ b/default.nix @@ -2,7 +2,7 @@ rustPlatform.buildRustPackage { pname = "mise"; - version = "2025.1.17"; + version = "2025.2.0"; src = lib.cleanSource ./.; diff --git a/packaging/rpm/mise.spec b/packaging/rpm/mise.spec index cc88ad7f65..6f211d2905 100644 --- a/packaging/rpm/mise.spec +++ b/packaging/rpm/mise.spec @@ -1,6 +1,6 @@ Summary: The front-end to your dev env Name: mise -Version: 2025.1.17 +Version: 2025.2.0 Release: 1 URL: https://github.com/jdx/mise/ Group: System From e67c653de35ff83d4ee280bf5cb2381741a2108e Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Sun, 2 Feb 2025 13:47:00 -0600 Subject: [PATCH 266/289] chore: fix winget releaser job --- .github/workflows/winget.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/winget.yml b/.github/workflows/winget.yml index 423190970b..ee6d77f960 100644 --- a/.github/workflows/winget.yml +++ b/.github/workflows/winget.yml @@ -18,7 +18,6 @@ jobs: - run: git pull --rebase microsoft master - run: git push -f origin master - uses: vedantmgoyal9/winget-releaser@main - if: endsWith(github.event.payload.release.tag_name, '0') with: identifier: jdx.mise max-versions-to-keep: 5 From 11b600054af7bc7b56d34d40b0bc2fbdcb2a0cb6 Mon Sep 17 00:00:00 2001 From: mise-en-dev Date: Mon, 3 Feb 2025 05:24:41 -0600 Subject: [PATCH 267/289] chore: release 2025.2.1 (#4292) ### Chore - fix winget releaser job by [@jdx](https://github.com/jdx) in [e67c653](https://github.com/jdx/mise/commit/e67c653de35ff83d4ee280bf5cb2381741a2108e) --- CHANGELOG.md | 6 ++++++ Cargo.lock | 10 +++++----- Cargo.toml | 2 +- README.md | 2 +- aqua-registry | 2 +- completions/_mise | 6 +++--- completions/mise.bash | 6 +++--- completions/mise.fish | 8 ++++---- default.nix | 2 +- packaging/rpm/mise.spec | 2 +- 10 files changed, 26 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6759f4030c..ad78000235 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [2025.2.1](https://github.com/jdx/mise/compare/v2025.2.0..v2025.2.1) - 2025-02-03 + +### Chore + +- fix winget releaser job by [@jdx](https://github.com/jdx) in [e67c653](https://github.com/jdx/mise/commit/e67c653de35ff83d4ee280bf5cb2381741a2108e) + ## [2025.2.0](https://github.com/jdx/mise/compare/v2025.1.17..v2025.2.0) - 2025-02-02 ### ๐Ÿš€ Features diff --git a/Cargo.lock b/Cargo.lock index 22cb0b0bd0..afe059cc09 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3645,7 +3645,7 @@ dependencies = [ [[package]] name = "mise" -version = "2025.2.0" +version = "2025.2.1" dependencies = [ "base64 0.22.1", "built", @@ -3994,9 +3994,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.69" +version = "0.10.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e534d133a060a3c19daec1eb3e98ec6f4685978834f2dbadfe2ec215bab64e" +checksum = "61cfb4e166a8bb8c9b55c500bc2308550148ece889be90f609377e58140f42c6" dependencies = [ "bitflags", "cfg-if", @@ -4026,9 +4026,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.104" +version = "0.9.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +checksum = "8b22d5b84be05a8d6947c7cb71f7c849aa0f112acd4bf51c2a7c1c988ac0a9dc" dependencies = [ "cc", "libc", diff --git a/Cargo.toml b/Cargo.toml index 110916c61a..34461265e8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mise" -version = "2025.2.0" +version = "2025.2.1" edition = "2021" description = "The front-end to your dev env" authors = ["Jeff Dickey (@jdx)"] diff --git a/README.md b/README.md index c0de037cf4..fa2a679e18 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Install mise (other methods [here](https://mise.jdx.dev/getting-started.html)): ```sh-session $ curl https://mise.run | sh $ ~/.local/bin/mise --version -2025.2.0 macos-arm64 (a1b2d3e 2025-02-02) +2025.2.1 macos-arm64 (a1b2d3e 2025-02-03) ``` or install a specific a version: diff --git a/aqua-registry b/aqua-registry index c005270de9..5bcc70220d 160000 --- a/aqua-registry +++ b/aqua-registry @@ -1 +1 @@ -Subproject commit c005270de9ee77c76e7ef7e8a427142f051d340c +Subproject commit 5bcc70220d4477926384caab8b0d4d46f8d68b45 diff --git a/completions/_mise b/completions/_mise index 0f0978118c..37f06b6974 100644 --- a/completions/_mise +++ b/completions/_mise @@ -27,11 +27,11 @@ _mise() { zstyle ":completion:${curcontext}:" cache-policy _usage_mise_cache_policy fi - if ( [[ -z "${_usage_spec_mise_2025_2_0:-}" ]] || _cache_invalid _usage_spec_mise_2025_2_0 ) \ - && ! _retrieve_cache _usage_spec_mise_2025_2_0; + if ( [[ -z "${_usage_spec_mise_2025_2_1:-}" ]] || _cache_invalid _usage_spec_mise_2025_2_1 ) \ + && ! _retrieve_cache _usage_spec_mise_2025_2_1; then spec="$(mise usage)" - _store_cache _usage_spec_mise_2025_2_0 spec + _store_cache _usage_spec_mise_2025_2_1 spec fi _arguments "*: :(($(usage complete-word --shell zsh -s "$spec" -- "${words[@]}" )))" diff --git a/completions/mise.bash b/completions/mise.bash index b56484d6e4..595c1a3998 100644 --- a/completions/mise.bash +++ b/completions/mise.bash @@ -6,14 +6,14 @@ _mise() { return 1 fi - if [[ -z ${_usage_spec_mise_2025_2_0:-} ]]; then - _usage_spec_mise_2025_2_0="$(mise usage)" + if [[ -z ${_usage_spec_mise_2025_2_1:-} ]]; then + _usage_spec_mise_2025_2_1="$(mise usage)" fi local cur prev words cword was_split comp_args _comp_initialize -n : -- "$@" || return # shellcheck disable=SC2207 - _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2025_2_0}" --cword="$cword" -- "${words[@]}")" + _comp_compgen -- -W "$(usage complete-word --shell bash -s "${_usage_spec_mise_2025_2_1}" --cword="$cword" -- "${words[@]}")" _comp_ltrim_colon_completions "$cur" # shellcheck disable=SC2181 if [[ $? -ne 0 ]]; then diff --git a/completions/mise.fish b/completions/mise.fish index aa13e712cc..8aaade0999 100644 --- a/completions/mise.fish +++ b/completions/mise.fish @@ -6,12 +6,12 @@ if ! command -v usage &> /dev/null return 1 end -if ! set -q _usage_spec_mise_2025_2_0 - set -g _usage_spec_mise_2025_2_0 (mise usage | string collect) +if ! set -q _usage_spec_mise_2025_2_1 + set -g _usage_spec_mise_2025_2_1 (mise usage | string collect) end set -l tokens if commandline -x >/dev/null 2>&1 - complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_2_0" -- (commandline -xpc) (commandline -t))' + complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_2_1" -- (commandline -xpc) (commandline -t))' else - complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_2_0" -- (commandline -opc) (commandline -t))' + complete -xc mise -a '(usage complete-word --shell fish -s "$_usage_spec_mise_2025_2_1" -- (commandline -opc) (commandline -t))' end diff --git a/default.nix b/default.nix index 15186111e7..0358dec4fe 100644 --- a/default.nix +++ b/default.nix @@ -2,7 +2,7 @@ rustPlatform.buildRustPackage { pname = "mise"; - version = "2025.2.0"; + version = "2025.2.1"; src = lib.cleanSource ./.; diff --git a/packaging/rpm/mise.spec b/packaging/rpm/mise.spec index 6f211d2905..bf50c3b2b3 100644 --- a/packaging/rpm/mise.spec +++ b/packaging/rpm/mise.spec @@ -1,6 +1,6 @@ Summary: The front-end to your dev env Name: mise -Version: 2025.2.0 +Version: 2025.2.1 Release: 1 URL: https://github.com/jdx/mise/ Group: System From 67eb899d6ef306c25c83281ff9c750b7e377cff7 Mon Sep 17 00:00:00 2001 From: Joe Hanson Date: Mon, 3 Feb 2025 18:10:06 -0600 Subject: [PATCH 268/289] docs: Add PowerShell example (#3857) I added an example for PowerShell and profile location. Please let me know if you have any questions. --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: jdx <216188+jdx@users.noreply.github.com> --- docs/cli/activate.md | 3 ++- mise.usage.kdl | 4 ++-- src/cli/activate.rs | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/cli/activate.md b/docs/cli/activate.md index 866d35e282..2978709e23 100644 --- a/docs/cli/activate.md +++ b/docs/cli/activate.md @@ -7,7 +7,7 @@ Initializes mise in the current shell session This should go into your shell's rc file or login shell. Otherwise, it will only take effect in the current session. -(e.g. ~/.zshrc, ~/.zprofile, ~/.zshenv, ~/.bashrc, ~/.bash_profile, ~/.profile, ~/.config/fish/config.fish) +(e.g. ~/.zshrc, ~/.zprofile, ~/.zshenv, ~/.bashrc, ~/.bash_profile, ~/.profile, ~/.config/fish/config.fish, or $PROFILE for powershell) Typically, this can be added with something like the following: @@ -71,4 +71,5 @@ eval "$(mise activate bash)" eval "$(mise activate zsh)" mise activate fish | source execx($(mise activate xonsh)) +(&mise activate pwsh) | Out-String | Invoke-Expression ``` diff --git a/mise.usage.kdl b/mise.usage.kdl index bf83c9a2f2..985749b497 100644 --- a/mise.usage.kdl +++ b/mise.usage.kdl @@ -56,8 +56,8 @@ arg "[TASK]" help="Task to run" help_long="Task to run.\n\nShorthand for `mise t arg "[TASK_ARGS]..." help="Task arguments" required=#false var=#true hide=#true arg "[-- TASK_ARGS_LAST]..." required=#false var=#true hide=#true cmd activate help="Initializes mise in the current shell session" { - long_help "Initializes mise in the current shell session\n\nThis should go into your shell's rc file or login shell.\nOtherwise, it will only take effect in the current session.\n(e.g. ~/.zshrc, ~/.zprofile, ~/.zshenv, ~/.bashrc, ~/.bash_profile, ~/.profile, ~/.config/fish/config.fish)\n\nTypically, this can be added with something like the following:\n\n echo 'eval \"$(mise activate zsh)\"' >> ~/.zshrc\n\nHowever, this requires that \"mise\" is in your PATH. If it is not, you need to\nspecify the full path like this:\n\n echo 'eval \"$(/path/to/mise activate zsh)\"' >> ~/.zshrc\n\nCustomize status output with `status` settings." - after_long_help "Examples:\n\n $ eval \"$(mise activate bash)\"\n $ eval \"$(mise activate zsh)\"\n $ mise activate fish | source\n $ execx($(mise activate xonsh))\n" + long_help "Initializes mise in the current shell session\n\nThis should go into your shell's rc file or login shell.\nOtherwise, it will only take effect in the current session.\n(e.g. ~/.zshrc, ~/.zprofile, ~/.zshenv, ~/.bashrc, ~/.bash_profile, ~/.profile, ~/.config/fish/config.fish, or $PROFILE for powershell)\n\nTypically, this can be added with something like the following:\n\n echo 'eval \"$(mise activate zsh)\"' >> ~/.zshrc\n\nHowever, this requires that \"mise\" is in your PATH. If it is not, you need to\nspecify the full path like this:\n\n echo 'eval \"$(/path/to/mise activate zsh)\"' >> ~/.zshrc\n\nCustomize status output with `status` settings." + after_long_help "Examples:\n\n $ eval \"$(mise activate bash)\"\n $ eval \"$(mise activate zsh)\"\n $ mise activate fish | source\n $ execx($(mise activate xonsh))\n $ (&mise activate pwsh) | Out-String | Invoke-Expression\n" flag "-s --shell" help="Shell type to generate the script for" hide=#true { arg { choices bash elvish fish nu xonsh zsh pwsh diff --git a/src/cli/activate.rs b/src/cli/activate.rs index 5ff7acd5ef..244710242e 100644 --- a/src/cli/activate.rs +++ b/src/cli/activate.rs @@ -12,7 +12,7 @@ use itertools::Itertools; /// /// This should go into your shell's rc file or login shell. /// Otherwise, it will only take effect in the current session. -/// (e.g. ~/.zshrc, ~/.zprofile, ~/.zshenv, ~/.bashrc, ~/.bash_profile, ~/.profile, ~/.config/fish/config.fish) +/// (e.g. ~/.zshrc, ~/.zprofile, ~/.zshenv, ~/.bashrc, ~/.bash_profile, ~/.profile, ~/.config/fish/config.fish, or $PROFILE for powershell) /// /// Typically, this can be added with something like the following: /// @@ -161,5 +161,6 @@ static AFTER_LONG_HELP: &str = color_print::cstr!( $ eval "$(mise activate zsh)" $ mise activate fish | source $ execx($(mise activate xonsh)) + $ (&mise activate pwsh) | Out-String | Invoke-Expression "# ); From c032db2493e458d8593d70d8eea9ec56d5cab18b Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 5 Feb 2025 09:57:15 -0600 Subject: [PATCH 269/289] Update registry.toml --- registry.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/registry.toml b/registry.toml index cfa0abf927..314f4c3841 100644 --- a/registry.toml +++ b/registry.toml @@ -646,7 +646,7 @@ fluttergen.backends = [ "asdf:FlutterGen/asdf-fluttergen" ] fluttergen.os = ["linux", "macos"] -fluttergen.test = ["fluttergen --version", "FlutterGen v{{version}}"] +fluttergen.test = ["fluttergen --version", "v{{version}}"] flux2.backends = ["aqua:fluxcd/flux2", "asdf:tablexi/asdf-flux2"] flux2.test = ["flux --version", "flux version {{version}}"] fly.backends = [ From 842d051e22ee0bb317da0a0e86969cf3b9c1daca Mon Sep 17 00:00:00 2001 From: Roland Schaer Date: Wed, 5 Feb 2025 16:28:00 -0300 Subject: [PATCH 270/289] feat: add support for idiomatic go.mod file (#4312) Fix for discussion #4136 --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: jdx <216188+jdx@users.noreply.github.com> --- mise.lock | 2 ++ src/plugins/core/go.rs | 49 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/mise.lock b/mise.lock index 21b03df7fe..1ab8ea7d17 100644 --- a/mise.lock +++ b/mise.lock @@ -12,6 +12,7 @@ backend = "core:bun" [tools.bun.checksums] "bun-darwin-aarch64.zip" = "sha256:c4d58e06c5c33885b526f4d91a38ca9ebdb9fc3fb4cd547f7d3302055c98e41c" +"bun-linux-x64-baseline.zip" = "sha256:cad7756a6ee16f3432a328f8023fc5cd431106822eacfa6d6d3afbad6fdc24db" [tools.cargo-binstall] version = "1.10.22" @@ -19,6 +20,7 @@ backend = "aqua:cargo-bins/cargo-binstall" [tools.cargo-binstall.checksums] "cargo-binstall-aarch64-apple-darwin.zip" = "sha256:97ce4a2f18181f052dda266b042d8bb220e48ffe40ca75e796ae4c5e418b9e01" +"cargo-binstall-x86_64-unknown-linux-musl.tgz" = "sha256:74d7c647c7e60bb8464fa551702fdd38a7241f5cedb2c4edc3b11639cd1dae47" [tools."cargo:cargo-edit"] version = "0.13.1" diff --git a/src/plugins/core/go.rs b/src/plugins/core/go.rs index 91cd23b1ed..250c529660 100644 --- a/src/plugins/core/go.rs +++ b/src/plugins/core/go.rs @@ -194,7 +194,19 @@ impl Backend for GoPlugin { }) } fn idiomatic_filenames(&self) -> eyre::Result> { - Ok(vec![".go-version".into()]) + Ok(vec![".go-version".into(), "go.mod".into()]) + } + + fn parse_idiomatic_file(&self, path: &Path) -> eyre::Result { + let v = match path.file_name() { + Some(name) if name == "go.mod" => parse_gomod_file(&file::read_to_string(path)?), + _ => { + // .go-version + let body = file::read_to_string(path)?; + body.trim().trim_start_matches('v').to_string() + } + }; + Ok(v) } fn install_version_( @@ -240,6 +252,19 @@ impl Backend for GoPlugin { } } +fn parse_gomod_file(body: &str) -> String { + let v = body + .lines() + .find(|line| line.trim().starts_with("go ")) + .unwrap_or_default(); + let v = regex!(r#"^[^0-9]*"#).replace_all(v, "").trim().to_string(); + // make sure it's like 1.23.0 + if !regex!(r"^([0-9.])*$").is_match(&v) { + return "".to_string(); + } + v +} + fn platform() -> &'static str { if cfg!(target_os = "macos") { "darwin" @@ -268,3 +293,25 @@ fn ext() -> &'static str { "tar.gz" } } + +#[cfg(test)] +mod tests { + use super::*; + use indoc::indoc; + + #[test] + fn test_parse_gomod_file() { + assert_eq!( + parse_gomod_file(indoc! {r#"module example.com/mymodule + go 1.14 + require ( + example.com/othermodule v1.2.3 + example.com/thismodule v1.2.3 + example.com/thatmodule v1.2.3 + ) + replace example.com/thatmodule => ../thatmodule + exclude example.com/thismodule v1.3.0"#}), + "1.14" + ); + } +} From ded48ca6fbdd49e1737e80f76b45ba97db3f369a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Thu, 6 Feb 2025 12:42:09 -0100 Subject: [PATCH 271/289] refactor(registry): use aqua for yq (#4326) --- registry.toml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/registry.toml b/registry.toml index 314f4c3841..02fc1a0021 100644 --- a/registry.toml +++ b/registry.toml @@ -1870,7 +1870,12 @@ yazi.test = [ yj.backends = ["ubi:sclevine/yj", "asdf:ryodocx/asdf-yj"] yor.backends = ["aqua:bridgecrewio/yor", "asdf:ordinaryexperts/asdf-yor"] youtube-dl.backends = ["asdf:mise-plugins/mise-youtube-dl"] -yq.backends = ["ubi:mikefarah/yq", "asdf:sudermanjr/asdf-yq"] +yq.backends = [ + "aqua:mikefarah/yq", + "ubi:mikefarah/yq", + "asdf:sudermanjr/asdf-yq" +] +yq.test = ["yq --version", "version v{{version}}"] yt-dlp.backends = ["ubi:yt-dlp/yt-dlp", "asdf:duhow/asdf-yt-dlp"] ytt.backends = ["aqua:carvel-dev/ytt", "asdf:vmware-tanzu/asdf-carvel"] zbctl.backends = ["asdf:mise-plugins/mise-zbctl"] From 62f4ca0d42efb89482defe629c0b5c7a4663ae6d Mon Sep 17 00:00:00 2001 From: Risu <79110363+risu729@users.noreply.github.com> Date: Fri, 7 Feb 2025 01:54:12 +1100 Subject: [PATCH 272/289] docs(schema): fix description of task.dir default (#4324) Resolves #4323. Since the default is explained by `default` property, just remove it from the `description`. --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- schema/mise-task.json | 2 +- schema/mise.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/schema/mise-task.json b/schema/mise-task.json index 650dcc5172..819413872c 100644 --- a/schema/mise-task.json +++ b/schema/mise-task.json @@ -91,7 +91,7 @@ }, "dir": { "default": "{{ config_root }}", - "description": "directory to run script in, default is current working directory", + "description": "directory to run script in, default is the project's base directory", "type": "string" }, "env": { diff --git a/schema/mise.json b/schema/mise.json index 7e3867abe0..40888cfa20 100644 --- a/schema/mise.json +++ b/schema/mise.json @@ -1066,7 +1066,7 @@ }, "dir": { "default": "{{ config_root }}", - "description": "directory to run script in, default is current working directory", + "description": "directory to run script in, default is the project's base directory", "type": "string" }, "env": { From c1f69f47828423fed99c6e8bcd0d4e6f1301bde5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Pi=C3=B1era=20Buend=C3=ADa?= <663605+pepicrft@users.noreply.github.com> Date: Thu, 6 Feb 2025 18:38:48 +0100 Subject: [PATCH 273/289] docs: Include "A Mise guide for Swift developers" (#4329) We recently wrote a guide for Swift developers interested in using Mise, so I added a link to that resource to this page. --- docs/external-resources.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/external-resources.md b/docs/external-resources.md index e41f2aec42..be94c91148 100644 --- a/docs/external-resources.md +++ b/docs/external-resources.md @@ -2,6 +2,7 @@ Links to articles, videos, and other resources that are relevant to mise. +- 2025-02-04 - A Mise guide for Swift developers - - 2025-01-26 - devtools.fm: Jeff Dickey - Mise, Usage, and Pitchfork and the Future of Polyglot Tools - - 2025-01-12 - [fr] Mise-En-Place: Simplifiez la Gestion de vos Environnements et Tรขches โ€“ - 2024-11-20 - Migrating from nvm to mise - From e11027aa24953fc800eff7d7a7118e0cf6cda04c Mon Sep 17 00:00:00 2001 From: Kim Le Date: Thu, 6 Feb 2025 21:44:42 +0200 Subject: [PATCH 274/289] feat: add -g short version for unuse cmd (#4330) For consistency with the inverse command 'use'. --- docs/cli/index.md | 2 +- docs/cli/unuse.md | 9 ++++++--- mise.usage.kdl | 4 ++-- src/cli/unuse.rs | 7 +++++-- xtasks/fig/src/mise.ts | 2 +- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/docs/cli/index.md b/docs/cli/index.md index 8a4da016e3..a4954122e1 100644 --- a/docs/cli/index.md +++ b/docs/cli/index.md @@ -134,7 +134,7 @@ Can also use `MISE_NO_CONFIG=1` - [`mise trust [FLAGS] [CONFIG_FILE]`](/cli/trust.md) - [`mise uninstall [-a --all] [-n --dry-run] [INSTALLED_TOOL@VERSION]...`](/cli/uninstall.md) - [`mise unset [-f --file ] [-g --global] [ENV_KEY]...`](/cli/unset.md) -- [`mise unuse [--no-prune] [--global] ...`](/cli/unuse.md) +- [`mise unuse [--no-prune] [-g --global] ...`](/cli/unuse.md) - [`mise upgrade [FLAGS] [TOOL@VERSION]...`](/cli/upgrade.md) - [`mise use [FLAGS] [TOOL@VERSION]...`](/cli/use.md) - [`mise version [-J --json]`](/cli/version.md) diff --git a/docs/cli/unuse.md b/docs/cli/unuse.md index 67a5456297..dd05727830 100644 --- a/docs/cli/unuse.md +++ b/docs/cli/unuse.md @@ -1,6 +1,6 @@ # `mise unuse` -- **Usage**: `mise unuse [--no-prune] [--global] ...` +- **Usage**: `mise unuse [--no-prune] [-g --global] ...` - **Aliases**: `rm`, `remove` - **Source code**: [`src/cli/unuse.rs`](https://github.com/jdx/mise/blob/main/src/cli/unuse.rs) @@ -20,7 +20,7 @@ Tool(s) to remove Do not also prune the installed version -### `--global` +### `-g --global` Remove tool from global config @@ -28,5 +28,8 @@ Examples: ``` # will uninstall specific version -$ mise remove node@18.0.0 +$ mise unuse node@18.0.0 + +# will uninstall specific version from global config +$ mise unuse -g node@18.0.0 ``` diff --git a/mise.usage.kdl b/mise.usage.kdl index 985749b497..3d210e6902 100644 --- a/mise.usage.kdl +++ b/mise.usage.kdl @@ -903,9 +903,9 @@ cmd unset help="Remove environment variable(s) from the config file." { cmd unuse help="Removes installed tool versions from mise.toml" { alias rm remove long_help "Removes installed tool versions from mise.toml\n\nWill also prune the installed version if no other configurations are using it." - after_long_help "Examples:\n\n # will uninstall specific version\n $ mise remove node@18.0.0\n" + after_long_help "Examples:\n\n # will uninstall specific version\n $ mise unuse node@18.0.0\n\n # will uninstall specific version from global config\n $ mise unuse -g node@18.0.0\n" flag --no-prune help="Do not also prune the installed version" - flag --global help="Remove tool from global config" + flag "-g --global" help="Remove tool from global config" arg ... help="Tool(s) to remove" var=#true } cmd upgrade help="Upgrades outdated tools" { diff --git a/src/cli/unuse.rs b/src/cli/unuse.rs index 488b201af0..33918f2e57 100644 --- a/src/cli/unuse.rs +++ b/src/cli/unuse.rs @@ -23,7 +23,7 @@ pub struct Unuse { no_prune: bool, /// Remove tool from global config - #[clap(long)] + #[clap(short, long)] global: bool, } @@ -81,6 +81,9 @@ static AFTER_LONG_HELP: &str = color_print::cstr!( r#"Examples: # will uninstall specific version - $ mise remove node@18.0.0 + $ mise unuse node@18.0.0 + + # will uninstall specific version from global config + $ mise unuse -g node@18.0.0 "# ); diff --git a/xtasks/fig/src/mise.ts b/xtasks/fig/src/mise.ts index 30c0904e6d..c83f6973e7 100644 --- a/xtasks/fig/src/mise.ts +++ b/xtasks/fig/src/mise.ts @@ -2673,7 +2673,7 @@ const completionSpec: Fig.Spec = { isRepeatable: false, }, { - name: "--global", + name: ["-g", "--global"], description: "Remove tool from global config", isRepeatable: false, }, From ebfe0dabd5789a843206c0f13a380cf27f33dde8 Mon Sep 17 00:00:00 2001 From: Risu <79110363+risu729@users.noreply.github.com> Date: Fri, 7 Feb 2025 22:27:40 +1100 Subject: [PATCH 275/289] chore(bun.lock): migrate bun lockfiles to text-based (#4319) Use the text-based lockfiles of Bun. https://bun.sh/blog/bun-v1.2#bun-is-a-package-manager --- .prettierignore | 1 - bun.lock | 527 ++++++++++++++++++++++++++++++++++++++++++++++++ bun.lockb | Bin 86960 -> 0 bytes docs/bun.lock | 429 +++++++++++++++++++++++++++++++++++++++ docs/bun.lockb | Bin 86577 -> 0 bytes 5 files changed, 956 insertions(+), 1 deletion(-) create mode 100644 bun.lock delete mode 100755 bun.lockb create mode 100644 docs/bun.lock delete mode 100755 docs/bun.lockb diff --git a/.prettierignore b/.prettierignore index 1a2b68a8d2..7dbb98ad58 100644 --- a/.prettierignore +++ b/.prettierignore @@ -5,7 +5,6 @@ *.gif *.png *.lock -*.lockb .cliffignore *.kdl CHANGELOG.md diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000000..c82d2651fc --- /dev/null +++ b/bun.lock @@ -0,0 +1,527 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "mise", + "dependencies": { + "@types/node": "^22.7.5", + }, + "devDependencies": { + "@fig/eslint-config-autocomplete": "^2.0.0", + "@tsconfig/node18": "^18.2.4", + "@withfig/autocomplete-tools": "^2.10.0", + "@withfig/autocomplete-types": "^1.31.0", + "eslint": "^8.57.0", + "toml": "^3.0.0", + "ts-pattern": "^5.4.0", + "tsx": "^4.19.1", + "typescript": "^5.6.3", + }, + }, + }, + "packages": { + "@esbuild-plugins/node-modules-polyfill": ["@esbuild-plugins/node-modules-polyfill@0.2.2", "", { "dependencies": { "escape-string-regexp": "^4.0.0", "rollup-plugin-node-polyfills": "^0.2.1" }, "peerDependencies": { "esbuild": "*" } }, "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.24.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.24.2", "", { "os": "android", "cpu": "arm" }, "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.24.2", "", { "os": "android", "cpu": "arm64" }, "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.24.2", "", { "os": "android", "cpu": "x64" }, "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.24.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.24.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.24.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.24.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.24.2", "", { "os": "linux", "cpu": "arm" }, "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.24.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.24.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.24.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.24.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.24.2", "", { "os": "linux", "cpu": "x64" }, "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.24.2", "", { "os": "none", "cpu": "arm64" }, "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.24.2", "", { "os": "none", "cpu": "x64" }, "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.24.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.24.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.24.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.24.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.24.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.24.2", "", { "os": "win32", "cpu": "x64" }, "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg=="], + + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.4.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA=="], + + "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="], + + "@eslint/eslintrc": ["@eslint/eslintrc@2.1.4", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ=="], + + "@eslint/js": ["@eslint/js@8.57.1", "", {}, "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q=="], + + "@fig/autocomplete-helpers": ["@fig/autocomplete-helpers@2.0.0", "", { "dependencies": { "semver": "^7.6.3" } }, "sha512-lzD9LbpvJC3hXwxvLAb91/AwO83lfIhW4dEITAn1wINKHaHOmP39wU82Q25bKp8A6/UMcF6Iobik/R4sUZmgNA=="], + + "@fig/autocomplete-merge": ["@fig/autocomplete-merge@1.4.0", "", { "dependencies": { "prettier": "^3.2.5", "ts-morph": "^22.0.0", "typescript": "^5.4.5" } }, "sha512-weliQ2zkegh0EnozRJNecLgnI5wxwikKZKGRIGgTjlrPyKyd8xSqls+kf5kYm3vEeABS2P19LawVS6ECH8ae9A=="], + + "@fig/eslint-config-autocomplete": ["@fig/eslint-config-autocomplete@2.0.0", "", { "peerDependencies": { "@typescript-eslint/eslint-plugin": "^7.0.0", "@typescript-eslint/parser": "^7.0.0", "@withfig/eslint-plugin-fig-linter": "^1.4.1", "eslint": "^8.56.0", "eslint-plugin-compat": "^4.2.0", "typescript": ">=4.7.4" } }, "sha512-khv0JuMnkWeBh18wuvvAAbf42YSJ2obbu9Y6/C5F3IcKchZHSZ8QZvXC71l9VtVv0Zu2b5VIJBPYxt4DkDpz8g=="], + + "@humanwhocodes/config-array": ["@humanwhocodes/config-array@0.13.0", "", { "dependencies": { "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" } }, "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw=="], + + "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], + + "@humanwhocodes/object-schema": ["@humanwhocodes/object-schema@2.0.3", "", {}, "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA=="], + + "@mdn/browser-compat-data": ["@mdn/browser-compat-data@5.6.36", "", {}, "sha512-UhTBGnR9L8x1hpCA/VlVxwY8CXfyWPoTDAlWz5n1iwJxDaiqA0XkTfi5p6FuHMHE/EuUUtfiSIu14nzQUtJPDg=="], + + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + + "@ts-morph/common": ["@ts-morph/common@0.23.0", "", { "dependencies": { "fast-glob": "^3.3.2", "minimatch": "^9.0.3", "mkdirp": "^3.0.1", "path-browserify": "^1.0.1" } }, "sha512-m7Lllj9n/S6sOkCkRftpM7L24uvmfXQFedlW/4hENcuJH1HHm9u5EgxZb9uVjQSCGrbBWBkOGgcTxNg36r6ywA=="], + + "@tsconfig/node18": ["@tsconfig/node18@18.2.4", "", {}, "sha512-5xxU8vVs9/FNcvm3gE07fPbn9tl6tqGGWA9tSlwsUEkBxtRnTsNmwrV8gasZ9F/EobaSv9+nu8AxUKccw77JpQ=="], + + "@types/node": ["@types/node@22.13.1", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew=="], + + "@types/semver": ["@types/semver@7.5.8", "", {}, "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ=="], + + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@7.18.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "7.18.0", "@typescript-eslint/type-utils": "7.18.0", "@typescript-eslint/utils": "7.18.0", "@typescript-eslint/visitor-keys": "7.18.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", "ts-api-utils": "^1.3.0" }, "peerDependencies": { "@typescript-eslint/parser": "^7.0.0", "eslint": "^8.56.0" } }, "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw=="], + + "@typescript-eslint/parser": ["@typescript-eslint/parser@7.18.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "7.18.0", "@typescript-eslint/types": "7.18.0", "@typescript-eslint/typescript-estree": "7.18.0", "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.56.0" } }, "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg=="], + + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@7.18.0", "", { "dependencies": { "@typescript-eslint/types": "7.18.0", "@typescript-eslint/visitor-keys": "7.18.0" } }, "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA=="], + + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@7.18.0", "", { "dependencies": { "@typescript-eslint/typescript-estree": "7.18.0", "@typescript-eslint/utils": "7.18.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, "peerDependencies": { "eslint": "^8.56.0" } }, "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA=="], + + "@typescript-eslint/types": ["@typescript-eslint/types@7.18.0", "", {}, "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ=="], + + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@7.18.0", "", { "dependencies": { "@typescript-eslint/types": "7.18.0", "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^1.3.0" } }, "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA=="], + + "@typescript-eslint/utils": ["@typescript-eslint/utils@7.18.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "7.18.0", "@typescript-eslint/types": "7.18.0", "@typescript-eslint/typescript-estree": "7.18.0" }, "peerDependencies": { "eslint": "^8.56.0" } }, "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw=="], + + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@7.18.0", "", { "dependencies": { "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" } }, "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg=="], + + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + + "@withfig/autocomplete-tools": ["@withfig/autocomplete-tools@2.11.0", "", { "dependencies": { "@esbuild-plugins/node-modules-polyfill": "^0.2.2", "@fig/autocomplete-helpers": "^2.0.0", "@fig/autocomplete-merge": "^1.4.0", "@types/semver": "^7.5.8", "chalk": "^5.4.1", "chokidar": "^4.0.1", "commander": "^13.0.0", "create-completion-spec": "^1.1.9", "esbuild": "^0.24.2", "fast-glob": "^3.3.2", "module-from-string": "^3.3.1", "prettier": "^3.3.3", "semver": "^7.6.3", "typescript": "^5.5.4" }, "bin": { "autocomplete-tools": "build/bin.js" } }, "sha512-2OzgRGfYnPmahMQAj4XmF/9H5fELUcMOvLnEO1GS6xdRe0QicEjKR0EQU3RHRei4/ST+GK0cfmnE/sAd1W60bw=="], + + "@withfig/autocomplete-types": ["@withfig/autocomplete-types@1.31.0", "", {}, "sha512-TSZDo5jvEaeIHqmHY6Wkd3gBqVbxcHQVdkF6N1J8CXRBuQZpjUVci15/HPNYe0nKLvsomBWIRsTP3m1zr9pv3A=="], + + "@withfig/eslint-plugin-fig-linter": ["@withfig/eslint-plugin-fig-linter@1.4.1", "", {}, "sha512-kzPzug7K45U4IztBm4IeeGLPrP9WR3mzdCFFk9V3gQf/35s1IB+nLPAxGP1oZmFCXHBOyjIp0SrfbJ6Bo0g9qQ=="], + + "acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], + + "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], + + "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], + + "ast-metadata-inferer": ["ast-metadata-inferer@0.8.1", "", { "dependencies": { "@mdn/browser-compat-data": "^5.6.19" } }, "sha512-ht3Dm6Zr7SXv6t1Ra6gFo0+kLDglHGrEbYihTkcycrbHw7WCcuhBzPlJYHEsIpycaUwzsJHje+vUcxXUX4ztTA=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "browserslist": ["browserslist@4.24.4", "", { "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" } }, "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A=="], + + "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + + "caniuse-lite": ["caniuse-lite@1.0.30001697", "", {}, "sha512-GwNPlWJin8E+d7Gxq96jxM6w0w+VFeyyXRsjU58emtkYqnbwHqXm5uT2uCmO0RQE9htWknOP4xtBlLmM/gWxvQ=="], + + "chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], + + "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], + + "code-block-writer": ["code-block-writer@13.0.3", "", {}, "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "commander": ["commander@13.1.0", "", {}, "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "create-completion-spec": ["create-completion-spec@1.1.9", "", { "dependencies": { "commander": "^9.2.0", "picocolors": "^1.0.0" }, "bin": "lib/bin.js" }, "sha512-hWPlHXcExGuz+oW3kiyHwpeckY4i8XWulRwpImtRrc2W4kEH9UzaSC3HF3jNXeN3krFH0evMJswtcwxYf32QEg=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], + + "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], + + "doctrine": ["doctrine@3.0.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="], + + "electron-to-chromium": ["electron-to-chromium@1.5.93", "", {}, "sha512-M+29jTcfNNoR9NV7la4SwUqzWAxEwnc7ThA5e1m6LRSotmpfpCpLcIfgtSCVL+MllNLgAyM/5ru86iMRemPzDQ=="], + + "esbuild": ["esbuild@0.24.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.24.2", "@esbuild/android-arm": "0.24.2", "@esbuild/android-arm64": "0.24.2", "@esbuild/android-x64": "0.24.2", "@esbuild/darwin-arm64": "0.24.2", "@esbuild/darwin-x64": "0.24.2", "@esbuild/freebsd-arm64": "0.24.2", "@esbuild/freebsd-x64": "0.24.2", "@esbuild/linux-arm": "0.24.2", "@esbuild/linux-arm64": "0.24.2", "@esbuild/linux-ia32": "0.24.2", "@esbuild/linux-loong64": "0.24.2", "@esbuild/linux-mips64el": "0.24.2", "@esbuild/linux-ppc64": "0.24.2", "@esbuild/linux-riscv64": "0.24.2", "@esbuild/linux-s390x": "0.24.2", "@esbuild/linux-x64": "0.24.2", "@esbuild/netbsd-arm64": "0.24.2", "@esbuild/netbsd-x64": "0.24.2", "@esbuild/openbsd-arm64": "0.24.2", "@esbuild/openbsd-x64": "0.24.2", "@esbuild/sunos-x64": "0.24.2", "@esbuild/win32-arm64": "0.24.2", "@esbuild/win32-ia32": "0.24.2", "@esbuild/win32-x64": "0.24.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + + "eslint": ["eslint@8.57.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", "@eslint/js": "8.57.1", "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" } }, "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA=="], + + "eslint-plugin-compat": ["eslint-plugin-compat@4.2.0", "", { "dependencies": { "@mdn/browser-compat-data": "^5.3.13", "ast-metadata-inferer": "^0.8.0", "browserslist": "^4.21.10", "caniuse-lite": "^1.0.30001524", "find-up": "^5.0.0", "lodash.memoize": "^4.1.2", "semver": "^7.5.4" }, "peerDependencies": { "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w=="], + + "eslint-scope": ["eslint-scope@7.2.2", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg=="], + + "eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + + "espree": ["espree@9.6.1", "", { "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ=="], + + "esquery": ["esquery@1.6.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg=="], + + "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], + + "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + + "estree-walker": ["estree-walker@0.6.1", "", {}, "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w=="], + + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + + "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + + "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], + + "fastq": ["fastq@1.19.0", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA=="], + + "file-entry-cache": ["file-entry-cache@6.0.1", "", { "dependencies": { "flat-cache": "^3.0.4" } }, "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="], + + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + + "flat-cache": ["flat-cache@3.2.0", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw=="], + + "flatted": ["flatted@3.3.2", "", {}, "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA=="], + + "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "get-tsconfig": ["get-tsconfig@4.10.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A=="], + + "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + + "globals": ["globals@13.24.0", "", { "dependencies": { "type-fest": "^0.20.2" } }, "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ=="], + + "globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], + + "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], + + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-path-inside": ["is-path-inside@3.0.3", "", {}, "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], + + "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], + + "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + + "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], + + "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], + + "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], + + "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + + "lodash.memoize": ["lodash.memoize@4.1.2", "", {}, "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="], + + "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], + + "magic-string": ["magic-string@0.25.9", "", { "dependencies": { "sourcemap-codec": "^1.4.8" } }, "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="], + + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], + + "module-from-string": ["module-from-string@3.3.1", "", { "dependencies": { "esbuild": "^0.23.0", "nanoid": "^3.3.7" } }, "sha512-nFdOQ8NHJXR7ITj2JAwjpPSgX3vjbG2LfBL1YA5gil8sLkFTFa5pmV9P1NBGRik65u+NNyGEeUMcwkbqwPJ/ew=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "nanoid": ["nanoid@3.3.8", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w=="], + + "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + + "node-releases": ["node-releases@2.0.19", "", {}, "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], + + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], + + "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], + + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], + + "prettier": ["prettier@3.4.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ=="], + + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + + "readdirp": ["readdirp@4.1.1", "", {}, "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw=="], + + "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + + "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], + + "reusify": ["reusify@1.0.4", "", {}, "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="], + + "rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], + + "rollup-plugin-inject": ["rollup-plugin-inject@3.0.2", "", { "dependencies": { "estree-walker": "^0.6.1", "magic-string": "^0.25.3", "rollup-pluginutils": "^2.8.1" } }, "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w=="], + + "rollup-plugin-node-polyfills": ["rollup-plugin-node-polyfills@0.2.1", "", { "dependencies": { "rollup-plugin-inject": "^3.0.0" } }, "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA=="], + + "rollup-pluginutils": ["rollup-pluginutils@2.8.2", "", { "dependencies": { "estree-walker": "^0.6.1" } }, "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ=="], + + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + + "semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], + + "sourcemap-codec": ["sourcemap-codec@1.4.8", "", {}, "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="], + + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "text-table": ["text-table@0.2.0", "", {}, "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "toml": ["toml@3.0.0", "", {}, "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w=="], + + "ts-api-utils": ["ts-api-utils@1.4.3", "", { "peerDependencies": { "typescript": ">=4.2.0" } }, "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw=="], + + "ts-morph": ["ts-morph@22.0.0", "", { "dependencies": { "@ts-morph/common": "~0.23.0", "code-block-writer": "^13.0.1" } }, "sha512-M9MqFGZREyeb5fTl6gNHKZLqBQA0TjA1lea+CR48R8EBTDuWrNqW6ccC5QvjNR4s6wDumD3LTCjOFSp9iwlzaw=="], + + "ts-pattern": ["ts-pattern@5.6.2", "", {}, "sha512-d4IxJUXROL5NCa3amvMg6VQW2HVtZYmUTPfvVtO7zJWGYLJ+mry9v2OmYm+z67aniQoQ8/yFNadiEwtNS9qQiw=="], + + "tsx": ["tsx@4.19.2", "", { "dependencies": { "esbuild": "~0.23.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g=="], + + "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], + + "type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="], + + "typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="], + + "undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "update-browserslist-db": ["update-browserslist-db@1.1.2", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg=="], + + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + + "@ts-morph/common/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "create-completion-spec/commander": ["commander@9.5.0", "", {}, "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="], + + "eslint/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "module-from-string/esbuild": ["esbuild@0.23.1", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.23.1", "@esbuild/android-arm": "0.23.1", "@esbuild/android-arm64": "0.23.1", "@esbuild/android-x64": "0.23.1", "@esbuild/darwin-arm64": "0.23.1", "@esbuild/darwin-x64": "0.23.1", "@esbuild/freebsd-arm64": "0.23.1", "@esbuild/freebsd-x64": "0.23.1", "@esbuild/linux-arm": "0.23.1", "@esbuild/linux-arm64": "0.23.1", "@esbuild/linux-ia32": "0.23.1", "@esbuild/linux-loong64": "0.23.1", "@esbuild/linux-mips64el": "0.23.1", "@esbuild/linux-ppc64": "0.23.1", "@esbuild/linux-riscv64": "0.23.1", "@esbuild/linux-s390x": "0.23.1", "@esbuild/linux-x64": "0.23.1", "@esbuild/netbsd-x64": "0.23.1", "@esbuild/openbsd-arm64": "0.23.1", "@esbuild/openbsd-x64": "0.23.1", "@esbuild/sunos-x64": "0.23.1", "@esbuild/win32-arm64": "0.23.1", "@esbuild/win32-ia32": "0.23.1", "@esbuild/win32-x64": "0.23.1" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg=="], + + "tsx/esbuild": ["esbuild@0.23.1", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.23.1", "@esbuild/android-arm": "0.23.1", "@esbuild/android-arm64": "0.23.1", "@esbuild/android-x64": "0.23.1", "@esbuild/darwin-arm64": "0.23.1", "@esbuild/darwin-x64": "0.23.1", "@esbuild/freebsd-arm64": "0.23.1", "@esbuild/freebsd-x64": "0.23.1", "@esbuild/linux-arm": "0.23.1", "@esbuild/linux-arm64": "0.23.1", "@esbuild/linux-ia32": "0.23.1", "@esbuild/linux-loong64": "0.23.1", "@esbuild/linux-mips64el": "0.23.1", "@esbuild/linux-ppc64": "0.23.1", "@esbuild/linux-riscv64": "0.23.1", "@esbuild/linux-s390x": "0.23.1", "@esbuild/linux-x64": "0.23.1", "@esbuild/netbsd-x64": "0.23.1", "@esbuild/openbsd-arm64": "0.23.1", "@esbuild/openbsd-x64": "0.23.1", "@esbuild/sunos-x64": "0.23.1", "@esbuild/win32-arm64": "0.23.1", "@esbuild/win32-ia32": "0.23.1", "@esbuild/win32-x64": "0.23.1" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg=="], + + "@ts-morph/common/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + + "module-from-string/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.23.1", "", { "os": "aix", "cpu": "ppc64" }, "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ=="], + + "module-from-string/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.23.1", "", { "os": "android", "cpu": "arm" }, "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ=="], + + "module-from-string/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.23.1", "", { "os": "android", "cpu": "arm64" }, "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw=="], + + "module-from-string/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.23.1", "", { "os": "android", "cpu": "x64" }, "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg=="], + + "module-from-string/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.23.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q=="], + + "module-from-string/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.23.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw=="], + + "module-from-string/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.23.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA=="], + + "module-from-string/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.23.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g=="], + + "module-from-string/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.23.1", "", { "os": "linux", "cpu": "arm" }, "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ=="], + + "module-from-string/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.23.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g=="], + + "module-from-string/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.23.1", "", { "os": "linux", "cpu": "ia32" }, "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ=="], + + "module-from-string/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.23.1", "", { "os": "linux", "cpu": "none" }, "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw=="], + + "module-from-string/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.23.1", "", { "os": "linux", "cpu": "none" }, "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q=="], + + "module-from-string/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.23.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw=="], + + "module-from-string/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.23.1", "", { "os": "linux", "cpu": "none" }, "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA=="], + + "module-from-string/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.23.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw=="], + + "module-from-string/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.23.1", "", { "os": "linux", "cpu": "x64" }, "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ=="], + + "module-from-string/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.23.1", "", { "os": "none", "cpu": "x64" }, "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA=="], + + "module-from-string/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.23.1", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q=="], + + "module-from-string/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.23.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA=="], + + "module-from-string/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.23.1", "", { "os": "sunos", "cpu": "x64" }, "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA=="], + + "module-from-string/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.23.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A=="], + + "module-from-string/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.23.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ=="], + + "module-from-string/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.23.1", "", { "os": "win32", "cpu": "x64" }, "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg=="], + + "tsx/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.23.1", "", { "os": "aix", "cpu": "ppc64" }, "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ=="], + + "tsx/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.23.1", "", { "os": "android", "cpu": "arm" }, "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ=="], + + "tsx/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.23.1", "", { "os": "android", "cpu": "arm64" }, "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw=="], + + "tsx/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.23.1", "", { "os": "android", "cpu": "x64" }, "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg=="], + + "tsx/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.23.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q=="], + + "tsx/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.23.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw=="], + + "tsx/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.23.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA=="], + + "tsx/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.23.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g=="], + + "tsx/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.23.1", "", { "os": "linux", "cpu": "arm" }, "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ=="], + + "tsx/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.23.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g=="], + + "tsx/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.23.1", "", { "os": "linux", "cpu": "ia32" }, "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ=="], + + "tsx/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.23.1", "", { "os": "linux", "cpu": "none" }, "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw=="], + + "tsx/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.23.1", "", { "os": "linux", "cpu": "none" }, "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q=="], + + "tsx/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.23.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw=="], + + "tsx/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.23.1", "", { "os": "linux", "cpu": "none" }, "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA=="], + + "tsx/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.23.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw=="], + + "tsx/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.23.1", "", { "os": "linux", "cpu": "x64" }, "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ=="], + + "tsx/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.23.1", "", { "os": "none", "cpu": "x64" }, "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA=="], + + "tsx/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.23.1", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q=="], + + "tsx/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.23.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA=="], + + "tsx/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.23.1", "", { "os": "sunos", "cpu": "x64" }, "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA=="], + + "tsx/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.23.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A=="], + + "tsx/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.23.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ=="], + + "tsx/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.23.1", "", { "os": "win32", "cpu": "x64" }, "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg=="], + } +} diff --git a/bun.lockb b/bun.lockb deleted file mode 100755 index a6ad67be55728c3f82c9b46551a8a01411052a60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86960 zcmeFabzD}>+BSSigLFuDNVkE2bVzqfH_|PVk`kh%AZdVNg|Ty5IHe@7ec;+xPq9`F_v*_VT!9)*Q!q&N;JYX3ceRZ*ESp;J^SeM-Lw{7oQLg z$6y~4aEW;NIvsQM@NyAx^$qZL2oebqC&9sBFn(VKi$2wlvN+egy+TZJoIJQF<0-j9 zNQ+L`Ow~|~K8C}17pR57y#4(z21E2O7=z6ZO=CY`ygdS4;OFDu+Ks`)+yO`m&=(*H zz@We|@Ck!)4Ri@{@d*k{0|wxIO5hG9K$k$rU=J^6OduWxLl5#c0QUgYz@h{enX!nE z#gDic3>~O90gx8pBP`Zqu@sAGSPa9WGZqc7C=ZYZ@CC6*k3~Ezt^hx&!TncQ?8o9A zELLF=2H|&meZ9S4dtCy(JbZ#Mm|!vth8OV70kQ#fnfV)6B zF+ds+98eS!3J~gg03-+K?BW>g2K2oHp%n}UAMhDL`4Zs4_>BRC@n`}Fj?SbzzJB-7a;6E4$Lq&;SQNKhU|p zK2E>;`IyV`5Xhqi!H4xLuy$M>0)zZPd4NlBpoi;mOd+@r+vg2B6I6+50SMb;0}$HF z!}9Wh)39DTKv++MVG9od1Wk(>1_v_2_dVQv zd;@@oE`fdlE&#)rw#prxd;@%dUk;wX-Nu-JV1rvRiU47pjsv66uiyX=5zj#IgarE> zck*?1Nye5R0|?`82N3)(#u$rJtXpv%0SN7Df^rxSc`SMaiu?{S75i2_No;uz$U}Q` z0Ac(59D>|MKu|;7J)GQupWtx{gMsD;^BoSggM2#b>Ah>KiDPUIL67{!Rr{Xug13(CwGTH5ir)=4uL$32ie}Ob{+)? z+oJ{Q!tpMK#n1d(&%2wz*8LKYhyG0fgyT6VP{i9ez|TEa5QCutd4GU#{ICdZ#qnRC zmn&GlknonCKR~GG7~tUK0{V9bTP`ZHq|zQAwTjzAah5SIW9<_0K-^Mj9rkFSR_9Do0HKKq|Gk0J4Qa`!#v;p`A# za9}G=%2<345cWfWi-R+akb}>0u)a9CXM#Au@$3Z69RzHHr;dj3Rz<|#&$K)^=Foa{w0YZMfJO%@%f*3!5Fz*NuK9^C?=aAV{iv>l!GIwiLkJMsTUOlCe+2SS4?et($1#{U z%3I?YwDtD`?X0pjUIM)w0^NbHe4suDsLuv;Ar`4(FsuL*078FXu5ILca94z!6|+j` zYmk>A_Lb|LGc34W!W$zjl;Gk>dW81e={eli<})Yh6PA)+(vcsra&muuh)qh}VJ19> zi;`PjC6w@U(~~kv)(8Bv`jS+UX4AKf9KGx>{2DpiqExN!VH2RRw~&lpb+-6wNSD#! zK_M1as)}M}@mtSkova?M#;`|RGR?}8UEuaiFGzOWvq?_wN!$J^NiA5gO#F&v>^JQ5_a)-j&^#j924sM|CLdLS>Za5)toH zapeNLCISka{W^V(WtsKi_urkpLPM{y_8~WDrA%S{XTD!o9wp*0yssPhVoP)Kh!dJJ%3pr{j{%6|(G_w&9st+NsXjH|~sePq{?R zh6Y$pSLoM130-{7xbJ0SHHDMW<l2`Kdi&TpB zi#0en6idTq?Jqk;Tbo6dCHbG;rQe4mPOs*<=T5TZxopJ;L(LWp zFV-@gZTzO(9Zc# z;~e8xF$y9__OmzViW6_ET=_v>9vbiZUQ|DLA4$>lSUlkyDT64lI}jN%AZKbY z4Ah9ADRZ=)t}rv~)pMY%?|RNHN0@LtDe-TGF|=Qj?&OU`J` zH#DHXQ#fv$pXZT%lHvA`9udiEDe|M}jH9?E_0covc-j|r+C3W{lNezT@s`BF|@h?D7h2I;@H4cA*C zttHhHw&F&0LM`c1A`w=BQI%E5yheBAof%ms&zlyKi2WaR4SnqN*?G9yM^gWFKKq|G zk0J4QyO(0atRQwPg23jyeA;CnRf_8sLFt1j&S{Ni9uvh&TgG0BZ9*KZ(!nXl@uqTee11xACDgRF* zNWF7_58Ds((DqL44+6d-);rw7+|br60E z2%O#@@J9h(=MVTipyU69@ArrNJAcS00)zHX{5Ju7@NV~y`>z=A;rIbv|Bw3r{U7p0 z3IEJ~$RF}s|Bz1r9@;;NpWYwxbN`V467bdkp#OQmr2i*;&p+f}|3m&N;H&;Y`wxLb zi9g{-{UN{o5BUV(u;@?x*8+TG{e^4rb`!FGBm%xTi2ruiO++8zcL4rAzz4$^1CBg) zynYpcLke)5^w;{i)Af%O9EO5*h{TTt9EutM zKA^($nr$b9pA7hhfRE&NYX1e`gCnWm{=>E-I{(QLq#hSIl+*xx$b}ae4%9qJ?YHNYXTCg6i@$nUh%{>uk^*#9tYh$dF* zZvm-04EX!8{GDhZ{N3QCLmJD629ff=HIAyM0Qlm754JJCxjXIu6u^h^L*j)gq+UJX z!}vq~c72B$2>&gX54mvt+^z<~X9wT+!T2Nnj^HX!}5UH`vh?Zb9&x9w0HX|FN( zvPKd3zg@o}7bb+C1^CKkFT#Hb_~`w|zi0f{I|!c-e5nP;FZ6%AwxJTj zKMMHh`ER=#2tOOkhkG~Blx-)3KMeTbtH2mY1XIype!=|TC4^7Ov^9UiaSQt&DgQez zyoc0N#qz;x*zfbZowh#~@L~V`Q~NIgAI@KJ-UD0dZ70NkD)6Pc7~sQo2kxJCy8ie8 z{!ze(dfRO~bP}=O1NdK-x4mA+I9pJCZru(xqtsJ!oLLg>R9{#zV`q7 z4#Hmpd}YAjZo3gBgfGLf_54BpKWTp|;KTP zZwvVF{RP&Cws-3PX~0L~zg^# zAoY#0{O!ga@dDwO06v^QchYvKf$%4>{OykWf3?rdyA{8G>c27I!|?;-w%xId_CFi& zVf$g(KjA;c+K1eo!~lsO5#Rqge}o!HIrQi65>n3?@Ku5T$o}Q;IOux_KM(NX`2DB- zKLGg1_}T8*g?=FRnf7k2pGbbYeSp+=1$;RFK_0xe+YW?(0r1VRe6W;nJ0bi%{9AmO z2VVtkJ0W};0Sv|j!+lTNE z3jUtAfB$}EJMBj5ApA_g*9P{H?@qQm1`+-w;41(=)CET=+fE2yNa+8ZKSADXE+TW@F z^?(oGf02Gi@b7$w_YnVAu>QmO6WZRXeL0b>`4{Q8o$^lsK5RdHX-#iMgMF3cWOTk@R9u!?7N-z-vhum#kL+*#3WN|LY&}l_dVme)=EsUjV+=AGDtvy!>na0sq(^@^Ahjf8!7ND&X+=PuidQ zhx})M$Y%zV$DjD`1o-NI(EpWx$Y1_L{yy;X{wMyQ0DRRyXn)%u@^Qh-=bzZu_(Oi` zAMytPAAbL|8%)64U3=hMjjVqpVDUiKZ@B(#Hz9mmz=!eM?z)fYBm4_kKFt3U|JMK? z&cBeq6CV)!N}%z7(*ENpKJ{0yf_5s450(=9&N7{{)|DA1k52h_2gV*`@4kHs{?!uz(?#d^>ia2|Bn8bopr!h!rEs54CFcbTQazb*pC8( z#{_F18s3(16n`A>!4&fQ`9(DUlWlk(sY|1X!KeWKU-|8jQG7GNH^ll6$AI<@`4xb# z3HWgSgwN1+6XLHY2)^wf@P_~&#{Zw%=U3jEKmIA-2k;fK@q^FcPRGwxzz18Xf4qNK z0(>xpfA{}(#~$n>9QY4N!eH+)uMHg&2L|D%aTkei6hX~6(vE|3G3|L+j`8IP?8 z5%LnSd5AEdh{YsqIYj7J3bs5ITaHG^OT(6<5tgT8%OS#k%fjX%LVt3=1?%O43#RQL zte^M0_7*~&d~6;fykCID^H?kd2opqjzX)8ASAxx#0)(j)T=0Gw7B2vV35{@0xDGDJ zuLBoMXoT@<02jR91TL5$!hXCBGax~PcJ5&DEH&6f(at* zw-s=~`=7D-Rcw9@AWRV9{ckV>5*p$7{`tFf3!xtbure0mM?!2Kjc{D-2IbH`Irjd4 zhftpu+=sd>0HObE*!mFRM|SWJtjCKjhX_CNVe@E&e11^A8=w?GIQ|Y|5q$jL^%2Bi zFAM}oXygNV^tuS|!#s@V|E`Z)XAu9pKEhFf!N7GAK6+^|0}>ixIb0WEf(W16|6Lzp zH2!ye{Qq+O{onQR|Hk_Glj0|Qfd6kMptlRNrHhuvYh6f+d+dAHexIA+?x>Zw7v1Ed zqc|RsNqO#-UT1U(%(o^9dD=5SKDyv>{?a`IOxyS#-N{{54`}RT`r%5Xwxt}|15T;X3+$D0v`QW3G1{*AKRJuKd#$*Avt|={cAN!7w(Oagm>v3@2u5+5v?|F zzB}3lw|ys%#tdByc=6*FN!z#HnT{z>>zZi8T=4;xwuu*2WruHtg|HJ_KfHrE`QhO% zIrG&OtS;1qdmSXEb6EY7#yiY(t@WngQ@ z|Hf*OU-a#bwN6I<_m{f+pSwIREtJZopHcxqMfwfS;Yh;EdiHqzzEb{$k%ptIUj=9{ zT$Yj5<`tdpww+p4nAb5e`B~0P&FFurVm!1KM=(^LZ9^}f45A8A_SwcKKfJqJ*_a4tX+o~d!*uc3k`w`DYy7fV7ns;HGoKPJ47!^_Jf zU;C1o60W+sXTWUJI<$C|B}!3{d&5G3NO~!hiLis5)+tLsgZg(Ie*gC*|I7Cfc*QpY z`yR+zC!7@?CO6J=u^=g!=e6Zl+4$s`Xmt8roWs+^Yb#yv7|y;iqEXF^6skUN{1(Z`-_L+0FII%&H}`nV%@lTQ2PXp;&j8b==GDEb$ka_MXZDlS%!Z# zQN0{#Z5keX1fQBru4wAXweKQ!Qsn}IWts<*ct1Y9uhev=di}TVmcMWhj3m6b_+bi% zBA$HH5PRG$bzug#%2>&?l+bYI&OI*?3OyIcj!H8*2`gs&K%;Xwj=w(EBvl`EYPu~N z(a1*TO>NB0fzl;KL;>QNv&xG}@Z(<%Bo8ZQZ+|L5JCo5|y_r`vc|0AQnyQ*o5+~Y+~we*w6G}t)6J|jcxCRrZp7E`!1^_b0=_rv_R zqie4-seN+w2);i}q>a07NNGebA?G9PH~juh?(6>aO%c&@>9Y&$Y4z2z)w-jPh~lxj zaHE2pcR_i)F7lw1!b>*o3-wL8>J!#E|c&_N)lEVK5rCge;pq*o(Qfz86j(RHPpsW+u!z70yAFq zBj+fJU@Bg#pp?(oCdlU`RV4D;m2SKrI#&38sy*mn!jZir3MKga=bs_tAqHqtqIF*_ zm&&spqoi-#lX=>l|I{+BiX6pWX7Q!HSIAzUqQ*x`2s zA&0m#*V4y@CdFcAe*23d;sBadXkCx=Qc1`1!z^~ji+CY{QAfwseGUx95jed$F2@|Y zQX{2cIO5k)bIh7CE^}cujPGdTWm^ox@LMLwoM+XB*Nv}i>Eb|NsnNP?{KCs8d}#OH zimq(aZM!QvB4NqKvc@mlFB{^2iks~Etof#C$ zCUNlYy^AHbBG=Nj^oE&a=dikP{O&>P78^$rUNdSM^fQWyI<1raY?Arv^6tUG1COll zg|^5AjnlDrzW#cR#Q>k0>ONlVp^$-4Yf6bzjGw=o9(k*L+%WvN?$)FR&qk1hcl&T# zy-p*CsfZmceiaFy#xily)(L- z{oBU)wS=x!bXoq^CBno2K?Xz=ARc~a>J!WFDwylFi=)f7A5225cU`5$(=6??yk$C0 z7p&0dU9{Pm{MGKsz}a)w`K9Ux@@6ZWijiyMWXsIBr6fg29Do)hTGwO#!5MC!g-U(( z+}#<(MFDRDXRkj@)_d{EubJq3e5dqs&56<^U&_a7!!qX`9f^)6UuN=qAyQ56(c|fo zVq+bK^%sr@^!J;1rcz;oz%}fyXW=3>sVbFUpBNZm2K;VFAG$D z892oeac(N}?Vn12eH1D%Y$dJV`{|RMebBQpKH7~nhxs5jzN*$bp_niCn?55-OCrjzjb4NpLcMeb!ROsvdkUTtETZtDtR=V zcJV~7yBIcno4rz<-eGf8lrQ%Z-Y=u&iVKQS2Kg`Blu?X$L*BI7u(!BIki&Grl*#vOL#JC>K8A65+S>aVE4nWZ?tdLE38rT<@wP&yRd~q{MBx-eRTb+OXCefzpL%V@Sfg8Q65c z%%tXFgu>S``d|5aMdn}qEUnF&317Y_mc}0~-{WquirZdC%Pe%`%SCGU50g~6nAB^z zp;ukK+YM^pc%gKW^EarC*PeG+B=kZLf6aq+)w4Q7bG<9t=JOnjeQ^w5BPVVj_GO4W zD0+-FeZs7bVzqSG^ZcQLN$&Y`^SHEm17oAU7d%nA{D`wqmn`!Eb(xu>MV-)<lbhRd5otyHqYI(qsXE-_T&Ic z7yMbuUkPt5Vl?PJ^^eCY^Aq{WrS~(`LSBDQ?_+;kYIBQ!wIGIYa^lyw*dq=Tay9Rh zF+$T4sY8)L+J|sr3(Drdn^1Uts{=yK4}T@4%6GIQ9lW}gk+pr z!2g-YtrF4WR~W7PLvVR|T)Z1sDJogLLcx7DagAC2X|3WMUeqzY8Fh`uvPQE} z!C?Om*LK&{pPw$%4Jdw0LM_Sl4jH%!y1|EhcEt`&D)`R;^ezuRJE zW=VY47Cz8Dn*aJ-p*nDp-5)crQN-QWa6)a;**F`eD~{GB;!`F)U)0R5XQbrpG`GVRvV^bgEwUl^pL5F&-Ww*Qz;7e}CoiW0WrV zS@>TGFG6R)Jk01UH*cfPz7NNa@DEbO&sSF7_%YLI*3IzPBT-L0ZM^ot8B*Ug-Tt&| zp7wnvQuLJU1ypg;KMjPI8=XRJ!Onu3RY7HDODZZV$7I>W@XuDfinG zv-(=Re{qUpAof-`K0YqTfs*r!l!>+x>oS&CX>IDRYUlNw$tj9K=}Mt>7d*Xw1lQ%) zy?uc*DijxZsiWFaiZdw9yg7B{1;$HQ@ABz6R>3uAtAU9Mt|Jq?nr3Ie91_uJC3C-f zQ%dBC68z2vc`l^Uy2MF%`>rK4JR}iycc|Vga=F{9x*mV3M=Sm80>fygqV2I)*6#fK z3cL*7y<{1q!WGju>Y@=6e?P$?`rX2zRm>NqyAQ34BTT?Ez~J|+pzL<}$rrCSE^0K- zotz-=OQo_UtLU4IKFX<5C0>}(QEOA44G0BomwaH!+Okx_B014<#Uo0-$(f?`o>B^yX^WrNvrM<#ae%xz~ziZQ~_jd1msLq*hFMjq!+G=v@s1JXs z)Ym?0a-(Qzd4*CoO`_qx(sZ+c;+LZuK{$682K-UF@@U=cky9}ljVd`*ii|9N%1OGo z86Ke~ogtRgCNwVTq;!g+?pnn|`sqF2SO->SlrH!! z)?W$lBAv#WplHgxRifb!*0kEzm8A=XCy6x(24z*599IK|`G-Cmr$p)-2}E7{)qE{W zzzowC73qAs??i$0)wHVQ3Y0GRnc!auZ@S?){+Ez~ib0+HR`c`v^3Q*|o-a#Ieb$UQ z9@ouM8<>At`j-kRotk~X{Ydxz*2~myCcPs3-1A+(_>^-WV?Tn@Rs2g8^joQYlrf{d zgk^Ci31~{^)(2Pt9HK z-L!P;4`&D+9l&5j?XPoO>PgGDl8-C+Jey z9B2q`x?5UfWXH$cWWTC(Yq2G|uAsyH@pF`}GFsR8Mc3!frpSSpXE=lN^oJCT`0Ip{ zGkB(#D1B{=2_5l|MjTuG{POw9nN@?=9bu=Hm_2U)T#$5cFrHmq+>N(_K1WnR>$cW5 z6V$GpKl?!0JDp!}t=sQodjGQCeVPQy51B=ALSw_AaPd{?CB>U1j@1=7plI~f0 z#E&Jv5|I}$F|XIIj7)qJ#C@}$gvnCb4`+p)Yx=A+z8L*Grc0z$_m)~Y!{vLvpmf#I zy6T$xhl_4rExo5mv6?pO*8iLW$NKwpr~_B=*z)Nx+yXJ~>pocwA`1^US|%{JBVG+1 z5Rlgu8VEKW-dj+$dhi=cR|Bm(e$8^~8TCB=k;Wd{Je%F~YDJmUra_+?r^(q|B-V=k z!*kC+)uJMq!s8~3KB8t%d-(J80{4~X?uJ$S!`r<3+BpK80i@m1|m|Zk4%blFdt5i)v z=^jDr-hI!IK+sBIvP(#2IYH@@Z`W9-)kmWUuP||DoMM>;U2);jD=%(l3Wkl6({QgR z$5hw)*W52t)_1hAl%YRJ34fb_tjAht-OFu#jxG!J#F96t{8!GUb6cy^4iV9kEuYct ztd14MHCLP4HT!G+m1{K)LvCf87}+F6^Tiu}t<@R4-7gmRNN$}+ZO!Z2XkA9KcuOV& z^MRRfq;ihcb}m^{`{?o=)n5ncJHNl>@{_Wu^+^~0r}ELH*K?P1)_ZW7w1x!ENYDh# zH0870V08G7@>d6~t8mW==i#!8SPsWNqURPG#Jj|n6KUofX;U+g&<-bGx!d&qo@;v4 z;c9lBTkBr$g;u0hjyAC!dWbVPd1;B}wy+0ER~N0@UTAsqnft@sQ&e2)oY^a+>gURB z@C7&y)3RIf2^XKcqSLNp5LY`rEw9CgPr#NvCnseX;BiiLMo3-Kg<$xaDoR%mt^0Y| ztn&Rh{UP%&Z=)=)o*o~m;Ywyx?VDg4B-%Ho!x9k_XT$z1HC~0u7SRV88mOtgLZ)_j(>|}6f;7hS?%6uy! zt-e;RgJ0|PIk@@5{k2$_9KMOEiN@mue5ck?CFhGF=Y#*B56E~hK>NFIxtJ#9%TL~l zOQb5Fi*8O(qz^J5SDpH`U(!!)GKbcm@0zeg^!Wu>i!hB!$4=YW4boqqrpi5}W6n&f zaVZ}VLFt0ubpMs`67L!B(>kLg$7A)J)js{gvvP$ZMb+z1aCxqbgz)daJ0rQGxWt2Z zr-jiYQ-iXClU__cx?Ftat)Hu;wDMkeLG*Yq`b!nW;lk~FcT4UI^|SPmm&mweezlsW z?kaXAs$lSH+#i=27bNc!!CP$q{#C$-OdBei<3EeVpKIuDc%(;ll`#I2utD!1jM2JR zuX%mTa)?&ONt9KwV|3Zud~hVu`JI4yW6^GQ(wKK$7u%zj1syA2XU(UU^=3EQDg~h5V@=Vz8KJ|XyPsVwy6qWp?on2v z?n!Ir`42?|Vl+ou3OrbbC0k1<1J?4JGE-7a;MUvaobRz3ElhJrV5yy&fpBo!(9;KuwJLN{f zg9r-klLeK|?czC~nLnc6kIm7#4;$Or^OPO*j6XKvB{G*S1VnrcUa}6a;SQ1Rd#@(2 zs><49mK?0Gm*wreuhP}d^FN)qSa&{g}?4r6jwHjb$##cX?vla#t5)>2=5 zrWdODaS&{MkD_(yUUFde{OrCTbFNDC(;N1Bp-L^m^&A$@=)}06Ye9bURe`a+&u(5M zo==i&qq-P#MWW&)zj)B5VyukmMSXlRd6cdVT6eI@sWQm4wNaAf;n$mZ(KeFxcdzCs ztCG%ixG#LqUA`WWM&!PWQjY5Tz|hOXf<_lV#n-zi)~YFt8qEaQ%UDr=ogXTkq zmfq<+QjvQ1;~X1--K!V1=amhzdVdig)vF1(#-@2^k;w7s?vSxTMv|zND5IyO)Mid4 zUxtLzI!Yr6T)0rWc4%GkE=BcsswxN5bziG|JV;vQ?x$g+q((7;_p4HLg!PEb)I>Y^ zr%$%YajM>t-(8-$MCxzgK3|K~IrxQjM!EMRdLLzv))jQ?5exaw{MP)=FS3#EYkIZL zV&8H05U=h_c+hxpbMx-3K$Qt@>>WQ-t5Tb%#*s}#hv|E=qa(jvVe=44z4i=!F6V&O z<#XwCs}a2;lbY<$mp5^#|KhE@UDjnk2$)au__@aK8$3%YlV)~&WvO4|dNLt#W7RXV zv`61msx*y_@ES#QGvIF}k@dn6t!u|Z^iieElxR=Il{m4*@uzKvqLadRMcq82cbxTO zSodIjOThEMvqv4?T>XB$Gis<=M|0_y&9SDFr{twLyw|V2Lg_l8bsx?e9pmhpDz~R; zG)uI&ecAh4{K(_Hj*D%XIR(lpuPJRPPB?rz@OE{T>H5vX`N5}Mshnf;z@VtOhIedw z)(HI`;EdKiQgrZ)+cSj_nB$;fj7xoHtJ>+ z)v4KCxR>5*?onJUzIsH1@mgNkLK(_m7qo7R%^4Y|)grHjUe~mW&a5ePjAInHmzRt7FdyxTTz~n>s`_4sMx4(B`dUKq+b+0e`O-v%{;ae0)i$H? zz2euH^(+|2fbbmdWZ>zoqWa!Nv7J&Nx<2|Ksvg7YQX2^nTI@tvi!qu;iHike*Sxj@+A- zbD+ilMwO9fBAIg`y_{RZQ|I9;jtQJ$U&#nb%j6rigY^9Focnp_i@a;D+en?2Ytbso zUthE?Deuxu(sX6F@Zx?gC;v|s5x1(&S-j)2ENDn0uPdaYJ#FL6DoH2LMKR!bXQgA~ z@~TvF4=dTL$0A;$4rQZqp(tHHwC;NSYI79c+Z*vq>>noQC$u*xvvb-nrG)qRl3Ntp znqRxMAS;-+GUjo3j)ziY?9No#wRJ_R*d)r=UFJGX9+UzoU4OK$t$B9YfX_XbxpXgj z57ieqUVVOM$3K@);vQS>G8Otj&5}y@NMU(*p}{Nle3L2dnz`pyA=W%}8?7EoB+JjP zoIvRYpmkd{a1Ym8UNm78X<1jjkx@=DaxVVR`>H)w^aKLG#^24kWU5!&9l1Nu<3U^< zR$yFZ^sw^L__>(HVGY4iR^jLGQM!R>UA)Og!n^|Uc6ozdry958ad{{0zbnh_lN>ZM z_fBQfFC6WZ&`Shx=sHa!eo297pd{gV4IAai250v*I%P zuJRYyJGEX=>(IZmSh9J5`n>P28EVdFtb*`TYdFy@z>}R&Hj!@E=r*15O^IPKpi-gm>>Kv< zNpTj|1EOoSAGq4GB<`JmC9doc8Hk>DLeRR@Pp_9QU3$Rv!(z!lG;l!s zImN<|K-XXkFP^jM5E9>w4-N z^k&PZC$3r(vh|+zXeCQ2B~)-u*4Dh4N#N|-gS)^?OlLO9?oumw^_kRnpITmV!pLm7 zJ;!5T-ES80y8R2KdjhSSys9<(p4*q!=jE%gAFiR)_ld;M>Rch=FSmKJAzSrCa{|Y= zPxive`>$Tfe_jhW`P_Ii1N?x;B*M7FNduo_*chc7fz}nd=+r=$ji1rl$L2=!+0Va< zw8tbP>usxZpwh71q*uF6iD*$zxFXZb=RaRWE2T8)B*o7~Xq4y9jNYg#xY2_Co-7ir zs~cBP`1m6;uKJCv5Py?VIg*cWiY1D|)~j3+hHvoi>ObtSKa+POC+QYz__x_1V~vpM ziHUL@KXadldgg)Er_@mXMxk|UErnaV9}_=~zCcwt&p^?^9T84{vhz`@RQHW${l%Y7 zIal(oAAZwNz%{EA#HEhcL)3IbERGFhYISm4md(lX1xhy>t?PfyqvQF^IdhW3pR{c$ zwG6HWxqiCf!+H8HwXTnhlhbY4Ti4d@mv+e>V5l#Me>f4jdL!JOaIXf{dw->gfojUF z-+^qMYs8>+ODo6YkDlcWH)&beOs3&`q~2WA{Eg$SAgs?nGw)DJ3^Es5iv1r|@Gck7=BkRUbv#q7nMRgUm8@B!o8o9va zS2LKs{8Nnd=-Q&-IL=C2%v9@?^rqB@v4YbC?Kb3s97mlazs-NtK(U4i>wnoN zC_NG|<`EOa5y@R&f7!=Hb2_Hy>ylR1EhpX?!sQ8N>YR77l{r#neh+naJtGw*I~3dI zMt6XET?hR>6o=M*d_A&;OHtoy{4}qMue&F|;bZ$d_Ko^vhAfs7iGCFR;rl17ZL)ES zgDwoUNPLT#NqF{dPf_DIzM^olt#dXtHOk+3w5}Qz&f!NJDa)UH3rHM#@mU2uXkRR3 z{0xyXc_Pp%rBJZf4qt6*pKJahGQSUrW2#ewxQrLQz9pb_gBDsR zcIQskUf3|2(GC7{bjj)u23~pxUK{hBKP*Wl0WZ9JGFX}$HktF7^y zjMhzXddC`y_u$yg?+Hzr!b$CUg=bH5eG0ys!y>?S%&_)x?rSB&uR3FzB3<-hk8R$B zX5P?vGT+D7ClW|%5gmC3-EXJRx(~aO#=55)T6I<}s>r+JJBlx#i29zt-6|0cKfCgPyql3@f3S zD$4m?#LsLpt3Awd0;?Ye-3_a1j3#?{y@g5EEcu*GrMYZ<3qzHsBd_W`zE`vdK1m0h z!bj<*qIK`jI;wcR4JQhs4wq8Rvh{1;%UvkZEo}*42<^@A-FM-p%1^2xQLTW2E)O_vO5A zC1#V;xW7wBHn(OhceV@X-R?L0*o5aXOXuW!b@=<~1S3<41COEnO-Jh zuxC7}lJkUKsok}^RwwvWOo|B0J!2OPbjHfKV(xOuy)h!rKD~NYJ~;c{16g{_s15moB(YojB-sLK|{Sd7=q#9Qy1uusyim-RNjzF;x5gpQd&~G#>grhZ zo`wf&x1Beb3ha%_rE`@vA9q@ZPvsJ5J8@||x!C%yy-B{f;O-lrz8@hn-*mf;C2GadVVUu+vk zbXa}vvCv+AC7|@es;@Qw^aU|%LVdb;TH#vsdu%3Jw=A-{d6&WcU;S4V_?Dwa-&OdN z;e!95=!qYqIwh1vI)jt1i(_wc(bfGrqI{3WTe|9F*^^6mh*%q33`S}nPBqA){LMn^ z%15vh>=AuRsjNVOTcUK>Vn6d@#ab}eu*H=omSdZ*lGLW<5=uoRZ&KL|dP;P(JZ+2r zr6579!pv}8Gl8gTKl*$p8?DQ$yBHSq__V`*6V8PG_i|Jb?PN#suCNw-+8}Bp$gB@j zv^dLVI_W-)*&O6Ow4SGG6O`&LBr1mEbcVyMl9m?z9Os~Qy9u7hEcYMDQ5j9;61AGy zxG^W%`xNXMC=w9Z=v>w6U9$(A`}*Zl(x0wa3-(dQ4j zXkEwql_!Fegs(9=ii%hq+`m`kr8moJZMZlEQg5cNzc`$ zY#7|VATMxXMX>2`JY9VcD!zGW-TADI)WdlnIE9A$SWbSC@U9bIJaQmrp(QBE+byNz z?(4b4rXvckUvEZ)H*wWVtN$FeuPb_$#>ZJzgK5`%A$J3%dk(Gp#^6Gf=Ajc0R&oSw z8V=ct7z^IzP&JoctUvKU_3*dnb8c?;$l7$JUp>%%6GS2>qxJRvwf)8EF0Lj7W}P-^ z{^)&bK3aF>>M%7fvGvJ_hOS`+F^*@?j;avY`0i4zqHnXz=jT57;a5;6#cn;~RC8v^ z1G2sP{drPE9Ix8mtSS`NKgrZPgz~olt&4fhaRgIb&Si1$$31ob8yh)pdW%W;Nr7HY z-`>6c2u=X|SeKof>W)u(?H+aW?kHUQQZ2-jLQPF0)FT2;xx!8O9P>v@CNm?o9A4Bqzv^U?oCqB5jWzXPKUov+7h&sa zFS#cc{d>Z23O?JSnz+;LW-t+hhn0Dh@?x-S>y;M`}+sT)21IPUI!cHJT@^e9op<)r(GC|EDn2$aOFGlMQnZEs^ zn{@uIlneRiZ(YR60pIp{tBvaP-G1h|D)M<(S=Fh=lFBq3Q@z}7d(mz@!@gPn3(FEN z!g<0f5v5mF(cg=dpmod4FDaOl)MuR3k?pdKHSz2968a(CZjTo&m=f_^QQcScIj(5} zKa<^cxzGerE>og+%LkKn$P@ct$j7@r);HPuJBh9RLn&If&|FWYLxVTy1n0q39#Za0 zUrOyxyz%l*jiCN&Pi~)LCoHODOn22I-%fvMP+eW%(EH`|1Dx^4Ran~9=kBdUqt6M- z(7MNYJjxGHa8?^~+-oqtyf@|-Jzd|X1b(8@c(8=H!NN#P!Pkzc&;CANbEa79X7;KY zK02v&uZxVpIw3Lk(=LAW?+GrTbuFKrF3->2r=RRyMB#ogt8PlVUuOQ0&ME0|l3ST9 z=Dc#E>sFJR5^D*8XUSH%4iznGYU~wVj~R}W(6|&(e`*c~o-1$t4a!Bd?kh&)%K2KF zm5M_=o$pR(`hNO2$Gl4>w^GJ1yjUDhGhlC`3Fai7sqg_ZO-RfQf>$#8E1U_ti@3f_R8LcbNwoq{?+CUVC&Wg_@PHXRD z0dY$^vd@$fX%%+2gX@Q0rhGYMGrWGyW#&$I*|D!q8fIjhVT4u>kLpsBW(ics{`ME| z_kWk59IYD~p8UqJS?l#{BKrhJt)3fuv+Q^i=l7NmRS>wCv`(1uIx_2)jxyA`iJh5a zy7I`+hFi#mG5iZj*LBCp{3PqG-^=0s4sr!rH=pH=NCj1+-J+!~^&JIX10Cl1qZwa& z&RndVALM zPF7QB7%Up&iG255_(9x6Q@d(MjEt-<$3wdXl0Cc^D?Ou=_x5t8b#_-vtlCgxjGqlf zP!qG)cYF(`66@RQH#|%X(5yu3GBTX+OuQ~NqFgBFrf{OBOtF9UE6*iTP0r#(#f;<} z%j)+kYmc>B^K3s+)^|xbkMzq~jqT1jAUIoXn0szxf^lm+5ODy_Dzt7`k5-NiwH~$W zxpQ3R+>z;0-7gIEt3G@eoce&1a)^A_z0#K_glsKOG9K1gY7p; zpjnI7UCsSo!_awGLN}$ck+yEn6&Zz=if>~N>V);VM_Pu;7ZwhRdoEbd-V0%TNb#uY z7xOx9=I|c&s$B`v^_t%+Jx8(eB?6jP(Ym3pURMZpsn5lS^#_s*^_Ux7wT(7APWQd_ zQWeKRan8?!O}G@V_s8AXja&5S8L2GZ!^6B9zk&}oKe^cXez$q+ZmcexB(9-#eI_1s z;z#{7CLrD4uohEjNZj%=RO0cgV-|UP{a*Pui&g|Nl63k{(&lf@*(b+J?5<0pJ&(`# z#gbF2Si^Bqdh72(wen+ueKaLML7!-u>WT zJh%}PN6SYVTPz%rs zUij|Dx&LO!*i|ZD1+CbTrJTxUjnbBK&1vFxHJ|g}6OH?yD-~sBjxn8@6KJEzqv)f3 zmV?9rXx5>1g$6p}S&o_#OF8r(c$Cwj&Hs*WdXR_V%Do~{lh&*Yci%7)K4l2h<$ZW# z-_7KepU$5>k2%&1+$NS{o9rHzcXau!OZ5BiTW+FtFWQJU?u|e5>>=4%gY$z|6zZ3K zBZqE{5m%AT3H;EvG%x0(_IpD1ZDCXA4g;Nu1%J!QPA)17W;KE!=5p1A3n^HC;rvjK z)~%C zqAHicko`D%vAOqNi;y>s_u8^7cgBTgX(-#=?G$)r^RejvY41D0n##7e!G;~I*bv6v zLI*(s(XoqQ!>$-YfM7^s5)c#}>>aye?*(=2z4zXG!QT7WMxC+z@7m`iIl&b1e&7Gx z=lS5ydvnfNd#%0p+H1FU_Stg#R&4SIL*{0o+-o7jHaTqXqkh}3?)P3TdfZ7|v}lu^ z%a%V+wpOll%;(m3=ARQwzh2*GRp%pjLjKNJe6QF$7u%Ew+X+iA{d@9@^2s~i4%FVZ z2<2WpqN=LT(D?NsPDbB(4p5P<02=1m9}2$dvV~@ zIfL%KsQu6LTIC)_lxh&~d2UU4CYSpzX{%6f$Kq#_o$W#nWcJxHt;@cW_HDeLAABbB z^&FpZyTnl2W0M?;zrLK|QYP+@w)0dk^?GVa++2O;@ z&x;nG&nQ=`QMdDrgA1*4coS6It@`veckZ+aP9L?g%>6N*k9K*xKl$R5ac+V~!Cjd_ ztGg^Nw=^J+OOeZ)g>l-QLb*>L$sg>f+x6_iwFwy?M8n&=Ijv~fbWCb^tH8r?%ZEOF z@k$w*a22oG65QKV9QG^R`LdAG`H)4U1`-*4^_${qS(dPcHr7W=753FSoY1abD^2+_rGT>Tv^q4|*McvtD3$*^rY0 zefJ9G);QR+RLl2vV+PvaA2i9kZ_Uwb793CPv3NuMxgAs$mk!G9l({ss#M5bEwJ&vA z`~CEh#`0^Io-Qlf?s?Qmt>dnGAB1t*eL}gF_mvz`>rTq{%+QcaH@#PtubHr^_V`u7 z@79FOd8E{~%iX6@$dDe59^BkLc51=N1*ge;FU`I9=WnNu#Y8vGtmC-3tw7)XLb;-Z z{*4ZeI#hma7$@1@AWchkn|u zN_gMXTirXgW}PFC|E)CoYM*H%4iyh@JJ8W)=;v8GCBe@;YR?zwdr&BM>D9o%!d@Ht z)t)!NXNTQ+$2s1@xC zd6Yg7d$449QEq(W+S?(aT!)qee9K;(oG&1*`ajAtHFmx^IsbT(HDbk-+4n;G%C=1W z+9WgA{dJSd-OK+WMb;woQkhfvx^4(_>bbCgy9?fvuXFt`C-<;WZp(}rHs>$5YOyTt z`m7f3!yefe?J;4~)y^&##}?VR!?Qxbu`yl~yN&v-$fq;Qr^)+CF6VJty|QM>xQd;Z z6rH>D_+X*FM}%^linX~8cn!X}ZDqX`qEiDs);$`Qsa@!iSo&YTo|+YBqC@khyqgeG z;p_P}QPu2n4Saps_fkFgvMFn-ttIN}MR+{s?= zwii8qf2v>Q`VD6du9y^gX4UtO&5}20e`_-NQr|&#-*3kUt^=ijk>Es zk9*cUSL?QX?x01@12Y8ro)pS$>^Z4dU^SV1+nSv>9v+&|>iML=Q`=|e-k^QZ;%$ZI zuF|nD-A-u=c)oD7*_6=vQI&4B+_h*peWm&3v-^8>^V~dLUSg(Wn_W*z z99T83{e)6J0=cJ!a);kMFl%Y=msMXsyV7_H0>**V>8q`#-;^DRnVo?8^{=+%rPCTeg0y>py=^;S09IGS?;+ z8eDV9#)kiWMloY;M1`cbKrfofFEvSozVOqs!&3=N&6i>f@GR)uEn) z|Giwh?23;gqg-98w2>DK4;bQBFL^)i_ZUZ@34Z}lP%_56@CwS zUMRQOA+G{Ucja!d5psZdd7lm?< zl$cg+Z_6$2wO;soSHE-N^o!4bt*Q8Gf49WKRpf^z^gmR_ZrS3Q2mK!XS@_%e-`7UZ zn6Y;E^lhJCHc6@2Gv2wxt{nn@xFnP-`ugot{iTh=&d#zMJ}zvAYQ=8B;={0G{pD|te8?y|;o>0GzVds6qm+5Nl%6*3 z`;-B@{8e>>ZUkw1R6kUqdA_xe=O5oN+)fq#D&lHTnsEMbRVY{Gq5Tr`ZeHbFri;C&UaP!g%$ZzOb3g3AAkK5% z{MD-k`d$;t9W`^|r}{o82IUsFlKS1*Eo-rEc37WQUj~mZP&xOery)!F&35UL+3%0Q zV#8--Rv*|TF|>qdWT&tzd1SLb&G~qvW@~}m>q5C>`i?EX`(nu6_rubAHF52Ceb$$o z4%@dkPAw!J>k||7;p*HG-xn1=t#~+Sw|Bxn9nPL}va{RYyM)t;u=iWL6-rpwNg(%z zP;Odr$JiHdFCYF=xmJa^9n)G4XrCtA*YS+aaYxU0{T>}WpR%&|v>GmzGix4`+{-9i zb^o?I_L}A!A2m^SSQ&QtcDq{wxtT(_73AyYKe*c7W$d#P9r`aQFt~40@eyln(%yMo zc~<{vzO>{n=??F{9!y^Hz4q6GNnKZOT)XG#*-;h7HO$i>&z3S>kDd_7y(yI2wdLhy z=O*4+a=S*fm*2L@Tcwegnhg7+P~F$tzV*W2f41b~ z@~JH@EWPPjpnSe|7ylX&QEz`8$G}0|x}FLTyt4IN)puTd_XyG8`S6<-vZ;?b>Y zZ^@PqxA)dk`nGJ^wNrt(k^Z~92Zl!k9XKB`MWF9pq1=yy99l;wotN*^j7tqUZ#%kI zQmlQcUh4+-*;&<2 z9$?=sa(1^#qZ>XdeR+3-yQdfYb0SF~_r6f>gg+asy1aS(ZpW<&-RD>9qiqx7_-Mtq zH(xTV?)6KWTj=HR(Wk399zE70sHg3hA(?;H$z48dN8zq6_loYW;MJl2ACn>XKl!7$ z1^wxM=^D`@8?7dZE^TN%P}s&MmEHW}|B*bYCNe=LkFtryO`-o#-Y=?=!}ecj0nRt% zG6gnIZiZtN$?=Wmp| ztxT#;!83DhpVkCA=rSf=jWj+{ijQ-`-OSI|D4jyAP|BigZ0;dlQ9j?Cb%4&2Ilnm; z`0upeHAUTxR1Ax*|QObZw>Hh^N9m&$2Tla;3hVRI2 z=&UuOedV7u=j|8#7!UAQFd)IpGYDofV=$6U_Mq~U4pcrW59v?&lYXCo&j9H{`78t$ z0gC~$<5FN5upA(JtpHX6WT({t*`_*B1E>Ym2I>GJ0H4d);ByumcfbSi1iS!mzz6UJ z>H>a%KTr>-4+H?%PHz(gU<f#s{6pL1$;&1n5i(IzQqLa2L1->;m=z`+yU`27u0t z902?Qqym$HDL^=o4D3RDHpNBkZJW&z!R?m!P90_X)u zfI`4yU=MH{I0mc*>;VU$7*HH20h9zv0i^*)pbStJC_K)R`;eW;USv12AK8)YNp>aslAX!kWEb)=YOB;{seTFq1%Pls1*8J5 zKs$i^@(+M~JQ)ZBs9swGeF5@|T0jDz0OUY#Kng?xVxT8LenI|0{?`p?1_T3MKy|}eQ>;Sd{3xP?%d|);(56BJ70mc9$fziMyfaqfZqNf4lfLQ?XPXNXP69K9t zvS~0d6PN)^2Brd2fN8*VARQn(P@Z#v{J;WW8?Y7F0&E600ULo0ze4V(a|T*<&W;4E+kI1QWvC@uZc^Gm=*;5={vAX^iUD{u|C3fuv% z0K`YnZvZ4;0+8*m1G==;`D@bSHqaKB0o(+rt}=mJfG$1J69JOZ4Y&`u1NQ)3-jpwu zk@BW=lt!ly$*Bh15j;zOfgAiCFKo+x3kG!a^zD)0hsmd}elF#aW%7xX&T!9&eFH+2 z<9oNxZ`;$;)!h}U;3@kmIC$-b;$1`=&Vl0L=j!R|&H91z;0dw478UV*c|OMDK}^&_ zi89owT4HgBC0&Wf)yo4EsfIh>Wm|{T{%ahTe*(qN)u%2fS|yIFz+agY!BJ`d&TIjS z7pH*~PYXiYywM~KkxlmG1*SfAg%;yS&Qa~AS_*vVTJ960$^d)J2`V)&B zDhK}F*Y4dGP~2TTp`Hz$c}F~@iniz~iM>(}(!7~4n`n(RQL4~twoVxAIPBHPTX}2; zdb)a%1`fG6i&pe%Dt^*$Y9;W%G*q4ypcIF+TetSiS?RgUKaVZT#slqvr^vPiEcebA z|Hwc&%~Kvv)4pBM;O`v<${n7v@8QJdB^;Z5G*I616yK1On-@&l*v~-81IH}^4cr^e zjM$RTK9_;w$Ws<(42*k~zv_7dr4~;anP*jOM6r5F21+1L$zLp}_Ey^|Ck>P~pp-;D zNA227Z~7#Dzkw3PQ_B4Fk4L-XzET4viKpzhdDX1i(_Fy@%2=LqV@PyUk7?KU87T94 zO0D8GylltZUtpkYPIgQu))D(j(c zP<^(6(u}9bdoBEadE&N)21*Z};#q7!$Gh9xMH(m?P#mG#xdjeR2WvbHGf>2F)c0T( z8aAb9aAwPf@I-h#wQadHQ9%^1{8d}G2LrQnQ$~>NV zZg)Uioi>764zLGgD*P8fr+{#AqWtli;b zSEWniK=DE6g0>*l^huDalWi`0eRxu2Lk%e?9?*bEOVG;X8k?kAcgm;iJ*WVM`YKSO zWr`?Kg36}oBU#aMo7!raG^SgOTp1|_kL&KOu8llvoF{2s)VSSc8W9m~`VNhLU(m;2HPTI9G_MaE6%Ec(uiP=OcC0eyiAsroFv#IFpfmfjLebpy)Ed^lfgI(M| z796{IJmtgnRkr9Rh~k{NMn7E?d?m!a5~+ic4b4 zwd#^B_kzdW)t~y1iaf=s(%s5?3sl+$iZ8SVPYs?De(i4U;?Ax5F&<`7Pf)1mYco*3 zGjrXBRiL2bB@F_3%G}{Qeqa8z=u%!9D9w3_n|=OB=ZPDhF=;3fW?Z1)ztmYXs_bq( zdD(j=&6A`>@D#;o|4*&s+LZ^z8?_BeZ%~SYr{tLH_rgyeS^^5$je2EJ>_I7ebYg*< z!`7~36pR^|1@V+p4(oRG8?Q(Qg}3N*P#nM`9r(1by35^Vpm@46-Ino`J#}VXuOD8f zCFAi#M{cu)r+CUYygPm-HU<>lZbv|&p6~JMj7ita~TnB~vs&v=-}R|JK|#=uZjveU5r z0idAXXe{vur6MSro#882=dyppcv#JK;wkk!T6HKl=r+|HjTory1W>Air(?P1=bYbc zfbZxi=F5|H40f>HfJz~q%(P(SW72!wF=*PzQEe5#8#J=*!p{-%6lg%L5q2wq%Aq># zvgcLa*|%QSV7hs@))g4JV$Cqr1rfVZ4U~06@0X}G?{g9-=0)@|500N1}NUH zKBSxOth0VsnvtF)E(i*qQ%@mNL?gx*t1Y#p&i?23&R%2`rkhL=D^<(1 znqo7bIhMJ75uS+5*`G;Udr)mFOK>eX@8hYyiuBcmd1=U}A1E+g>Y)?QHVupj>0_Xn z*R8KwtWqUoZaw?j>FOzo|K_qq7VOVFr6dM9>O>| z(p-7QL`_+@^ZK#dB#pV7O*|-QcBv!mYR+xFXg#%h*oNw78z|&&^_`pd>^G@pD@I{G zlKFAYjK`xY%#2x7r)I}2^P`OUvBXSmLxXYXTBxMAHm|gov|BPC<-ur5#-0HR**fgc zbA4Z4DNAD(1~a16E5n_`v+}pj3;!ARy$Z7d8_k-5LegG*io6+7BEL5%d@pth6dIYH z7j`LIXmC{;ovBh$Qn5NlC01*sx$IwE>bU_UmIENTTr)=1(?=sR?`6#k~*}(#qurB z9&H8+l@wa55){c2Wt6mLP~@n(Me~yPl4FB%*@-KUc>iyQnx&Whz%*d3{x&Goi}eni zGP2Kw%p;)ivl{ahGxHEH#FDTCBWVTa+`T^3?!FhV0m{=iRwju>%Q_jK_Hj|z+op`d z>PIEk#){DWo!9L7cBx$em6SXLT2F;EY9+y?Zl~AVlYaou1IjZ{Fr1_oeA>yW!ThoR zFdk+DnMRsK9o+Idovybp{_Ki@C+0U!x30FcZ#4Zlk7hMKoQFK+DI1RcF{x3^s;Z!1 zwnM%XC6%f~GL6l(%BQLhZT=z{6zEL-=sWO`C+;o!IHTEyDDoZRK_~Ksm*zK3H08Gg z#c7wtc9Zw_XdHQ&64yBFb%6w;%Hv$me68N2)P5A01VN>n%IB zJrOF#ztIH^Xtn{Zr|^_!DJ2#}_GEJxzBQ^ucw;2iO0QH7up5>E|#0jO7YTNbqU(XdFWQ?e*{O!^z6)I->SctYLwFD!ffKuPeR zB@j;&P-t{+azG+ERsEeB6dLD1i4|)^7$0LMXU1+X()q@5#=~?gg1`s)PGp}dfx(6B z{XpS+iteD0_nzy#;%tle^B!XDO#L-RXL$`4yGY#`(E9cE8+T~tfYMNTCV@iI<|ghG z$?3ZJQ^&nnlhwVIVO$uRqH@04r$v8ruhEVx-G3fu&SqgbmypL z_H=KzzV^0pjKaKEcS>5R77sfXnN;OID0MmAlxS6C9bKFP6zUVv77idEbh4>lqLi+h zff+Opfyy*{$^-=iKx*coT^n~dzp{=|mYQYo_g-%P4GYG+_gO*cw{L z)Z{eKjB5UE=3zUz=@@O@pc%@nu8}xAG_}w$wwgC@fD8yv4JeYGKa$1XPjZ+4f z+41$b2(xIkEEYo<1WGYz?YMLHjh-{6%SZ!qY!Cfub$kAe-k!L79=9rB{hRsvF)^NE z^dXB@sLl0!dtClr_1B07?tDqnBbk_~^4@EHruyRyg?T)@*Uahz8kksT`M?pu6E9WA zNb&oAY4O>)CPhzRy0JQ~U5Bfm=kW(;b$;BIMq27A(0(G-Vu@6PcxuV3`L-W;>;%z`wN9`8kdV8TOabqK9Zw?;C8?)1QjFy|_j_Fo?H88KrNlMypUF&Qyq6q6A%Mll&NV-%ASGe$8PF=G^y z5i>?H88KrNlMypUF&Qyq6q6A%Mll&NV-%ASGe$8PF=G^y5i>?H88KrNlMypUF&Qyq z6q9i=M)|R24WyO@ulmvB2U2T<$BPxo@nWqc_EW;=q2bRbZ9@M>GcNF`rQ#?$b+eN5 z^s-Ks+QEB4VI$Lz{lP%KKWGHsrZKp&{n};Pac4(^ho5z};VCKkddvzOy9DD8(+&N# znTRtqcm$qekQOy|b4OX`T#8q5-L>hSg3Z!Q_93j_`B8(OWF2T=K2j2f^%+G80#Dy^ znxA%^=83Q;*)40Ucd*59!2V8vhi2<-&ihpJul=GWYxOK2w|dhm z6L_ek#g|LEhBfic01vHYV9~6-rGsryAiZGlw&@KXOk-1TT>8A{@xn!p;33^m9+Q19 z-k88c%*ID`=Q}FX&)5$f88RIug$5WH+&czx7WJAW>9=pre9SFd;0c@S;g@{$(1b$c z8+3e9l<_c+SAjz1S+jBQ@w8gahk@b_TcbQfLBVn}HE^0kyS48Z`~eEhcRak{2gYxP z9BgMJtt--+HGMI+eQDAh>Ba&eUOi~PXX*4>i0Xc4O)ld~r_SI%lt2ix<= znZ{8wF$dJo>tN106K}MzU4O3Eh+MW9oSEJ18glRFa%B!rNgw5fR73O+mpjBQ?Y6=Fv;*n_w28qx@)VohO>tjba;-$%yV>?e&L~;ya6EakFTX z{>J*ZAA3tScfnY1W|jsU9EH}@f=`!f-f;2zxF@XUXcF*C)-e-VfClDmZMw}-b!+5e zO)UDRmvah~tSKFL8oKd4pZS=O$(bE%rx+91s|U@&LpM%LeNA&Ql7<#+a(2sNkoOyL ztG3e*cB#_SJ|Hdz?`8fL^*iTXt21}J_)SxXRxJFA(tJtHdzH!Zuoge$l#+UBk1hy@*MCu!9yl)IdDK$$z!B}$9#Frw-WPh!F*3{zLl7_ zf%%gDN;@@QrzYPbz!R|6{vYir%FsVUi@$XK*Lc?}*C)6(NzzKy3bDLBy)KIha`7;1 zK=3o#fS}b#n6$nBmRzEqGNB~?4H7qcW`Ao@z$>Rd+qD{vRE?9ydt7iC)GoT!C)%q= zy~I#IpOdypMZf*0{73mxlxfeE3j4~iU&6!ec8TCZoXZX%XggataSgS9dJ5)@G~iA=-@VgD6VoW2s0D_q6{}8A6oj6oG28*jZTtA5iH5kB#{73k_cTWMKHh`Bh`v@ z_O`&Pn;wH-cPU~!GDwC6KB0K<3U8qVW{||MmTHvpM5##CJ4O^QR#_@S)})Y`^^u50 zU`Q^Rm!Bb9P?1joN&J-vlU`bVKtiyND3&FOR4R$DxBdwxTnR}cu{u7>lO#bJO@czH z5ec94l_|VDjh-OthKELvIMFh(m#1E~LaL3_L>Z;xL>Z+LE27l+mjaBm(mfMu5seK6 zS;gtgBha6FW~$s8FMszWy>?2KRFPF4rylGhkjIzR_@PcgoJy`^#sZlNz6Ctb$@H!*%7@RpyEW~3E_8Qo`7mQlI&it%>% zC0V>>^|JW;Y|1jKJIFG+&!#LR?|>|$`)tY*x*tRdZ?h>$;M@=-xXY#-UG1ZBLXO}r zn{qf$V2u)T1b4qAhc$S;9Cr6ha#+jL%VBrfl%w+;&OU;>Y|7Dj4JSu%_lt5+7L-dT z2Y1<&W9Yjf#&DBODTYA-QVciQl)`xnjU)Q1qMK|=F$`mnVz|ks6wVY}E$OebDMLT# zLJ|FSHf3-&;q=g7|B?*OQ#cvf_Y?iJ17*=)|C}C%`7d}4H<&cin+eOaHrh^1T=)^O zHM(Iog_3CTkC<2(>bQwL*!dYgw;zur#9+@%tQ2edc$q@R;=LGTNuXPtMyb-ulnSv{ zsm5$vrV@!28kts_gvqHmQZALKl^TsmqZ0R3P$&g6do{KP%iWw8SUQP|sjd{8KhlG0`x5qpC!?UNvuBfA8(SdKMFJPFh(!^u)hf@%37mqlX6 z>)IFlHt9n|5wcY$izH%6td!3)Q3g$wYT7WMp;(tnDxxANVnkS5NRw2-35po8$_>vF zB*;%1C6dUM3SDlLd3=IGrcI`$2$HLUV-w=VioUT}4@F5eZn_1MS}jiIH5BmhI zSs3G$Q3+637OzsOu?&KV6;O<<$?J#BLn2yQDHF8V45C!v-a@th6hCVHr_!-GI-6lz z$kB3nkX4ov{+v+WVg|DdO=$31W>G9r=(Rpvm)m;al9J-Wg{tW)C=k&_S9c2~FySGF z9E5&@R)*b@R$65idk7r^QiZqZA=pb`TEQ55lQJ?+D$$BGaNl^b1TH;%v%uz@o6Jl`)Rs@;u)F38nKZjCV7iX&9ge+5!p&!+SW%aUl)sU6-5yCKh zjnbx7u1B|EIYT0nrRRVLllNQEhT9d(Gh%-%xQNd(7q`n6Oxy){=%t@!9vU3M!N$nC zNX`5K!x!G7%4rvswz*&<*Y}Q9V)!_U57Lu+TCOD8SdH}b181hMv5=k( zn~@38(NeXAN)e=j1i>Bi4y%ne%Y+6Z_^A!_ruVtfLpbTdWCqbrOZu?g$s~q$DMN?{ zUXocUJ-=-kO#BtIv98 zH3?EtybRM(tyt6BLPcds35i*rFrikvYe9u!>Zaw3j4Rd%Sa~fdk##}~c5X(ZmN0uU zqjU2^5!Tk4SZ?ag+=}K$^aY*;@g`Cu2NO@>oHQm|ZWTg3AVzr0x=U68+`J$A=V)rH z3;af_mGKtT6efdU;q6b2B}REdfYCj3URE@`_&8)*pNAYTYue;?X z7M}=G_$wN;t@b;*4e4OhT{1VaRx>o3;PWrA@mC^DEeGN z%3}=HgzE+4?T7Wj0$*PcLtG-gHuA&^AKh5NP2ojawHR;qG~CjbwcM<0JPZ1;^{`1M zKCW)mPaEzn=)}@P9Q$QOvR=dZ(gz&uiywm#EaYK`aDvTn zLt~>=U*;xS6fXg<;l{A8B@!2dw4i|@5u_My&-!vKD&jq~4%fsManm2Pdw=lAV`i@##N&8m<4Sd6_PV4a3E z2^(oFP2dHoAWv||`f_V7A;=Egf;-k`t#RwVZKI6&&)f_pu~1L^mv0;!eFMk(MV4DK ztgjTYm8k^*f>aP9xMRL$O>O=t3UKmQa1jc_g1Ne)8k@FJ>jW1M-qO>lODnxwAq#NMAybL5vk+}F?b8ejs08z0q+Kt@?->t<@}aE zZsR3C1CpxQ7(=r%{zVf78u)i-Yzw1Nd19q<6&7MY64-l42_mpsDNU|uizD7};AN&1 zJN6>27v3~0Rh&tgtP=gH=qi~6?-1c77JD>(B1klFFe%oCDZQac8E)DrRb#nr{ROib zD`l-rW;&>1eU*fMfPGX63A#(#w5f9f-7}^p0<|uGY%FyjKcr=a&B9L+ z5$nq^Y;5JVBx@;YD#Bf$Bc+cyS*6jp=aFhijR+y$G;a4%lavxwAKR9Whasr%s)kp=WO7?${$DMn~+ z8Dve8aY9Hleqfl=Vx`B_WCrCqrYaWMQdXvYqYeNh`V6T*IG{^SWAOZa0jLN zp`Y91j2SA&srqJ!lrWqwSw*OQpSvM2NvVRwObGx&2JAA1#ruDbw z-Y<(Ze$%a9m|zobwq;q^gqsany3LZ%29+0aMl zH6}OV{(>Bo1@)zqio0xZlR3fCYw^Y+A+BaHyf5Q?7KCzELc06 zx^Sl8YDs^cO&R))w@^fXolO~>O*lRD*S{o#^Avpx$fgYa##{0>-FHAgCqus~0;~R7 z#2uhxWq{Eg$wQp{={y)6`N#=oWEk(o*ojJWew+dtkADrLAHJZ%orQ7SI3Xk(KY)De zTdRz-h798ewDjgyGQ5I#O@Rn6R=k#0p+BUB+#jB?$+)%Ir|!H62+&;`%x1wfx)UhC zr@I8-Pwc2;b1{B01!n!M3MVdEsbSp|!g6Q=GTG~jtRV|>KyH?zR?6iGDqf0+CDz3? zEZN)=8(GhSRF*fJ=ozPyDQI`81uL6M{zG1z6y}Wli$yKIR};||Y-}AD$H*jn5XMLv z+pznyS+m4hGv>DZ(mp6_lRtWSsn-Z%jP79^ysEcS_rhX8fbf=#>w{T6=ARm6f?9%& zx+(;YqNEZFrOT2MBC|YU%P^}RsrwR?xtxa|#E?6A_=&hv%dHfOEqwTw!@BLrf_NY^ z6gpvSw*2vlaFqZ9~Ous9QMD-qGTa}U@?cM9XV zvnv{PxGQ!}3wvg5@4LASP(TyeVx5m|2-e=;nJNh6nR<*?#D86Eq170h36hK-!03GN z!Ga8-*&#uA%NF*mdVKw@ja$NMHJFIiGSxl*b%3G5ef|8T_%24PMkpC^9!V^MUb2LE z*8AhlBkCOQ$W*9N1Uk7|=43@#+G1du0qU40pnQCcDk#u}op@vUV+igX7>J{N-E<@j z`grT_xs8ehW}|!7ZQxsW%ZqhWmLfGw7!YN`NjKJFpJw|YNaZ>sir-Nafnp{Svo6lW zbKy53Cdh094nAN|h-1)#f9xlXp3o3w!Eb+t9i{m}q@Z93XNy%bk+qT6L{7qTA`{`Q zK>jaiuhaPFqzDT@oPzSO4%}L#j{=pEwB>}m5KQdF^tqM@-*s91mPL>XLIih)S+oTk z=#IbvtL~Cbn%LZfy$hhqvmij91`_nw=xwYo0@ztT;9|clQ)~U32`4b}W)emp@9Dhz z=PJ;IRHH!^QjP8fQcbWjM>g@C%=jx_Zs3C+h8uwr7AnVt9=cg8H&HcoFzoP`|HA+K Ee<)Zu4FCWD diff --git a/docs/bun.lock b/docs/bun.lock new file mode 100644 index 0000000000..33d37c7f19 --- /dev/null +++ b/docs/bun.lock @@ -0,0 +1,429 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "@mise/docs", + "dependencies": { + "@types/markdown-it": "^14.1.2", + "js-toml": "^1.0.1", + "markdown-it": "^14.1.0", + "vitepress-plugin-group-icons": "^1.3.1", + "vitepress-plugin-tabs": "^0.5.0", + }, + "devDependencies": { + "vitepress": "1.5.0", + }, + }, + }, + "packages": { + "@algolia/autocomplete-core": ["@algolia/autocomplete-core@1.17.9", "", { "dependencies": { "@algolia/autocomplete-plugin-algolia-insights": "1.17.9", "@algolia/autocomplete-shared": "1.17.9" } }, "sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ=="], + + "@algolia/autocomplete-plugin-algolia-insights": ["@algolia/autocomplete-plugin-algolia-insights@1.17.9", "", { "dependencies": { "@algolia/autocomplete-shared": "1.17.9" }, "peerDependencies": { "search-insights": ">= 1 < 3" } }, "sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ=="], + + "@algolia/autocomplete-preset-algolia": ["@algolia/autocomplete-preset-algolia@1.17.9", "", { "dependencies": { "@algolia/autocomplete-shared": "1.17.9" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", "algoliasearch": ">= 4.9.1 < 6" } }, "sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ=="], + + "@algolia/autocomplete-shared": ["@algolia/autocomplete-shared@1.17.9", "", { "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", "algoliasearch": ">= 4.9.1 < 6" } }, "sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ=="], + + "@algolia/client-abtesting": ["@algolia/client-abtesting@5.20.1", "", { "dependencies": { "@algolia/client-common": "5.20.1", "@algolia/requester-browser-xhr": "5.20.1", "@algolia/requester-fetch": "5.20.1", "@algolia/requester-node-http": "5.20.1" } }, "sha512-73pnrUixMVnfjgldxhRi5eYLraMt95/MhQHevoFtqwy+t2hfayxYBZXJ2k6JJDld8UmjcWwq3wXnvZJCOm7vZA=="], + + "@algolia/client-analytics": ["@algolia/client-analytics@5.20.1", "", { "dependencies": { "@algolia/client-common": "5.20.1", "@algolia/requester-browser-xhr": "5.20.1", "@algolia/requester-fetch": "5.20.1", "@algolia/requester-node-http": "5.20.1" } }, "sha512-BRiyL+AwPfGTlo3HbrFDMeTK2z5SaJmB8PBd1JI66d6MeP85+38Mux2FFw+nvDOfBwlGaN/uw2AQTOZ9r4JYtA=="], + + "@algolia/client-common": ["@algolia/client-common@5.20.1", "", {}, "sha512-Dk4RhklaAbqLzOeJO/MoIFUjcKYGECiAJYYqDzmE/sbXICk5Uo6dGlv8w4z09lmvsASpNUoMvGYHGBK+WkEGpA=="], + + "@algolia/client-insights": ["@algolia/client-insights@5.20.1", "", { "dependencies": { "@algolia/client-common": "5.20.1", "@algolia/requester-browser-xhr": "5.20.1", "@algolia/requester-fetch": "5.20.1", "@algolia/requester-node-http": "5.20.1" } }, "sha512-eu5vhmyYgzZjFIPmkoLo/TU4s+IdsjQ+bEfLj2jcMvyfBD4DcqySKp03TrXjdrHPGO2I3fF7dPZOoCgEi1j2/g=="], + + "@algolia/client-personalization": ["@algolia/client-personalization@5.20.1", "", { "dependencies": { "@algolia/client-common": "5.20.1", "@algolia/requester-browser-xhr": "5.20.1", "@algolia/requester-fetch": "5.20.1", "@algolia/requester-node-http": "5.20.1" } }, "sha512-TrUCJ0nVqE0PnOGoRG/RCirxWZ6pF+skZgaaESN2IBnJtk/In14xVmoj8Yzck81bGUY/UI+5dUUOOS7YTSVEhQ=="], + + "@algolia/client-query-suggestions": ["@algolia/client-query-suggestions@5.20.1", "", { "dependencies": { "@algolia/client-common": "5.20.1", "@algolia/requester-browser-xhr": "5.20.1", "@algolia/requester-fetch": "5.20.1", "@algolia/requester-node-http": "5.20.1" } }, "sha512-rHHX/30R3Kkx2aZeR7/8+jU0s6h1cNPMAKOvcMUGVmoiuh46F1sxzmiswHLg6CuLrQ0ikhpdhn3ehFSJwHgp2Q=="], + + "@algolia/client-search": ["@algolia/client-search@5.20.1", "", { "dependencies": { "@algolia/client-common": "5.20.1", "@algolia/requester-browser-xhr": "5.20.1", "@algolia/requester-fetch": "5.20.1", "@algolia/requester-node-http": "5.20.1" } }, "sha512-YzHD0Nqp7AjvzbFrMIjhCUl6apHkWfZxKDSlMqf80mXkuG52wY289zFlvTfHjHK1nEiDslH3uHYAR/poOOa21Q=="], + + "@algolia/ingestion": ["@algolia/ingestion@1.20.1", "", { "dependencies": { "@algolia/client-common": "5.20.1", "@algolia/requester-browser-xhr": "5.20.1", "@algolia/requester-fetch": "5.20.1", "@algolia/requester-node-http": "5.20.1" } }, "sha512-sHNZ8b5tK7TvXMiiKK+89UsXnFthnAZc0vpwvDKygdTqvsfmfJPhthx36eHTAVYfh7NnA1+eqZsT/hMUGeZFkQ=="], + + "@algolia/monitoring": ["@algolia/monitoring@1.20.1", "", { "dependencies": { "@algolia/client-common": "5.20.1", "@algolia/requester-browser-xhr": "5.20.1", "@algolia/requester-fetch": "5.20.1", "@algolia/requester-node-http": "5.20.1" } }, "sha512-+fHd1U3gSeszCH03UtyUZmprpmcJH6aJKyUTOfY73lKKRR7hVofmV812ahScR0T4xUkBlGjTLeGnsKY0IG6K6Q=="], + + "@algolia/recommend": ["@algolia/recommend@5.20.1", "", { "dependencies": { "@algolia/client-common": "5.20.1", "@algolia/requester-browser-xhr": "5.20.1", "@algolia/requester-fetch": "5.20.1", "@algolia/requester-node-http": "5.20.1" } }, "sha512-+IuiUv3OSOFFKoXFMlZHfFzXGqEQbKhncpAcRSAtJmN4pupY4aNblvJ9Wv0SMm7/MSFRy2JLIoYWRSBpSV2yEg=="], + + "@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.20.1", "", { "dependencies": { "@algolia/client-common": "5.20.1" } }, "sha512-+RaJa5MpJqPHaSbBw0nrHeyIAd5C4YC9C1LfDbZJqrn5ZwOvHMUTod852XmzX/1S8oi1jTynB4FjicmauZIKwA=="], + + "@algolia/requester-fetch": ["@algolia/requester-fetch@5.20.1", "", { "dependencies": { "@algolia/client-common": "5.20.1" } }, "sha512-4l1cba8t02rNkLeX/B7bmgDg3CwuRunmuCSgN2zORDtepjg9YAU1qcyRTyc/rAuNJ54AduRfoBplmKXjowYzbQ=="], + + "@algolia/requester-node-http": ["@algolia/requester-node-http@5.20.1", "", { "dependencies": { "@algolia/client-common": "5.20.1" } }, "sha512-4npKo1qpLG5xusFoFUj4xIIR/6y3YoCuS/uhagv2blGFotDj+D6OLTML3Pp6JCVcES4zDbkoY7pmNBA8ARtidQ=="], + + "@antfu/install-pkg": ["@antfu/install-pkg@1.0.0", "", { "dependencies": { "package-manager-detector": "^0.2.8", "tinyexec": "^0.3.2" } }, "sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw=="], + + "@antfu/utils": ["@antfu/utils@8.1.0", "", {}, "sha512-XPR7Jfwp0FFl/dFYPX8ZjpmU4/1mIXTjnZ1ba48BLMyKOV62/tiRjdsFcPs2hsYcSud4tzk7w3a3LjX8Fu3huA=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + + "@babel/parser": ["@babel/parser@7.26.7", "", { "dependencies": { "@babel/types": "^7.26.7" }, "bin": "./bin/babel-parser.js" }, "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w=="], + + "@babel/runtime-corejs3": ["@babel/runtime-corejs3@7.26.7", "", { "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.14.0" } }, "sha512-55gRV8vGrCIYZnaQHQrD92Lo/hYE3Sj5tmbuf0hhHR7sj2CWhEhHU89hbq+UVDXvFG1zUVXJhUkEq1eAfqXtFw=="], + + "@babel/types": ["@babel/types@7.26.7", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg=="], + + "@chevrotain/cst-dts-gen": ["@chevrotain/cst-dts-gen@11.0.3", "", { "dependencies": { "@chevrotain/gast": "11.0.3", "@chevrotain/types": "11.0.3", "lodash-es": "4.17.21" } }, "sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ=="], + + "@chevrotain/gast": ["@chevrotain/gast@11.0.3", "", { "dependencies": { "@chevrotain/types": "11.0.3", "lodash-es": "4.17.21" } }, "sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q=="], + + "@chevrotain/regexp-to-ast": ["@chevrotain/regexp-to-ast@11.0.3", "", {}, "sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA=="], + + "@chevrotain/types": ["@chevrotain/types@11.0.3", "", {}, "sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ=="], + + "@chevrotain/utils": ["@chevrotain/utils@11.0.3", "", {}, "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ=="], + + "@docsearch/css": ["@docsearch/css@3.8.3", "", {}, "sha512-1nELpMV40JDLJ6rpVVFX48R1jsBFIQ6RnEQDsLFGmzOjPWTOMlZqUcXcvRx8VmYV/TqnS1l784Ofz+ZEb+wEOQ=="], + + "@docsearch/js": ["@docsearch/js@3.8.3", "", { "dependencies": { "@docsearch/react": "3.8.3", "preact": "^10.0.0" } }, "sha512-CQsX1zeoPJIWxN3IGoDSWOqzRc0JsOE9Bclegf9llwjYN2rzzJF93zagGcT3uI3tF31oCqTuUOVGW/mVFb7arw=="], + + "@docsearch/react": ["@docsearch/react@3.8.3", "", { "dependencies": { "@algolia/autocomplete-core": "1.17.9", "@algolia/autocomplete-preset-algolia": "1.17.9", "@docsearch/css": "3.8.3", "algoliasearch": "^5.14.2" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 19.0.0", "react": ">= 16.8.0 < 19.0.0", "react-dom": ">= 16.8.0 < 19.0.0", "search-insights": ">= 1 < 3" }, "optionalPeers": ["@types/react", "react", "react-dom", "search-insights"] }, "sha512-6UNrg88K7lJWmuS6zFPL/xgL+n326qXqZ7Ybyy4E8P/6Rcblk3GE8RXxeol4Pd5pFpKMhOhBhzABKKwHtbJCIg=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.21.5", "", { "os": "android", "cpu": "arm" }, "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.21.5", "", { "os": "android", "cpu": "arm64" }, "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.21.5", "", { "os": "android", "cpu": "x64" }, "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.21.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.21.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.21.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.21.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.21.5", "", { "os": "linux", "cpu": "arm" }, "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.21.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.21.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.21.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.21.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.21.5", "", { "os": "linux", "cpu": "x64" }, "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.21.5", "", { "os": "none", "cpu": "x64" }, "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.21.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.21.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.21.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.21.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="], + + "@iconify-json/logos": ["@iconify-json/logos@1.2.4", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-XC4If5D/hbaZvUkTV8iaZuGlQCyG6CNOlaAaJaGa13V5QMYwYjgtKk3vPP8wz3wtTVNVEVk3LRx1fOJz+YnSMw=="], + + "@iconify-json/simple-icons": ["@iconify-json/simple-icons@1.2.23", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-ySyZ0ZXdNveWnR71t7XGV7jhknxSlTtpM2TyIR1cUHTUzZLP36hYHTNqb2pYYsCzH5ed85KTTKz7vYT33FyNIQ=="], + + "@iconify-json/vscode-icons": ["@iconify-json/vscode-icons@1.2.11", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-V0ldtWPUKe7ZB3CV/TjgDW1Gbz74AxjGPS2NBWDTSn/y25gTwFycI1YcrluDhuVSoQpDEIYmm3JQJkhtSefh7A=="], + + "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], + + "@iconify/utils": ["@iconify/utils@2.3.0", "", { "dependencies": { "@antfu/install-pkg": "^1.0.0", "@antfu/utils": "^8.1.0", "@iconify/types": "^2.0.0", "debug": "^4.4.0", "globals": "^15.14.0", "kolorist": "^1.8.0", "local-pkg": "^1.0.0", "mlly": "^1.7.4" } }, "sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.34.4", "", { "os": "android", "cpu": "arm" }, "sha512-gGi5adZWvjtJU7Axs//CWaQbQd/vGy8KGcnEaCWiyCqxWYDxwIlAHFuSe6Guoxtd0SRvSfVTDMPd5H+4KE2kKA=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.34.4", "", { "os": "android", "cpu": "arm64" }, "sha512-1aRlh1gqtF7vNPMnlf1vJKk72Yshw5zknR/ZAVh7zycRAGF2XBMVDAHmFQz/Zws5k++nux3LOq/Ejj1WrDR6xg=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.34.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-drHl+4qhFj+PV/jrQ78p9ch6A0MfNVZScl/nBps5a7u01aGf/GuBRrHnRegA9bP222CBDfjYbFdjkIJ/FurvSQ=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.34.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-hQqq/8QALU6t1+fbNmm6dwYsa0PDD4L5r3TpHx9dNl+aSEMnIksHZkSO3AVH+hBMvZhpumIGrTFj8XCOGuIXjw=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.34.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-/L0LixBmbefkec1JTeAQJP0ETzGjFtNml2gpQXA8rpLo7Md+iXQzo9kwEgzyat5Q+OG/C//2B9Fx52UxsOXbzw=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.34.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-6Rk3PLRK+b8L/M6m/x6Mfj60LhAUcLJ34oPaxufA+CfqkUrDoUPQYFdRrhqyOvtOKXLJZJwxlOLbQjNYQcRQfw=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.34.4", "", { "os": "linux", "cpu": "arm" }, "sha512-kmT3x0IPRuXY/tNoABp2nDvI9EvdiS2JZsd4I9yOcLCCViKsP0gB38mVHOhluzx+SSVnM1KNn9k6osyXZhLoCA=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.34.4", "", { "os": "linux", "cpu": "arm" }, "sha512-3iSA9tx+4PZcJH/Wnwsvx/BY4qHpit/u2YoZoXugWVfc36/4mRkgGEoRbRV7nzNBSCOgbWMeuQ27IQWgJ7tRzw=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.34.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-7CwSJW+sEhM9sESEk+pEREF2JL0BmyCro8UyTq0Kyh0nu1v0QPNY3yfLPFKChzVoUmaKj8zbdgBxUhBRR+xGxg=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.34.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-GZdafB41/4s12j8Ss2izofjeFXRAAM7sHCb+S4JsI9vaONX/zQ8cXd87B9MRU/igGAJkKvmFmJJBeeT9jJ5Cbw=="], + + "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.34.4", "", { "os": "linux", "cpu": "none" }, "sha512-uuphLuw1X6ur11675c2twC6YxbzyLSpWggvdawTUamlsoUv81aAXRMPBC1uvQllnBGls0Qt5Siw8reSIBnbdqQ=="], + + "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.34.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-KvLEw1os2gSmD6k6QPCQMm2T9P2GYvsMZMRpMz78QpSoEevHbV/KOUbI/46/JRalhtSAYZBYLAnT9YE4i/l4vg=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.34.4", "", { "os": "linux", "cpu": "none" }, "sha512-wcpCLHGM9yv+3Dql/CI4zrY2mpQ4WFergD3c9cpRowltEh5I84pRT/EuHZsG0In4eBPPYthXnuR++HrFkeqwkA=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.34.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-nLbfQp2lbJYU8obhRQusXKbuiqm4jSJteLwfjnunDT5ugBKdxqw1X9KWwk8xp1OMC6P5d0WbzxzhWoznuVK6XA=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.34.4", "", { "os": "linux", "cpu": "x64" }, "sha512-JGejzEfVzqc/XNiCKZj14eb6s5w8DdWlnQ5tWUbs99kkdvfq9btxxVX97AaxiUX7xJTKFA0LwoS0KU8C2faZRg=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.34.4", "", { "os": "linux", "cpu": "x64" }, "sha512-/iFIbhzeyZZy49ozAWJ1ZR2KW6ZdYUbQXLT4O5n1cRZRoTpwExnHLjlurDXXPKEGxiAg0ujaR9JDYKljpr2fDg=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.34.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-qORc3UzoD5UUTneiP2Afg5n5Ti1GAW9Gp5vHPxzvAFFA3FBaum9WqGvYXGf+c7beFdOKNos31/41PRMUwh1tpA=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.34.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-5g7E2PHNK2uvoD5bASBD9aelm44nf1w4I5FEI7MPHLWcCSrR8JragXZWgKPXk5i2FU3JFfa6CGZLw2RrGBHs2Q=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.34.4", "", { "os": "win32", "cpu": "x64" }, "sha512-p0scwGkR4kZ242xLPBuhSckrJ734frz6v9xZzD+kHVYRAkSUmdSLCIJRfql6H5//aF8Q10K+i7q8DiPfZp0b7A=="], + + "@shikijs/core": ["@shikijs/core@1.29.2", "", { "dependencies": { "@shikijs/engine-javascript": "1.29.2", "@shikijs/engine-oniguruma": "1.29.2", "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.4" } }, "sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ=="], + + "@shikijs/engine-javascript": ["@shikijs/engine-javascript@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "oniguruma-to-es": "^2.2.0" } }, "sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A=="], + + "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1" } }, "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA=="], + + "@shikijs/langs": ["@shikijs/langs@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2" } }, "sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ=="], + + "@shikijs/themes": ["@shikijs/themes@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2" } }, "sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g=="], + + "@shikijs/transformers": ["@shikijs/transformers@1.29.2", "", { "dependencies": { "@shikijs/core": "1.29.2", "@shikijs/types": "1.29.2" } }, "sha512-NHQuA+gM7zGuxGWP9/Ub4vpbwrYCrho9nQCLcCPfOe3Yc7LOYwmSuhElI688oiqIXk9dlZwDiyAG9vPBTuPJMA=="], + + "@shikijs/types": ["@shikijs/types@1.29.2", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } }, "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw=="], + + "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.1", "", {}, "sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg=="], + + "@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="], + + "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + + "@types/linkify-it": ["@types/linkify-it@5.0.0", "", {}, "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q=="], + + "@types/markdown-it": ["@types/markdown-it@14.1.2", "", { "dependencies": { "@types/linkify-it": "^5", "@types/mdurl": "^2" } }, "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog=="], + + "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], + + "@types/mdurl": ["@types/mdurl@2.0.0", "", {}, "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg=="], + + "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], + + "@types/web-bluetooth": ["@types/web-bluetooth@0.0.20", "", {}, "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow=="], + + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + + "@vitejs/plugin-vue": ["@vitejs/plugin-vue@5.2.1", "", { "peerDependencies": { "vite": "^5.0.0 || ^6.0.0", "vue": "^3.2.25" } }, "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ=="], + + "@vue/compiler-core": ["@vue/compiler-core@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q=="], + + "@vue/compiler-dom": ["@vue/compiler-dom@3.5.13", "", { "dependencies": { "@vue/compiler-core": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA=="], + + "@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/compiler-core": "3.5.13", "@vue/compiler-dom": "3.5.13", "@vue/compiler-ssr": "3.5.13", "@vue/shared": "3.5.13", "estree-walker": "^2.0.2", "magic-string": "^0.30.11", "postcss": "^8.4.48", "source-map-js": "^1.2.0" } }, "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ=="], + + "@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA=="], + + "@vue/devtools-api": ["@vue/devtools-api@7.7.1", "", { "dependencies": { "@vue/devtools-kit": "^7.7.1" } }, "sha512-Cexc8GimowoDkJ6eNelOPdYIzsu2mgNyp0scOQ3tiaYSb9iok6LOESSsJvHaI+ib3joRfqRJNLkHFjhNuWA5dg=="], + + "@vue/devtools-kit": ["@vue/devtools-kit@7.7.1", "", { "dependencies": { "@vue/devtools-shared": "^7.7.1", "birpc": "^0.2.19", "hookable": "^5.5.3", "mitt": "^3.0.1", "perfect-debounce": "^1.0.0", "speakingurl": "^14.0.1", "superjson": "^2.2.1" } }, "sha512-yhZ4NPnK/tmxGtLNQxmll90jIIXdb2jAhPF76anvn5M/UkZCiLJy28bYgPIACKZ7FCosyKoaope89/RsFJll1w=="], + + "@vue/devtools-shared": ["@vue/devtools-shared@7.7.1", "", { "dependencies": { "rfdc": "^1.4.1" } }, "sha512-BtgF7kHq4BHG23Lezc/3W2UhK2ga7a8ohAIAGJMBr4BkxUFzhqntQtCiuL1ijo2ztWnmusymkirgqUrXoQKumA=="], + + "@vue/reactivity": ["@vue/reactivity@3.5.13", "", { "dependencies": { "@vue/shared": "3.5.13" } }, "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg=="], + + "@vue/runtime-core": ["@vue/runtime-core@3.5.13", "", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw=="], + + "@vue/runtime-dom": ["@vue/runtime-dom@3.5.13", "", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/runtime-core": "3.5.13", "@vue/shared": "3.5.13", "csstype": "^3.1.3" } }, "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog=="], + + "@vue/server-renderer": ["@vue/server-renderer@3.5.13", "", { "dependencies": { "@vue/compiler-ssr": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "vue": "3.5.13" } }, "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA=="], + + "@vue/shared": ["@vue/shared@3.5.13", "", {}, "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="], + + "@vueuse/core": ["@vueuse/core@11.3.0", "", { "dependencies": { "@types/web-bluetooth": "^0.0.20", "@vueuse/metadata": "11.3.0", "@vueuse/shared": "11.3.0", "vue-demi": ">=0.14.10" } }, "sha512-7OC4Rl1f9G8IT6rUfi9JrKiXy4bfmHhZ5x2Ceojy0jnd3mHNEvV4JaRygH362ror6/NZ+Nl+n13LPzGiPN8cKA=="], + + "@vueuse/integrations": ["@vueuse/integrations@11.3.0", "", { "dependencies": { "@vueuse/core": "11.3.0", "@vueuse/shared": "11.3.0", "vue-demi": ">=0.14.10" }, "peerDependencies": { "async-validator": "^4", "axios": "^1", "change-case": "^5", "drauu": "^0.4", "focus-trap": "^7", "fuse.js": "^7", "idb-keyval": "^6", "jwt-decode": "^4", "nprogress": "^0.2", "qrcode": "^1.5", "sortablejs": "^1", "universal-cookie": "^7" }, "optionalPeers": ["async-validator", "axios", "change-case", "drauu", "focus-trap", "fuse.js", "idb-keyval", "jwt-decode", "nprogress", "qrcode", "sortablejs", "universal-cookie"] }, "sha512-5fzRl0apQWrDezmobchoiGTkGw238VWESxZHazfhP3RM7pDSiyXy18QbfYkILoYNTd23HPAfQTJpkUc5QbkwTw=="], + + "@vueuse/metadata": ["@vueuse/metadata@11.3.0", "", {}, "sha512-pwDnDspTqtTo2HwfLw4Rp6yywuuBdYnPYDq+mO38ZYKGebCUQC/nVj/PXSiK9HX5otxLz8Fn7ECPbjiRz2CC3g=="], + + "@vueuse/shared": ["@vueuse/shared@11.3.0", "", { "dependencies": { "vue-demi": ">=0.14.10" } }, "sha512-P8gSSWQeucH5821ek2mn/ciCk+MS/zoRKqdQIM3bHq6p7GXDAJLmnRRKmF5F65sAVJIfzQlwR3aDzwCn10s8hA=="], + + "acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], + + "algoliasearch": ["algoliasearch@5.20.1", "", { "dependencies": { "@algolia/client-abtesting": "5.20.1", "@algolia/client-analytics": "5.20.1", "@algolia/client-common": "5.20.1", "@algolia/client-insights": "5.20.1", "@algolia/client-personalization": "5.20.1", "@algolia/client-query-suggestions": "5.20.1", "@algolia/client-search": "5.20.1", "@algolia/ingestion": "1.20.1", "@algolia/monitoring": "1.20.1", "@algolia/recommend": "5.20.1", "@algolia/requester-browser-xhr": "5.20.1", "@algolia/requester-fetch": "5.20.1", "@algolia/requester-node-http": "5.20.1" } }, "sha512-SiCOCVBCQUg/aWkfMnjT+8TQxNNFlPZTI7v8y4+aZXzJg6zDIzKy9KcYVS4sc+xk5cwW5hyJ+9z836f4+wvgzA=="], + + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "birpc": ["birpc@0.2.19", "", {}, "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ=="], + + "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], + + "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], + + "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], + + "chevrotain": ["chevrotain@11.0.3", "", { "dependencies": { "@chevrotain/cst-dts-gen": "11.0.3", "@chevrotain/gast": "11.0.3", "@chevrotain/regexp-to-ast": "11.0.3", "@chevrotain/types": "11.0.3", "@chevrotain/utils": "11.0.3", "lodash-es": "4.17.21" } }, "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw=="], + + "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], + + "confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + + "copy-anything": ["copy-anything@3.0.5", "", { "dependencies": { "is-what": "^4.1.8" } }, "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w=="], + + "core-js-pure": ["core-js-pure@3.40.0", "", {}, "sha512-AtDzVIgRrmRKQai62yuSIN5vNiQjcJakJb4fbhVw3ehxx7Lohphvw9SGNWKhLFqSxC4ilD0g/L1huAYFQU3Q6A=="], + + "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], + + "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + + "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], + + "emoji-regex-xs": ["emoji-regex-xs@1.0.0", "", {}, "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg=="], + + "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + + "esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], + + "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + + "focus-trap": ["focus-trap@7.6.4", "", { "dependencies": { "tabbable": "^6.2.0" } }, "sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "globals": ["globals@15.14.0", "", {}, "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig=="], + + "hast-util-to-html": ["hast-util-to-html@9.0.4", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^6.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA=="], + + "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], + + "hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], + + "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], + + "is-what": ["is-what@4.1.16", "", {}, "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A=="], + + "js-toml": ["js-toml@1.0.1", "", { "dependencies": { "chevrotain": "^11.0.3", "xregexp": "^5.1.1" } }, "sha512-rHd/IolpFm2V5BmHCEY8CckHs8NDsYZZ64H5RNgA6Opsr9vX4QyTiQPplgtqg7b3ztqYShZC38nl6CUg7QuhXg=="], + + "kolorist": ["kolorist@1.8.0", "", {}, "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ=="], + + "linkify-it": ["linkify-it@5.0.0", "", { "dependencies": { "uc.micro": "^2.0.0" } }, "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ=="], + + "local-pkg": ["local-pkg@1.0.0", "", { "dependencies": { "mlly": "^1.7.3", "pkg-types": "^1.3.0" } }, "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg=="], + + "lodash-es": ["lodash-es@4.17.21", "", {}, "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="], + + "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="], + + "mark.js": ["mark.js@8.11.1", "", {}, "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ=="], + + "markdown-it": ["markdown-it@14.1.0", "", { "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", "linkify-it": "^5.0.0", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" }, "bin": { "markdown-it": "bin/markdown-it.mjs" } }, "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg=="], + + "mdast-util-to-hast": ["mdast-util-to-hast@13.2.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA=="], + + "mdurl": ["mdurl@2.0.0", "", {}, "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="], + + "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + + "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="], + + "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="], + + "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + + "micromark-util-types": ["micromark-util-types@2.0.1", "", {}, "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ=="], + + "minisearch": ["minisearch@7.1.1", "", {}, "sha512-b3YZEYCEH4EdCAtYP7OlDyx7FdPwNzuNwLQ34SfJpM9dlbBZzeXndGavTrC+VCiRWomL21SWfMc6SCKO/U2ZNw=="], + + "mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="], + + "mlly": ["mlly@1.7.4", "", { "dependencies": { "acorn": "^8.14.0", "pathe": "^2.0.1", "pkg-types": "^1.3.0", "ufo": "^1.5.4" } }, "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "nanoid": ["nanoid@3.3.8", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w=="], + + "oniguruma-to-es": ["oniguruma-to-es@2.3.0", "", { "dependencies": { "emoji-regex-xs": "^1.0.0", "regex": "^5.1.1", "regex-recursion": "^5.1.1" } }, "sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g=="], + + "package-manager-detector": ["package-manager-detector@0.2.9", "", {}, "sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q=="], + + "pathe": ["pathe@2.0.2", "", {}, "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w=="], + + "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + + "postcss": ["postcss@8.5.1", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ=="], + + "preact": ["preact@10.25.4", "", {}, "sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA=="], + + "property-information": ["property-information@6.5.0", "", {}, "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig=="], + + "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], + + "regenerator-runtime": ["regenerator-runtime@0.14.1", "", {}, "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="], + + "regex": ["regex@5.1.1", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw=="], + + "regex-recursion": ["regex-recursion@5.1.1", "", { "dependencies": { "regex": "^5.1.1", "regex-utilities": "^2.3.0" } }, "sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w=="], + + "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="], + + "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], + + "rollup": ["rollup@4.34.4", "", { "dependencies": { "@types/estree": "1.0.6" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.34.4", "@rollup/rollup-android-arm64": "4.34.4", "@rollup/rollup-darwin-arm64": "4.34.4", "@rollup/rollup-darwin-x64": "4.34.4", "@rollup/rollup-freebsd-arm64": "4.34.4", "@rollup/rollup-freebsd-x64": "4.34.4", "@rollup/rollup-linux-arm-gnueabihf": "4.34.4", "@rollup/rollup-linux-arm-musleabihf": "4.34.4", "@rollup/rollup-linux-arm64-gnu": "4.34.4", "@rollup/rollup-linux-arm64-musl": "4.34.4", "@rollup/rollup-linux-loongarch64-gnu": "4.34.4", "@rollup/rollup-linux-powerpc64le-gnu": "4.34.4", "@rollup/rollup-linux-riscv64-gnu": "4.34.4", "@rollup/rollup-linux-s390x-gnu": "4.34.4", "@rollup/rollup-linux-x64-gnu": "4.34.4", "@rollup/rollup-linux-x64-musl": "4.34.4", "@rollup/rollup-win32-arm64-msvc": "4.34.4", "@rollup/rollup-win32-ia32-msvc": "4.34.4", "@rollup/rollup-win32-x64-msvc": "4.34.4", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-spF66xoyD7rz3o08sHP7wogp1gZ6itSq22SGa/IZTcUDXDlOyrShwMwkVSB+BUxFRZZCUYqdb3KWDEOMVQZxuw=="], + + "search-insights": ["search-insights@2.17.3", "", {}, "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ=="], + + "shiki": ["shiki@1.29.2", "", { "dependencies": { "@shikijs/core": "1.29.2", "@shikijs/engine-javascript": "1.29.2", "@shikijs/engine-oniguruma": "1.29.2", "@shikijs/langs": "1.29.2", "@shikijs/themes": "1.29.2", "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } }, "sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], + + "speakingurl": ["speakingurl@14.0.1", "", {}, "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ=="], + + "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], + + "superjson": ["superjson@2.2.2", "", { "dependencies": { "copy-anything": "^3.0.2" } }, "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q=="], + + "tabbable": ["tabbable@6.2.0", "", {}, "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew=="], + + "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], + + "uc.micro": ["uc.micro@2.1.0", "", {}, "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="], + + "ufo": ["ufo@1.5.4", "", {}, "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ=="], + + "unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + + "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], + + "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], + + "unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], + + "unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], + + "vfile-message": ["vfile-message@4.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw=="], + + "vite": ["vite@5.4.14", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA=="], + + "vitepress": ["vitepress@1.5.0", "", { "dependencies": { "@docsearch/css": "^3.6.2", "@docsearch/js": "^3.6.2", "@iconify-json/simple-icons": "^1.2.10", "@shikijs/core": "^1.22.2", "@shikijs/transformers": "^1.22.2", "@shikijs/types": "^1.22.2", "@types/markdown-it": "^14.1.2", "@vitejs/plugin-vue": "^5.1.4", "@vue/devtools-api": "^7.5.4", "@vue/shared": "^3.5.12", "@vueuse/core": "^11.1.0", "@vueuse/integrations": "^11.1.0", "focus-trap": "^7.6.0", "mark.js": "8.11.1", "minisearch": "^7.1.0", "shiki": "^1.22.2", "vite": "^5.4.10", "vue": "^3.5.12" }, "peerDependencies": { "markdown-it-mathjax3": "^4", "postcss": "^8" }, "optionalPeers": ["markdown-it-mathjax3", "postcss"], "bin": { "vitepress": "bin/vitepress.js" } }, "sha512-q4Q/G2zjvynvizdB3/bupdYkCJe2umSAMv9Ju4d92E6/NXJ59z70xB0q5p/4lpRyAwflDsbwy1mLV9Q5+nlB+g=="], + + "vitepress-plugin-group-icons": ["vitepress-plugin-group-icons@1.3.5", "", { "dependencies": { "@iconify-json/logos": "^1.2.4", "@iconify-json/vscode-icons": "^1.2.10", "@iconify/utils": "^2.2.1" } }, "sha512-1f1NP7osRYlNTR0yS5CAqcaasKHRSAzFKpeCUOfCPwYLAFxhCxsEbRtPBm0U1CfrDVa303MsjX18ngGpFGxIMA=="], + + "vitepress-plugin-tabs": ["vitepress-plugin-tabs@0.5.0", "", { "peerDependencies": { "vitepress": "^1.0.0-rc.27", "vue": "^3.3.8" } }, "sha512-SIhFWwGsUkTByfc2b279ray/E0Jt8vDTsM1LiHxmCOBAEMmvzIBZSuYYT1DpdDTiS3SuJieBheJkYnwCq/yD9A=="], + + "vue": ["vue@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/compiler-sfc": "3.5.13", "@vue/runtime-dom": "3.5.13", "@vue/server-renderer": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ=="], + + "vue-demi": ["vue-demi@0.14.10", "", { "peerDependencies": { "@vue/composition-api": "^1.0.0-rc.1", "vue": "^3.0.0-0 || ^2.6.0" }, "optionalPeers": ["@vue/composition-api"], "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", "vue-demi-switch": "bin/vue-demi-switch.js" } }, "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg=="], + + "xregexp": ["xregexp@5.1.1", "", { "dependencies": { "@babel/runtime-corejs3": "^7.16.5" } }, "sha512-fKXeVorD+CzWvFs7VBuKTYIW63YD1e1osxwQ8caZ6o1jg6pDAbABDG54LCIq0j5cy7PjRvGIq6sef9DYPXpncg=="], + + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], + } +} diff --git a/docs/bun.lockb b/docs/bun.lockb deleted file mode 100755 index 9377ed494ca832a1c36022daa3b2b618c8bc1626..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86577 zcmeFZ2T)bZ)-}4xQL=&p5+w+d1qn)!oFynIIZDnFL_h&i5kbj8B`N}vGfD;l1qCEX zk{|-2L`e$rx`lo2`oFsO9z49N_rI!d*6BUywR(&>JFeBew}*v^*Tc<~*UZL|*V6F{ zqnU>zAxJ0eoy_g5Z0s#hSUI^mn7W_1!bgaSLZSNnCmo&4$0NP2-!bBJj#2Db51P5j z&lYIrl_^A7I9r%<4g-`zp+5ZnM4|Bi2L|lsS9*8<_zi?8RDde@>ma}@9+tnaaRDJJ zke>rNB7o5#PY!ScbM-x;T>VkVH0)SU++<#Zd%FXf$h|SH?&CJ8b-U8(b3R8porT`BCRN2LoyU4JM zgaBc?tb#^>?J>TK9lKb$i%)j(!7lpkqU|nT07wb=vb)H?i$`~n7$9uVA0Tju)4SNa zi;cVJ>SS;4;fzAjfuQI?IT#!rzzGl>%(nqN3@``aQGmAqvI4vekP)Er?say6EFg~q z5cbDs5F7)*SG)KOAmrcK%{u~wezXC?_LT<+``zubjhzi>Ya`IuBp{y%Zi1==sDi?v z=>h^lo(5nIz#{;KK#;JXT`jFGy#VhCxDMl$0DP#Y0Gz`9_wlrGH@^%xASl=#jR1ew z3n0|P1_=9Y0h9+-2p9nf%Uyx92I$g*N0mAtFz;)PP zjC?zo01#exwX!e=-GI6e@}Nk7IsZ<3+qj+Zylm=@x(TksadHJ989)acchD**)MY0p zJ6L}+8&_v2U=PT@`*n97gTDHm?-bne*8~v8r3A{seqsg)$Jv_DPTU7U9`>`dtEH(q z@ZfoJ$KNU8o$G|BcH-?3*%@DV0K$G62lt`g9LU3QUj`6#VL&oKYJlzlVL8cN)CCBJ zWB?mLI8I3cQUhEAI&j=n1BCMs55xoK3Ds`?%;_EdA0RFmH`y5!>I6W0a39VS&^*8W z-;vzmIoR8KgG(q6D<=r3<5D~A>ulK*@@fT#?jl-%hKE#T!--)0t9^! z0H(+9{_`;Baj-FWb<&gF$vaqhxY~nz>L3rtx2dbOv#G0_rLEfucP9sXl-KWx?~GcJ z+i5>b`5irdfY5&lxDI(w6?Wo|0SL!e@GjZ|gzakp5RMx;fUuoI*Y!RK<{i)*e~@}? zRA1fNMfm5}z|YI2@e8`Td5fQ({936MW#Bs0yinkI-k75GxvE&5ZKBX4HH^wFAEQP; zbFQ8=*G{`agL;4UF{h7JMnsp_ZG^JkrIMbNA0$2f?bIR4&#D}^6zim^vTcs!oxl27 z(+5jUH@@sx(-UoWT3c-VT<(SkdqZPNRnqW98rL?+E$w~@wZ{i}Tz_~e z^o%hFwhfsA!4I$Uh#SgrK*3T!i&QZzq)@N2aRTeje7#>!7S)Z>$%;VQ?7dUFdq=dv-m zm{;mEKifI{V_keQ3C3l(q?p30Z%R`h6#LXo-p{0@R#=;gabHT2T&=RHkjNCmb@)6o zQu8od;H9Xh{h%UghV=bgu8Hi!x0DW$j(75NZ@%87_tC(Z^z8|d#5-r@daKn!XQU=2 zt^qRfB{q zq_gN4wjtkiFeR>gmxX=DGUmC2xjCui&R-?lUzZ4vv>mIWIz(X@9)IJE5$22c^Y|a> zU)s-c>Bt6BznPO$Ie))dYjQQ^VPB09+t?=Q*75Ox0A*&zZ!i57U$WHkDFp=u7h!(7 zX{xMvoJ?%%>JzzuwgX8j4XJpHc3(1*g>weaPzN5ie$&Qod<28a#7ofS+}qFh?ph?s z_+Y;Z$nJ?N$l$$bhruc!aKpq<=d*D7tJl*S6_1LK^yt`Fn~|BlnewT6#`Rh8pmyk5 zkZ$0#1n zBVyY-ybg9gi&u&+ygo8_fk$T5X)x7B+u#^vlY z)6xVJ^t?pR7xX+q&l~hSMbF#+G+)v45h>!Lq++|_JR+WPv%UFp>?f~UlbOU(Hlkk!6?fgb zY49jUa!c61o_6vMq<9u4tiDQrN0m&$i}|C`iwjHb7UtI0guLhYT$>O0ey&Z4?p~H_ zwvu-(a%*^m*+<#TuHOFgF?t?<`{F=FZ+l}rz9-gsMgGDASM>sef{|Rs7q@TT%Daup z^6sMGg+BWbW&u)Wl*h|+wAU?up67pM)1vhDTW3VR!l?1P!_SIZ+YW!aHkY*&FY&g^ zLoZsp^y6uh`#guu2)TZIV;MCdd>V0ZLbB-$$=qOEkG@c_;z;k4^wD=yAD`JIJJ5ez z@+rwZc7^F+vtna8-Rxu(?%5aF(^o20x8JzRWAunF)=F_yD!tW3J^oHUe56p~r%Smo z*Cy(D;}fo=iq_A8L|(o^0n+t{h#p|{_^W-3$j_P~7;zQAe507B%0u>wCq&_b6=lc9 zpa-_$w==@3?di&AUw3Bt2fQ&$=+3V^RKqqvL3DxuDzwGKS3#uHVQdQYsJb_iL z`pl!$N9v8oqd53|KdgmYR3?8~JV1^SO9ruJTd|tUH1Y}LSskT zn$wFLdrJDk6-#*1C5^{JBS2*2Z1x)-Xi z$}5$2s*`PQ)EAq0Q&kMT?)!Pr@5G%xcM}YjhKray@0p7823%7vlSsI*@{-VDlFs#< zuODfC^xmM?pXGGR-6JiXSour1269f>n5UMDiL>6l6T?or{FLHVzWOV1Y?-kak^)@M zjj{;nNRRUzeJf9m`(fw{jV6s0+lGWdfBQY$;FlDa8xHz!Oj_VXoVfczC&Q(0!i@q0 zK8*Kan7dq4fLh?W2(viwV~>XB*MRci6)yk_AmoE*^PUXNR{|AL-3R{(;EU~pKMMHZ zmEs@A&ju>8AHE;pEAGSpH^7$xd{7M(_!9+jF9yp(;{_cD`RF_vckce@PjopKzz46! z0ob7EKN&yOfG+{~cz_Sy*Zw+*_|Kkq?x6kS0>`lb|0zEl@ZtDF>;0Wy^nG;sLBO{{ z_=j=q#n60d&}e%5;Ku{LEa3ms`L_l5GW+05;_h$!2LnFX!u*aOj$K%fy%@Uvs`lys z0O&ASfAsv>i*Hy4?Oy}%!4@t694Dc`P=IUUo(#>80DL(9p?`GRivXHG0Qg`F`@8*M z+kxz!49zD2fy)3sB!PYFAFtnbfDfM^F!p~k|Jwl{&fkB^9|xOOaAXhweZ%$#d%`^# zy8g<50M{>=hwb;L<1Y;GVgEy?;2dDjZGiTF4?Hl{_rV_me7Ju7Q~w;`&|^P*_kHqf z_sJ&)ha}4TsQ-DuSKJ5x(LVW~_sQoW-Cz7y_Q|i_Cm$Ca&g`fC)%VGd0ety=^#9O4 z`OM(ZYCrxj?~|Vk__F(`|I$AB!r%~bKmL98$*^V>Zedi@s# z4~E@ckDW z*v{<9(CddL;0x~Z!BqHbU-EY%X#NMlNAExW3I8DY(hI)-qTie0I=B}@`_}_}Q3M}- z{qHo;?nLvSKhge% z0skW4?=^0;BAPG4xO093^XNH@F7w|I%?}5BIR4OiH2ya(yoW9~0r;AL57&)af&0hk1^?k%I#k#Zpqxz3zK>`w{KuKOwsOC%}i#Pv{$c?LTpl*U@DK*>|4b==q06 zWZ8fBH=1t`_;CH+YusopG`}41;rjPa`S=|F=lZ)>9khP~z=!>Z&hNDk(d8omUjp#) zK*jdTg>8W5zX5#s{)G>&f!|5(Sp&_-;{2C?TqwLpL-Qp8{}k{Kx#(+qkwBOA1bijH z|C89EKALZTeCPcIUIRyIe|-Mi2l%|eKkRoncENPmlcD|Na{cT3mw&=n27LK__>Ta5 znSJoP03W{p{nPprbN_4p{*(Ia0semK|7f55Pk^tukNR_;_}BaaTj@Xk{^c^@@2CE` zfRCR4u>HYw+LNKj@8oX$=(Pupete{o{ZyPvH3{I=>e#EQ2mD1^DRmN4Wl>um7D6x?Bk03j_b~ zxkU-mpN`*`fDfNPkoQmgUj@!#|HH8d+y77J-%&96;Qarmd@I1$+6TWJ@KyK0#|DEJ zj=z5zzdGRS?SuaW@D29C#{@6W>ighp0{(v5FKM6rX~2i)H~+N#<-z3L&-jT0{Qb1w zXTaCoNBqKI^L=?A{6~Nf*WZ6S|N8*n8t~z~htHlrU4N{=;&Wji{Fi{Qy$}BBGbohz zKKP}8uK@UPJw5=^UJbo|Zvno^u7B8ef4Y9gftN4z^9QZDml)7xe*ivwe}I1BJNTdW zpP&>9#k0#tzk~dVe^bB*Q~0-k7}KBDKN0Z3E7)&7?AeBrY@{RcU)?tkjv5%A&j2lAliUi$#;{{`SnA^0$cy%?HL zD*Lbf-(F*f`e?p6;KT6?^Z$gO2>4(L{muU;?e_uj;rKT!7{!=~?*gV4V2gm&pkp6W1djUS& ze*x<6_47~tzXE(|z=wU$0Y&y`==$R;{OkM;QvY=P=L0_Me{8@d2k9Ub*@L0|e+7Ja zeuCb2{;7X1#r^SZ0Ux&iKlNV$_~`RXSnWTJe--fI`P-lRhrZx`6(-o0_`83@XE2Nb z_60PE@IKrdLxlYU$2uIV(Ec65F-Qv%)HwGv2Lzn^f-w=+ICm_M{ znY)+;5cJCDF`EDMG@Os7Wb%-!u zxtsrQ2+LLNmV*f2CEGxPe&2uu+oua8IA3}}g4g>&g1iqPL4ye69|8&9AKArGfN;J} zf&>jBY_B#L^E)3q2=f@=10v?{ zn}3F|9@v0K43G>U%%lI|D-xkJCHR0y1wVEXmOr$chX~iWqX0<&as!0*=iR;k?-1VN z10N9icToT!EXA z20$411%Och((ZkT@V?P*{@)?gH`%?9M0m+`_c{_`dGp=tNQ9Rxzz0N2@Bzo89nAa( zgtzQ>??Z&TjsW2$r`@~@%m70o)b-rG{@)Pld4qDW{?H%~CU_mT75p3aF}zO>5;TbL z{{KG5U~Bw;`y8YI{;&Ry;{OhW%rp|X1PXJio6yLMQHu%7;w3o zOoNNwU(Nn;J|okFX*MGB&NZ%ecO5^3F8bLHwXs>;IlTBr$X2bES+6W4>iwvYSU#JT za7N^2*)1HMaaS%J4Tgr;LL1tb$yR|a{28W|%gng|BH*n|Go2XJ3CD#^-cpu5QRzDA|SSgL-yVv3PZA(L@*M^DJ zGR~JP7@PA}d4FCmLKnVcqYc~Z1>M}QL|+pv!54>5nSYkc?z$u>N1Ye$K_k0yPATYJ z@=+#VRL79(ourz041)uY^cBVf&J4EB@cJ*=i!S9!Aavog32oTl9mDM(ic}G+(4~t= zh9&WzdhuDa^MzU6K=Dm6*5f5EM7ATjEVnnEhql^8dgv)zswTL((i+-AFWe zfY62S>}bPg;=Zm%$;N*(S)0b-DHC4TkqdGk+cHm{YO`fHLvY1_fMz95^9Mc03wb4G zmg%R4@8cOZ#sh?1v9RtDPRq?)+T&yXhMAtTP9*)& z)Z0m7Q*%*V_}mfO2wmiPH}(ZZbA}N4GYnE`3GM>h2KsFgtIP~pCKms{!b>Q$nbp0~+Z85dRGmXn9J3I%i~eIb0;^(MVB z1)&S~LTJN2X6Hyae^933n9Y#x+vRlz{`WMDd{4e4xZ3hvcd?)JT4ct|6&8J+Dl1r_ zH>tiPcuF`hA+CGmt^rXvZ<~hfMT9Q$y9?~i&v&>~^>W)A5~=huYnBeY4Q|vuXht?^ z&~h$eYkAGcx!=X3)XgK+#B=J_rmpn8Uxzy1GX5~Xikkb?tg?1A6`>2?!_kI~>WF-c zdz^+teIkLm{6{{o-IeaeVZIY~stZR8on-+lyriOht)Q z+GmQqNLcm@Za+A1cfn`t(p-&dheSF4GXMce8kG8e3&j$-tmcM z)UAKmzek=Sbih7ByaC5xf!MZ?MA6)_vq0(|y({inQo{&aLiJK@gf84Cp$%K`Qba_n z?{mzWBEIk3{SMg_q&#s?jyQ3jqNAGAnj(x!)L;{7ojj@AF*%yP(SC+|o27uxPkpY7 zr@ZJ!Qa+XfLKmLRp$&ULPOhu=}~V>eBNqxF7${BEeb0S^V(3e6x@?t4D&-xHcz0W;0t)D|9{e>7~tvMK_`XwbcZ&8xE@-(@*4h#QW3PeBUxQ-pFS3pIA7ZCVm*9ON)#* zJ4lk&exinRK2${dSFDrg*X{AMgz_wCV$hCg;nv<^HYiGVU(jWi)cs(Y{6$@{Y zql!b zhUmZz%kYc>hkAz2`I0AmZCP{{m7h+`zo4f%T8^_$uNVJted3a8c>IqMHQ_$X_T(hN z80wGkj0rt{(dX_^9y{ScheVTCuy1~S0#@_4cOJPe`030)79y?kD84^#e4;4b@7rdS zOCfY#_Tz-|nyX&Z+k^b<&wgk}De`veJh`3?UiN_W@87sGAme4q?1-Dc!}`3;@yr!> zoiO~@f<0I(Bxz!9nD1*mO3o4&L^2=pel_6dDmoQAuV@>@h5yD-Yx;hZcN<3Un*GS_f_o$h)bES0j|@i_$LFBtKb^&BAj+vf zY_laItix>luDOMQX?#}~HZluR*G(mMMUx7LWLT9iE&D5di`jJTD+h(eOd?BBrrVNV zPb<8S!R*RDN?KFW%R)L}p(66$0Kd`TE)NZVtIQjFip^bJIL=s+x}=1$&ysQ@BbfEA z*Ul}C%L;gtiFmD@5)&Vyi+=P;^YyAex!tI1n$hEpvU>eK9a`xXirF=C{FHn%S~ZMt ziTk^{0YLK@QrB9ML~Uf_{K}WM+^Iri&$qZKE<)-zvga_Gv9xOP#I|{kQfhHh7HW@_ zJRp)Gz3}qWop4T8LWU}7^;T<@t5OTUby4_?K$8urOIM`U@X@7k(_`SAv^F8-f}BhN zSEtZP7vZ=M--@Qz?hP(sYP65_w)B`DYJT**oqbrG_Eeyg>{eo{us8S9qO=`dOgPTi zk-8nTqD6FHup`#IeVwZXJz5FKeIgD7lAn&jiWx|qN~mFuXq>sJIBN7wK|xJab^VvMSyb_dKKDj%G&CwAKx#>$R>Ea z*2wskFG~^LmLP-P$vSG!OXF!`MZ8tdztI@8RdZc9n&`v6;zh4vN=Ea#JeW8>_}Ndj zPZCDb&&GD!7mnZKNL}_33n7}74*54mojnXrmvGA?+OVjzf;B~PQR_iD-CG&MlKv0Q z2&Wx*^5ki@EZtc)?{rPR1Zl}(-=1FMRege8T{wQZkh-L$;c{{Z=*gTJ=oaOF_)cX_ zXu8W?(s?L_-DYqtCG!9)M$Agkv(#?$XQqdeVr3T@?YFHgd!tKD!g1m*v!%nca13}l z2N3+$R#JtNL79O~2ld z124}Q-}{ySMD9o0dQe9Gtbd-M>u+6rQ~*!}{|x3Y!&b6vqSg%ka8Qju!+xDiCYH$9 zlB?lH*Y>8<*F+TE=V0Znvvd7+FN<&9573XJ(#lRa(A9$9m7`?bdFpoWHiOA;-QUZ@ zU*BIsaqNq?O8I^J?luv*)bk0r4u!HQj62^Fh>pN)KlMH3sK9cP5UQs+j0!u5^crUY zo^uT6l=TggullhnFUkZnzMbINjTepw-oK&+x@PNrB&nU53zHuPJ5LF-CD5(stVMH% z&SWgcak9vJvRPoMxld%NTw+z`2pf3yYLM+lh4hO{(Xtk`d2jT?eARd3h3f+!Qnz5f z^{(-O7_(^F+XtAx#_$`jeu#OL!;odeQNcgZS2A+HyOp=d_J&A6@#^K=Cn{&}42~@c z$@v-JQc=-0MVZ61e()cD0MO(|>XzX7_e`}`3D$qf53W^tUD8t1*lC~^&mMpE^ul>8 zU(-{y+cHtQ*Oq+m(XqNZr|Kmbi1OKeOuD80+y1fdW4gGNGX4^4k+-C#Cdb8+H-nKZFcSj(wf8;`y>^B`= z$)6VnE_$lAy{98BR z_qp}Szf{3^=wTdXc%pS$)FkkPD@$IWqhirA-3;CRgP7<1QSAiZkV zDFUb+aISf@t6mH;^}T)avd0lNBah#@JNtR?+nB!$n|LNW$|6=+?W~}Z`EAsh&@V#I zna4^wO2X!xZ>SfCha2|tcTe6tQB1pX+x)31Yx4$pfE*)H><@^2tHm_yM~G-&k-tj4Zr-l})YfN8YxDY;fa#?@!5ozpzRnYY_YL z)6p44#?!=8YL+6i(+&vTQ%GG)7mKeQs|xZoR3o;1-s2afuF}5U@Mt{ED&~8CT+8oe zb4qM1MIfH!;$(HYI+ojA`&Y(!#)@~@!!X_6(+&?#@9G8sO;M!owIWuO(Z`Ano_E6! zDWmEP8!Q8r9XjhBuillGRf}+ow!NcjH>R0+@nt9y zB}R6~om@n%0hd3fEkZ=;GgrIEw0dC!CiCqBblN#J`5ogGvZ9-J;QtdC11!G*K=I69 zs$iTo7a7o;6cRsZaGHO6$-gVekIHA&g(I+%?!I#8H*bSbeMw6?TjnOucxK~rrANt$ zD&jiSjT~j;=dpR;8B+G^|JL1^$KW?de;M|j;p>;45gyd@ZPutu@*Idz$mIUHsU(1} zG{c!}{1g}G?%0So!Gol4XRuyflywm8Pu!H{Xc2hd;9&LzwMeeG(+)ejQh%v}c;98r zGe!}gx*bZOS+qJk@4n8^YI}M(<<-;IsY4gPo%(gP@JBZFk7*@V?ECuwajq%q-IA}^VqGn_TeMBpBV@BwURmv$%}ikrfP=P%LDDJ+>U&m|NQd6obcP= zMUGN}`H2)tSH|YGcY;;#+`V8~hFI zUxs~0U`pj;Fw;l=pv>;&OV^Li-hOJMGeKY2luK8v{f&0wIGK7iQSA1H|Df`R0^2yY z+84~cUMYPJ1vRY)F({>WzH7(+{e8duU#eg{*oXcy9x_sHzd)!Scz%OqgLip(D?s4m zYE;`p=_0Q9izbIwCgb~F#+A{^Bz-e-aIobod!BOk*)%tUF`m>iP4Vw|ch+?Uq%Owo z!CrR(^Kgf&ljkt>*xJ_^!-8J+T8T=^wrTQ(lD$n9c0MzFCR;D4Pqq{@Bh%&?E3HT@ z_79Aiq|Mm79tCa)T}7ns(9MfgXANmG#u%*XqLofHXyJ)aj!lzD4>WPMhQFxnnj4TD z>mihjz>UH>Un@u%qi3hBU&}Og&FLY}0oL@ID1@#OQdj6$pj~RSRr*|qIPNvK>-y_m zTMI4rB33%$$v
wZ(@JVV!uo1VL2eDIF9Fc~$&hHGY#M13u3TGD~nFPnT2y2?mh zy`N_siuop!(|#V!xZD}TeQlwd>02__wxoY%G0i103KQD4=Na#aqxlMW1}XJOUNdN? zY!%2Ht+nnH?E38RogAU7g4Df|O8@;a;jhKi$%LP&VI}?KsiE;@+4mP?R0W1@^~%#e z#hA!eH@`8x8`_A?skAoCV?65NK&|y4=FlozTks9!`L8Nc_nzPOoN8GYyVm`W9aD^T zz63pG<4PG{F8gl36@6&N_f>hSkHjyPF>qm`bIktkr#B6A0?v`{m4_5I<-a?=ZPY}> ztA^CQHTxx2!#4I=_3*G$>GGy;el&h=oz!U?R{ao0shmna_Y2pqvrEx_p|j}udQh=W zYN}4LE9wgU(`(pI3|k2o;cr&Z=MU;gU1P=GbG64BKbeYUU6)lP6(IN;bo9gFP(kcL zPRUuVRmz4DLr;R9( zVM@Gew1`yt;p%rPbF)Vc&DH4#wsn&)2n)x(+UDY3-x`a5(lOr}-W6z7n~Fz?pSKygEo-7QDJAz0afOBk-d+`raL{ zE^5!xRn2hHBYPRjbpDKd;%Zh)J?)`D?)N5Mc4T^S#>{<*<#G0hnI|qEYF8pnMb2Yg zq^^AAOlLObcJ^a=r)^ZUbB12Ly}6`-;yY>z0~c(CxS-%|hcMhhyiA-Yyz?^&XM2-_ z2|Vl{oxcznYarn6OsR{A_dHU!_t(ek*ydjjchz3BeXmm7=Ch5@&(~El-G8*?na}H! zogdM-zIDCe(*o{QfVcN!~|lo|`C-3X8#l8|Q~7v!cdpc)vx&9!~CF*1#?? zAHSO_szP#vvIC)Ogw*9-{&GpATk?b38~IB7Y@tY-S_P_M%fbAQ5-E$rVLFGuwk=L5 z`B7ecRkqyB^&B(tML6G}Li1f4)9aExmoN(>5xT}m-GSuDqn!Dk6d&Jy7Ie4%l=(rS zt809XraQ^g@Qj&r@%5K{cJz+3#%dj;KMsYHR$L{NFy68<|A|-eY(=Ab)7TuLYl77E zo8l%am@wMFn56%t%2IV-vGYoCF?OP-;G#ye=^N~s7sv2RaqDX7E(r`42vOYDSgLdv zIr)`+x?Pg7_rCHa5 zFcelD$1~~e+&-S{C~DT8C3^AEGq#D#nc@R0XY^l`dG~4LBXlj1y2qEJFHEkq1F4%-+8FevMJXTZ&8lGf{w>5s&P*OgBCZ-{jC|!~#AE?0GCHeo-jO`^99@_yxzl zuh}4Ut&qCO{XQy|cj+zkbM2lN91c9NA$WX9Zlg^20!97G;I|wB@^(3C6*+ZkjN4wW36GI=#r=MzVW*YSkmvkqF`p9jcBXn(%x)D}k_Uj&z`8XYfj-KnpSC-hOXoHA2 z$rZ+}_0rkX-q#wQuha{cIV?DDVx7(?uwI3Vmu92Yrj%BCc~R@$Rx(1@4ykLeoH?6D zZq$U^WZLs7@cU`SfJ=nfVWs6d+@tTxn^=z+1g%E;v)6O-S2}daElm-6w||-9$r9}> zG!?o|u`ZK~(6vYEF4yabsHdjC;C{6I@Vx&$rocSR**Zbqcd0!0<}C1y15)?U9MiGE<*S@B*RW<*m||`ZxaGVS zFARvtG z)O9L2BfRWN@sE$~AA2(`?Cpq@+1oMs#NG$9Sc!%bTy8137mC;SZROTw5@LqchhQeD=4hkEk*81q24kFL=xHs>_13>U#_ zO{qAqvQB4KE>yn?xk`Qgqi?;-`MESJcT*Zdk>ku6srx>>BrD?EIJv7dXBBu>M+%B8FOZy0)?!H*!^}B^l1esqR;Bp|p?{-1z z_V&5Q`l#MFQ#o|}vV#Jy&345B;ZqX%4bR&$l~ThOr_96`GW8haBG2LXFkrkg0=HK z-!HSU37@5*Tlkl7Pm^GYXI%|(w0?nmVSIh}0^JaBCR@Og=2(sN)6M0;t zF5t0rOxqo~-}FT44jQc0l3pW2IaF-l8@grKxW#;w0Hf&ATrwj!ergZvB1^`_JVyhJ zho{yDHebo>1`=^Qt|p#Mtit~gNq4dMIC7umh14D2@TzS%_=x$d(#@mM?+Du~#0N*$ zf|Wis3~fe<+_q_4#FQH$##$-YaLIE@;0ScT6B)W7T}tzVN0GIuTF)A7*sJ;$w{_cEzwZln0RwD zrk#=sx9y9t5GmY%OqEbS?`g?yoC$@tq1yj z#}}z9_Da$%A0ywRJ74y7ASazTCjTK71z(FO68Z0wMkTo+*nV|qUHM)!Ea4qvQIeeR zs_A+pVz$_0bk`+mQmIBZ7@>O&sk;zFqI&Ep_r=Eyf;SUChA&KXk%_0@IPj|C?UiRt z<*V%5jbRV4FkeZ1%ewrX_U^H8oJJ0D-MDL>-Kb++`i4WF5W0Ry-PK7NdB=Ot2`XhCVq8O~_HQuayYTRGH*@(r~CGqOT@Uf@)Tkme(cyeX-8nvfz{19rh(aIP% zOMB^N;ID^|y!-spYfg|R&X>jL9Yg2_Aa&Jdsr+<=^q$yau8a1sgnp4825vRG8>OG*^#w4W7C9^QQ1m!N+$Z~?Vy--vG=PWP$6iP3+PbY+x8>iI z|6EmsBN-Q2_LYp&i?99HvIbLz%g}%mYr^W9yV3C02Q{wq_FGQ^6L3%S&^;(@3-_;# z7dl!%hFm9aAa!pAIje?zm&)+eB4?9(` zYhGS$e;+4rJeu>B;W+d2;c1NZ?{mf&h;|4>>UtSwH?lfL$;8qNnUUl#&3t)dY8%#Y zh*7p+v8R$ z+a1FPvNTWkA>s{2>PkMfn14@$l}#w)#q?ZtySH<^%irpG&A7O3q<}_aR7GUVK=Of4 z@gMQ9{GWDW+jkx-yV*13MmGDJteYioOa%Em=$lC0*!QB{7IkWA{fD1TzIRGFgXbyj zXFtmHG{a|HhsxVm-v7o8F~5a@^Jd3}MSPP}9CN;E$Cu1wf6uv5=HoLLf;`^|LFxwf zAAaP~lU+_cxAl$nSoE(P@rLn7Vmcw1G&n1C^cUrNTA)iczvOL~4wBfDRv=z(G$ zdv3aiXQs{R$M~e#zR^4#)K_$+TZ~1uOqPX-nM8X8Kk?UNTNX2vN(;v7 z;3v#q1QyPRt&F5Cywtx{IUZGc)vj)vK0kk@r62h_yxT}!a&a8Dx(u<0r=ByZ%@0a{ z5Yvqbeq6wP4L9Hcg|26VbHXv9>;7kikJmGQdQ$EFzO_iN{~L~qsz@fTC2jzzX+I*~ zJ4oHy=n5&rs!*fq{P*}avl24b4+mbzqQLMSvSB{0Br82{@ht(*z~k!aBU5>lcYGX$ z^RK_vZuexj^tX8K_)NfP=Xb5W)@k`V$siuuA2qh;ZUdT{-O2*($p=aY;B&A3ujZgDDF7RpN?Krax zbKy#YTaCnnCosAVIS#z93?_<_@0vx#dk?8=Maf4IN=p@w>bxbF^lntO<8Y&py-La# z^?P3mB83*$Qd$q;n?4sfI(P2NWsY9|O#$3+9Ix;@<_+_u13Kp!k>`lvNZt3#aWz$W z131$yrZ(7|&kpE>U8u(QYsxs_P%?9N!olwG$?ZfX^_w2~Uz_^)OEzgI4l91-b`ur2 z5v|PKh^>d*4@Dq#8@XRzQ1_-OIG%hyB>99^a^Vpk%cN3N)a64ljlx&AlDr5cV!zdE zaz|!H{^0TxmJ0cRZ5G#R7vj!YZ$(gc0@=Rzk-9H3^Dsna*D9`Tp=3-5s7-`tnatnx z-yozg>OVtM|Kgeah_vtxr(E27Psv@&1Rpo~F*NZ!2zn(LG4$XvtEn;`qJ1AAbxq%1 zm!7An4t~{_Dbl%PFHq!W7jS+9kbshZHcc!shV9sEMY z$k2#fwgci1@gDdp*LI|NzJ7kPqmt|5O%~!qJKsz1%!??bu83t9i_KaA;j<}{{!J`@ zUdx8N6y!%TKBY|sJ`Kxh?WMpOcT{$~*jxW`SvWl*oM-Nxgs_Q8vOw*7&wJz?Gv5*I z5RKFwJR6;Uf9%}?aaYhiveJsfPt^2BC!C4i-L+i$pqjlQ=C^sehJNUWP&p@S)sdX< zwI48jYFcCaxAd=7Q5;`W1*d<1z3;>zb)QtSrG*67PsePCG&j>!che7br1!H)zsRJ& zYAIu;W9V+=*nUDs>x2q}+)2qV^hSfhPVyf0ucqba^eUG01yd2au}Iwl&DyCqwGAOL z7;9~!>3CDW%!fS_+GYevG#=G)vDf%`wcI~U$5_O7Dqiqav8ZxqwXM8$hq?dVz@yS% z11RlQ5V~>h`Z~j#xX#QC;)a&~KEY zblX14efKG6D3Zsj`9=>%Mj9vQA7k=&&_j-gB&2Qz4~>O!bh|R6Sp{trSJK(Dg#%89 zZV*TuSDz%~j28q?r_w?XW~O68Cex z3osz30X=s}`m%d;r$^WzqY~=Vdi)S5PAN`k)ml0=p7hatv zmFO7dboCKF=V3U>kBBz~se6TJOp(Z>zusD5)FtP-ZB&&7kFIWT_UWUzgaT?&&D<4< zd7JbRDibogsOD9k&}oTFr&$&cF<;lc`=zNtbVCNAn~KyGb8l+1zLL_}CGKxGDikAo zjxvJw@x!px!}4l5O*72o-ma#yOZPJwyEWe83w^+>i?T@Id8+(c{>|bE+_tpWxCq@e zq^@ct#_=a=oB`L=6VJ&DMU~99dgEM>zbuxkVH=xP+cR&36z zou7^)NeAfH`A@t%%#)_}zD^YB9zPE;jBR5phhb$qUhlOf{GKlB$v)5Z%k6!KxF?-exDTw~hq zJ|RAWJb!qC)D{0|=bEJ}k>(+P(S$T*?ZLrAZMwpvlan3td74-PGq{F*)jy>0j+CoS zOV&Oi4V!XEpTPO5A8yl}Prjwrj-!K!_bF1h^`)o~$%&I`$*=sg#mU&H#ZCCd<#Bnh z8W+`%NQ8M^&X2(FuxyWb-Yad+Oz$i(&7z^!h5s#`)4-;cLv@%D`8`7>QkQu(^z*ir z)ra!PAUu2Wz<9LWc<7Q4k}nze*?qh3 zmxs4@0Uq78F#>5kuaUmqtN20YJ!PFIT@boiNZsDo%&SQStypSfxvin^y}R5WGBNYS z)t#+PbF7PdhL`@ycHEb}{Nk^P%C3giL+JupKU;nzU6o@wCw=-u?&dgh9%mzUBU`Ie zrilkdt&6@dSaXz{p`N#j9dT76N!KVKNWEdYU`)~{FPfo`-=X)y{2SL;^W{i)l3o4MP10*oU(GStzkSG zSL58QEsrFx<9apm6@8naAj!@RrGpn9B_0q#w8L|xt_sO5O!FJn%Ri+0X;vjeYBa2> zRT>!u(oCH=8sxBuiM5P*D#yswWYosDmA=gp4S9|G+_kx<&Y56!^Q5YG)Eq)L7peOq zP2VT7G`xt*gz5vM<$UznTMDyVoYX(xX>!UF@?I=oJ1l;ZENFS_%6HU^RUa)G?n56} zUHx#KxL;519VU!SED0{+|Q$+K6#Cnp?dyq(tq&g@7la!&|u=;23qEfCt z4L?P%kWgHBz46%E0|#2W&$4fYM%%GeurN=?yCK*0e5CG0@0XM}kIo$SDG>T{@9q=Q z8DA2i$fI?GDLQ&Nnb>8G;+ozsAKv^D^l`j%UB~1=2TJ;<9x4Bb$jl=%tC7MyAlZWtQM_powGbv+jhaTI8sm|D-kjr4gtCy7Ho|9SF`Ud_={1x9 z0Yd-3ySvh^WJ|LB-ha+}@7OtCv^#h1ojZ5#+?|=79R`i;yru>(?0f}QD;q| z9c^oLxVkB9`{|mJW1^;GYYM;n+Afs4v1o(1qbs{69h(yO-LzXvn+?6ae7x7Rua?AL zNMH11a>37kwJSDy&Q$fx)T;jOGsoAM8M4azb8|(M=EiJTvS}TUPapCK)@g78`S-ma%ojg`ZTduTGd0 z8}xBSiTO$OmVLXbxIpesq1-m7q7JnmJM&JWbkLG+ch>8-r-WVpI6D1EyC0_XX{dO+ ze|}KU&faS?i;PIx{o%-%_P3XePd_sBhk32;&wVlWW9&)cynB~Wu72Ro*Sd+FXQ;e0 z&y=6&(MmJ;p8M9F_2lRN=yOe4TqG_dy-=)om|yk!DT{yet<+&?!#|Bf^bM;ota`E$^w6+awnGonDzQ=w}z z^&8eD-kJUT@@dn$%+wa2J^5SrF}IecHm~1Ut6Al{TsdsWjUzwRes$^Mo!ftRezVsk zu+}poq9_a3WzEj_6dwNSJms|1f=5g->pJoIXURV9==yg{{EN-`Z)w#*1(=Y#2 z*=C65GqptdBYB@*>77y~o$t@c4e&5oGf>L+P;)tTwpZ|?L3nWL7q4E%HdiK!obdipfK8b5Y)a)lCy1o|En%I&&)cJ9gV&d;Cn>%!o=k^Pn5Cr#h7xJYpQPa9nq zf1`D~z1vlDqsw%G+(SaSqo;3s`E$mXX?@d^O1?k;)wc9W)6ee9ytpFt)1h8|;T0=x zK3}n5zoHAvor<`uIC0~2+2Rv=u0DKb!kE!N#4#Lb?4sCpK#7I^)T( z(M2b$+K^hOc#BUzY^$1__|=2Ln_bsuMh2GGJ{}+`w0mgA?yCM?z4~?fXGq5TE(b23 z-?&Z{RJv%IK;I)mxqA83@q^s_dMtGt*C0(}SpDk$vrh}d7ref`D)e)sf*(6>E8po{ z$jNr&ZYeM8+@@>Z1`qtS?7=7B&aydilkZ>YDtsOv70Ru>@xr|d6+!p*PVl*19vQr+f$+)?mVVr@zJqVpOz@YZL9TsnI| zpzkrE+_=SV2MbMC-e@H%=A9AmInVV>`G}PwcjI3Jy1e#YbF;hrZr{Wet82G;Gxx>Q z9z_eT4V5f5^b-%;ey!Q;0V8*+#tGye7s_>UKe1q5RQ#*j50tuR-mP0l9htGT-2sdE8JH?*G#n_q$t^tM*;pryDqP+nJX?c$|%RoF;r;oDj<0RjPf} z&K16ouTi{Mubb67JX{~&es}y|?#sJAt(jcyc*X5LJ!emQ*J1nhh@cY{yO#=UzPbZvAx~$BlTIaj1JOmnEyOzCK*I_@TXzP73$SofgVnn=qp0L}fYk>^l|5yM+gT zaiYkkL#;QC>-*=(w{3nCJ$R(ra5dxRm)}h+@NiDC*wI_xoVhZuW4Tt>PuzXr<@uyo z>Og@%oDs?$wlcH#q(lESy1cu8^PZI_bskmj&-enDp2Tdb;{N>T{6|w|qgS_f`Pt=5 zO=6>(4K9QZIJN0^`11*C)>IpD?zfQSXuUx0S)ttf^GZdWI=Z%Ig{b%$Rf`^a6Zzm% zxq{c~z1%`a&1=mER3}5-Ayg=?b zpgDqzLVYg^<<3hx_}2B?l?ubY8{0p2{xkf*l@$@k_PE4&RF5C}!^WXC zrVJUrui4jL&yHtae&(I{;WtJ7+RF-*tgBjnta9a-8NR0kcKB5&H}XVZzhWJFG@PPd zvY^46BiE}Ay4PpYEydKMZf(Oq-A?oPwwN(tSb=e!{WcuYUHN^g>P^5x{laPI_xl!~ zT;)}Rj8uW#OG3G$j!*eRTlxNpip8W?`c^ZJdO9y-T7WKb;ydw)uiw=FJiLRxT(zlt z_TD)%u=cu|^@IAXD7>$Q?6T!Cz zFs^3^<-S`!NIzQsto4hp-fvtGa(D7~k?ytj{yu8HqCn*Z0gu{DJ*Tg{yIQ>#t*_pg zk=*`TTIXqd)8DR}wQYg!eu=gZF1-CH(Dyf?+`=!4t}LDT)n^a&hlr!1ZP&}JUvPAh z^2Q`rpK9KZFfGLJFxWot5@VZy?)r$D0r-7V!L5A|Eb-sVRB>0{a^m0 z>ZKK6&NNQ>U#_R4x*?Q^G*XRLiH)J@MVNClb8HLZEed=g5~b{MW4_}{p|p6VQGp*( z1_;GKqifqg%BL_ynv^QJXcUCl%V*1%fB)ZM0cu~pR;4mwL!oOK=1k+1{|?Rbwam9b zz6J6vki7*8a>?f3>~sC+r{<4+{`1=?ryAyT%#~Al`T6oK@ZVqo@_VUFtEX>l3bbVB zA^#0}=T%3luNOdbr4Ox{f6E{xud?#_{(TnsA73W<_Zcc*QoaT9Es$@4d<*1TAm0M{ z7Ra|iz6J6vkZ*x}3*=iM-vap-$hSbg1@bMBZ-IOZLg$? zKxf9j0bT-s1FwMB0G&P40cZ!b2f_h-vdP#6dyGY20(4dweRppFi~yaj5)Wtq`ggv% z0o{SGfgS*zvDOPH2hex*bT-de$QcdLS*70r-vhIOIlx?i&a9;KB^LmnfPa9uz&qeQ z@B#P;d=2ym@Tsb303ZV*0Q%VU8=wa;5aQlJ+Q3G@Sc0}{X+ z@B#42qDTeA0SN&8+XZ@n_L*w|6JP}5fg~UqpnpHY03-rRzyqMY+6{p^KwY2);0aU% z=-&fDI;(LhkP0jVmIEt*mB2z^5%3uhfu|CFe1ZPB{tDQJ>tBFPz-C}AKxd_`0$f0^ zjNd9iRbVTS2Gj>`T*3eFckTxBTwR=RjPOzfk#P zV{^K_-^R!j0QdubfGvx~4RO0+0hT4pI1x0fcl{F@O=U*N%?TDgGn@!+;S$G7t|C5BW3E zC=MkEt|^T$6cF-L+PA=PpeXPKP!^zcN~8NxKng(Vl$XjSIh2R|eMU$}IlZ32!0M}RHBLEr$e57-Or0d@mh0kXv|UAjOX>T8 z!@wbccnIkL`NS#UBya*a&fx-n&j4qE^T0XaHy{JJ3|sKQqQU+B0>3c@VH_7|8FTsa<2cd-zL+w`H1dc3lS2o&x%f&NOMH-81}F{6lSgWg zsilYk$DepQp`5ay+?ut_>qg%$(V+OSD%k4g?y?DazeL`6lLA+W@`3Lk zkG}VEtGmlUe~G^&NF;iS)MCi->DB(G)f<*O>gwVTVZMIs$fp!((Ck3$!hpq{c}h{3 ziYV(++XPC#y)loc(7*8J4vO3QMu%pVnzNIq&^W*Yl=*-4>b2qdogaA$ouUcNQfcy zqRUO~^<4u&@q>q;6>e~phL@J>&&T~T02H_sIh=jn-W6b5yGG>{n# z#w49W)bzFS%VJ62%>)G=ii$eW?OGw$)(L?h6vHRC`-8XJQ&38xoRxL1$GCL-xsQNi z*GKK!z`iv5?PI?cT#B$3owN0;w2azB;YJ2s?-dNY9*n+{tYuC_$0{ zNk9_^Eoa|%^5XIKz1Mu6&Y-T|?f=wgY(0#aHs5^E53N@_m*{0;wLSC=688b$vd98bd0^v{Db6pI-i zrsWJV$~Yx@O4U88rwx0y8BOJ|HZY%qRIi}Yz1|Fcf zoeFPVcFK>LBVr`{>bW>ezUvgzjiU$D_KMED*6PDa-g|tp6@{*zpq8o(@ zTWO#${l{MvWl+Q;Vj8y37*&4k(+QacU55MNnT6=0QlP`(Z$a>d2Pcac_=|sH7^E!a z>-()Hm6{ooD4-aVR3>n>SSU-uO{zMki)gJz?r=1lK?Q|oLAY3kup1}X5h6kq(39}M4aG8_-ORA|HPF5jo~lvq%xFB~t@ZEpAj^+BF8 zoTF5D_s;k0lYt7JGK-@e6g_QM=b>vDPx+CfTpb-1?mOqo0iLpxqckX8&);S8?Npv} zhNDE5`|w4{>K?Co$}NuaUGvAaVy7;cz*Amxl;f{cst;Sy>pPxO6irPLX>nzrofjX< z`tg+Npp*mU>(Fxzt5hwuil;Q@D8R$D5y@y?SN;n#n{4I2#>+WBlxm|a~NYzIYh<; zsS8RiQ2rS>e|W&6lb?A?M^H$Edo8`(UbSv>n5V>m;t5KVy6b}c-k%HSDHA}c4a%&M zRr(H(e^rmCtmUNj%-okc{_l~Mc*;poDuSm)k?v9Y2`A({|n@=un)ej7H;B041ekP0uHLMzlw?Y>JqOShWxo zxM|AQcVDOekg+cS6r|HLE9>)=dn|~41P^Ile9>2jmKE`gBM)I7nxcK6(9?NOtph$C z#*7)uQ?fp3%{+P0trH9Y2TrMT^Fzsx4Q{2lTE_nNr3Jt=G)~;)dS{%pWBUfKh?W8L zSPoIpZb)N_(G{c9Pu3k&iD@~E zAsuOLzZLAaoE;6|Az5wBcnBymnbxE+Vhyg#*pJ_@2tNzmxDoy`XiZTpAz@fw)6~~R zc*=HA;Mysv!~dw+Zg@d=P{`jPEgckk$`t!^P>-P@U*6;?nH(iL(mgW$e)29*d|9Ty zIB8vXEZ$t{Qcoo)7zdHGf(R|7!8bkc1+F-D>H#R6Zk0fxa_&u=B45xdndUNxRK$~< zpft*2ux{%yIMIJdcXNHv7uJG@`cJ<&m)d@QqXzTR4ue8{;aJL=OY=6a^ah2ik9~`# z)L^}L^PC>D4{uE;9!`TPpior)rDFB34wR`ycB9}6-QH;o?15j#P7>&L925l1l&38kpGYjUMG78_$f=yG zptyrlyLzQEA2$`P$W!9!T^0I5TElzo%l4Q|a~aOo_C2I30xvyF#`KyV^QuVwgW%z6 zYM)019*SZCqh{1-e)d3}obcF}=8phR8bmjD+b~Q!wkfZ57%0@Ho9dJ=J7uA4ElfI{Pgz;WpnR3#E+4i4x!KH&BQo|0AT255Wwv+vhNX=J1{Ql)Tv zyEZ=J;fIHihB+H~Rn}P!H^~w0ug}iF&M8#Ki!^_OzHO#pjv!l_WE*}SbzL}z%{T(RG^AGE;D2(Yp+&l{u%z^1I%4AT`JnOYsasILP z&wD)OIm#iPE0;?oFYA4jbfcjY{@!zxht&r6FHzDn1QbLT`YQy}qNtQLHO?l6u8&cG z!mQz7-Aymk%F*dmdkPqChyPj|6f7GOPYLi)InBEVKYm@`_?#$|4vzwbdT_V#O(xG9 zxL`IYoYosbq1gK-y3p$RmC~;% zWVf2fQnFhCWGVL7`Es|8#7fIMVZb}LLQPxh-{0az6J|6iSSra>Oo-+b(?ANbf?$wCyfZyo!#w%?}qTP~OD zZ_FD3JL_-II@|R(tl~7LRUA7Jwvjg*DWbZcsiQBgrZELZ2UwF4g@HoRAcvpLFXf^|NOZX=a?oecdhDqO$GaA>hBqXE|Wnu=ny z+Bka3+}ocz`{K*Cv}V^BYiZz7D~(2qfJME#`{<7rr`1UsiyyTqE;X$2i`Ux;ZYC=`_k?3iM>SfNO1P_Qsa(iVV1adhRl(??_G z-l26dPHTOXoRk*rAN+9PjXK3XG3CJ47%Kxb4#`}G3(CZ&WSljhCynW$DX<6d|q(QsJ`Df~+9HKU0i0^08TWt7tT^NF_dG?09MnsOR%rfCIlgBUPf>wFqqMhIO$EPs5*p~? z5*p&^>ly6nzZVqJTD0!)j|~^?IN?g`J50~I1xi^^ZnroRTH@)|c|7F}C^T07CHVc2 z?STzH@RX7m-O!xrY%kH0ze`=i4B0HL4k$D?yVUgg{;+yGJMfeipp*mU&%56jZoPXA zW`|~;UZ7w~mlD6T)8}-3xC>7)ay;=h${uZhczYF|GKr%+sdZyO(N#0b@|2~Zl!r8R z)$1>kx2*T#DceB7QMM1%+0AF7*u<+dlI$ z-i4aAE{bSD5$S@d&+HysuZQpy`xdpYwS5ipLa|?t{Z_DFj{TbEh3DU^fqiNAedph+ zwf%DJ+s(d**r$Ysu%7s2#?PxCevzr?{D!GmAfTYeba(nDcL(Tyu;S>U1+@uL7sxI4it*YTOQ09-e6a+2#$iM z#w1WE`j1FSk6du^XY6Lc$N?{{{6!Z*p?JDFCa!$N4Mh+SXs$`)gS()Rm9|{!)+uFr zjs6U!3B7BRD6Gl%eRT4e#%I&LjrF1c| zC&SZ(YMS+FW?rW-pI-d?o9XhMOYhK|NW5?)<#bYG46PPPM(?WKx8@D@Z7eK@U3+1y z26B(J#kO{8!;X=d=x>VBk^&;vySHBV-8Ph^Fz-)gT1`}>Hc?dR;GkRI*Yl;39foK$ zMzW(d%CWD39Uj!wzHVv*qnc>N=EIk^WK3tq2h^t6F{accDH0Vj-JIGLU!DHvKBF7j z0DGKTvCpjE^i}39+1jx>Lt)lKvRV|=ZRXEDMXHb1;kBZ|wdB)Fy$@!RAJA$MS}xle z7~>&b+OVqxF(rbB)b=icXO?*csg|4cDwHVswZ`TRSM;fzG-%xiJTxNCFb;O9b*LYW zyy^WZ$}!0#YNbrC{o_=|`?ABulNbud(RL`zdg7M0tOl)a?r!1Na2+$grlGgLD3MuQ z*NLW7I)1*u&o2ryx-svnUxA07&I8(N*SH3~Bp*dj2*koi-*C20y#ef3akP+IpW1qpl_gpz70U1{dStC%;6~E2=%wmJa!)Gpm;&()l(+P_IV+|#J= z*3-AU8f<e@TwVqxD*oPOLznZGjDHr zD*~!MNutrIV+|6mKH58rEXwaK&OTktY_^jaqm$XGrx;&?_%(4P-J~E{n4_~>D~L4= zx88;rsa_#xE@fJ^4y*Edv0SURPB28tm;^oE&?wcI=W`jbWdSWJ)+;n}gzmnaqVilrv6YDc~30=0yt3B$R?%ffQ>COn1(FA zg4~CNv2ovOHpD zOJoq!7uXDp2RoO;#ssl9^P5#lj6$VDw}9ml;5hv_4LDLfKFN|xjat1}DW}>+Dbahh z;wY)XDAwt<;HE8_4iw3n8MVrq$XMFPiKU&Z2H6f2XARIKSEX3lh8J&@oI|-3#RP!~ z!UT81ZXwJ_U4{*5v`(T#@J(`HZJV4_goRB|f>Q}x_~iPpSxuYn>p%+kjsoR#S126A zMrW3%iu187N=E$VSdY*ysDWAp%~ycmQcu_e^|n=5ySNIe57%F}q=vs-na5 zQ$}+RM;(CAL^3QKD4hO-6bcaR+P6gJFgCE6AcehvHLyF?iAjZa0;lj6k7nAF%Y?VE zSiMpntw>O)RGf_{^wL{6nFH%O;6hoftu1m;VOqxJDr^};QU<|T#E2uLB- z%VNmS1b4B9FdEw^qmuCa&}zI5O0`av-zG~1*b!w#s zBRA4mFgn9?&KMIbP4p*MpwgThg|mm4-I+>O9q5ahuEfW4*f7t~5ZXp6@!^Jq8Z;w5 ztc@{h5anSf+V&|{s3R3}xkB!sdCeQ&P?q@;VVb;-Yea6Jssj;R4oKjx;B?sD*_b4R znTb+mqFASs1qN7BR7#C0Q7qM~ZBh~ic?>3v)*u$9Bq%lhepV@RsUC?|Nvvq4)Zfn{ zTca>W8st{FSW#BFq#C&%|K6&VR^~LJ7Eu_**ow2%N1#8OmR-FK{!M)nE!yE3tFe{G zst5ZBLN#J@A zB)H3^9D!Ryj^Hkra#%NFx(wt9?(!su>5djT%w3-3Fg?p6hq=q89JA*jv_OvFE|+r5 zUc<@}+~rXY>H>Yta&VVRIecV=82%=gQuvS!Df~??rLf*YQ65tGn_NoaA2N`_-{evX zYYMiNEZ4b|VR&9SddRUX#mueQ&uAPx zG}sIf!(L!+PJ8s35ePdyW~cmNTs|(BFhtsr1kR5~qBR@abf|7%fLLvam)Vdl)&MzL zV{$-Mn+z%&vY=eCLK>;GAzNgVWTMAJ+08-Hv&|ytk#^NLKW6P!K&MSmU>i$d07l&Q z@-P8A8!F#_Y;@=Qgk8PhwAo1HotP@^z)x%nwC3a8$2wi$O?eRw^JFI($$1iNZ6sc@ zb$Xse^9{p`<4SJQZNmC3*2Sgggmn zO-qI;yPr3{2%M4e!XQ)+jo&*b@!o1GH)EtTxKItKdTji%WqJcCLa1gth z1tPF8zqDjX+aYQB!n|@6Z=iKDu~CtTH*Q7+x9Ads6>>`!g$D236k;q$MVs^{wbYgn zD~*>LoW74T7ihhx&uiqM5(1@A719l>hqMQSD#FS$VPVSQ>o7q!$Y8QFLY%!Hu~gQ^ zP!M91B4)nMbJ89bahy?k+d*KKG(m$|tdHYG9KThv$qBhODHw-hceWEnnHT-wWq#qN z+`^foRx-D+t-tU!;}ywSyPG9)EBVX{zJQY)!DLjb$RsgFwWHw?<21s&P%29rS`e$s zWEia5tEFOt0xz)8DdZ?1PNBhjPIG|?F<9p`=%g~dO;oGI@wBw2P$|@S$z)K=E!jvf z+;Fd&lEg|4tGb71op)YE&Q5a#yK!J`{^4h!d@^hp_o45fG2AK;Ln-_>IU!G%o;JK4#*~5rHGcw9KGMM%L5(k(wJWA>^(;|+|)3%_+XC&b5Q_w5D4T6l0GWy%6SOCX*-3q=}a5$OTL?qX~Ny z#4?pugHO1yXNVU0*$!rqYH*rOvO;XqEAhHjEykchfk`@oE}H?bmykiL5hTSck>tP? znQs%JD)Wn)a$S$TRbx+xG}_U-daHaEF&rP`zf4026yn|7tgQp>9P*(!hjgZRXTBwn zz?jNfD3gR2B=jl-O(w{!6xyB5hA>5uCuh~MV#%&hP8!oB&Nd)e>18bp-$*dunmXxX z0tx13v6f>_<&EK>p1gBH2!F!_5odLA;PVjXfXZ}xrkQLqSz?b(xq&xe$ zHZ)}~F!*x*fM7qyWq9bTT&5gnLn}KW7eZ{KFpdA%{_nsH+z6P7=457O_+fc|J7CN@ zbOC$T#2h_!l*|h8HBQ+#xWMa#nD|B#8v_dSC8Wc)-q&QBI1X65*5uYzo^wVI# z6HQw`4O%^PRbi6?9tGIvXh1iT;d?=)0>v=jI*Ox|iOl8#!95IXAsd)8Agpq*Nltbm zaNFW3*(;i3&KzuE&8aME zL1yPIcDF(o;cYJJVqwd6-)XLOvCM5b-Ez@3c6VFi6YrdOhovUion~bZX0uujYJ&bi z2O@%(yJEMOISZ=%J~HAIZYo3fbE3F#4;Z+Gw^-MpEn&`LWN!C;Vc$QqswUkq8;<0xf8#puh5}7{b1AwpL3Gm zqB58)*BH`pd&Xs2U6NR;NixQuh7M|Al@Fq}8klKlXN#w*MLrcPwgc1&>55Ap}#3v?%Cvb~+gtK4Te;1=9biY7Z_aAS?*8u!EQK&FEU0_po$oK67U_zlBMk!-mbp|P2<@@}9##EzE8tfWJAt9t}BI_-cl zBS-L-No6q#aim_GfUl~=_?Lk&aWUXy6RcZWYQyG1P1Sg~STka4uUetj>XZ0%l@iN% zVktX6&613d`I3xEnZcG|E1i{saEJ#QK7dJP-Z$7Xv39YfsV5 z;{-CigG7FF7VXVANTdm>#IZOi4(C&AZS(y$jnGy9xXNVdq%mYTzI_$Mek?ZyB3hg(hpj@5I|`soG* z9Z)fj;2yx1;ANGYooe8rNP|2&u_rLs>R9G4*$C!~&$U=?UTY$k1BW|e6h5Vd6 z!LzrF9XVOd&5o>Xi_1~PZ3Y<-ZIgnr8*}=tAkBQn&aZxjWi zO!m_;1W~Qc*JRwb6&j3MDBiR+!qMQ!GInJ$LK)_lnQtA|2jtQZDuXjjs4`#?GlO3Tj5vXW^oi1fjpjIxZETSU9?La2xxt-- za+tG8h>K210S7k^a=^izfC3)w3KKs%(ghmQVl{IRivxCs4rb<;-W_loza6kx3=KBR zHA%4Ai=1mGsgL3dK zF6)lg&guiNa=tp4#gU<;z^!3SZgB=XK;kge$LEh4{NOkTOl4#k{yS(Mdn_oz9*J2i zaJHIjKF$Vm%$MNf0)hj5%)Oe86~e#(Ny1yEgE;G2*3y{B12N1m!_V|+a(uypf<*1` zqhUc#h!Whf3lWTS@{0#LlO~B?EjfPeV?GfF0?n6&EM~MyXQcz@fPFfxypQF{@PU zbBTRhA$$cDYw&j`B$SYb}?sg11!F=B@YWT>=U9;j)#MmYDSqmrCF0 Date: Fri, 7 Feb 2025 22:28:00 +1100 Subject: [PATCH 276/289] feat(registry): add jd (#4318) https://github.com/josephburnett/jd --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- registry.toml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/registry.toml b/registry.toml index 02fc1a0021..a39691b6e4 100644 --- a/registry.toml +++ b/registry.toml @@ -925,6 +925,12 @@ istioctl.test = ["istioctl version", "{{version}}"] janet.backends = ["asdf:mise-plugins/mise-janet"] java.backends = ["core:java"] jbang.backends = ["asdf:mise-plugins/jbang-asdf"] +jd.backends = [ + "aqua:josephburnett/jd", + "ubi:josephburnett/jd", + "go:github.com/josephburnett/jd" +] +jd.test = ["jd --version", "jd version {{version}}"] jfrog-cli.backends = ["asdf:mise-plugins/mise-jfrog-cli"] jib.backends = ["asdf:mise-plugins/mise-jib"] jib.test = ["jib --version", "{{version}}"] From cd8dc01d80b8d46d9985736bf745069da9e18afe Mon Sep 17 00:00:00 2001 From: Risu <79110363+risu729@users.noreply.github.com> Date: Fri, 7 Feb 2025 22:43:08 +1100 Subject: [PATCH 277/289] feat(registry): add jc (#4317) https://github.com/kellyjonbrazil/jc --------- Co-authored-by: jdx <216188+jdx@users.noreply.github.com> --- registry.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/registry.toml b/registry.toml index a39691b6e4..9d72cb66e6 100644 --- a/registry.toml +++ b/registry.toml @@ -925,6 +925,8 @@ istioctl.test = ["istioctl version", "{{version}}"] janet.backends = ["asdf:mise-plugins/mise-janet"] java.backends = ["core:java"] jbang.backends = ["asdf:mise-plugins/jbang-asdf"] +jc.backends = ["aqua:kellyjonbrazil/jc", "ubi:kellyjonbrazil/jc", "pipx:jc"] +jc.test = ["jc --version", "jc version: {{version}}"] jd.backends = [ "aqua:josephburnett/jd", "ubi:josephburnett/jd", From bdf29399291defc188dd899ec7612afb0609e47f Mon Sep 17 00:00:00 2001 From: Hugues Verlin Date: Sat, 8 Feb 2025 13:42:14 +0100 Subject: [PATCH 278/289] docs: Update documentation for core tools (#4341) - Make each page a bit more consistent - Re-order the sections so that the `settings` are always last - Update pages with additional informations (for example, add information about Gradle toolchain detection discussed here: https://github.com/jdx/mise/discussions/4143#discussioncomment-11868502) --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- docs/external-resources.md | 1 + docs/ide-integration.md | 4 +- docs/installing-mise.md | 5 --- docs/lang/bun.md | 9 +++- docs/lang/deno.md | 11 +++-- docs/lang/elixir.md | 9 ++++ docs/lang/erlang.md | 6 ++- docs/lang/go.md | 28 ++++++------- docs/lang/java.md | 79 +++++++++++++++++++++++------------ docs/lang/node.md | 80 ++++++++++++++++++++---------------- docs/lang/python.md | 8 ++-- docs/lang/ruby.md | 32 +++++++-------- docs/lang/swift.md | 4 +- docs/lang/zig.md | 4 +- docs/mise-cookbook/nodejs.md | 32 ++++++++++++++- 15 files changed, 197 insertions(+), 115 deletions(-) diff --git a/docs/external-resources.md b/docs/external-resources.md index be94c91148..f2df44d2f1 100644 --- a/docs/external-resources.md +++ b/docs/external-resources.md @@ -9,6 +9,7 @@ Links to articles, videos, and other resources that are relevant to mise. - 2024-06-27 - Managing Development Tool Versions with mise - - 2024-06-09 - Replacing pyenv, nvm, direnv with Mise - - 2024-04-07 - Lalaluka stream: Grroxy, Cook, and jdx/mise - +- 2024-20-02 - Can Mise replace Volta? - - 2024-01-14 - Manage all your runtime versions with one tool (asdf, mise) - - 2023-12-30 - You should be using mise - - 2023-03-04 - Beginner's Guide to rtx (mise) - diff --git a/docs/ide-integration.md b/docs/ide-integration.md index 52be179b95..e374115286 100644 --- a/docs/ide-integration.md +++ b/docs/ide-integration.md @@ -67,10 +67,10 @@ Here is an example showing that VSCode will use `node` provided by `mise`: ::: tabs === VSCode -[![vscode using shims](./shims-vscode.png)](./shims-vscode.png) +![vscode using shims](./shims-vscode.png) === IntelliJ -[![intellij using shims](./shims-intellij.png)](./shims-intellij.png) +![intellij using shims](./shims-intellij.png) ::: As mentioned above, using `shims` doesn't work with all mise features. For example, arbitrary [env vars](./environments/) in `[env]` will diff --git a/docs/installing-mise.md b/docs/installing-mise.md index acb4b4813a..38cae6a1aa 100644 --- a/docs/installing-mise.md +++ b/docs/installing-mise.md @@ -226,11 +226,6 @@ yum install -y mise ### Windows - Scoop -> [!NOTE] -> We're currently waiting for mise to be merged to the Scoop main bucket: -> -> - - This is the recommended way to install mise on Windows. It will automatically add your shims to PATH. ```sh diff --git a/docs/lang/bun.md b/docs/lang/bun.md index d30178b508..739580d2f1 100644 --- a/docs/lang/bun.md +++ b/docs/lang/bun.md @@ -1,7 +1,9 @@ # Bun -The following are instructions for using the bun mise core plugin. This is used when there isn't a -git plugin installed named "bun". +`mise` can be used to install and manage multiple versions of [bun](https://bun.sh/) on the same system. + +> The following are instructions for using the bun mise core plugin. This is used when there isn't a +> git plugin installed named "bun". The code for this is inside the mise repository at [`./src/plugins/core/bun.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/bun.rs). @@ -16,3 +18,6 @@ mise use -g bun@latest # install latest bun ``` See available versions with `mise ls-remote bun`. + +> [!NOTE] +> Avoid using `bun upgrade` to upgrade bun as `mise` will not be aware of the change. diff --git a/docs/lang/deno.md b/docs/lang/deno.md index 3208f1f60b..d9c82dcaf2 100644 --- a/docs/lang/deno.md +++ b/docs/lang/deno.md @@ -1,10 +1,10 @@ # Deno -The following are instructions for using the deno mise core plugin. This is used when there isn't a -git plugin installed named "deno". +`mise` can be used to install and manage multiple versions of [deno](https://deno.land/) on the same system. -If you want to use [asdf-deno](https://github.com/asdf-community/asdf-deno) -then run `mise plugins install deno https://github.com/asdf-community/asdf-deno`. +> The following are instructions for using the deno mise core plugin. This is used when there isn't a +> git plugin installed named "deno". If you want to use [asdf-deno](https://github.com/asdf-community/asdf-deno) +> then run `mise plugins install deno https://github.com/asdf-community/asdf-deno`. The code for this is inside the mise repository at [`./src/plugins/core/deno.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/deno.rs). @@ -19,3 +19,6 @@ mise use -g deno@latest # install latest deno ``` See available versions with `mise ls-remote deno`. + +> [!NOTE] +> Avoid using `deno upgrade` to upgrade `deno` as `mise` will not be aware of the change. diff --git a/docs/lang/elixir.md b/docs/lang/elixir.md index 76002aa944..b7fc94d100 100644 --- a/docs/lang/elixir.md +++ b/docs/lang/elixir.md @@ -1,5 +1,12 @@ # Elixir +`mise` can be used to manage multiple [`elixir`](https://elixir-lang.org/) versions on the same system. + +> The following are instructions for using the elixir core plugin. This is used when there isn't a git plugin installed named "elixir". + +The code for this is inside the mise repository at +[`./src/plugins/core/elixir.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/elixir.rs). + ## Usage Use the latest stable version of elixir: @@ -7,3 +14,5 @@ Use the latest stable version of elixir: ```sh mise use -g erlang elixir ``` + +Note that [`erlang`](/lang/erlang.html) is required to install `elixir`. diff --git a/docs/lang/erlang.md b/docs/lang/erlang.md index a0ca8a39e4..b50baaeaab 100644 --- a/docs/lang/erlang.md +++ b/docs/lang/erlang.md @@ -1,7 +1,9 @@ # Erlang -The following are instructions for using the erlang core plugin. -This is used when there isn't a git plugin installed named "erlang". +`mise` can be used to install and manage multiple versions of [erlang](https://www.erlang.org/) on the same system. + +> The following are instructions for using the erlang core plugin. +> This is used when there isn't a git plugin installed named "erlang". The code for this is inside the mise repository at [`./src/plugins/core/erlang.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/erlang.rs). diff --git a/docs/lang/go.md b/docs/lang/go.md index d78b9ed3c0..e9aeef5e84 100644 --- a/docs/lang/go.md +++ b/docs/lang/go.md @@ -1,10 +1,10 @@ # Go -The following are instructions for using the go mise core plugin. This is used when there isn't a -git plugin installed named "go". +`mise` can be used to install and manage multiple versions of [go](https://golang.org/) on the same system. -If you want to use [asdf-golang](https://github.com/kennyp/asdf-golang) -then use `mise plugins install go GIT_URL`. +> The following are instructions for using the go mise core plugin. This is used when there isn't a +> git plugin installed named "go". If you want to use [asdf-golang](https://github.com/kennyp/asdf-golang) +> then use `mise plugins install go GIT_URL`. The code for this is inside the mise repository at [`./src/plugins/core/go.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/go.rs). @@ -25,12 +25,12 @@ first version of each series was released without a `.0` suffix, making 1.20 an mise use -g go@prefix:1.20 ``` -## Settings +## `.go-version` file support - - +mise uses a `mise.toml` or `.tool-versions` file for auto-switching between software versions. +However, it can also read go-specific version files named `.go-version`. + +See [idiomatic version files](/configuration.html#idiomatic-version-files) ## Default packages @@ -43,9 +43,9 @@ github.com/Dreamacro/clash # allows comments github.com/jesseduffield/lazygit ``` -## `.go-version` file support - -mise uses a `mise.toml` or `.tool-versions` file for auto-switching between software versions. -However, it can also read go-specific version files named `.go-version`. +## Settings -See [idiomatic version files](/configuration.html#idiomatic-version-files) + + diff --git a/docs/lang/java.md b/docs/lang/java.md index 93404f45ef..9a8ca44c95 100644 --- a/docs/lang/java.md +++ b/docs/lang/java.md @@ -1,10 +1,10 @@ # Java -The following are instructions for using the java mise core plugin. This is used when there isn't a -git plugin installed named "java". +Like `sdkman`, `mise` can manage multiple versions of Java on the same system. -If you want to use [asdf-java](https://github.com/halcyon/asdf-java) -then use `mise plugins install java GIT_URL`. +> The following are instructions for using the java mise core plugin. This is used when there isn't a +> git plugin installed named "java". If you want to use [asdf-java](https://github.com/halcyon/asdf-java) +> then use `mise plugins install java GIT_URL`. The code for this is inside the mise repository at [`./src/plugins/core/java.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/java.rs). @@ -19,30 +19,22 @@ mise use -g java@openjdk-21 mise use -g java@21 # alternate shorthands for openjdk-only ``` -See available versions with `mise ls-remote java`. +You can also install a jdk from a different vendor: -::: warning -Note that shorthand versions (like `21` in the example) use `OpenJDK` as the vendor. -The OpenJDK versions will only be updated for a 6-month period. Updates and security patches will not be available after this short period. This also applies for LTS versions. Also see for more information. -::: - -## Tool Options - -The following [tool-options](/dev-tools/#tool-options) are available for the `java` backendโ€”these -go in `[tools]` in `mise.toml`. - -### `release_type` +```sh +mise use -g java@temurin-21 +mise use -g java@zulu-21 +mise use -g java@corretto-21 +``` -The `release_type` option allows you to specify the type of release to install. The following values -are supported: +See available versions with `mise ls-remote java`. com>. -- `ga` (default): General Availability release -- `ea`: Early Access release +::: warning +Note that shorthand versions (like `21` in the example) use [`OpenJDK`](https://openjdk.org/) as the vendor. +The OpenJDK versions will only be updated for a 6-month period. Updates and security patches will not be available after this short period. This also applies for LTS versions. -```toml -[tools] -"java" = { version = "openjdk-21", release_type = "ea" } -``` +For more information on which JDK to choose, see . +::: ## macOS JAVA_HOME Integration @@ -64,9 +56,12 @@ The Java core plugin supports the idiomatic version files `.java-version` and `. For `.sdkmanrc` files, mise will try to map the vendor and version to the appropriate version string. For example, the version `20.0.2-tem` will be mapped to `temurin-20.0.2`. Due to Azul's Zulu -versioning, the version `11.0.12-zulu` will be mapped to the major version `zulu-11`. Not all -vendors available in SDKMAN are supported by mise. The following vendors are NOT supported: `bsg` ( -Bisheng), `graal` (GraalVM), `nik` (Liberica NIK). +versioning, the version `11.0.12-zulu` will be mapped to the major version `zulu-11`. + +Not all vendors available in [sdkman](https://sdkman.io/jdks) are supported by mise. +The following vendors are NOT supported: `bsg` (Bisheng), `graal` (GraalVM), `nik` (Liberica NIK). + +### Using unsupported versions In case an unsupported version of java is needed, some manual work is required: @@ -96,3 +91,33 @@ $ ls -R $MISE_CACHE_DIR/java mise/java/21.0.1-open: ``` + +## Tool Options + +The following [tool-options](/dev-tools/#tool-options) are available for the `java` backend. +These options go in the `[tools]` section in `mise.toml`. + +### `release_type` + +The `release_type` option allows you to specify the type of release to install. The following values +are supported: + +- `ga` (default): General Availability release +- `ea`: Early Access release + +```toml +[tools] +"java" = { version = "openjdk-21", release_type = "ea" } +``` + +## Gradle toolchains detection + +Gradle can automatically detect toolchains installed by some tools (see [toolchain | auto-detection](https://docs.gradle.org/current/userguide/toolchains.html#sec:auto_detection)). + +At the moment, `Gradle` does not support auto-detecting Java installations by `mise` (see [gradle/issues/29508](https://github.com/gradle/gradle/issues/29508) and [gradle/issues/29355](https://github.com/gradle/gradle/issues/29355)). A workaround is to leverage the fact that `mise` install layout is [similar to the one used by `asdf`](/ide-integration.html#sdk-selection-using-asdf-layout). + +```shell +mkdir -p ~/.asdf/installs/ && ln -s ~/.local/share/mise/installs/java ~/.asdf/installs/ +``` + +Otherwise, you can always use the [foojay-resolver-convention](https://plugins.gradle.org/plugin/org.gradle.toolchains.foojay-resolver-convention) plugin to let Gradle automatically install JDKs required by your project. diff --git a/docs/lang/node.md b/docs/lang/node.md index 201c08f757..71610c8ae6 100644 --- a/docs/lang/node.md +++ b/docs/lang/node.md @@ -1,10 +1,11 @@ # Node -The following are instructions for using the node mise core plugin. This is used when there isn't a -git plugin installed named "node". +Like `nvm`, (or `volta`, `fnm` or `asdf`...), `mise` can manage multiple versions of Node.js on the same system. -If you want to use [asdf-nodejs](https://github.com/asdf-vm/asdf-nodejs) -then run `mise plugins install node https://github.com/asdf-vm/asdf-nodejs` +> The following are instructions for using the node mise core plugin. This is used when there isn't a +> git plugin installed named "node". +> If you want to use [asdf-nodejs](https://github.com/asdf-vm/asdf-nodejs) +> then run `mise plugins install node https://github.com/asdf-vm/asdf-nodejs` The code for this is inside the mise repository at [`./src/plugins/core/node.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/node.rs). @@ -17,33 +18,15 @@ default: mise use -g node@20 ``` -## Requirements +See the [Node.JS Cookbook](/mise-cookbook/nodejs.html) for common tasks and examples. -See [BUILDING.md](https://github.com/nodejs/node/blob/main/BUILDING.md#building-nodejs-on-supported-platforms) in node's documentation for -required system dependencies. - -## Settings - - - +## `.nvmrc` and `.node-version` support -### Environment Variables +By default, mise uses a `mise.toml` file for auto-switching between software versions. -- `MISE_NODE_VERIFY` [bool]: Verify the downloaded assets using GPG. Defaults to `true`. -- `MISE_NODE_NINJA` [bool]: Use ninja instead of make to compile node. Defaults to `true` if installed. -- `MISE_NODE_CONCURRENCY` [uint]: How many jobs should be used in compilation. Defaults to half the computer cores -- `MISE_NODE_DEFAULT_PACKAGES_FILE` [string]: location of default packages file, defaults to `$HOME/.default-npm-packages` -- `MISE_NODE_CFLAGS` [string]: Additional CFLAGS options (e.g., to override -O3). -- `MISE_NODE_CONFIGURE_OPTS` [string]: Additional `./configure` options. -- `MISE_NODE_MAKE_OPTS` [string]: Additional `make` options. -- `MISE_NODE_MAKE_INSTALL_OPTS` [string]: Additional `make install` options. -- `MISE_NODE_COREPACK` [bool]: Installs the default corepack shims after installing any node version that ships with [corepack](https://github.com/nodejs/corepack). +It also supports `.tool-versions`, `.nvmrc` or `.node-version` file to find out what version of Node.js should be used. This will be used if `node` isn't defined in `mise.toml`. -::: info -TODO: these env vars should be migrated to compatible settings in the future. -::: +This makes it a drop-in replacement for `nvm`. See [idiomatic version files](/configuration.html#idiomatic-version-files) for more information. ## Default node packages @@ -57,20 +40,22 @@ express You can specify a non-default location of this file by setting a `MISE_NODE_DEFAULT_PACKAGES_FILE` variable. -## `.nvmrc` and `.node-version` support - -mise uses a `mise.toml` or `.tool-versions` file for auto-switching between software versions. - -To ease migration, you can have also it read an existing `.nvmrc` or `.node-version` file to find out what version of Node.js should be used. This will be used if `node` isn't defined in `mise.toml`/`.tool-versions`. - -See [idiomatic version files](/configuration.html#idiomatic-version-files) - ## "nodejs" -> "node" Alias You cannot install/use a plugin named "nodejs". If you attempt this, mise will just rename it to -"node". See the [FAQ](https://github.com/jdx/mise#what-is-the-difference-between-nodejs-and-node-or-golang-and-go) +"node". See the [FAQ](/faq.html#what-is-the-difference-between-nodejs-and-node-or-golang-and-go) for an explanation. +## Building from source + +If compiling from source, see [BUILDING.md](https://github.com/nodejs/node/blob/main/BUILDING.md#building-nodejs-on-supported-platforms) in node's documentation for +required system dependencies. + +```shell +mise settings node.compile=1 +mise use node@latest +``` + ## Unofficial Builds Nodejs.org offers a set of [unofficial builds](https://unofficial-builds.nodejs.org/) which are @@ -93,3 +78,26 @@ To use these, set `node.flavor`: mise settings node.flavor=musl mise settings node.flavor=glibc-217 ``` + +## Settings + + + + +## Environment Variables + +- `MISE_NODE_VERIFY` [bool]: Verify the downloaded assets using GPG. Defaults to `true`. +- `MISE_NODE_NINJA` [bool]: Use ninja instead of make to compile node. Defaults to `true` if installed. +- `MISE_NODE_CONCURRENCY` [uint]: How many jobs should be used in compilation. Defaults to half the computer cores +- `MISE_NODE_DEFAULT_PACKAGES_FILE` [string]: location of default packages file, defaults to `$HOME/.default-npm-packages` +- `MISE_NODE_CFLAGS` [string]: Additional CFLAGS options (e.g., to override -O3). +- `MISE_NODE_CONFIGURE_OPTS` [string]: Additional `./configure` options. +- `MISE_NODE_MAKE_OPTS` [string]: Additional `make` options. +- `MISE_NODE_MAKE_INSTALL_OPTS` [string]: Additional `make install` options. +- `MISE_NODE_COREPACK` [bool]: Installs the default corepack shims after installing any node version that ships with [corepack](https://github.com/nodejs/corepack). + +::: info +These environment variables will be migrated to compatible settings in the future. +::: diff --git a/docs/lang/python.md b/docs/lang/python.md index e6443b3dd1..b78e996aa3 100644 --- a/docs/lang/python.md +++ b/docs/lang/python.md @@ -1,8 +1,10 @@ # Python -The following are instructions for using the python mise core plugin. The core plugin will be used -so long as no plugin is manually -installed named "python" using `mise plugins install python [GIT_URL]`. +Like `pyenv`, `mise` can manage multiple versions of Python on the same system. Mise can also automatically create virtual environments for your projects and integrates with `uv`. + +> The following are instructions for using the python mise core plugin. The core plugin will be used +> so long as no plugin is manually +> installed named "python" using `mise plugins install python [GIT_URL]`. The code for this is inside of the mise repository at [`./src/plugins/core/python.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/python.rs). diff --git a/docs/lang/ruby.md b/docs/lang/ruby.md index 0b88b1c9fe..ce83bff2db 100644 --- a/docs/lang/ruby.md +++ b/docs/lang/ruby.md @@ -1,10 +1,10 @@ # Ruby -The following are instructions for using the ruby mise core plugin. This is used when there isn't a -git plugin installed named "ruby". +Like `rvm`, `rbenv`, or `asdf`, `mise` can manage multiple versions of [Ruby](https://www.ruby-lang.org/) on the same system. -If you want to use [asdf-ruby](https://github.com/asdf-vm/asdf-ruby) -then use `mise plugins install ruby GIT_URL`. +> The following are instructions for using the ruby mise core plugin. This is used when there isn't a +> git plugin installed named "ruby". If you want to use [asdf-ruby](https://github.com/asdf-vm/asdf-ruby) +> then use `mise plugins install ruby GIT_URL`. The code for this is inside the mise repository at [`./src/plugins/core/ruby.rs`](https://github.com/jdx/mise/blob/main/src/plugins/core/ruby.rs). @@ -24,17 +24,6 @@ from source. Ensure that you have the necessary You can check its [README](https://github.com/rbenv/ruby-build/blob/master/README.md) for additional settings and some troubleshooting. -## Settings - -`ruby-build` already has a -[handful of settings](https://github.com/rbenv/ruby-build?tab=readme-ov-file#custom-build-configuration), -in additional to that mise has a few extra settings: - - - - ## Default gems mise can automatically install a default set of gems right after installing a new ruby version. @@ -62,7 +51,7 @@ ruby -v > .ruby-version See [idiomatic version files](/configuration.html#idiomatic-version-files) for more information. -### Manually updating ruby-build +## Manually updating ruby-build ruby-build should update daily, however if you find versions do not yet exist you can force an update: @@ -71,3 +60,14 @@ update: mise cache clean mise ls-remote ruby ``` + +## Settings + +`ruby-build` already has a +[handful of settings](https://github.com/rbenv/ruby-build?tab=readme-ov-file#custom-build-configuration), +in additional to that mise has a few extra settings: + + + diff --git a/docs/lang/swift.md b/docs/lang/swift.md index b449e5e2eb..e83901152f 100644 --- a/docs/lang/swift.md +++ b/docs/lang/swift.md @@ -1,6 +1,6 @@ # Swift -Swift is supported for macos and linux. +`mise` can be used to manage multiple versions of [`swift`](https://swift.org/) on the same system. Swift is supported for macos and linux. ## Usage @@ -11,6 +11,8 @@ mise use -g swift swift --version ``` +See [a mise guide for Swift developers](https://tuist.dev/blog/2025/02/04/mise) on how to use `mise` with `swift`. + ## Settings
Short