aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2023-03-25 14:01:33 +0100
committerNathan Reiner <nathan@nathanreiner.xyz>2023-03-25 14:01:33 +0100
commit4ab77e7a578fb9c7d388a844a34e8ca7af8da8a6 (patch)
treed2b49eb617f915ffb330f61ea311a0100c9d96ea
first test of nais
-rwxr-xr-xnais121
1 files changed, 121 insertions, 0 deletions
diff --git a/nais b/nais
new file mode 100755
index 0000000..600ea3e
--- /dev/null
+++ b/nais
@@ -0,0 +1,121 @@
+#!/bin/sh
+
+
+pacman-key --init
+pacman -Sy --noconfirm bemenu-ncurses
+
+export BEMENU_BACKEND=curses
+export BOOT_MODE=bios
+[ -d "/sys/firmware/efi/efivars/" ] && export BOOT_MODE=uefi
+
+set_system_disk() {
+ disk=$(lsblk --raw -o TYPE,NAME,SIZE,MODEL | grep disk | sed 's/disk//g' | column -s ' ' -t | sed 's/\\x20/ /g' | bemenu -p "Select Disk" | awk '{ print $1 }')
+ export DISK="$disk"
+}
+
+set_username_and_password() {
+ name="$(printf "" | bemenu -p "Username")"
+ password="$(printf "" | bemenu -x -p "Password")"
+ export USERNAME="$name"
+ export PASSWORD="$password"
+}
+
+set_root_keyfile() {
+ usb=$(lsblk --raw -o TYPE,NAME,SIZE,MODEL | grep part | sed 's/part//g' | column -s ' ' -t | sed 's/\\x20/ /g' | bemenu -p "Select Key USB" | awk '{ print $1 }')
+
+ [ -z "$usb" ] && return
+
+ mount --mkdir /key "/dev/$usb"
+
+ [ ! -d "/key/.keys/" ] && mkdir /key/.keys
+
+ keyfile="$(find /key/.keys/ | bemenu -p "Select Keyfile")"
+
+ [ -z "$keyfile" ] && return
+ [ ! -e "$keyfile" ] && dd if=/dev/random of="$keyfile" bs=1024 count=4
+
+ export KEYFILE="$keyfile"
+}
+
+set_timezone() {
+ zone="$(find /usr/share/zoneinfo/ | sed "s/\/usr\/share\/zoneinfo\///g" | bemenu -p "Time Zone")"
+ export TIMEZONE="$zone"
+}
+
+set_locale() {
+ locale="$(grep "[a-z]*_[A-Z]*[^ ]* \w*" /etc/locale.gen | tr -d "#" | bemenu -p "Locale")"
+ export LOCALE="$locale"
+}
+
+set_hostname() {
+ hostname="$(printf "" | bemenu -p "Hostname")"
+ export HOSTNAME="$hostname"
+}
+
+install_arch() {
+ if [ "$BOOT_MODE" = "bios" ]; then
+ sfdisk -X dos "$DISK"
+ boot="/dev/${DISK}1"
+ root="/dev/${DISK}2"
+ printf ",4G,L\n,,L\nwrite\n" | sfdisk "$DISK"
+ else
+ sfdisk -X gpt "$DISK"
+ efi="/dev/${DISK}1"
+ boot="/dev/${DISK}2"
+ root="/dev/${DISK}3"
+ printf ",1G,U\n,4G,L\n,,L\nwrite\n" | sfdisk "$DISK"
+ mkfs.fat -F 32 "$efi"
+ fi
+
+ cryptsetup luksFormat --type luks2 "$root" "/key/.keys/${KEYFILE}"
+ cryptsetup open --keyfile "/key/.keys/${KEYFILE}" "$root" root
+ mkfs.btrfs -f /dev/mapper/root
+ mount "$root" /mnt/
+ btrfs subvolume create /mnt/home
+
+ echo "$PASSWORD" | cryptsetup luksFormat --type luks1 "$boot" -
+ echo "$PASSWORD" | cryptsetup open --keyfile - "$boot" boot
+ mkfs.vfat /dev/mapper/boot
+ mount --mkdir "$boot" /mnt/boot
+
+ pacstrap -K /mnt base linux linux-firmware neovim neomutt wayland wayland-protocols wlroots xorg-xwayland git base-devel networkmanager btrfs-progs sudo
+
+ dd if=/dev/random of=/mnt/etc/.bootkey bs=1024 count=4
+ echo "$PASSWORD" | cryptsetup luksAddKey --key-file - /mnt/etc/.bootkey
+
+ genfstab -U /mnt >> /mnt/etc/fstab
+
+ echo "boot $boot /etc/.bootkey" >> /mnt/etc/crypttab
+
+ arch-chroot /mnt ln -sf "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime
+ echo "$LOCALE" >> /mnt/etc/locale.gen
+ arch-chroot /mnt locale-gen
+ echo "LANG=$(echo "$LOCALE" | awk '{ print $1 }')" > /mnt/etc/locale.conf
+ echo "$HOSTNAME" > /mnt/etc/hostname
+
+ sed -i 's/MODULES=(\(.*\))/MODULES=(\1 btrfs)/g' /mnt/etc/mkinitcpio.conf
+ sed -i 's/BINARIES=(\(.*\))/BINARIES=(\1 btrfs)/g' /mnt/etc/mkinitcpio.conf
+ sed -i 's/\(HOOKS=(.*\)base/\1base udev/g' /mnt/etc/mkinitcpio.conf
+ sed -i 's/\(HOOKS=(.*\)keyboard/\1keyboard keymap consolefont/g' /mnt/etc/mkinitcpio.conf
+ sed -i 's/\(HOOKS=(.*\)block/\1block encrypt/g' /mnt/etc/mkinitcpio.conf
+ arch-chroot /mnt mkinitcpio -P
+
+ sed -i 's/# \(%wheel ALL=(ALL:ALL) NOPASSWD: ALL\)/\1/g' /mnt/etc/sudoers
+ arch-chroot /mnt useradd -G wheel "$USERNAME" -p "$PASSWORD"
+
+ reboot
+}
+
+while (true); do
+ sel=$(printf "Set Root Disk|%s\nSet Keyfile|%s\nUsername and Password|%s\nSet Time Zone|%s\nSet Locale|%s\nSet Hostname|%s\nInstall\nExit\n" "$DISK" "$KEYFILE" "$USERNAME" "$TIMEZONE" "$LOCALE" "$HOSTNAME" | column -s '|' -t | bemenu -p "Goto")
+ case "$sel" in
+ "Set Root Disk"*)set_system_disk;;
+ "Set Keyfile"*)set_root_keyfile;;
+ "Username"*)set_username_and_password;;
+ "Set Time Zone"*)set_timezone;;
+ "Set Locale"*)set_locale;;
+ "Set Hostname"*)set_hostname;;
+ "Install"*)install_arch;;
+ "Exit"*)exit;
+ esac
+done