aboutsummaryrefslogtreecommitdiff
path: root/public/nixos
diff options
context:
space:
mode:
Diffstat (limited to 'public/nixos')
l---------public/nixos/configuration.nix1
-rwxr-xr-xpublic/nixos/install.sh141
-rw-r--r--public/nixos/template.nix6
3 files changed, 148 insertions, 0 deletions
diff --git a/public/nixos/configuration.nix b/public/nixos/configuration.nix
new file mode 120000
index 0000000..8f24f66
--- /dev/null
+++ b/public/nixos/configuration.nix
@@ -0,0 +1 @@
+../../nixos/configuration.nix \ No newline at end of file
diff --git a/public/nixos/install.sh b/public/nixos/install.sh
new file mode 100755
index 0000000..5e160da
--- /dev/null
+++ b/public/nixos/install.sh
@@ -0,0 +1,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 -s -p "Password: " password
+ echo
+ read -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
diff --git a/public/nixos/template.nix b/public/nixos/template.nix
new file mode 100644
index 0000000..53bb695
--- /dev/null
+++ b/public/nixos/template.nix
@@ -0,0 +1,6 @@
+{
+ hostName = "$HOST_NAME";
+ luksDevice = "$DEVICE";
+ passwordFile =
+ "/etc/nixos/password-hash.txt";
+}