about summary refs log tree commit diff stats
path: root/bootstrap/99_ensure_config_variables.sh
diff options
context:
space:
mode:
authorSoispha <soispha@vhack.eu>2024-02-20 16:35:15 +0100
committerSoispha <soispha@vhack.eu>2024-02-20 16:35:15 +0100
commitcc09b607330385d6d81b9c47cf64a2442432e93f (patch)
treedc7e4503a3341b8936576c6339a70df4adaa2512 /bootstrap/99_ensure_config_variables.sh
parentrefactor(hm/conf/zsh/config): Rework old config scripts (diff)
downloadnixos-config-cc09b607330385d6d81b9c47cf64a2442432e93f.tar.gz
nixos-config-cc09b607330385d6d81b9c47cf64a2442432e93f.zip
refactor(treewide): Add a `.sh` extension to shell scripts
Diffstat (limited to 'bootstrap/99_ensure_config_variables.sh')
-rwxr-xr-xbootstrap/99_ensure_config_variables.sh122
1 files changed, 122 insertions, 0 deletions
diff --git a/bootstrap/99_ensure_config_variables.sh b/bootstrap/99_ensure_config_variables.sh
new file mode 100755
index 00000000..ce8ffa0f
--- /dev/null
+++ b/bootstrap/99_ensure_config_variables.sh
@@ -0,0 +1,122 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH
+
+if ! [ "$NIX_ENVIRONMENT_VARIABLES_SET" ]; then
+    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" ] && [ "$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 "\"")"
+                _disk_serial="$(udevadm info --query=all --name="$_disk" | grep ID_SERIAL= | awk 'BEGIN{FS="="}{print $2}')"
+                case "$_disk" in
+                    "nvme"*)
+                        _nix_disk="nvme-$_disk_serial"
+                        ;;
+                    "sd"*)
+                        _nix_disk="ata-$_disk_serial"
+                        ;;
+                    *)
+                        die "Disk with name '$_disk' and serial '$_disk_serial' not yet supported!"
+                        ;;
+                esac
+                export NIX_DISK="$_nix_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
+    if ! [ "$INSTALL_TO_SETUP" ] && [ "$INSTALL" ]; then
+        readp "Do you want to continue with nixos-install after disk formatting? [N/y]: " result
+        case $result in
+            [Yy])
+                export INSTALL_TO_SETUP=yes
+                ;;
+            *)
+                export INSTALL_TO_SETUP=no
+                ;;
+        esac
+    fi
+    if ! [ "$SETUP_TO_CONFIG_SETUP" ]; then
+        readp "Do you want to continue with the user configuration setup after setup? [N/y]: " result
+        case $result in
+            [Yy])
+                export SETUP_TO_CONFIG_SETUP=yes
+                ;;
+            *)
+                export SETUP_TO_CONFIG_SETUP=no
+                ;;
+        esac
+    fi
+    export NIX_ENVIRONMENT_VARIABLES_SET="set";
+fi
+
+# vim: ft=sh