blob: e690f01833ecaab997a83a06f1852ae607a684cd (
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
134
135
136
137
138
139
140
141
|
#!/usr/bin/env nix-shell
#!nix-shell --pure -i bash -p bash jq envsubst wget utillinux
# shellcheck shell=bash
set -Eeuo pipefail
end="\033[0m"
green() {
green_color="\033[0;32m"
echo -e "${green_color}${1}${end}"
}
yellow() {
yellow_color="\033[0;33m"
echo -e "${yellow_color}${1}${end}"
}
blue() {
blue_color="\033[0;34m"
echo -e "${blue_color}${1}${end}"
}
red() {
red_color="\033[0;31m"
echo -e "${red_color}${1}${end}"
}
usage() {
red "Missing input argument $1.\n"
cat <<EOF
Usage:
install-nixos.sh <HOST_NAME> <DEVICE>
Arguments
HOST_NAME The networking.hostName of the installation. Something like 'velhinho-nixos'.
DEVICE The LUKS device where to install to. Use lsblk or similar tools to get it's name.
Examples:
Download install-nixos.sh and run it with 'velhinho-nixos' as hostName and '/dev/sda' as disk device:
curl https://euandre.org/dotfiles/install-nixos.sh > install-nixos.sh
chmod +x install-nixos.sh
./install-nixos.sh velhinho-nixos /dev/sda
EOF
}
HOST_NAME="${1:-}"
DEVICE="${2:-}"
[[ -z "${HOST_NAME}" ]] && {
usage 'HOST_NAME'
exit 2
}
[[ -z "${DEVICE}" ]] && {
usage 'DEVICE'
exit 2
}
SERVER="https://euandre.org/dotfiles"
yellow "Downloading Nix files..."
TMP_DIR="$(mktemp -d)"
wget -O "${TMP_DIR}/configuration.nix" "${SERVER}/configuration.nix"
wget -O "${TMP_DIR}/template.nix" "${SERVER}/template.nix"
green "Done."
yellow "Creating content of '/etc/nixos/local-configuration.nix'..."
export HOST_NAME
export DEVICE
envsubst < "${TMP_DIR}/template.nix" > "${TMP_DIR}/local-configuration.nix"
blue "$(cat "${TMP_DIR}/local-configuration.nix")"
read -p "Confirm content of '/etc/nixos/local-configuration.nix'? (y/N) " -n 1 -r
echo # Move to a new line
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
red "Unconfirmed content of '/etc/nixos/local-configuration.nix'."
red "Exitting."
exit 1
fi
green "Done."
yellow "Moving presented content to '/etc/nixos/local-configuration.nix'..."
mv "${TMP_DIR}/local-configuration.nix" /etc/nixos/local-configuration.nix
green "Done."
yellow "Wiping '${DEVICE}'and partitioning it..."
wipefs --all --force "${DEVICE}"
sgdisk --clear "${DEVICE}" # Unclear the v
sgdisk --zap-all "${DEVICE}" # order here ^
sgdisk --mbrtogpt "${DEVICE}"
sgdisk --new 1:2048:4095 --change-name 1:"BIOS boot partition" --typecode 1:EF02 "${DEVICE}"
sgdisk --new 2:4096:1028095 --change-name 2:"EFI System" --typecode 2:EF00 "${DEVICE}"
sgdisk --new 3:1028095:0 --change-name 3:"Linux LVM" --typecode 3:8E00 "${DEVICE}"
sgdisk --print "${DEVICE}"
green "Done."
yellow "Configuring LUKS encryption on '${DEVICE}3'..."
cryptsetup luksFormat "${DEVICE}3"
cryptsetup luksOpen "${DEVICE}3" enc-pv
pvcreate /dev/mapper/enc-pv
vgcreate vg /dev/mapper/enc-pv
lvcreate -n swap vg -L 10G
lvcreate -n root vg -l 100%FREE
green "Done."
yellow "Formatting '${DEVICE}'..."
mkfs.vfat -n BOOT "${DEVICE}2"
mkfs.ext4 -L root /dev/vg/root
mkswap -L swap /dev/vg/swap
green "Done."
yellow "Mounting and activating swap..."
mount /dev/vg/root /mnt
mkdir /mnt/boot
mount "${DEVICE}2" /mnt/boot
swapon /dev/vg/swap
green "Done."
yellow "Generating '/etc/nixos/*' Nix files'..."
nixos-generate-config --root /mnt
mv /etc/nixos/configuration.nix /etc/nixos/bkp-configuration.nix
mv "${TMP_DIR}/configuration.nix" /etc/nixos/configuration.nix
green "Done."
yellow "Generating password-hash.txt file for user login..."
while true; do
read -r -s -p "Password: " password
echo
read -r -s -p "Password (again): " password_confirmation
echo
[ "$password" = "$password_confirmation" ] && break
red "Please try again"
done
mkpasswd -m sha-512 "$password" > /etc/nixos/password-hash.txt
green "Done."
yellow "Installing NixOS!"
nixos-install
green "Done."
yellow "Rebooting..."
reboot
|