#!/usr/bin/env bash # ============================================================================= # update-neovim.sh — chezmoi-managed, deployed to ~/.local/bin/update-neovim.sh # # Installs or upgrades neovim from the official binary tarball. # Bump NVIM_TARGET_VERSION to upgrade. Topgrade calls this via # ~/.config/topgrade.toml. # # Idempotent: no-op if installed version matches target. # ============================================================================= set -euo pipefail NVIM_TARGET_VERSION="v0.11.4" ARCH="$(uname -m)" case "$ARCH" in x86_64) NVIM_TARBALL="nvim-linux64.tar.gz" ;; aarch64|arm64) NVIM_TARBALL="nvim-linux-arm64.tar.gz" ;; *) echo "unsupported arch: $ARCH" >&2 exit 1 ;; esac if command -v nvim >/dev/null 2>&1; then INSTALLED_VER="$(nvim --version 2>/dev/null | head -1 | awk '{print $2}')" if [[ "$INSTALLED_VER" == "$NVIM_TARGET_VERSION" ]]; then echo "neovim $INSTALLED_VER matches target — no action" exit 0 fi echo "neovim $INSTALLED_VER -> $NVIM_TARGET_VERSION" else echo "installing neovim $NVIM_TARGET_VERSION" fi cd /tmp TMP_TARBALL="$(mktemp /tmp/nvim-update.XXXXXX.tar.gz)" trap 'rm -f "$TMP_TARBALL"' EXIT if ! curl -fL --retry 3 \ "https://github.com/neovim/neovim/releases/download/${NVIM_TARGET_VERSION}/${NVIM_TARBALL}" \ -o "$TMP_TARBALL"; then echo "failed to download $NVIM_TARBALL" >&2 exit 1 fi sudo rm -rf /opt/nvim-linux* /usr/local/bin/nvim sudo tar -xzf "$TMP_TARBALL" -C /opt/ sudo ln -sf "/opt/$(basename "$TMP_TARBALL" .tar.gz)/bin/nvim" /usr/local/bin/nvim echo "neovim $NVIM_TARGET_VERSION installed" nvim --version | head -1