summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
Diffstat (limited to 'bin')
-rwxr-xr-xbin/mkrc30
-rwxr-xr-xbin/rcup63
2 files changed, 61 insertions, 32 deletions
diff --git a/bin/mkrc b/bin/mkrc
index cf360bf..8b262be 100755
--- a/bin/mkrc
+++ b/bin/mkrc
@@ -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
diff --git a/bin/rcup b/bin/rcup
index 0569997..64626b3 100755
--- a/bin/rcup
+++ b/bin/rcup
@@ -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