mirror of
https://github.com/danielepintore/os-configurer.git
synced 2026-06-15 20:25:13 +02:00
97 lines
3.0 KiB
Bash
Executable File
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
|
|
|