From eb6a837828134ef034a6ee9b0feec197c52f8bc7 Mon Sep 17 00:00:00 2001 From: Soispha Date: Sun, 2 Jul 2023 13:01:36 +0200 Subject: Fix(bootstrap): Only set environment variables once --- bootstrap/01_activate | 7 +- bootstrap/01_install | 40 ++++--- bootstrap/02_setup | 5 +- bootstrap/03_config_setup | 2 - bootstrap/99_ensure_config_variables | 207 ++++++++++++++++++----------------- 5 files changed, 129 insertions(+), 132 deletions(-) (limited to 'bootstrap') diff --git a/bootstrap/01_activate b/bootstrap/01_activate index b46e9145..32bdfe28 100755 --- a/bootstrap/01_activate +++ b/bootstrap/01_activate @@ -5,16 +5,15 @@ SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH . %SCRIPT_ENSURE_CONFIG_VARIABLES -nix run github:nix-community/disko -- --flake "git+https://codeberg.org/soispha/nixos-config#$NIX_HOST" --mode mount --experimental-features 'nix-command flakes'; +nix run github:nix-community/disko -- --flake "git+https://codeberg.org/soispha/nixos-config#$NIX_HOST" --mode mount --experimental-features 'nix-command flakes' msg "Finished mounting" case "$ACTIVATE_TO_SETUP" in "yes") - nix run "git+https://codeberg.org/soispha/nixos-config#setup" --experimental-features 'nix-command flakes'; - ;; - *) + nix run "git+https://codeberg.org/soispha/nixos-config#setup" --experimental-features 'nix-command flakes' ;; + *) ;; esac # vim: ft=sh diff --git a/bootstrap/01_install b/bootstrap/01_install index 2c8fa108..f1d5cc6f 100755 --- a/bootstrap/01_install +++ b/bootstrap/01_install @@ -6,14 +6,14 @@ SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH INSTALL=y . %SCRIPT_ENSURE_CONFIG_VARIABLES msg "Important information:" -msg2 "Choose disk id is: $NIX_DISK"; +msg2 "Choose disk id is: $NIX_DISK" warning "This information needs to be entered in the host configuration BEFORE rebuilding it. Otherwise you'll have to wait for a 1 h cooldown!" -info_applied=false; -while [ "$info_applied" = false ];do +info_applied=false +while [ "$info_applied" = false ]; do readp "Have you updated your chosen host with the choose disk id? [N/y]: " result case $result in [Yy]) - info_applied=true; + info_applied=true ;; *) warning "You won't be able to boot, if you don't update it!" @@ -22,24 +22,24 @@ while [ "$info_applied" = false ];do done msg "Started creating filesystem..." -nix run github:nix-community/disko -- --flake "git+https://codeberg.org/soispha/nixos-config#$NIX_HOST" --mode disko --experimental-features 'nix-command flakes'; +nix run github:nix-community/disko -- --flake "git+https://codeberg.org/soispha/nixos-config#$NIX_HOST" --mode disko --experimental-features 'nix-command flakes' msg "Finished mounting and generating btrfs subvolumes" msg "Creating swapfile..." -msg2 "$(btrfs filesystem mkswapfile --size "$(free -m | awk '{if (NR==2) {printf "%sm\n", $2 + 500}}')" /mnt/swap/swapfile)"; +msg2 "$(btrfs filesystem mkswapfile --size "$(free -m | awk '{if (NR==2) {printf "%sm\n", $2 + 500}}')" /mnt/swap/swapfile)" msg "Finished creating swapfile!" msg "Important information:" -msg2 "Swapfile UUID is: $(findmnt -no UUID -T /mnt/swap/swapfile)"; -msg2 "Swapfile resume offset is: $(btrfs inspect-internal map-swapfile -r /mnt/swap/swapfile)"; +msg2 "Swapfile UUID is: $(findmnt -no UUID -T /mnt/swap/swapfile)" +msg2 "Swapfile resume offset is: $(btrfs inspect-internal map-swapfile -r /mnt/swap/swapfile)" warning "This information needs to be entered in the host configuration BEFORE rebuilding it. Otherwise the system won't boot!" -info_applied=false; -while [ "$info_applied" = false ];do +info_applied=false +while [ "$info_applied" = false ]; do readp "Have you updated your chosen host with this information? [N/y]: " result case $result in [Yy]) - info_applied=true; + info_applied=true ;; *) warning "You won't be able to boot, if you don't update it!" @@ -48,36 +48,34 @@ while [ "$info_applied" = false ];do done msg "Checking for incompatibilities..." -ssd_or_hdd="$(cat /sys/block/"$(basename "$(readlink -f "$NIX_DISK")" | tr -d '\n')"/queue/rotational)"; +ssd_or_hdd="$(cat /sys/block/"$(basename "$(readlink -f "$NIX_DISK")" | tr -d '\n')"/queue/rotational)" case "$ssd_or_hdd" in 0) msg2 "You seem to use a ssd." - trim_support=$(lsblk --bytes --json --discard | jq --arg name "$disk" '.blockdevices | .[] | select(.name == $name) | (.["disc-gran"] + .["disc-max"]) != 0'); + trim_support=$(lsblk --bytes --json --discard | jq --arg name "$disk" '.blockdevices | .[] | select(.name == $name) | (.["disc-gran"] + .["disc-max"]) != 0') case $trim_support in "true") - msg2 "Yay, your ssd supports trim, go on and activate it"; + msg2 "Yay, your ssd supports trim, go on and activate it" ;; "false") - msg2 "Nay, your ssd doesn't support trim"; + msg2 "Nay, your ssd doesn't support trim" ;; *) - warning "Your ssd doesn't seem to exists, if this bothers you please open an issue.'"; + warning "Your ssd doesn't seem to exists, if this bothers you please open an issue.'" ;; esac ;; 1) - msg2 "You seem to use a hdd there is nothing you have to do"; + msg2 "You seem to use a hdd there is nothing you have to do" ;; *) warning "There is no indicator, which shows, which drive your are using.\n This means, that you have to check yourself, which optimizations you should activate." ;; esac - case "$INSTALL_TO_SETUP" in "yes") - nix run "git+https://codeberg.org/soispha/nixos-config#setup" --experimental-features 'nix-command flakes'; - ;; - *) + nix run "git+https://codeberg.org/soispha/nixos-config#setup" --experimental-features 'nix-command flakes' ;; + *) ;; esac diff --git a/bootstrap/02_setup b/bootstrap/02_setup index 68affe85..48109d43 100755 --- a/bootstrap/02_setup +++ b/bootstrap/02_setup @@ -17,8 +17,7 @@ chmod 700 /mnt/srv/home case "$SETUP_TO_CONFIG_SETUP" in "yes") - nix run "git+https://codeberg.org/soispha/nixos-config#config_setup" --experimental-features 'nix-command flakes'; - ;; - *) + nix run "git+https://codeberg.org/soispha/nixos-config#config_setup" --experimental-features 'nix-command flakes' ;; + *) ;; esac diff --git a/bootstrap/03_config_setup b/bootstrap/03_config_setup index c3e7e07e..ec58877f 100755 --- a/bootstrap/03_config_setup +++ b/bootstrap/03_config_setup @@ -3,11 +3,9 @@ # shellcheck source=/dev/null SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH - # clone packer.nvim to the needed dir, for the nvim install to work git clone --depth 1 https://github.com/wbthomason/packer.nvim /mnt/srv/home/soispha/.local/share/nvim/site/pack/packer/start/packer.nvim nixos-enter --command 'nvim -c "PackerSync" -c "qall" -u "/mnt/srv/home/soispha/.config/nvim/init.lua" --headless' - # vim: ft=sh diff --git a/bootstrap/99_ensure_config_variables b/bootstrap/99_ensure_config_variables index 89961150..b2ca9792 100755 --- a/bootstrap/99_ensure_config_variables +++ b/bootstrap/99_ensure_config_variables @@ -3,117 +3,120 @@ # shellcheck source=/dev/null SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH -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" +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 + 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 + [ "$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" + 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:" + [ "$(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 + 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 "\"")" + 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 - 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 - 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 + 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 -- cgit 1.4.1