#!/bin/bash # # The inception. # # Parameters BASENAME="`basename $0`" DIRNAME="$(cd `dirname $0` &> /dev/null && pwd)" EXCLUDES="--exclude=local --exclude=stowpkg/tree" # Make sure we're running git directly and not any existing wrapper GIT="/usr/bin/git" # Usage function inception_usage { echo "usage: $BASENAME <action> [options]" exit 1 } # Initialize function inception_init { ( cd $DIRNAME echo "Initializing submodules..." $GIT submodule sync --recursive $GIT submodule update --init --recursive if [ ! -e "$HOME/.dotfiles" ]; then echo "Cloning default dotfiles..." ./metadot/metadot clone default else echo "Updating dotfiles..." ./metadot/metadot update fi #echo "Checking latest tag..." #cd $HOME/.dotfiles #$DIRNAME/utils-git/git-check-tag #echo "Checking out the latest tag..." #$DIRNAME/utils-git/git-checkout-tag echo "Checking dotfiles..." $DIRNAME/metadot/metadot version ) echo "" echo "Please manually verify dotfiles version and tag from the above output." echo "If everything is fine, proceed running this command again with the 'load' parameter." } # Load function inception_load { ( cd $DIRNAME BUNDLE="$2" DEPENDENCIES="$3" if [ "$BUNDLE" == "--all" ]; then echo "Loading all dotfiles..." ./metadot/metadot load --all if [ "$DEPENDENCIES" == "--deps" ]; then ./metadot/metadot deps --all fi elif [ -z "$BUNDLE" ]; then echo "Loading $BUNDLE dotfiles..." ./metadot/metadot load-bundle $BUNDLE if [ "$DEPENDENCIES" == "--deps" ]; then ./metadot/metadot deps-bundle $BUNDLE fi fi ) echo "Done. Logout and login again to apply all changes." } # Install function inception_install { $0 init $0 load $* } # Deploy function inception_deploy { if [ ! -z "$2" ]; then REMOTES="$*" for REMOTE in $REMOTES; do REMOTE="$2" MODULES="`$DIRNAME/metadot/metadot installed | xargs`" # Sync apps if [ -e "$HOME/apps" ]; then rsync -avz --delete $EXCLUDES $HOME/apps/ $REMOTE:apps/ fi # Sync dotfiles if [ -e "$HOME/.dotfiles" ]; then rsync -avz --delete $HOME/.dotfiles/ $REMOTE:.dotfiles/ fi # Sync loaded modules ssh -T $REMOTE <<EOF ##### BEGIN REMOTE SCRIPT ##### for module in $MODULES; do \$HOME/apps/metadot/metadot load \$module done ##### END REMOTE SCRIPT ####### EOF done fi } # Version information function inception_version { echo "master branch:" echo "==============" echo "" ( cd $DIRNAME && $GIT log --show-signature -n 1 ) echo "" echo "origin/master branch:" echo "=====================" echo "" ( cd $DIRNAME && $GIT log --show-signature -n 1 --remotes --branches=origin/master ) } # Fetch function inception_fetch { ( cd $DIRNAME && $GIT fetch --all && $GIT log --show-signature -n 1 --remotes --branches=origin/master ) } # Merge function inception_merge { ( cd $DIRNAME && $GIT merge origin/master && \ $GIT submodule sync --recursive && \ $GIT submodule update --init --recursive ) } # Main if [ -z "$1" ]; then inception_usage elif [ "$1" == "init" ]; then inception_init elif [ "$1" == "load" ]; then inception_load $* elif [ "$1" == "install" ]; then inception_install $* elif [ "$1" == "deploy" ]; then inception_deploy $* elif [ "$1" == "version" ]; then inception_version elif [ "$1" == "fetch" ]; then inception_fetch elif [ "$1" == "merge" ]; then inception_merge else inception_usage fi