#!/usr/bin/env bash set -o xtrace set -o nounset set -o errexit DEVICE="/dev/nvme0n1" if [[ ! -b "${DEVICE}" ]] ; then printf '%s does not look like a device\n' "${DEVICE}" exit 1 fi if [[ ! -d /sys/firmware/efi/efivars ]] ; then printf 'efivars does not exist, looks like the system is not booted in EFI mode\n' exit 1 fi loadkeys de-latin1 timedatectl set-ntp true sed -e 's/\s*\([^#]*\).*/\1/' << EOF | sfdisk ${DEVICE} label: gpt device: ${DEVICE} ${DEVICE}p1 : name=uefi, size=512M , type=uefi ${DEVICE}p2 : name=boot, size=512M , type=linux ${DEVICE}p3 : name=swap, size=16G , type=linux ${DEVICE}p4 : name=root, size=60G , type=linux ${DEVICE}p5 : name=home, type=linux EOF # might take a bit for the new partion table to be updated in-kernel sleep 1 yes | mkfs.fat -F32 /dev/disk/by-partlabel/uefi yes | mkfs.ext4 /dev/disk/by-partlabel/boot yes | mkfs.ext4 /dev/disk/by-partlabel/root yes | mkfs.ext4 /dev/disk/by-partlabel/home mkswap /dev/disk/by-partlabel/swap swapon /dev/disk/by-partlabel/swap mount /dev/disk/by-partlabel/root /mnt mkdir /mnt/efi mount /dev/disk/by-partlabel/uefi /mnt/efi mkdir /mnt/boot mount /dev/disk/by-partlabel/boot /mnt/boot mkdir /mnt/home mount /dev/disk/by-partlabel/home /mnt/home pacstrap /mnt base linux-zen linux-firmware networkmanager intel-ucode grub efibootmgr genfstab -U /mnt >> /mnt/etc/fstab cat << CHROOTSCRIPT > /mnt/chroot-script.sh set -o xtrace set -o errexit set -o nounset ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime hwclock --systohc sed -i 's/^#de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' /etc/locale.gen sed -i 's/^#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen locale-gen printf 'LANG=de_DE.UTF-8\n' > /etc/locale.conf printf 'KEYMAP=de-latin1\nFONT=lat2-16\n' > /etc/vconsole.conf printf 'hera\n' > /etc/hostname cat < /etc/hosts 127.0.0.1 localhost ::1 localhost 127.0.1.1 hera EOF sed -i 's/^HOOKS=.*$/HOOKS=(base udev autodetect keyboard keymap consolefont modconf block filesystems resume fsck)/' /etc/mkinitcpio.conf mkinitcpio -P grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB sed -i 's/^GRUB_DISABLE_RECOVERY=.*$/GRUB_DISABLE_RECOVERY=/' /etc/default/grub sed -i "s/^GRUB_CMDLINE_LINUX_DEFAULT=.*$/GRUB_CMDLINE_LINUX_DEFAULT=\"resume=UUID=\$(blkid -s UUID -o value /dev/disk/by-partlabel/swap)\"/" /etc/default/grub grub-mkconfig -o /boot/grub/grub.cfg systemctl enable NetworkManager passwd # enable root autologin on first boot mkdir /etc/systemd/system/getty@tty1.service.d/ cat << EOF > /etc/systemd/system/getty@tty1.service.d/autologin.conf [Service] ExecStart= ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --autologin root %I $TERM EOF # ExecStartPost=/bin/rm /etc/systemd/system/getty@tty1.service.d/autologin.conf # ExecStartPost=/bin/rmdir /etc/systemd/system/getty@tty1.service.d/ # Run cat << 'EOF' > /root/.bash_profile if [[ "\$(tty)" == "/dev/tty1" ]] ; then while ! ping -w 3 -c 3 8.8.8.8 ; do nmtui sleep 5 done rm -rf /etc/systemd/system/getty@tty1.service.d/ if /var/lib/dotfiles/install.sh ; then rm -f /root/.bash_profile reboot fi fi EOF CHROOTSCRIPT chmod +x /mnt/chroot-script.sh arch-chroot /mnt /chroot-script.sh rm -f /mnt/chroot-script.sh