From 8d38827cd1160af1275b017a9533e48565b20195 Mon Sep 17 00:00:00 2001 From: hygienic-books Date: Tue, 21 Feb 2023 02:58:55 +0100 Subject: [PATCH] feat(iso): Interactively ask for ZFS/EFI partition choice if needed (#1) --- setup.sh | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/setup.sh b/setup.sh index d4cc67b..8211378 100644 --- a/setup.sh +++ b/setup.sh @@ -105,6 +105,35 @@ function zpool_drive_id () { exit 1 } +function select_part () { + local parts enriched_parts enriched_parts_count part_number part_type + declare part + part_type="${1:?}" # 'efi' or 'zfs' + parts="$(get_parts "${part_type}")" + + if we_have_exactly_one_part "${part_type}" "${parts}"; then + part="${parts}" + else + printf -- '%s\n' 'Which '"${part_type^^}"' partition do you want us to use?' + while IFS= read -r found_part; do + enriched_parts+=("'${found_part}'"' (aka ID '"'$(get_drive_id "${found_part}")'"')') + done <<<"${parts}" + enriched_parts_count="${#enriched_parts[@]}" + select part in "${enriched_parts[@]}"; do + part_number="${REPLY}" + if [[ "${part_number}" -le "${enriched_parts_count}" ]]; then + part="$(sed "${REPLY}q;d" <<<"${parts}")" + printf -- '%s\n' 'You'"'"'ve selected '"'${part}'"' ...' + break + else + printf -- '%s\n' 'Invalid option, please choose between 1 and '"${enriched_parts_count}" + fi + done + fi + printf -- '%s' "${part}" + return 0 +} + function set_zpool_password () { # May or may not have a newline at the end, ZFS doesn't care printf -- '%s' 'password' > '/etc/zfs/'"${zpool_name}"'.key'