diff options
| author | xs <public@a.nub.ninja> | 2026-11-03 14:52:54 +0800 |
|---|---|---|
| committer | xs <public@a.nub.ninja> | 2026-11-03 14:52:54 +0800 |
| commit | 6eefc4d7422e8efc5410709f28ea5b710ee6a7e0 (patch) | |
| tree | 4387cd8297a5d5dc6da079b5f254f589ee00b0b9 | |
| parent | 3e21bf910b4eb0baaa92a09053ca14b3c5ddab22 (diff) | |
setup.sh: idempotent vimlsp section (vimrc, vim-plug plugins, fzf, rust-analyzer, uv, ruff, ty); README
| -rw-r--r-- | README | 2 | ||||
| -rwxr-xr-x | setup.sh | 53 |
2 files changed, 55 insertions, 0 deletions
| @@ -0,0 +1,2 @@ | |||
| 1 | Dev environment setup (Rocky/Fedora). Full setup: git clone root@fi0.noml.ch:/git/dev_env && cd dev_env && ./setup.sh | ||
| 2 | Vim LSP only (vimrc, vim-plug plugins, rust-analyzer, uv, ruff, ty): ./setup.sh vimlsp | ||
| @@ -3,6 +3,56 @@ | |||
| 3 | SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" | 3 | SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" |
| 4 | cd "$SCRIPT_DIR" || exit | 4 | cd "$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 | ||
| 8 | vimlsp() { | ||
| 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) |
| 7 | grep -q 'di=38;5;135' /etc/bashrc || sudo tee -a /etc/bashrc > /dev/null << 'EOF' | 57 | grep -q 'di=38;5;135' /etc/bashrc || sudo tee -a /etc/bashrc > /dev/null << 'EOF' |
| 8 | LS_COLORS=$LS_COLORS:'di=38;5;135:ex=00;32:' ; export LS_COLORS | 58 | LS_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 | |||
| 19 | sudo bash ./core/install-packages.sh || { echo "Failed to install packages"; exit 1; } | 69 | sudo bash ./core/install-packages.sh || { echo "Failed to install packages"; exit 1; } |
| 20 | sudo bash ./core/vim.sh || { echo "Failed to configure Vim"; exit 1; } | 70 | sudo bash ./core/vim.sh || { echo "Failed to configure Vim"; exit 1; } |
| 21 | sudo bash ./core/tmux.sh || { echo "Failed to configure Tmux"; exit 1; } | 71 | sudo 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; } | ||
