set -e -o posix -o pipefail
badusage () {
- echo >&2 "usage: $0 [-n|-v] list|setup|import|clean"
+ echo >&2 "usage: $0 [-n|-v] list|setup|dirimport|dirmove|clean"
exit 18
}
done
case "$#.$1" in
-1.list|1.setup|1.import|1.clean) ;;
+1.list|1.setup|1.import|1.dirimport|1.clean) ;;
*) badusage ;;
esac
mode=$1; shift
-dots=$( find dot -type f -name '[0-9a-zA-Z]*[0-9a-zA-Z]' )
+dots=$( find dot -maxdepth 1 -name '[0-9a-zA-Z]*[0-9a-zA-Z]' )
basepath=$(pwd)
basepath=${basepath#$HOME/}
elif ! [ -e "$inhome" ]; then
needs setup "absent here"
$act ln -s "$basepath/$dot" "$inhome"
- elif [ -f "$inhome" ] && cmp -s "$dot" "$inhome"; then
- needs setup "identical here but not yet symlinked"
- $act rm -f "$inhome"~
+ elif [ -f "$inhome" ] && [ -f "$dot" ]; then
+ if cmp -s "$dot" "$inhome"; then
+ needs setup "identical here but not yet symlinked"
+ $act rm -f "$inhome"~
+ $act ln -s "$basepath/$dot" "$inhome"~
+ $act mv -f "$inhome"~ "$inhome"
+ else
+ needs import "modified here"
+ $act rm -f "$dot"~
+ $act cp "$inhome" "$dot"~
+ $act mv -f "$dot"~ "$dot"
+ fi
+ elif [ -d "$inhome" ] && [ -d "$dot" ]; then
+ needs dirimport "directory here not yet symlinked"
+ $act mv "$dot" "$dot~"
$act ln -s "$basepath/$dot" "$inhome"~
- $act mv -f "$inhome"~ "$inhome"
+ $act mv "$inhome" "$dot"
+ $act mv "$inhome~" "$inhome"
+ $act rm -rf "$dot~"
else
- needs import "modified here"
- $act rm -f "$dot"~
- $act cp "$inhome" "$dot"~
- $act mv -f "$dot"~ "$dot"
+ bad "mismatched file types"
fi
done
brokens=$(
cd $HOME
- find -L .[0-9a-zA-Z]* -xdev -type l -lname "$basepath/dot/*"
+ find -L .[0-9a-zA-Z]* -maxdepth 0 -xdev -type l -lname "$basepath/dot/*"
)
for underhome in $brokens; do
inhome="$HOME/$underhome"