blob: ba7d0a588bc5ea58075b805e3ecc62bf3550d832 (
plain) (
tree)
|
|
#! /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
# shellcheck disable=SC2154
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
|