summaryrefslogtreecommitdiff
path: root/setup.sh
diff options
context:
space:
mode:
authorxs <public@a.nub.ninja>2026-11-03 14:52:54 +0800
committerxs <public@a.nub.ninja>2026-11-03 14:52:54 +0800
commit6eefc4d7422e8efc5410709f28ea5b710ee6a7e0 (patch)
tree4387cd8297a5d5dc6da079b5f254f589ee00b0b9 /setup.sh
parent3e21bf910b4eb0baaa92a09053ca14b3c5ddab22 (diff)
setup.sh: idempotent vimlsp section (vimrc, vim-plug plugins, fzf, rust-analyzer, uv, ruff, ty); README
Diffstat (limited to 'setup.sh')
-rwxr-xr-xsetup.sh53
1 files changed, 53 insertions, 0 deletions
diff --git a/setup.sh b/setup.sh
index f0cf83b..d33733d 100755
--- a/setup.sh
+++ b/setup.sh
@@ -3,6 +3,56 @@
3SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" 3SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
4cd "$SCRIPT_DIR" || exit 4cd "$SCRIPT_DIR" || exit
5 5
6# Vim LSP setup (idempotent; each step = action + check, first failure stops).
7# Run only this part: ./setup.sh vimlsp
8vimlsp() {
9 set -e
10 ok() { echo "ok $*"; }
11 die() { echo "FAIL $*" >&2; exit 1; }
12 VIMRC_SRC="$SCRIPT_DIR/core/vimrc"
13 export PATH="$HOME/.cargo/bin:$HOME/.local/bin:$PATH"
14
15 # vimrc: plain copy into ~/.vimrc, back up a different existing one
16 if [ -f ~/.vimrc ] && ! cmp -s "$VIMRC_SRC" ~/.vimrc; then
17 cp ~/.vimrc ~/.vimrc.bak-"$(date +%F)"; ok "backed up ~/.vimrc to ~/.vimrc.bak-$(date +%F)"
18 fi
19 cmp -s "$VIMRC_SRC" ~/.vimrc || cp "$VIMRC_SRC" ~/.vimrc
20 { cmp -s "$VIMRC_SRC" ~/.vimrc && [ ! -L ~/.vimrc ]; } || die "~/.vimrc"; ok "~/.vimrc matches core/vimrc"
21
22 # vim-plug
23 [ -f ~/.vim/autoload/plug.vim ] || curl -fsSLo ~/.vim/autoload/plug.vim --create-dirs \
24 https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
25 grep -q 'plug#begin' ~/.vim/autoload/plug.vim || die "plug.vim"; ok "vim-plug ~/.vim/autoload/plug.vim"
26
27 # plugins: every Plug line of the vimrc, plain depth-1 git clone into ~/.vim/plugged
28 for repo in $(sed -n "s/^Plug '\([^']*\)'.*/\1/p" "$VIMRC_SRC"); do
29 d=~/.vim/plugged/${repo#*/}
30 [ -d "$d/.git" ] || git clone -q --depth 1 "https://github.com/$repo" "$d"
31 git -C "$d" rev-parse --verify -q HEAD > /dev/null || die "plugin $repo"; ok "plugin $repo"
32 done
33 [ -x ~/.vim/plugged/fzf/bin/fzf ] || ~/.vim/plugged/fzf/install --bin > /dev/null 2>&1
34 ~/.vim/plugged/fzf/bin/fzf --version > /dev/null || die "fzf binary"; ok "fzf binary"
35
36 # rust-analyzer (Rust itself comes from core/packages/install_rust.sh)
37 if rustup which rustc > /dev/null 2>&1; then
38 rustup component list --installed | grep -q '^rust-analyzer' || rustup component add rust-analyzer
39 rustup component list --installed | grep -q '^rust-src' || rustup component add rust-src
40 rust-analyzer --version > /dev/null || die "rust-analyzer"; ok "rust-analyzer $(rust-analyzer --version)"
41 else
42 echo "skip rust-analyzer: no rustup toolchain (run core/packages/install_rust.sh first)"
43 fi
44
45 # uv, ruff, ty
46 command -v uv > /dev/null || curl -LsSf https://astral.sh/uv/install.sh | UV_NO_MODIFY_PATH=1 sh
47 uv --version > /dev/null || die "uv"; ok "$(uv --version)"
48 for t in ruff ty; do
49 command -v $t > /dev/null || uv tool install $t
50 $t --version > /dev/null || die "$t"; ok "$($t --version)"
51 done
52 echo "vimlsp done"
53}
54[ "$1" = vimlsp ] && { vimlsp; exit $?; }
55
6# Shell appearance (only append if not already present) 56# Shell appearance (only append if not already present)
7grep -q 'di=38;5;135' /etc/bashrc || sudo tee -a /etc/bashrc > /dev/null << 'EOF' 57grep -q 'di=38;5;135' /etc/bashrc || sudo tee -a /etc/bashrc > /dev/null << 'EOF'
8LS_COLORS=$LS_COLORS:'di=38;5;135:ex=00;32:' ; export LS_COLORS 58LS_COLORS=$LS_COLORS:'di=38;5;135:ex=00;32:' ; export LS_COLORS
@@ -19,3 +69,6 @@ sudo bash ./core/ssh.sh || { echo "Failed to configure SSH"; exit 1
19sudo bash ./core/install-packages.sh || { echo "Failed to install packages"; exit 1; } 69sudo bash ./core/install-packages.sh || { echo "Failed to install packages"; exit 1; }
20sudo bash ./core/vim.sh || { echo "Failed to configure Vim"; exit 1; } 70sudo bash ./core/vim.sh || { echo "Failed to configure Vim"; exit 1; }
21sudo bash ./core/tmux.sh || { echo "Failed to configure Tmux"; exit 1; } 71sudo bash ./core/tmux.sh || { echo "Failed to configure Tmux"; exit 1; }
72
73# Vim LSP setup for the invoking user
74( vimlsp ) || { echo "Failed to set up vim LSP"; exit 1; }