-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsync.sh
More file actions
executable file
·129 lines (101 loc) · 3.53 KB
/
Copy pathsync.sh
File metadata and controls
executable file
·129 lines (101 loc) · 3.53 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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/bin/bash
# Script de sincronização de configurações de desenvolvimento
# Sincroniza arquivos de configuração do Neovim, Alacritty e VSCode com o repositório Git
# Interrompe execução em caso de erro
set -e
# ============================================================================
# CONFIGURAÇÕES
# ============================================================================
# Diretório do repositório de desenvolvimento (detecção automática)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
if git -C "$SCRIPT_DIR" rev-parse --show-toplevel >/dev/null 2>&1; then
REPO="$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel)"
else
REPO="$(cd "$SCRIPT_DIR/.." && pwd)"
fi
# Configurações do Neovim
NVIM_SRC="$HOME/.config/nvim"
NVIM_DST="$REPO/nvim"
# Configurações do Alacritty
ALACRITTY_SRC="$HOME/.config/alacritty"
ALACRITTY_DST="$REPO/alacritty"
# Configurações do VSCode
VSCODE_SRC="$HOME/.config/Code/User"
VSCODE_DST="$REPO/vscode"
# ============================================================================
# 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
}
# Função para sincronizar configurações
sync_config() {
local name="$1"
local src="$2"
local dst="$3"
shift 3
local excludes=("$@")
log_info "Sincronizando configurações do $name"
if [ ! -d "$src" ]; then
log_warning "Diretório de configuração do $name não encontrado: $src"
return 0
fi
mkdir -p "$dst"
local rsync_cmd="rsync -av --delete"
for exclude in "${excludes[@]}"; do
rsync_cmd+=" --exclude='$exclude'"
done
rsync_cmd+=" '$src/' '$dst/'"
log_info "Copiando arquivos de configuração do $name"
eval "$rsync_cmd"
log_info "Configurações do $name sincronizadas"
}
# ============================================================================
# SINCRONIZAÇÃO
# ============================================================================
log_info "Iniciando sincronização das configurações de desenvolvimento"
# Sincroniza Neovim
sync_config "Neovim" "$NVIM_SRC" "$NVIM_DST" \
".git/" \
"lazy-lock.json"
# Sincroniza Alacritty
sync_config "Alacritty" "$ALACRITTY_SRC" "$ALACRITTY_DST" \
".git/"
# Sincroniza VSCode
sync_config "VSCode" "$VSCODE_SRC" "$VSCODE_DST" \
".git/" \
"workspaceStorage/" \
"logs/" \
"CachedExtensions/" \
"User/globalStorage/" \
"User/workspaceStorage/"
# ============================================================================
# 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 todas as configs $(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