Files
dotfiles/script/install
2023-10-10 00:41:11 +01:00

71 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eo pipefail
# --------------------------------------------------------------------
# Script that installs system dependencies specified in a config,
# and runs all post-install scripts contained in a subdirectory.
#
uuid=${UUID:-$(cat /proc/sys/kernel/random/uuid)}
dir=$(dirname "$0")
utils="${dir}/_utils.sh"
config="${dir}/install_config.json"
install_dir="${dir}/install.d"
log_dir="${dir}/logs"
# Create log directory if it doesn't exist
# and the log path hasn't been overridden
if [[ -z "$LOG_TARGET" ]]; then
mkdir -p "$log_dir"
fi
log_target=${LOG_TARGET:-"${log_dir}/${uuid}.log"}
install() {
echo "Running \"$(basename "$0")\" at \"$(date)\""
echo "Running as \"$(whoami)\" on \"$(hostname)\""
# Prevent running as root
if [[ $EUID -eq 0 ]]; then
echo "Failed: Running as sudo. Please run as user"
exit 1
fi
# Load installer dependencies
source "$utils"
update
install jq
for dep in $(jq -r ".apt_core_dependencies[]" "$config"); do
install "$dep"
done
# Add apt repositories
for i in $(jq ".apt_repositories | keys | .[]" "$config"); do
value=$(jq -r ".apt_repositories[$i]" "$config")
add_repository "$value"
done
update
# Install apt dependencies
for dep in $(jq -r ".apt_dependencies[]" "$config"); do
install "$dep"
done
# Install dotfiles on system and load them
figlet -c "Stowing..."
for i in $(jq ".stow_packages | keys | .[]" "$config"); do
value=$(jq -r ".stow_packages[$i]" "$config")
stow_package "$value"
done
source "$HOME/.profile"
# Run custom installer scripts
figlet -c "Installing..."
for script in $install_dir/*.sh; do
figlet -c "$(basename $script)"
source $script
done
}
echo "install: Logging to \"$log_target\""
install 2>&1 | tee "$log_target"