-
Notifications
You must be signed in to change notification settings - Fork 1
/
bootstrap
59 lines (50 loc) · 1.28 KB
/
bootstrap
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
#!/bin/bash
backupdir="$HOME/.dotfiles/local.bak/$(date "+%Y%m%d%H%M.%S")"
excluded=(.git .gitignore .gitmodules bootstrap bash README.md local.bak)
backup() {
mkdir -p $backupdir
local files=( $(ls -A) )
for file in "${files[@]}"; do
in_array $file "${excluded[@]}" || ([ -e "$HOME/.$file" ] && cp -Rf "$HOME/.$file" "$backupdir/$file")
done
}
in_array() {
local hay needle=$1
shift
for hay; do
[[ $hay == $needle ]] && return 0
done
return 1
}
list_files() {
local files=( $(ls -A) )
for file in "${files[@]}"; do
in_array $file "${excluded[@]}" || echo $file
done
}
ensure_installation_dir() {
if [ `pwd` != "$HOME/.dotfiles" ]; then
echo " "
echo "Error: dotfiles installation must be invoked inside $HOME/.dotfiles,"
echo " otherwise you will end up with a broken \$HOME configuration."
echo " "
echo " Try this: cd ~/.dotfiles"
echo " bash bootstrap"
echo " "
exit 1
fi
}
install() {
ensure_installation_dir
backup
local files=( $(ls -A) )
for file in "${files[@]}"; do
in_array $file "${excluded[@]}"
should_install=$?
if [ $should_install -gt 0 ]; then
[ -e "$HOME/.$file" ] && rm "$HOME/.$file"
ln -s "$HOME/.dotfiles/$file" "$HOME/.$file"
fi
done
}
install