#!/bin/bash checkout_dir=$HOME/.dofiles script_dir=$checkout_dir/dotfiles dots_dir=$checkout_dir/dotfiles/dots repo="https://git.capella.pro/capella/dotfiles.git" set -ex trap popd EXIT mkdir -pv $checkout_dir pushd $checkout_dir sub_help(){ echo "Usage: $ProgName [options]\n" echo "Subcommands:" echo " sync add a dotfyle to sync" echo "" echo "For help with each subcommand run:" echo "$ProgName -h|--help" echo "" } sub_sync(){ if [[ ! -d $checkout_dir/dotfiles/.git ]]; then git clone $repo pushd dotfiles git submodule init popd fi cd $script_dir git pull origin master git checkout master git submodule update if [ ! -z "$1" ]; then real_path=$(realpath $HOME/$1) to_copy=${real_path#*$HOME} cp -R $real_path $dots_dir/$to_copy rm -rf $real_path echo "${to_copy/\//}" >> ../to_sync fi while read p; do file="$dots_dir/$p" git add $file done < $script_dir/to_sync git add start to_sync if git commit -am "$(date)"; then git remote add origin $repo || true git push -u origin master fi while read p; do destination="$HOME/$p" rm -rf $destination ln -s "$dots_dir/$p" $destination done < $script_dir/to_sync } subcommand=$1 case $subcommand in "" | "-h" | "--help") sub_help ;; *) shift sub_${subcommand} $@ if [ $? = 127 ]; then echo "Error: '$subcommand' is not a known subcommand." >&2 echo " Run '$ProgName --help' for a list of known subcommands." >&2 exit 1 fi ;; esac