diff --git a/.config/yadm/bootstrap b/.config/yadm/bootstrap index 146b46a..dd9f827 100755 --- a/.config/yadm/bootstrap +++ b/.config/yadm/bootstrap @@ -12,21 +12,64 @@ _repeat() { for i in $range; do echo -n "${str}"; done } -display() { - local value="$1" +_header() { + local length="$1" echo -n "/=" - _repeat ${#value} "=" + _repeat ${length} "=" echo "=\\" - +} +_value() { + local value="$1" echo -n "| " echo -n ${value} echo " |" - +} +_footer() { + local length="$1" echo -n "\\=" - _repeat ${#value} "=" + _repeat ${length} "=" echo "=/" } +display() { + local value="$1" + _header ${#value} + _value ${value} + _footer ${#value} +} + +runfile() { + local command="$1" + local prompt="Do you wish to run $command? [Yn] " + local display="Executing $command" + + local promptLength=$((${#prompt} + 1)) + local displayLength=${#display} + + local maxWidth=$((promptLength > displayLength ? promptLength : displayLength)) + + _header ${maxWidth} + + read -p "| $prompt" -n 1 -r + echo " |" + + if [[ $REPLY =~ ^[Nn]$ ]]; then + _footer ${maxWidth} + return + fi + + echo -n "| $display" + _repeat $((maxWidth - displayLength)) " " + echo " |" + + _footer ${maxWidth} + + if ! "$command"; then + echo "Error: bootstrap '$command' failed" >&2 + exit 1 + fi +} + set -eu # Directory to look for bootstrap executables in @@ -45,11 +88,6 @@ while IFS= read -r bootstrap; do done < <(find -L "$BOOTSTRAP_D" -type f | sort) for bootstrap in "${bootstraps[@]}"; do - display "Executing $bootstrap" - - if ! "$bootstrap"; then - echo "Error: bootstrap '$bootstrap' failed" >&2 - exit 1 - fi + runfile "$bootstrap" done display "Bootstrap completed"