-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall.sh
More file actions
executable file
·108 lines (96 loc) · 4.75 KB
/
Copy pathinstall.sh
File metadata and controls
executable file
·108 lines (96 loc) · 4.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/env bash
#
# install.sh — bootstrap deste setup de Vim para uma máquina do zero.
#
# O que faz (idempotente, sempre faz backup do que já existe):
# 1. Verifica que o repo está em ~/.vim_runtime (os paths são hardcoded).
# 2. Inicializa/atualiza os submodules (fzf, coc.nvim, vim-elixir, ...).
# 3. Cria ~/.vimrc apontando para vimrc_example.
# 4. Linka coc-settings.json em ~/.vim/coc-settings.json (config do LSP).
# 5. Linka ~/.config/nvim em vim_runtime/nvim (Neovim dual-boot, opcional).
#
# Uso:
# git clone --recursive https://github.com/albertosca/vim-runtime.git ~/.vim_runtime
# bash ~/.vim_runtime/install.sh
set -euo pipefail
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
EXPECTED="$HOME/.vim_runtime"
STAMP="$(date +%Y%m%d%H%M%S)"
info() { printf ' \033[32m✓\033[0m %s\n' "$1"; }
warn() { printf ' \033[33m!\033[0m %s\n' "$1"; }
err() { printf ' \033[31m✗\033[0m %s\n' "$1" >&2; }
# Faz backup de um arquivo/symlink existente antes de sobrescrever.
backup_if_exists() {
local target="$1"
if [ -e "$target" ] || [ -L "$target" ]; then
mv "$target" "$target.backup-$STAMP"
warn "$target já existia — backup em $target.backup-$STAMP"
fi
}
echo "Vim runtime — instalação"
echo "────────────────────────────────────────────"
# 1. Paths deste setup são hardcoded em ~/.vim_runtime (editor.vim, configs.vim,
# vimrc_example). Se o repo estiver em outro lugar, o Vim sobe quebrado.
if [ "$REPO_ROOT" != "$EXPECTED" ]; then
err "Este repo está em $REPO_ROOT, mas o setup exige $EXPECTED."
err "Os sources e undodir são hardcoded em ~/.vim_runtime."
err "Mova o repo: mv \"$REPO_ROOT\" \"$EXPECTED\" — e rode de novo."
exit 1
fi
info "Repo em $EXPECTED"
# 1b. Pre-flight de dependências. Não aborta — só avisa, porque o Vim sobe
# mesmo sem elas (degradado). node é o mais crítico: sem ele o CoC nem carrega.
echo "Checando dependências..."
check_dep() {
# check_dep <bin> <obrigatório|opcional> <pra que serve> <como instalar>
local bin="$1" level="$2" what="$3" how="$4"
if command -v "$bin" > /dev/null 2>&1; then
info "$bin encontrado"
elif [ "$level" = "obrigatório" ]; then
warn "$bin AUSENTE — $what. Instale: $how"
else
warn "$bin ausente (opcional) — $what"
fi
}
check_dep node obrigatório "CoC (LSP) não carrega sem ele" "https://nodejs.org ou 'brew install node'"
check_dep rg obrigatório "busca via fzf/Ack fica degradada" "'brew install ripgrep' ou 'apt install ripgrep'"
check_dep git obrigatório "submodules e plugins de git" "'brew install git' ou 'apt install git'"
# 2. Submodules — sem isso fzf, coc.nvim, vim-elixir etc. vêm vazios.
# Itera um a um: se um repo sumiu do GitHub, avisa e continua em vez de abortar tudo.
if command -v git > /dev/null 2>&1 && [ -f "$REPO_ROOT/.gitmodules" ]; then
echo "Inicializando submodules (pode demorar na primeira vez)..."
fail_count=0
while IFS= read -r mod_path; do
if ! git -C "$REPO_ROOT" submodule update --init "$mod_path" > /dev/null 2>&1; then
mod_url=$(git -C "$REPO_ROOT" config --file .gitmodules "submodule.$mod_path.url" 2>/dev/null || echo "url desconhecida")
warn "Submodule ignorado (repo inacessível?): $(basename "$mod_path") ← $mod_url"
fail_count=$((fail_count + 1))
fi
done < <(git -C "$REPO_ROOT" config --file .gitmodules --get-regexp 'submodule\..*\.path' | awk '{print $2}')
if [ "$fail_count" -eq 0 ]; then
info "Submodules atualizados"
else
warn "$fail_count submodule(s) ignorado(s) — o Vim funciona, mas esses plugins estão ausentes"
fi
else
warn "git ou .gitmodules ausente — pulei submodules"
fi
# 3. ~/.vimrc → vimrc_example
backup_if_exists "$HOME/.vimrc"
ln -sf "$EXPECTED/vimrc_example" "$HOME/.vimrc"
info "~/.vimrc → vim_runtime/vimrc_example"
# 4. coc-settings.json (config das extensões de LSP do CoC)
mkdir -p "$HOME/.vim"
backup_if_exists "$HOME/.vim/coc-settings.json"
ln -sf "$EXPECTED/coc-settings.json" "$HOME/.vim/coc-settings.json"
info "~/.vim/coc-settings.json → vim_runtime/coc-settings.json"
# 5. ~/.config/nvim → vim_runtime/nvim (Neovim dual-boot, opcional)
mkdir -p "$HOME/.config"
backup_if_exists "$HOME/.config/nvim"
ln -sf "$EXPECTED/nvim" "$HOME/.config/nvim"
info "~/.config/nvim → vim_runtime/nvim (Neovim dual-boot)"
echo "────────────────────────────────────────────"
echo "Pronto. Próximos passos:"
echo " • Abra o Vim. O CoC vai instalar as extensões de g:coc_global_extensions."
echo " • LSPs externos opcionais: node, ripgrep (rg), ElixirLS, solargraph, pyright."
echo " • Veja o README para a lista completa e atalhos."