diff --git a/run_once_20-install-user-packages.sh.tmpl b/run_once_20-install-user-packages.sh.tmpl index b9efc8b..5474366 100755 --- a/run_once_20-install-user-packages.sh.tmpl +++ b/run_once_20-install-user-packages.sh.tmpl @@ -62,24 +62,48 @@ if command -v fdfind >/dev/null 2>&1 && ! command -v fd >/dev/null 2>&1; then ln -sf "$(command -v fdfind)" "$USER_HOME/.local/bin/fd" fi -# Debian's neovim in stable is too old for LazyVim (needs >=0.9). -# If installed neovim is <0.9, fetch the official binary tarball. +# Neovim — always install the latest official binary tarball on debian. +# apt's neovim is too old for LazyVim on stable (bookworm), and even on +# trixie we want a known-good version. Detect arch for the right tarball. +ARCH="$(uname -m)" +case "$ARCH" in + x86_64) NVIM_TARBALL="nvim-linux64.tar.gz" ;; + aarch64|arm64) NVIM_TARBALL="nvim-linux-arm64.tar.gz" ;; + *) + die "unsupported arch for neovim tarball: $ARCH" + ;; +esac + if command -v nvim >/dev/null 2>&1; then NVIM_VER="$(nvim --version | head -1 | awk '{print $2}' | tr -d 'v')" NVIM_MAJOR="$(echo "$NVIM_VER" | cut -d. -f1)" NVIM_MINOR="$(echo "$NVIM_VER" | cut -d. -f2)" if [[ "${NVIM_MAJOR:-0}" -lt 1 || ("$NVIM_MAJOR" -eq 0 && "${NVIM_MINOR:-0}" -lt 9) ]]; then - log "installed neovim $NVIM_VER is too old, installing official binary" + log "installed neovim $NVIM_VER too old — replacing with latest from GitHub ($ARCH)" sudo apt-get remove -y neovim || true - cd /tmp - NVIM_LATEST="$(curl -fsSL https://api.github.com/repos/neovim/neovim/releases/latest | grep tag_name | cut -d'"' -f4)" - curl -fL "https://github.com/neovim/neovim/releases/download/${NVIM_LATEST}/nvim-linux64.tar.gz" -o nvim.tar.gz - sudo tar -xzf nvim.tar.gz -C /opt/ - sudo ln -sf /opt/nvim-linux64/bin/nvim /usr/local/bin/nvim - rm -f nvim.tar.gz + else + log "neovim $NVIM_VER from apt is recent enough — keeping it" + NVIM_TARBALL="" fi fi +if [[ -n "$NVIM_TARBALL" ]]; then + log "downloading neovim from GitHub ($NVIM_TARBALL)" + cd /tmp + NVIM_LATEST="$(curl -fsSL https://api.github.com/repos/neovim/neovim/releases/latest | grep tag_name | cut -d'"' -f4)" + curl -fL "https://github.com/neovim/neovim/releases/download/${NVIM_LATEST}/${NVIM_TARBALL}" -o nvim.tar.gz + sudo rm -rf /opt/nvim-linux* /usr/local/bin/nvim + sudo tar -xzf nvim.tar.gz -C /opt/ + # The arm64 tarball extracts to nvim-linux-arm64, x86_64 to nvim-linux64. + sudo ln -sf "/opt/$(basename nvim.tar.gz .tar.gz)/bin/nvim" /usr/local/bin/nvim + rm -f nvim.tar.gz +fi + +# Verify neovim is reachable (PATH may need /usr/local/bin explicitly for this run) +if ! command -v nvim >/dev/null 2>&1 && [[ -x /usr/local/bin/nvim ]]; then + export PATH="/usr/local/bin:$PATH" +fi + {{ else -}} die "unsupported os_family: {{ .os_family }}" {{ end -}}