3 # To start tracking a file,
4 # cp ~/.screenrc dot/screenrc
6 # To sort out symlinks when things are clean
7 # infra/makelinks install
9 set -e -o posix -o pipefail
12 echo >&2 "usage: $0 [-n|-v] list|setup|import|clean"
19 if [ $# = 0 ]; then break; fi
21 -n) real_act=log_only ;;
22 -v) real_act=with_log ;;
30 1.list|1.setup|1.import|1.clean) ;;
36 dots=$( find dot -type f -name '[0-9a-zA-Z]*[0-9a-zA-Z]' )
39 basepath=${basepath#$HOME/}
48 if [ $mode = list ]; then
55 show "bad: $dot: $1" >&2
59 if [ $mode = $1 ]; then
62 show "needs $1: $prhome: $2"
77 underhome=".${dot#dot/}"
78 inhome="$HOME/$underhome"
80 if [ "$inhome" -ef "$dot" ]; then
81 good "already symlinked here"
82 elif [ -h "$inhome" ]; then
83 bad "wrong symlink target"
84 elif ! [ -e "$inhome" ]; then
85 needs setup "absent here"
86 $act ln -s "$basepath/$dot" "$inhome"
87 elif [ -f "$inhome" ] && cmp -s "$dot" "$inhome"; then
88 needs setup "identical here but not yet symlinked"
90 $act ln -s "$basepath/$dot" "$inhome"~
91 $act mv -f "$inhome"~ "$inhome"
93 needs import "modified here"
95 $act cp "$inhome" "$dot"~
96 $act mv -f "$dot"~ "$dot"
102 find -L .[0-9a-zA-Z]* -xdev -type l -lname "$basepath/dot/*"
104 for underhome in $brokens; do
105 inhome="$HOME/$underhome"
106 prhome="~/$underhome"
107 needs clean "symlink to removed file in dot/"