blob: 3ba6c283b17845b74a63d82a227223eaeda1a2f0 (
plain)
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
|
#!/bin/bash
#
# metadot: a dotfile management system
#
# Parameters
OPT="$1"
DATE="`date +%Y%m%d%I%M%S`"
BASENAME="`basename $0`"
DOT="$HOME/.dotfiles"
MODULES="$DOT/modules"
BACKUPS="$HOME/.backups/$DATE"
# Backup a file
function metadot_backup {
local file="$HOME/$1"
if [ -e "$file" ] || [ -h "$file" ]; then
local folder="$BACKUPS/`dirname $1`"
#echo "Backing up `basename $1`..."
mkdir -p $folder
mv $file $folder
fi
}
# Find contents of a module
function metadot_find {
local module="$1"
( cd $MODULES/$module && find -name '*.link' -or -name '*.dot.link' ) | sed -e 's|./||'
}
# Load a module
function metadot_load {
local module="$1"
local destname
local dirname
if [ -d "$MODULES/$module" ]; then
echo "Loading module $module..."
for file in `metadot_find $module`; do
echo "Processing $file..."
# Get the dirname, replacing string.dot with .string
dirname="`echo $file | sed -e 's|\([^/]*\).dot/|.\1/|g'`"
dirname="`dirname $dirname`"
if echo $file | grep -q '.dot.link'; then
destname=".`basename $file .dot.link`"
else
destname="`basename $file .link`"
fi
if [ "$dirname" != "." ]; then
#echo "Creating $HOME/$dirname..."
mkdir -p $HOME/$dirname
else
dirname=""
fi
metadot_backup "$dirname/$destname"
#echo "Installing symlink $dirname/$destname..."
ln -s $MODULES/$module/$file $HOME/$dirname/$destname
done
else
echo "No such module $module"
fi
}
# Parsing.
if [ -z "$OPT" ]; then
echo "usage: $BASENAME <option> [arguments]"
exit 1
elif [ "$OPT" == "ls" ]; then
ls -1 $MODULES
elif [ "$OPT" == "version" ]; then
( cd $DOT && git log -n 1 )
elif [ "$OPT" == "update" ]; then
( cd $DOT && git pull origin master && git submodule update --init )
elif [ "$OPT" == "backup" ]; then
shift
metadot_backup $1
elif [ "$OPT" == "load" ]; then
shift
if [ -z "$1" ]; then
echo "usage: $BASENAME load [module(s)|--all]"
fi
if [ "$1" == "--all" ]; then
modules="`ls $MODULES`"
else
modules="$*"
fi
for module in $modules; do
metadot_load $module
done
echo "Backups saved at $BACKUPS."
fi
|