Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Scripts de Sincronização e Instalação de Configurações

Este repositório contém scripts para duas direções de gerenciamento de configurações (dotfiles):

  1. Instalação / Deploy (install-*.sh) — Aplica as configurações deste repositório no seu sistema (~/.config/...).
  2. Sincronização (dev) (sync-*.sh) — Salva as mudanças que você fez localmente de volta para o repositório Git.

Sumário

Visão Geral

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 vs Sincronização

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.

Scripts Disponíveis

Instalação / Deploy (aplica configs no seu sistema)

  • 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

Sincronização (salva mudanças locais de volta pro Git)

  • sync.sh — Sincroniza todas as configurações (Neovim + Alacritty + VSCode)
  • scripts/sync-nvim.sh — Apenas Neovim
  • scripts/sync-alacritty.sh — Apenas Alacritty (se existir)
  • scripts/sync-vscode.sh — Apenas VSCode (se existir)

Funcionalidades Gerais

  • 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)

Estrutura do Projeto

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

Como Funciona a Instalação

  1. Detecção automática da raiz do repositório (via git ou caminho do script)
  2. Backup seguro (se ~/.config/nvim existir) → ~/.config/nvim.bak.2025...
  3. Cópia com rsync --delete do conteúdo de nvim/ para ~/.config/nvim/
  4. (Opcional) Bootstrap headless dos plugins: nvim --headless -c "Lazy! sync" -c "qa"
  5. 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)

Como Funciona a Sincronização (fluxo antigo)

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 e git push

Uso - Instalação (fluxo principal para a maioria dos casos)

# 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.sh

Fluxo 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

Uso - Sincronização (depois que você personalizou)

./sync.sh
# ou
./scripts/sync-nvim.sh

Documentação Detalhada do Neovim

Dentro da pasta nvim/ existe documentação rica:

  • nvim/README.md — visão geral
  • nvim/docs/installation.mdguia completo de instalação, atualização, troubleshooting e diferença install × sync
  • nvim/docs/plugins.md, keymaps.md, structure.md, etc.

Depois de instalar, os arquivos também ficam disponíveis em ~/.config/nvim/docs/.

Exemplo de Saída

[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

Tratamento de Erros

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

Personalização

Modificar Diretórios

Edite as variáveis no início dos scripts:

REPO=~/seu/repositorio
NVIM_SRC=~/.config/nvim
NVIM_DST=$REPO/nvim

Adicionar Exclusões

Modifique o comando rsync para excluir outros arquivos:

rsync -av --delete \
  --exclude='.git/' \
  --exclude='lazy-lock.json' \
  --exclude='seu-arquivo.log' \
  "$NVIM_SRC/" "$NVIM_DST/"

Template Base

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

Passos para Adicionar Nova Ferramenta:

  1. Copie o template acima
  2. Substitua [FERRAMENTA] pelo nome da ferramenta
  3. Substitua [ferramenta] pelo nome em minúsculas
  4. Ajuste o caminho FERRAMENTA_SRC para o diretório correto
  5. Adicione exclusões específicas no --exclude
  6. Torne o script executável: chmod +x sync-[ferramenta].sh

Requisitos

  • Git: Para controle de versão
  • rsync: Para sincronização eficiente de arquivos
  • Bash: Shell compatível (padrão na maioria dos sistemas Unix)

Benefícios

  1. Backup automático: Configurações sempre versionadas
  2. Sincronização multi-dispositivo: Mesmo ambiente em qualquer máquina
  3. Histórico completo: Rastreamento de mudanças ao longo do tempo
  4. Recuperação fácil: Restauração rápida em caso de problemas
  5. Modularidade: Scripts individuais para cada ferramenta
  6. Extensibilidade: Template para adicionar novas ferramentas facilmente

About

Scripts automatizados de sincronização de configuração de ambiente de desenvolvimento

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages