Este repositório contém scripts para duas direções de gerenciamento de configurações (dotfiles):
- Instalação / Deploy (
install-*.sh) — Aplica as configurações deste repositório no seu sistema (~/.config/...). - Sincronização (dev) (
sync-*.sh) — Salva as mudanças que você fez localmente de volta para o repositório Git.
- Visão Geral
- Instalação vs Sincronização ← Leia isso primeiro
- Scripts Disponíveis
- Estrutura do Projeto
- Como Funciona a Instalação
- Como Funciona a Sincronização
- Uso
- Documentação do Neovim
- Requisitos
Os scripts automatizam tanto a instalação das configurações em novas máquinas quanto o versionamento das mudanças que você faz no dia a dia.
Instalação (Repo → Sistema)
Usa scripts em scripts/install-*.sh e setup/install-configs.sh.
- Copia as configurações deste repositório para
~/.config/nvim,~/.config/alacritty, etc. - Faz backup automático da configuração anterior (com timestamp).
- Pode inicializar plugins automaticamente (ex: Lazy sync para Neovim).
- Ideal para: configurar uma máquina nova, aplicar mudanças depois de
git pull, ou restaurar seu ambiente.
Sincronização (Sistema → Repo)
Usa sync.sh, scripts/sync-nvim.sh, etc.
- Copia do seu
~/.config/...de volta para as pastas dentro deste repositório. - Cria commit + push automático.
- Exclui deliberadamente arquivos como
lazy-lock.json, caches, logs, etc. - Ideal para: salvar personalizações que você fez dentro do Neovim / Alacritty de volta no Git.
Regra prática:
- Depois de clonar ou dar
git pull→ rode o script de install. - Depois de editar bastante dentro do editor → rode o script de sync.
setup/install-configs.sh— Instalador geral de todas as configurações (chama os específicos)scripts/install-nvim-config.sh— Instala/aplica a configuração do Neovim em~/.config/nvim
sync.sh— Sincroniza todas as configurações (Neovim + Alacritty + VSCode)scripts/sync-nvim.sh— Apenas Neovimscripts/sync-alacritty.sh— Apenas Alacritty (se existir)scripts/sync-vscode.sh— Apenas VSCode (se existir)
- Backup automático com timestamp antes de sobrescrever
- Detecção automática da raiz do repositório (não depende mais só de hardcode
~/prog/...) - Logs com timestamp no mesmo estilo
- Tratamento de erros com
set -e - Suporte a flags (
--no-backup,--no-plugins,--help, etc)
development-environment/
├── sync.sh # Sincronização completa (todas as tools)
├── scripts/
│ ├── install-nvim-config.sh # ← Instalação do Neovim (novo)
│ ├── sync-nvim.sh
│ └── ...
├── setup/
│ ├── setup.sh # Instala binários (Neovim, Node, Rust...)
│ ├── install-configs.sh # Wrapper de instalação de dotfiles
│ └── installers/
├── nvim/ # Configuração versionada do Neovim
├── alacritty/
└── README.md
- Detecção automática da raiz do repositório (via git ou caminho do script)
- Backup seguro (se
~/.config/nvimexistir) →~/.config/nvim.bak.2025... - Cópia com
rsync --deletedo conteúdo denvim/para~/.config/nvim/ - (Opcional) Bootstrap headless dos plugins:
nvim --headless -c "Lazy! sync" -c "qa" - Impressão de próximos passos claros no terminal
Características importantes da instalação:
- Inclui o
lazy-lock.json(reprodutibilidade) - Nunca faz commit/push
- Seguro de rodar múltiplas vezes (sempre faz backup novo)
O fluxo clássico continua funcionando para salvar edições locais:
- Usa
rsync --delete - Exclui
lazy-lock.json,.git/, caches, logs, workspaceStorage etc. - Depois da cópia faz
git add ., commit com timestamp egit push
# 1. Torne executável (só na primeira vez)
chmod +x scripts/install-nvim-config.sh setup/install-configs.sh
# 2. Instale a configuração do Neovim
./scripts/install-nvim-config.sh
# Opções úteis
./scripts/install-nvim-config.sh --no-plugins # só copia os arquivos
./scripts/install-nvim-config.sh --no-backup # use com cuidado
# Instalador mais geral (quando existirem mais ferramentas)
./setup/install-configs.shFluxo completo recomendado (máquina nova):
./setup/setup.sh # Instala binários (Neovim, etc)
./setup/install-configs.sh # Aplica as configs versionadas
nvim # Termine a instalação de plugins e rode :Mason./sync.sh
# ou
./scripts/sync-nvim.shDentro da pasta nvim/ existe documentação rica:
nvim/README.md— visão geralnvim/docs/installation.md— guia completo de instalação, atualização, troubleshooting e diferença install × syncnvim/docs/plugins.md,keymaps.md,structure.md, etc.
Depois de instalar, os arquivos também ficam disponíveis em ~/.config/nvim/docs/.
[14:30:15] INFO: Iniciando sincronização das configurações de desenvolvimento
[14:30:15] INFO: Sincronizando configurações do Neovim
[14:30:15] INFO: Copiando arquivos de configuração do Neovim
sending incremental file list
lua/config/options.lua
[14:30:16] INFO: Configurações do Neovim sincronizadas
[14:30:16] INFO: Sincronizando configurações do Alacritty
[14:30:16] INFO: Copiando arquivos de configuração do Alacritty
sending incremental file list
alacritty.yml
[14:30:16] INFO: Configurações do Alacritty sincronizadas
[14:30:16] INFO: Sincronizando configurações do VSCode
[14:30:17] INFO: Copiando arquivos de configuração do VSCode
sending incremental file list
settings.json
keybindings.json
[14:30:17] INFO: Configurações do VSCode sincronizadas
[14:30:17] INFO: Adicionando mudanças ao controle de versão
[14:30:17] INFO: Commit criado: update: sincroniza todas as configs 2024-01-15 14:30:17
[14:30:18] INFO: Enviando mudanças para o repositório remoto
[14:30:19] INFO: Sincronização concluída com sucesso
Os scripts implementam verificações robustas:
- Diretórios inexistentes: Verifica se os diretórios de configuração existem
- Falhas de Git: Captura erros de commit e push
- Interrupção segura: Para execução em caso de erro (
set -e) - Logs estruturados: Diferencia INFO, WARNING e ERROR
Edite as variáveis no início dos scripts:
REPO=~/seu/repositorio
NVIM_SRC=~/.config/nvim
NVIM_DST=$REPO/nvimModifique o comando rsync para excluir outros arquivos:
rsync -av --delete \
--exclude='.git/' \
--exclude='lazy-lock.json' \
--exclude='seu-arquivo.log' \
"$NVIM_SRC/" "$NVIM_DST/"Para adicionar sincronização de uma nova ferramenta, use este template:
#!/bin/bash
# Script de sincronização de configurações do [FERRAMENTA]
# Sincroniza arquivos de configuração do [FERRAMENTA] local com o repositório Git
# Interrompe execução em caso de erro
set -e
# ============================================================================
# CONFIGURAÇÕES
# ============================================================================
# Diretório do repositório de desenvolvimento
REPO=~/prog/development-environment
# Diretório fonte das configurações do [FERRAMENTA]
FERRAMENTA_SRC=~/.config/[ferramenta]
# Diretório destino no repositório
FERRAMENTA_DST=$REPO/[ferramenta]
# ============================================================================
# FUNÇÕES AUXILIARES
# ============================================================================
# Exibe mensagens de log com timestamp
log_info() {
echo "[$(date '+%H:%M:%S')] INFO: $1"
}
log_warning() {
echo "[$(date '+%H:%M:%S')] WARNING: $1"
}
log_error() {
echo "[$(date '+%H:%M:%S')] ERROR: $1" >&2
}
# ============================================================================
# SINCRONIZAÇÃO
# ============================================================================
log_info "Iniciando sincronização das configurações do [FERRAMENTA]"
# Verifica se o diretório fonte existe
if [ ! -d "$FERRAMENTA_SRC" ]; then
log_error "Diretório de configuração do [FERRAMENTA] não encontrado: $FERRAMENTA_SRC"
exit 1
fi
# Cria diretório destino se não existir
mkdir -p "$FERRAMENTA_DST"
# Sincroniza arquivos usando rsync
log_info "Copiando arquivos de configuração"
rsync -av --delete \
--exclude='.git/' \
--exclude='[arquivos-a-excluir]' \
"$FERRAMENTA_SRC/" "$FERRAMENTA_DST/"
log_info "Arquivos sincronizados com sucesso"
# ============================================================================
# CONTROLE DE VERSÃO
# ============================================================================
# Navega para o diretório do repositório
cd "$REPO"
# Adiciona todas as mudanças ao staging
log_info "Adicionando mudanças ao controle de versão"
git add .
# Cria commit com timestamp
COMMIT_MSG="update: sincroniza configs [FERRAMENTA] $(date '+%Y-%m-%d %H:%M:%S')"
if git commit -m "$COMMIT_MSG"; then
log_info "Commit criado: $COMMIT_MSG"
else
log_warning "Nenhuma mudança detectada para commit"
fi
# Envia mudanças para o repositório remoto
log_info "Enviando mudanças para o repositório remoto"
if git push; then
log_info "Sincronização concluída com sucesso"
else
log_error "Falha ao enviar mudanças para o repositório remoto"
exit 1
fi- Copie o template acima
- Substitua
[FERRAMENTA]pelo nome da ferramenta - Substitua
[ferramenta]pelo nome em minúsculas - Ajuste o caminho
FERRAMENTA_SRCpara o diretório correto - Adicione exclusões específicas no
--exclude - Torne o script executável:
chmod +x sync-[ferramenta].sh
- Git: Para controle de versão
- rsync: Para sincronização eficiente de arquivos
- Bash: Shell compatível (padrão na maioria dos sistemas Unix)
- Backup automático: Configurações sempre versionadas
- Sincronização multi-dispositivo: Mesmo ambiente em qualquer máquina
- Histórico completo: Rastreamento de mudanças ao longo do tempo
- Recuperação fácil: Restauração rápida em caso de problemas
- Modularidade: Scripts individuais para cada ferramenta
- Extensibilidade: Template para adicionar novas ferramentas facilmente