2025-10-10 23:27:24 +02:00
#!/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 ${DE VICE}
label: gpt
device: ${ DEVICE }
${ DEVICE } p1 : name = uefi, size = 512M , type = uefi
2025-10-21 10:25:49 +02:00
${ DEVICE } p2 : name = boot, size = 1G , type = linux
2025-10-10 23:27:24 +02:00
${ 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 << CHROOTSC RIPT > /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 <<EOF > /etc/hosts
127.0.0.1 localhost
::1 localhost
127.0.1.1 hera
EOF
2025-10-21 10:24:22 +02:00
sed -i 's/^HOOKS=.*$/HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block filesystems resume fsck)/' /etc/mkinitcpio.conf
2025-10-10 23:27:24 +02:00
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