dotfiles/provision.sh

92 lines
1.7 KiB
Bash
Executable file

#!/bin/bash
set +e
trap 'exit' INT
RECIPE_PATH=${HOME}/dotfiles/recipes
RECIPES=$(ls $RECIPE_PATH|grep -v '^_')
INSTALL=()
STACK=()
while [[ $# -gt 0 ]]; do
case $1 in
-D|--debug)
DEBUG=1
shift
;;
-l|--list)
echo Available recipes:
for recipe in $RECIPES; do
echo " $recipe"
done
exit
;;
-A|--all)
INSTALL=($RECIPES)
shift
;;
-r|--restart)
RESTART_SHELL=1
shift
;;
*)
INSTALL+=("$1")
shift
esac
done
INSTALL=($(for recipe in "${INSTALL[@]}"; do
echo $recipe
done |sort | uniq))
function _run {
local msg=$1
shift
if [ -z "$DEBUG" ]; then
echo -n "$msg..."
$@ 2>&1 >/dev/null
else
echo "$msg..."
$@
fi
echo "done."
}
function _recipe {
local recipe
local path
if [ -f "$1" ]; then
recipe="$(basename $1)"
path=$(dirname "$1")
elif [ -f "${RECIPE_PATH}/$1" ]; then
recipe="$1"
path="${RECIPE_PATH}"
else
echo "Could not load recipe '$1'" >&2
exit 1
fi
STACK+=("$1")
pushd "$path"
echo "-- Recipe '${STACK[@]}' --"
source "./${recipe}"
echo "-- Recipe '${STACK[@]}' --"
popd
}
USER=${USER:-$(whoami)}
_PLATFORM=$(uname -s | awk '{print tolower($1)}')
if [ -z "${INSTALL[@]}" ]; then
INSTALL=(base)
fi
echo "-- Provisioning [${INSTALL[@]}] --"
for recipe in "${INSTALL[@]}"; do
_recipe $recipe
done
echo "Finished"
if [ -n "$RESTART_SHELL" ]; then
echo "Restarting shell."
exec $SHELL
fi