-
Notifications
You must be signed in to change notification settings - Fork 2
/
dotfiles.sh
executable file
·128 lines (118 loc) · 2.49 KB
/
dotfiles.sh
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
#!/usr/bin/env bash
# Manage dotfile symlinks.
#
# Usage:
# dotfiles.sh [install|remove|list|howto]
#
# When called with no arguments, print help text.
dotfiles="
.bash_aliases
.ctags
.gdbinit
.gitconfig
.hgrc
.muttrc
.offlineimaprc
.pentadactylrc
.signature
.tigrc
.tmux.conf
.vimperatorrc
.vimrc
.xmonad
"
prog=$0
path=$(dirname "$prog")
cd "$path" > /dev/null
usage()
{
cat << EOF
Usage:
$prog [install|remove|list|howto]
install - install dotfile symlinks (first: move any existing DOTFILE to DOTFILE.orig)
remove - remove dotfile symlinks
list - list installed (and not installed) dotfile symlinks
howto - print commands that install would do (great for manual installation)
EOF
}
do_howto()
{
for file in $dotfiles; do
echo "ln -sr $PWD/$file $HOME"
done | column -t
}
do_install()
{
for file in $dotfiles; do
if [ -h "$HOME/$file" ]; then # symbolic link
true
elif [ -d "$HOME/$file" ]; then # directory
echo "$HOME/$file -> $PWD/$file (backup: $HOME/${file}.orig)"
mv "$HOME/$file" "$HOME/${file}.orig"
ln -sr "$PWD/$file" "$HOME"
elif [ -f "$HOME/$file" ]; then # regular file
echo "$HOME/$file -> $PWD/$file (backup: $HOME/${file}.orig)"
mv "$HOME/$file" "$HOME/${file}.orig"
ln -sr "$PWD/$file" "$HOME"
else
echo "$HOME/$file -> $PWD/$file"
ln -sr "$PWD/$file" "$HOME"
fi
done | column -t
}
do_remove()
{
for file in $dotfiles; do
if [ -h "$HOME/$file" ]; then # symbolic link
echo "$HOME/$file -> DELETED (was: $(readlink "$HOME/$file"))"
rm "$HOME/$file"
else
true
fi
done | column -t
}
do_list_installed()
{
for file in $dotfiles; do
if [ -h "$HOME/$file" ]; then # symbolic link
echo -n "$HOME/$file -> "
readlink "$HOME/$file"
else
true
fi
done | column -t
}
do_list_not_installed()
{
for file in $dotfiles; do
if [ -h "$HOME/$file" ]; then # symbolic link
true
elif [ -d "$HOME/$file" ]; then # directory
echo "$HOME/$file -> (Regular directory)"
elif [ -f "$HOME/$file" ]; then # regular file
echo "$HOME/$file -> (Regular file)"
else
echo "$HOME/$file -> (Does not exist)"
fi
done | column -t
}
cmd=$1
if [ "$cmd" == "install" ]; then
echo "### Installing symlinks..."
do_install
echo "...done!"
elif [ "$cmd" == "remove" ]; then
echo "### Removing symlinks..."
do_remove
echo "...done!"
elif [ "$cmd" == "list" ]; then
echo "### Installed symlinks:"
do_list_installed
echo "### Not installed symlinks:"
do_list_not_installed
elif [ "$cmd" = "howto" ]; then
do_howto
else
usage
exit 1
fi