forked from fehawen/dotfiles
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdotfiles.sh
More file actions
executable file
·85 lines (68 loc) · 1.77 KB
/
dotfiles.sh
File metadata and controls
executable file
·85 lines (68 loc) · 1.77 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
#!/usr/bin/env bash
PROGNAME=$(basename "$0")
exit_on_fail() {
"$@" &> /dev/null
code=$?
if [[ $code -ne 0 ]]; then
printf 'Error: command [%s] failed with error code %s\nfile: %s\nline: %s\n' \
"$*" \
"$code" \
"$PROGNAME" \
"$LINENO" 1>&2
fi
}
symlink_tilde_files() {
tildes=(
".asoundrc"
".bash_profile"
".bashrc"
".hushlogin"
".inputrc"
".profile"
".vimrc"
".xinitrc"
".Xresources"
)
exit_on_fail pushd "$PWD/tilde"
for FILE in "${tildes[@]}"; do
printf 'Symlinking %s -> %s\n' "${HOME/#$HOME/"~"}/$FILE" "${PWD/#$HOME/"~"}/$FILE"
exit_on_fail ln -sf "$PWD/$FILE" "$HOME/$FILE"
done
cd "$(dirs -l -0)" && dirs -c
}
symlink_files() {
exit_on_fail pushd "$PWD/$1"
for FILE in *; do
if [ -f "$FILE" ]; then
printf 'Symlinking %s -> %s\n' "${HOME/#$HOME/"~"}/$1/$FILE" "${PWD/#$HOME/"~"}/$FILE"
exit_on_fail ln -sf "$PWD/$FILE" "$HOME/$1/$FILE"
fi
done
cd "$(dirs -l -0)" && dirs -c
}
setup_dotfiles() {
printf 'Setting up dotfiles...\n'
folders=(
".colors"
".config/fontconfig"
".config/nvim"
".newsboat"
"tilde"
)
shopt -s dotglob
for folder in "${folders[@]}"; do
if [[ "$folder" == "tilde" ]]; then
symlink_tilde_files
else
if [[ ! -d "$HOME/$folder" ]]; then
printf 'Directory "%s" does not exist.' "$folder"
printf 'Creating dir "%s"' "$folder"
exit_on_fail mkdir -p "$HOME/$folder"
fi
symlink_files "$folder"
fi
done
shopt -u dotglob
printf 'Done.\n'
}
setup_dotfiles