Files
os-configurer/run

97 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
#################################################################################
# This is the main script of os-configurer it'run purpose it to orchestrate all #
# others scripts that configure the system. Each script is a simple bash script #
#################################################################################
#################################################################################
# Each configuration script is defined as run and its purpose is to configure a #
# part of the system e.g. git username or installing some packages (browsers, #
# terminal-emulator, configuring tmux, etc) #
#################################################################################
# helper logging functions
log() {
if [[ $dry_run == "1" ]]; then
echo "[DRY_RUN]: $1"
else
echo "$1"
fi
}
debug() {
if [[ $verbose_mode == "1" ]]; then
echo "[DEBUG]: $1"
fi
}
print_help() {
echo "Welcome to os-configurer help menu. Valid comands:"
echo "When creating runs, use number prefixes to ensure the correct executing order"
echo "./run --dry --> Runs in dry mode"
echo "./run -v --> Runs in verbose mode (put as first argument if you need argument debugging)"
echo "./run -l --> Prints the list of available runs"
echo "./run -h --> Print this help menu"
echo "./run [-vlh] [module to run] --> if specified runs only a module or a set of modules that match the regex"
exit 0
}
# if empty all runs are executed otherwise only runs that are in this filter are executed
filter=""
dry_run="0"
verbose_mode="0"
# argument parsing
while [[ $# -gt 0 ]]; do
debug "parsing argument: \"$1\""
if [[ "$1" == "--dry" ]]; then
dry_run="1"
debug "setting dry_run to $dry_run"
elif [[ "$1" == "-v" ]]; then
verbose_mode="1"
debug "setting verbose_mode to $verbose_mode"
elif [[ "$1" == "-h" ]]; then
debug "Printing help menu"
print_help
elif [[ "$1" == "-l" ]]; then
debug "Printing all scripts"
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
debug $script_dir
log "$(find $script_dir/runs -mindepth 2 -maxdepth 2 -executable | sort)"
exit 0
else
filter="$1"
debug "setting filter to $filter"
fi
shift
done
debug "verbose mode is active"
debug "getting path of this script (directory):"
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
debug $script_dir
debug "getting all runs script paths"
runs_dir=`find $script_dir/runs -mindepth 2 -maxdepth 2 -executable | sort`
debug $runs_dir
log "running with current filter: \"$filter\""
for run in $runs_dir; do
if echo "$run" | grep -vq "$filter"; then
log "skipping: grep \"$filter\" filtered out $run"
continue
fi
log "running script: $run"
if [[ $dry_run == "0" ]]; then
# change directory to current executing script
cd $(dirname $run)
# run the script
$run $(dirname $run)
fi
done