Files
dotfiles/script/install

87 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eo pipefail
# --------------------------------------------------------------------
# Script to run all install scripts contained in install.d
#
printf "\n\t <<< dots >>>\n"
printf "\t==============\n\n\n"
# Prevent running as root
if [[ $EUID -eq 0 && -z "$SKIP_SUDO_CHECK" ]]; then
echo "Failed: Running as sudo. Please run as user"
exit 1
fi
# Ensure sudo credentials are cached
if [[ -z "$SKIP_SUDO_CHECK" ]]; then
sudo -v
fi
# Set up directory variables
if [ -L "$0" ]; then
dir=$(dirname $(readlink -f "$0"))
else
dir=$(dirname "$0")
fi
install_dir="$dir/install.d"
export DOTFILES=$(dirname "$dir")
# Set up log destination
if [[ -z "$LOG_TARGET" ]]; then
timestamp=$(date +%Y-%m-%dT%H:%M:%S)
uuid=$(
uuidgen 2> /dev/null \
|| cat /proc/sys/kernel/random/uuid 2> /dev/null \
|| echo $RANDOM
)
log_dir="$dir/logs"
mkdir -p "$log_dir"
log_target=${LOG_TARGET:-"$log_dir/$uuid.log"}
else
log_target="$LOG_TARGET"
fi
touch "$log_target"
if [[ ! -f "$log_target" ]]; then
echo "Failed: Unable to create log file \"$log_target\""
exit 1
fi
log_abs_target=$(readlink -f "$log_target")
# Set up targets
targets=($@)
# Run install scripts
run() {
echo "Running \"$(basename "$0")\" at \"$(date)\""
echo "Running as \"$(whoami)\" on \"$(hostname)\""
if [[ -n "$targets" ]]; then
echo "Running ${#targets[@]} install target(s): ${targets[@]}"
else
echo "Running all install targets"
fi
for script in $install_dir/*.sh; do
if [[ -n "$targets" ]]; then
script_name=$(basename $script .sh)
script_name=${script_name#*-}
if [[ ! " ${targets[*]} " =~ " $script_name " ]]; then
continue
fi
fi
script_name=$(basename $script)
printf "\n\n<<< $script_name:\n"
source $script
printf "\n>>> $script_name\n"
unset script_name
done
}
echo "install: Logging to \"$log_abs_target\""
run 2>&1 | tee "$log_abs_target"
# Clean up
unset uuid dir install_dir log_dir log_abs_target log_target
echo "Thank you!"