#!/bin/sh # mvrun installer — https://cli.mvirt.io # # curl -fsSL https://cli.mvirt.io | sh # # Env knobs: # MVRUN_VERSION version to install (default: latest) # MVRUN_INSTALL install dir (default: $HOME/.local/bin) # MVRUN_BASE download base URL (default: https://cli.mvirt.io) set -eu BASE="${MVRUN_BASE:-https://cli.mvirt.io}" VER="${MVRUN_VERSION:-latest}" DEST="${MVRUN_INSTALL:-$HOME/.local/bin}" err() { echo "mvrun-install: $*" >&2; exit 1; } # ---- detect platform -> Rust target triple ------------------------------- OS="$(uname -s)" ARCH="$(uname -m)" case "$OS" in Linux) case "$ARCH" in x86_64|amd64) TRIPLE=x86_64-unknown-linux-musl ;; aarch64|arm64) TRIPLE=aarch64-unknown-linux-musl ;; *) err "unsupported Linux arch: $ARCH" ;; esac ;; Darwin) case "$ARCH" in x86_64) TRIPLE=x86_64-apple-darwin ;; arm64) TRIPLE=aarch64-apple-darwin ;; *) err "unsupported macOS arch: $ARCH" ;; esac ;; *) err "unsupported OS: $OS (Windows? use: irm https://cli.mvirt.io/install.ps1 | iex)" ;; esac URL="$BASE/dl/$VER/mvrun-$TRIPLE" # ---- download ------------------------------------------------------------ have() { command -v "$1" >/dev/null 2>&1; } have curl || have wget || err "need curl or wget" TMP="$(mktemp -d)" trap 'rm -rf "$TMP"' EXIT fetch() { # url dest if have curl; then curl -fsSL "$1" -o "$2" else wget -qO "$2" "$1"; fi } echo "mvrun-install: downloading $TRIPLE ($VER) ..." fetch "$URL" "$TMP/mvrun" || err "download failed: $URL" fetch "$URL.sha256" "$TMP/mvrun.sha256" 2>/dev/null || err "checksum download failed: $URL.sha256" # ---- verify checksum ----------------------------------------------------- WANT="$(awk '{print $1}' "$TMP/mvrun.sha256")" [ -n "$WANT" ] || err "empty checksum" if have sha256sum; then GOT="$(sha256sum "$TMP/mvrun" | awk '{print $1}')" elif have shasum; then GOT="$(shasum -a 256 "$TMP/mvrun" | awk '{print $1}')" else err "need sha256sum or shasum to verify"; fi [ "$WANT" = "$GOT" ] || err "checksum mismatch (want $WANT, got $GOT)" # ---- install ------------------------------------------------------------- mkdir -p "$DEST" chmod 0755 "$TMP/mvrun" mv -f "$TMP/mvrun" "$DEST/mvrun" echo "mvrun-install: installed -> $DEST/mvrun" "$DEST/mvrun" --version 2>/dev/null || true # ---- add to PATH (idempotent; picks the right rc for the user's shell) ---- add_to_path() { dir="$1" case ":$PATH:" in *":$dir:"*) return 0 ;; esac # already effective line="export PATH=\"$dir:\$PATH\"" case "$(basename "${SHELL:-sh}")" in zsh) rc="${ZDOTDIR:-$HOME}/.zshrc" ;; bash) [ "$(uname -s)" = Darwin ] && rc="$HOME/.bash_profile" || rc="$HOME/.bashrc" ;; fish) rc="$HOME/.config/fish/config.fish"; line="fish_add_path \"$dir\"" ;; *) rc="$HOME/.profile" ;; esac if [ -f "$rc" ] && grep -qF "$line" "$rc" 2>/dev/null; then return 0 # already added on a previous run fi mkdir -p "$(dirname "$rc")" printf '\n# added by mvrun-install (https://cli.mvirt.io)\n%s\n' "$line" >> "$rc" echo "mvrun-install: added $dir to PATH in $rc" echo "mvrun-install: restart your shell (or: exec \$SHELL) to use 'mvrun'" } add_to_path "$DEST"