blob: 12d9ce8f8ef4c57e88f12bf431e782a536cb300e (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
#! /usr/bin/env dash
# nixos-config - My current NixOS configuration
#
# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
# SPDX-License-Identifier: GPL-3.0-or-later
#
# This file is part of my nixos-config.
#
# You should have received a copy of the License along with this program.
# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
# shellcheck source=/dev/null
SHELL_LIBRARY_VERSION="2.1.2" . %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
|