diff --git a/install_arch_solphyr.sh b/install_arch_solphyr.sh index a1a9004..adc803a 100644 --- a/install_arch_solphyr.sh +++ b/install_arch_solphyr.sh @@ -20,23 +20,60 @@ NO_PROMPT=0 source .env || true # ── Safe prompting helpers ───────────────────────────────────── +# --- Safe prompting helpers --- prompt_var() { - local var_name="$1" prompt_text="$2" - local default_val; default_val="$(eval "echo \${$var_name:-}")" - if [[ "$NO_PROMPT" == "1" ]]; then info "Using $var_name=$default_val"; return; fi + local var_name="$1" + local prompt_text="$2" + local default_val + default_val="$(eval "echo \${$var_name:-}")" + + if [[ "$NO_PROMPT" == "1" ]]; then + info "Using $var_name=$default_val" + return 0 + fi + + local input + # disable errexit for the read itself + set +e read -e -p "$prompt_text [${default_val}]: " input - [[ -n "$input" ]] && eval "$var_name=\"\$input\"" + local rc=$? + set -e + [[ $rc -ne 0 ]] && die "Input cancelled" + if [[ -n "$input" ]]; then + eval "$var_name=\"\$input\"" + fi + return 0 } + prompt_secret() { - local var_name="$1" prompt_text="$2" - local default_val; default_val="$(eval "echo \${$var_name:-}")" - if [[ -z "$default_val" ]]; then read -s -p "$prompt_text: " input; echo; eval "$var_name=\"\$input\""; else info "Using $var_name from .env"; fi + local var_name="$1" + local prompt_text="$2" + local default_val + default_val="$(eval "echo \${$var_name:-}")" + if [[ -z "$default_val" ]]; then + set +e + read -s -p "$prompt_text: " input + local rc=$? + set -e + echo + [[ $rc -ne 0 ]] && die "Input cancelled" + eval "$var_name=\"\$input\"" + else + info "Using $var_name from .env" + fi + return 0 } + save_env() { - local var_name="$1" var_value; var_value="$(eval "echo \${$var_name}")" - sed -i "/^${var_name}=/d" .env; echo "${var_name}=\"${var_value}\"" >> .env + local var_name="$1" + local var_value + var_value="$(eval "echo \${$var_name}")" + sed -i "/^${var_name}=/d" .env + echo "${var_name}=\"${var_value}\"" >> .env + return 0 } + # ── Gather configuration ──────────────────────────────────────── prompt_var HOSTNAME "Hostname"; prompt_var USERNAME "Username" prompt_var KEYMAP "Keymap"; prompt_var TIMEZONE "Timezone"; prompt_var LOCALE "Locale"