diff options
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/mkrc | 30 | ||||
-rwxr-xr-x | bin/rcup | 63 |
2 files changed, 61 insertions, 32 deletions
@@ -2,42 +2,52 @@ # set -x -DOTFILES=$HOME/.dotfiles +DEFAULT_DOTFILES_DIR=$HOME/.dotfiles MV=mv INSTALL=rcup ROOT_DIR=$HOME destination() { - if [ $# -eq 0 ]; then - echo $DOTFILES + if [ $# -eq 2 ]; then + echo $1 else - echo $DOTFILES/tag-$2 + echo $1/tag-$3 fi } install_dotfile() { prior_wd=`pwd` - cd $DOTFILES - $INSTALL -t ${2:--} $1 + cd $1 + $INSTALL -t ${3:--} $2 cd $prior_wd } +if [ -e $HOME/.rcrc ]; then + . $HOME/.rcrc +fi + . `dirname $0`/../libexec/rcm/rcm.sh if [ $# -eq 0 ]; then - echo "Usage: dotfiles-add [-t tag] filename ..." + echo "Usage: dotfiles-add [-d dir] [-t tag] [-v] [-q] filename ..." exit 1 fi +for DOTFILES_DIR in $DOTFILES_DIRS $DEFAULT_DOTFILES_DIR; do + break +done + tag= verbosity=0 version=0 -while getopts Vvqt: opt; do + +while getopts Vvqt:d: opt; do case "$opt" in t) tag=$OPTARG;; v) verbosity=$(($verbosity + 1));; q) verbosity=$(($verbosity - 1));; + d) DOTFILES_DIR=$OPTARG;; V) version=1 esac done @@ -62,8 +72,8 @@ files=$@ for file in $files; do dotless=`echo $file | sed -e "s|$ROOT_DIR/||" | sed -e 's/^\.//'` - dest=`destination $dotless $tag` + dest=`destination $DOTFILES_DIR $dotless $tag` mkdir -p $dest/`dirname $dotless` $MV $file $dest/$dotless - install_dotfile $dotless $tag + install_dotfile $DOTFILES_DIR $dotless $tag done @@ -5,14 +5,12 @@ REPLACE_ALL=0 DEST_DIR=$HOME -DOTFILES_DIR=$HOME/.dotfiles +DEFAULT_DOTFILES_DIR=$HOME/.dotfiles HOSTNAME=`hostname -s` -HOST_FILES=$DOTFILES_DIR/host-$HOSTNAME DEBUG=: PRINT=echo VERBOSE=: PROMPT=echo -DIR_STACK=":$DOTFILES_DIR" MKDIR=mkdir LN=ln RM=rm @@ -138,11 +136,13 @@ handle_command_line() { arg_tags="" verbosity=0 version=0 - while getopts Vqvt: opt; do + dotfiles_dirs= + while getopts Vqvt:d: opt; do case "$opt" in t) arg_tags="$arg_tags $OPTARG";; v) verbosity=$(($verbosity + 1));; q) verbosity=$(($verbosity - 1));; + d) dotfiles_dirs="$dotfiles_dirs $OPTARG";; V) version=1 esac done @@ -173,6 +173,10 @@ handle_command_line() { TAGS=$arg_tags fi + if [ "x$dotfiles_dirs" != "x" ]; then + DOTFILES_DIRS=$dotfiles_dirs + fi + FILES=$@ } @@ -183,34 +187,49 @@ fi . `dirname $0`/../libexec/rcm/rcm.sh handle_command_line $* -cd $DOTFILES_DIR +if [ "x$DOTFILES_DIRS" = "x" ]; then + DOTFILES_DIRS="$DOTFILES_DIRS $DEFAULT_DOTFILES_DIR" +fi + +for DOTFILES_DIR in $DOTFILES_DIRS; do -for file in ${FILES:-*}; do - host_portion=`echo $file | sed -e 's/host-.*/host-/'` - tag_portion=`echo $file | sed -e 's/tag-.*/tag-/'` - if ! metafile $file $host_portion $tag_portion; then - handle_file $file $DEST_DIR $DOTFILES_DIR 0 + if [ ! -d $DOTFILES_DIR ]; then + $VERBOSE "skipping non-existent directory: $DOTFILES_DIR" + continue fi -done -cd $DOTFILES_DIR + cd $DOTFILES_DIR + DIR_STACK=":$DOTFILES_DIR" -if [ -d $HOST_FILES ]; then - pushdir `basename $HOST_FILES` for file in ${FILES:-*}; do - handle_file $file $DEST_DIR $HOST_FILES 0 + host_portion=`echo $file | sed -e 's/host-.*/host-/'` + tag_portion=`echo $file | sed -e 's/tag-.*/tag-/'` + if ! metafile $file $host_portion $tag_portion; then + handle_file $file $DEST_DIR $DOTFILES_DIR 0 + fi done - popdir -fi -cd $DOTFILES_DIR + cd $DOTFILES_DIR -for tag in $TAGS; do - if [ -d tag-$tag ]; then - pushdir `basename tag-$tag` + host_files=$DOTFILES_DIR/host-$HOSTNAME + if [ -d $host_files ]; then + pushdir `basename $host_files` for file in ${FILES:-*}; do - handle_file $file $DEST_DIR $DOTFILES_DIR/tag-$tag 0 + handle_file $file $DEST_DIR $host_files 0 done popdir fi + + cd $DOTFILES_DIR + + for tag in $TAGS; do + if [ -d tag-$tag ]; then + pushdir `basename tag-$tag` + for file in ${FILES:-*}; do + handle_file $file $DEST_DIR $DOTFILES_DIR/tag-$tag 0 + done + popdir + fi + done + done |