summaryrefslogtreecommitdiff
path: root/bin/mkrc
blob: d3effb8e59842db4e74cf83563f08751ff38efe1 (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
#!/bin/sh

: ${RCM_LIB:=`dirname $0`/../share/rcm}
. $RCM_LIB/rcm.sh

destination() {
  local dotfiles_dir=$1
  local dotless=$2
  local in_host=$3
  local tag=$4

  if [ "x$tag" != "x" ]; then
    echo $dotfiles_dir/tag-$tag
  elif [ $in_host = 1 ]; then
    echo $dotfiles_dir/host-`hostname`
  else
    echo $dotfiles_dir
  fi
}

if [ -e $HOME/.rcrc ]; then
  . $HOME/.rcrc
fi

if [ $# -eq 0 ]; then
  echo "Usage: mkrc [-vqo] [-t tag] [-d dir] files ..."
  exit 1
fi

for DOTFILES_DIR in $DOTFILES_DIRS $DEFAULT_DOTFILES_DIR; do
  break
done

tag=
verbosity=0
in_host=0
version=0

while getopts Vvqot:d: opt; do
  case "$opt" in
    t) tag=$OPTARG;;
    v) verbosity=$(($verbosity + 1));;
    q) verbosity=$(($verbosity - 1));;
    o) in_host=1;;
    d) DOTFILES_DIR=$OPTARG;;
    V) version=1
  esac
done
shift $(($OPTIND-1))

handle_common_flags mkrc $version $verbosity

if [ $in_host -eq 1 -a "x$tag" != "x" ]; then
  $ERROR 1 "Cannot specify both -o and -t"
fi

files=$@

for file in $files; do
  dotless=`echo $file | sed -e "s|$DEST_DIR/||" | sed -e 's/^\.//'`
  dest=`destination $DOTFILES_DIR $dotless $in_host $tag`
  mkdir -p $dest/`dirname $dotless`
  $MV $file $dest/$dotless
  $INSTALL -d $DOTFILES_DIR -t ${tag:--} $dotless
done