#! /usr/bin/env dash # shellcheck source=/dev/null SHELL_LIBRARY_VERSION="1.3.1" . %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 "$_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