From f41c3e890288ad0a9f44ce5a729ee5d83a1a8c83 Mon Sep 17 00:00:00 2001 From: Altagos Date: Sun, 7 Dec 2025 09:58:25 +0100 Subject: [PATCH] install mise via nix --- .tangled/workflows/build.yml | 4 +- bin/mise | 337 ----------------------------------- 2 files changed, 1 insertion(+), 340 deletions(-) delete mode 100755 bin/mise diff --git a/.tangled/workflows/build.yml b/.tangled/workflows/build.yml index 64d833d..3c38336 100644 --- a/.tangled/workflows/build.yml +++ b/.tangled/workflows/build.yml @@ -1,7 +1,6 @@ when: - event: ["push", "pull_request"] branch: ["main", "workflows"] - - event: ["manual"] engine: nixery @@ -9,8 +8,7 @@ dependencies: nixpkgs: - curl - dart-sass - - gnugrep - - gnutar + - mise - zip environment: diff --git a/bin/mise b/bin/mise deleted file mode 100755 index e6694dd..0000000 --- a/bin/mise +++ /dev/null @@ -1,337 +0,0 @@ -#!/usr/bin/env bash -set -eu - -__mise_bootstrap() { - local project_dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && cd .. && pwd ) - local localized_dir="$project_dir/.mise" - 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-2025.11.11" - 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}" - install() { - local initial_working_dir="$PWD" - #!/bin/sh - set -eu - - #region logging setup - if [ "${MISE_DEBUG-}" = "true" ] || [ "${MISE_DEBUG-}" = "1" ]; then - debug() { - echo "$@" >&2 - } - else - debug() { - : - } - fi - - if [ "${MISE_QUIET-}" = "1" ] || [ "${MISE_QUIET-}" = "true" ]; then - info() { - : - } - else - info() { - echo "$@" >&2 - } - fi - - error() { - echo "$@" >&2 - exit 1 - } - #endregion - - #region environment setup - get_os() { - os="$(uname -s)" - if [ "$os" = Darwin ]; then - echo "macos" - elif [ "$os" = Linux ]; then - echo "linux" - else - error "unsupported OS: $os" - fi - } - - get_arch() { - musl="" - if type ldd >/dev/null 2>/dev/null; then - if [ "${MISE_INSTALL_MUSL-}" = "1" ] || [ "${MISE_INSTALL_MUSL-}" = "true" ]; then - musl="-musl" - elif [ "$(uname -o)" = "Android" ]; then - # Android (Termux) always uses musl - musl="-musl" - else - libc=$(ldd /bin/ls | grep 'musl' | head -1 | cut -d ' ' -f1) - if [ -n "$libc" ]; then - musl="-musl" - fi - fi - fi - arch="$(uname -m)" - if [ "$arch" = x86_64 ]; then - echo "x64$musl" - elif [ "$arch" = aarch64 ] || [ "$arch" = arm64 ]; then - echo "arm64$musl" - elif [ "$arch" = armv7l ]; then - echo "armv7$musl" - else - error "unsupported architecture: $arch" - fi - } - - get_ext() { - if [ -n "${MISE_INSTALL_EXT:-}" ]; then - echo "$MISE_INSTALL_EXT" - elif [ -n "${MISE_VERSION:-}" ] && echo "$MISE_VERSION" | grep -q '^v2024'; then - # 2024 versions don't have zstd tarballs - echo "tar.gz" - elif tar_supports_zstd; then - echo "tar.zst" - elif command -v zstd >/dev/null 2>&1; then - echo "tar.zst" - else - echo "tar.gz" - fi - } - - tar_supports_zstd() { - # tar is bsdtar or version is >= 1.31 - 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][0-9]'; then - true - else - false - fi - } - - shasum_bin() { - if command -v shasum >/dev/null 2>&1; then - echo "shasum" - elif command -v sha256sum >/dev/null 2>&1; then - echo "sha256sum" - else - error "mise install requires shasum or sha256sum but neither is installed. Aborting." - fi - } - - get_checksum() { - version=$1 - os=$2 - arch=$3 - ext=$4 - url="https://github.com/jdx/mise/releases/download/v${version}/SHASUMS256.txt" - - # For current version use static checksum otherwise - # use checksum from releases - if [ "$version" = "v2025.11.11" ]; then - checksum_linux_x86_64="f1ba51b26998d5d75fe14c74e16f8a66a13bf2a403f5ca97e3efb1f952ee5bf7 ./mise-v2025.11.11-linux-x64.tar.gz" - checksum_linux_x86_64_musl="b3d0ada98b5319ca9e1095d8761ab10c8854fdd5c7487e85cbb7e6972a69ffea ./mise-v2025.11.11-linux-x64-musl.tar.gz" - checksum_linux_arm64="2d9e3e27da8323d331ed01c0424dfc282856c1124626eb3f1ad79a1588e33763 ./mise-v2025.11.11-linux-arm64.tar.gz" - checksum_linux_arm64_musl="502059f4c449e7a18f4994ceba8c91c27f05364bb80b14c51f19be03a8f267d0 ./mise-v2025.11.11-linux-arm64-musl.tar.gz" - checksum_linux_armv7="2be7aec10ec9a79fcede2b930fcfbf1a5e755900a4861c01ba4a3ceef2d516a8 ./mise-v2025.11.11-linux-armv7.tar.gz" - checksum_linux_armv7_musl="293c94b0cedf2fb53c6fea7f7149e2217d53c0dddb6aea1692c56c6bbcb3159f ./mise-v2025.11.11-linux-armv7-musl.tar.gz" - checksum_macos_x86_64="c64c00028db0bbb73d4a9801a2ecb68f9cf5927c4e53740871e5d7ba8ab0b3c7 ./mise-v2025.11.11-macos-x64.tar.gz" - checksum_macos_arm64="afbf065a2759dcbee8fc56b7afa0324c5f76e09b7bac245284a5f8b8d4bb1d81 ./mise-v2025.11.11-macos-arm64.tar.gz" - checksum_linux_x86_64_zstd="9fefbbef115f9dad3ed3068edd52bcdd27a04d4829a63d4917ddd20c14367c11 ./mise-v2025.11.11-linux-x64.tar.zst" - checksum_linux_x86_64_musl_zstd="59e9267bb388784ff17dbf99104e1d8f03aaafae6e84e4eeb8437ebe683b27a3 ./mise-v2025.11.11-linux-x64-musl.tar.zst" - checksum_linux_arm64_zstd="3d6242e5296292a1aa4d42cfd8631ef12a3cf9f3c7cc5eb39a102896d93e0784 ./mise-v2025.11.11-linux-arm64.tar.zst" - checksum_linux_arm64_musl_zstd="2f4116d30bd99e3eb9b3fe949c02d46d99339d3e573bd824ecd0185a69367275 ./mise-v2025.11.11-linux-arm64-musl.tar.zst" - checksum_linux_armv7_zstd="f00100833cc08aa854b2af77dd559191cc1c7d54a32ff8121170dbc8c965e62b ./mise-v2025.11.11-linux-armv7.tar.zst" - checksum_linux_armv7_musl_zstd="96afb1ccc771b7310f870a1df7699f9601da0fe5083fbb0a0f760ecbe66a697c ./mise-v2025.11.11-linux-armv7-musl.tar.zst" - checksum_macos_x86_64_zstd="f5ffcf4c2263bcdce78ae5344f4ccc4bbf0e93f7619799cac140079a50bbb37a ./mise-v2025.11.11-macos-x64.tar.zst" - checksum_macos_arm64_zstd="c07ca98edb30062879b47e5eb46f31d86b71cbd88f62d3350236178e5a8552a9 ./mise-v2025.11.11-macos-arm64.tar.zst" - - # TODO: refactor this, it's a bit messy - if [ "$ext" = "tar.zst" ]; then - if [ "$os" = "linux" ]; then - if [ "$arch" = "x64" ]; then - echo "$checksum_linux_x86_64_zstd" - elif [ "$arch" = "x64-musl" ]; then - echo "$checksum_linux_x86_64_musl_zstd" - elif [ "$arch" = "arm64" ]; then - echo "$checksum_linux_arm64_zstd" - elif [ "$arch" = "arm64-musl" ]; then - echo "$checksum_linux_arm64_musl_zstd" - elif [ "$arch" = "armv7" ]; then - echo "$checksum_linux_armv7_zstd" - elif [ "$arch" = "armv7-musl" ]; then - echo "$checksum_linux_armv7_musl_zstd" - else - warn "no checksum for $os-$arch" - fi - elif [ "$os" = "macos" ]; 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" - fi - else - warn "no checksum for $os-$arch" - fi - else - if [ "$os" = "linux" ]; then - if [ "$arch" = "x64" ]; then - echo "$checksum_linux_x86_64" - elif [ "$arch" = "x64-musl" ]; then - echo "$checksum_linux_x86_64_musl" - elif [ "$arch" = "arm64" ]; then - echo "$checksum_linux_arm64" - elif [ "$arch" = "arm64-musl" ]; then - echo "$checksum_linux_arm64_musl" - elif [ "$arch" = "armv7" ]; then - echo "$checksum_linux_armv7" - elif [ "$arch" = "armv7-musl" ]; then - echo "$checksum_linux_armv7_musl" - else - warn "no checksum for $os-$arch" - fi - elif [ "$os" = "macos" ]; then - if [ "$arch" = "x64" ]; then - echo "$checksum_macos_x86_64" - elif [ "$arch" = "arm64" ]; then - echo "$checksum_macos_arm64" - else - warn "no checksum for $os-$arch" - fi - else - warn "no checksum for $os-$arch" - fi - fi - else - if command -v curl >/dev/null 2>&1; then - debug ">" curl -fsSL "$url" - checksums="$(curl --compressed -fsSL "$url")" - else - if command -v wget >/dev/null 2>&1; then - debug ">" wget -qO - "$url" - checksums="$(wget -qO - "$url")" - else - error "mise standalone install specific version requires curl or wget but neither is installed. Aborting." - fi - fi - # TODO: verify with minisign or gpg if available - - checksum="$(echo "$checksums" | grep "$os-$arch.$ext")" - if ! echo "$checksum" | grep -Eq "^([0-9a-f]{32}|[0-9a-f]{64})"; then - warn "no checksum for mise $version and $os-$arch" - else - echo "$checksum" - fi - fi - } - - #endregion - - download_file() { - url="$1" - download_dir="$2" - filename="$(basename "$url")" - file="$download_dir/$filename" - - info "mise: installing mise..." - - if command -v curl >/dev/null 2>&1; then - debug ">" curl -#fLo "$file" "$url" - curl -#fLo "$file" "$url" - else - if command -v wget >/dev/null 2>&1; then - debug ">" wget -qO "$file" "$url" - stderr=$(mktemp) - wget -O "$file" "$url" >"$stderr" 2>&1 || error "wget failed: $(cat "$stderr")" - rm "$stderr" - else - error "mise standalone install requires curl or wget but neither is installed. Aborting." - fi - fi - - echo "$file" - } - - install_mise() { - version="${MISE_VERSION:-v2025.11.11}" - version="${version#v}" - os="${MISE_INSTALL_OS:-$(get_os)}" - arch="${MISE_INSTALL_ARCH:-$(get_arch)}" - ext="${MISE_INSTALL_EXT:-$(get_ext)}" - install_path="${MISE_INSTALL_PATH:-$HOME/.local/bin/mise}" - install_dir="$(dirname "$install_path")" - install_from_github="${MISE_INSTALL_FROM_GITHUB:-}" - if [ "$version" != "v2025.11.11" ] || [ "$install_from_github" = "1" ] || [ "$install_from_github" = "true" ]; then - tarball_url="https://github.com/jdx/mise/releases/download/v${version}/mise-v${version}-${os}-${arch}.${ext}" - elif [ -n "${MISE_TARBALL_URL-}" ]; then - tarball_url="$MISE_TARBALL_URL" - else - tarball_url="https://mise.jdx.dev/v${version}/mise-v${version}-${os}-${arch}.${ext}" - fi - - download_dir="$(mktemp -d)" - cache_file=$(download_file "$tarball_url" "$download_dir") - debug "mise-setup: tarball=$cache_file" - - debug "validating checksum" - cd "$(dirname "$cache_file")" && get_checksum "$version" "$os" "$arch" "$ext" | "$(shasum_bin)" -c >/dev/null - - # extract tarball - mkdir -p "$install_dir" - rm -rf "$install_path" - extract_dir="$(mktemp -d)" - cd "$extract_dir" - if [ "$ext" = "tar.zst" ] && ! tar_supports_zstd; then - zstd -d -c "$cache_file" | tar -xf - - else - tar -xf "$cache_file" - fi - mv mise/bin/mise "$install_path" - - # cleanup - cd / # Move out of $extract_dir before removing it - rm -rf "$download_dir" - rm -rf "$extract_dir" - - info "mise: installed successfully to $install_path" - } - - after_finish_help() { - case "${SHELL:-}" in - */zsh) - info "mise: run the following to activate mise in your shell:" - info "echo \"eval \\\"\\\$($install_path activate zsh)\\\"\" >> \"${ZDOTDIR-$HOME}/.zshrc\"" - info "" - info "mise: run \`mise doctor\` to verify this is setup correctly" - ;; - */bash) - info "mise: run the following to activate mise in your shell:" - info "echo \"eval \\\"\\\$($install_path activate bash)\\\"\" >> ~/.bashrc" - info "" - info "mise: run \`mise doctor\` to verify this is setup correctly" - ;; - */fish) - info "mise: run the following to activate mise in your shell:" - info "echo \"$install_path activate fish | source\" >> ~/.config/fish/config.fish" - info "" - info "mise: run \`mise doctor\` to verify this is setup correctly" - ;; - *) - info "mise: run \`$install_path --help\` to get started" - ;; - esac - } - - install_mise - if [ "${MISE_INSTALL_HELP-}" != 0 ]; then - after_finish_help - fi - - cd -- "$initial_working_dir" - } - local MISE_INSTALL_HELP=0 - test -f "$MISE_INSTALL_PATH" || install -} -__mise_bootstrap -exec "$MISE_INSTALL_PATH" "$@" \ No newline at end of file -- 2.51.2