#!/bin/sh # curl -fsSL https://install.tesser.sh | sh # curl -fsSL https://install.tesser.sh | sh -s -- v0.1.0 set -eu api="${TESSER_INSTALL_URL:-https://install.tesser.sh}" bin="$HOME/.tesser/bin" die() { echo "tesser: $*" >&2; exit 1; } case "$(uname -s)" in Darwin) os=darwin ;; Linux) os=linux ;; *) die "unsupported OS: $(uname -s)" ;; esac case "$(uname -m)" in arm64 | aarch64) arch=arm64 ;; x86_64 | amd64) arch=x64 ;; *) die "unsupported architecture: $(uname -m)" ;; esac if [ "$os" = darwin ] && [ "$(sysctl -n sysctl.proc_translated 2>/dev/null)" = 1 ]; then arch=arm64; fi if [ "$os" = linux ] && [ "$arch" = x64 ] && ! grep -q avx2 /proc/cpuinfo; then arch=x64-baseline; fi target="$os-$arch" version="${1:-}" [ -n "$version" ] || version=$(curl -fsSL "$api/latest") || die "could not reach $api" version="v${version#v}" sha=$(curl -fsSL "$api/$version/$target/sha") || die "no tesser $version build for $target" tmp=$(mktemp -d) trap 'rm -rf "$tmp"' EXIT echo "tesser: installing $version ($target)" curl -fsSL "$api/$version/$target/download" -o "$tmp/tesser.tar.gz" if command -v sha256sum >/dev/null; then got=$(sha256sum "$tmp/tesser.tar.gz"); else got=$(shasum -a 256 "$tmp/tesser.tar.gz"); fi [ "${got%% *}" = "$sha" ] || die "checksum mismatch: expected $sha, got ${got%% *}" tar -xzf "$tmp/tesser.tar.gz" -C "$tmp" mkdir -p "$bin" mv -f "$tmp/tesser" "$bin/tesser" "$bin/tesser" version case ":$PATH:" in *":$bin:"*) exit 0 ;; esac line='export PATH="$HOME/.tesser/bin:$PATH"' shell="${SHELL:-}" case "${shell##*/}" in zsh) rc="${ZDOTDIR:-$HOME}/.zshrc" ;; bash) if [ "$os" = darwin ]; then rc="$HOME/.bash_profile"; else rc="$HOME/.bashrc"; fi ;; fish) rc="${XDG_CONFIG_HOME:-$HOME/.config}/fish/config.fish" line='set -gx PATH $HOME/.tesser/bin $PATH' ;; *) echo "tesser: add $bin to your PATH"; exit 0 ;; esac mkdir -p "$(dirname "$rc")" grep -qsF "$line" "$rc" || printf '\n%s\n' "$line" >> "$rc" case "$rc" in "$HOME"/*) rc="~${rc#"$HOME"}" ;; esac echo "tesser: added $bin to PATH in $rc; open a new terminal, or run: source $rc"