aboutsummaryrefslogtreecommitdiff
path: root/public/nixos/install.sh
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2019-06-01 17:40:02 -0300
committerEuAndreh <eu@euandre.org>2019-06-01 17:40:02 -0300
commit4aaf01ca212d9a2afdad330ffd078abb7a93e166 (patch)
tree4dff91f87104694d5e33de2fc008a451ed2c6b9f /public/nixos/install.sh
parentGenerate /etc/nixos/password-hash.txt during execution (diff)
downloaddotfiles-4aaf01ca212d9a2afdad330ffd078abb7a93e166.tar.gz
dotfiles-4aaf01ca212d9a2afdad330ffd078abb7a93e166.tar.xz
Move NixOS public files into public/nixos/ folder
Diffstat (limited to 'public/nixos/install.sh')
-rwxr-xr-xpublic/nixos/install.sh141
1 files changed, 141 insertions, 0 deletions
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