Like 0

Revision 7477f269e3a34ae8d1c3736d9d77c1377eb1897a

neovim.sh Raw
1
2#!/usr/bin/env bash
3set -Eeuo pipefail
4
5INSTALL_DIR="/opt/nvim"
6BACKUP_DIR="/opt/nvim.backup"
7BIN_DIR="/usr/local/bin"
8
9if [[ $EUID -ne 0 ]]; then
10 exec sudo bash "$0" "$@"
11fi
12
13case "$(dpkg --print-architecture)" in
14 amd64) ARCH="x86_64" ;;
15 arm64) ARCH="arm64" ;;
16 *)
17 echo "Unsupported architecture" >&2
18 exit 1
19 ;;
20esac
21
22echo "==> Installing dependencies"
23apt-get update
24apt-get install -y curl ca-certificates tar
25
26TMP_DIR="$(mktemp -d)"
27trap 'rm -rf "$TMP_DIR"' EXIT
28
29ASSET="nvim-linux-${ARCH}"
30URL="https://github.com/neovim/neovim/releases/latest/download/${ASSET}.tar.gz"
31
32echo "==> Downloading latest Neovim"
33curl -fL --retry 3 \
34 "$URL" \
35 -o "$TMP_DIR/nvim.tar.gz"
36
37echo "==> Extracting Neovim"
38tar -xzf "$TMP_DIR/nvim.tar.gz" -C "$TMP_DIR"
39
40"$TMP_DIR/$ASSET/bin/nvim" --version | head -n 1
41
42echo "==> Installing to $INSTALL_DIR"
43
44# Remove the previous backup
45rm -rf "$BACKUP_DIR"
46
47# Back up the current installation
48if [[ -e "$INSTALL_DIR" ]]; then
49 mv "$INSTALL_DIR" "$BACKUP_DIR"
50fi
51
52# Install the new version
53if ! mv "$TMP_DIR/$ASSET" "$INSTALL_DIR"; then
54 if [[ -d "$BACKUP_DIR" ]]; then
55 mv "$BACKUP_DIR" "$INSTALL_DIR"
56 fi
57 exit 1
58fi
59
60echo "==> Creating command symlinks"
61mkdir -p "$BIN_DIR"
62
63for cmd in vi vim nvim; do
64 ln -sfn "$INSTALL_DIR/bin/nvim" "$BIN_DIR/$cmd"
65done
66
67echo "==> Configuring update-alternatives"
68
69update-alternatives \
70 --install /usr/bin/vi vi "$INSTALL_DIR/bin/nvim" 100
71
72update-alternatives \
73 --install /usr/bin/vim vim "$INSTALL_DIR/bin/nvim" 100
74
75update-alternatives \
76 --install /usr/bin/editor editor "$INSTALL_DIR/bin/nvim" 100
77
78for cmd in vi vim editor; do
79 update-alternatives --set "$cmd" "$INSTALL_DIR/bin/nvim"
80done
81
82echo "==> Setting EDITOR and VISUAL"
83
84cat > /etc/profile.d/neovim.sh <<'EOF'
85export EDITOR=/usr/local/bin/nvim
86export VISUAL=/usr/local/bin/nvim
87EOF
88
89chmod 644 /etc/profile.d/neovim.sh
90
91echo "==> Verifying installation"
92
93for cmd in vi vim nvim; do
94 TARGET="$(readlink -f "$BIN_DIR/$cmd")"
95
96 if [[ "$TARGET" != "$INSTALL_DIR/bin/nvim" ]]; then
97 echo "Verification failed: $cmd" >&2
98 exit 1
99 fi
100
101 printf '%-5s -> %s\n' "$cmd" "$TARGET"
102done
103
104echo
105"$INSTALL_DIR/bin/nvim" --version | head -n 1
106
107echo
108echo "Neovim installation completed."
109echo "Please reopen your shell to refresh the environment."
110