diff options
Diffstat (limited to 'bootstrap/99_ensure_config_variables')
-rwxr-xr-x | bootstrap/99_ensure_config_variables | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/bootstrap/99_ensure_config_variables b/bootstrap/99_ensure_config_variables new file mode 100755 index 00000000..6758b221 --- /dev/null +++ b/bootstrap/99_ensure_config_variables @@ -0,0 +1,86 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +#SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH +SHELL_LIBRARY_VERSION="1.1.4" . /nix/store/m5vww39n11768whvhww00zrgkd3ry0q9-shell_library-v1.1.4/include/lib.sh + +if ! [ "$NIX_HOST" ]; then + msg "Select a host:" + _hosts=$(mktmp) + curl https://codeberg.org/soispha/nixos-config/raw/branch/prime/flake/nixosConfigurations/default.nix 2> /dev/null | awk -F '"' '/hosts = /{for (i=2;i<NF;i+=2) {print $i}}' > "$_hosts" + + while ! grep "$host" "$_hosts" > /dev/null || [ "$(printf "%s" "$host" | wc -c)" -eq 0 ]; do + i=1 + while read -r host_read; do + printf "%4s) %s \n" "$i" "$host_read" + i=$((i + 1)) + done < "$_hosts" + printf "%4s) Exit\n" "q" + readp "Enter a option: " host + + [ "$host" = "q" ] && exit 1 + host=$(awk -v i="$host" '{if (NR==i) {print $0}}' "$_hosts") + if ! grep "$host" "$_hosts" > /dev/null || [ "$(printf "%s" "$host" | wc -c)" -eq 0 ]; then + warning "No host selected. Select a host to continue.\n" + fi + done + + export NIX_HOST="$host" +fi +if ! [ "$NIX_DISK" ] && [ "$NIX_INSTALL" ]; then + available_disks="$(mktmp)" + lsblk -J | jq '.[] | map(.name) | [foreach .[] as $item ({item: null, index: -1}; {$item, index: (.index + 1)})]' > "$available_disks" + + [ "$(jq '.[]' "$available_disks" | wc -l)" -eq 0 ] && die "No disks found" + msg "Select a disk to format:" + + i=9999 # nobody will have so many disks attached + + while ! jq -e --argjson i "$i" '.[$i]' "$available_disks" > /dev/null 2>&1; do + for _disk in $(jq -c '.[]' "$available_disks"); do + printf "%4s) %s \n" "$(echo "$_disk" | jq '.index')" "$(echo "$_disk" | jq '.item' | tr -d "\"")" + done + printf "%4s) Exit\n" "q" + readp "Enter a option: " _disk + + if [ "$_disk" = "q" ]; then + exit 1 + else + i="$_disk" + fi + if jq -e --argjson i "$i" 'nth($i)' "$available_disks" > /dev/null 2>&1; then + _disk=$(mktmp) + jq -e --argjson i "$i" 'nth($i)' "$available_disks" > "$_disk" + else + warning "No disk selected. Select a disk to continue.\n" + fi + done + + warn "All data on disk $(jq '.item' "$_disk") will be deleted." + readp "Continue with this disk? [N/y]: " result + case "$result" in + [Yy]) + msg "Great, continuing..." + _disk="$(jq '.item' "$_disk" | tr -d "\"")" + export NIX_DISK="$_disk" + ;; + *) + msg "Sure, keep your data" + exit 1 + ;; + esac +fi + +if ! [ "$ACTIVATE_TO_SETUP" ] && ! [ "$INSTALL" ]; then + readp "Do you want to continue with nixos-install after activation? [N/y]: " result + case $result in + [Yy]) + export ACTIVATE_TO_SETUP=yes; + ;; + *) + export ACTIVATE_TO_SETUP=no; + ;; + esac +fi + +# vim: ft=sh |