diff options
| -rwxr-xr-x | nais | 121 |
1 files changed, 121 insertions, 0 deletions
@@ -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 |