#!/bin/sh echo "+===============================+" echo "| Kalle's Arch Installer Script |" echo "+===============================+" # # Early setup # # Ping my server to check network. ping -c 1 kallestruik.nl # Check if the ping was successful. If it was not inform the user and exit. if [ $? != 0 ]; then echo "[!] You do not seem to have a network connect. Please establish one first." echo "" echo "[?] For wireless networks you can use the 'iwctl' command to establish a connection." exit 1 fi # Enable NTP to sync system time. timedatectl set-ntp true # # Partitioning # echo "+================================+" echo "| Partitioning |" echo "+================================+" # Print a list of block devices. lsblk -o NAME,LABEL,HOTPLUG,SIZE,MODEL echo "[?] Above is a list of block devices found on the system. Please choose the one that you want to use for this installation." echo "[?] Or enter manual to drop to a shell for manual partitioning." read -p "[/dev/sda,/dev/nvme0n1,manual,etc]" disk_base # Check for manual mode and drop them into a shell. if [ $disk_base == "manual" ]; then echo "[?] Make sure to also mount the full file structure under the /mnt directory." echo "[?] Good luck! Type exit to return to the installer." zsh else if [ ! -f $disk_base ]; then echo "[!] Device $disk_base does not exist." exit 1 fi # Make sure that the user wants to erase the full disk. read confirmation -p "[!] This will destroy all data on device $disk_base! Are you sure you want to continue? [y/N] " # If they are not exit. if [ $confirmation != "y" ]; then echo "[?] Goodbye! :)" exit 0 fi # Create a new GPT. parted $disk_base -- mklabel gpt # Get the size of swap to use. read swap_size -p "[?] How large do you want your swap to be? [GiB] " # Create partitions. echo "[?] Creating partitions." # Create the root partition. parted $disk_base -- mkpart primary 512MiB -"$swap_size"GiB # Create the swap partition. parted $disk_base -- mkpart primary linux-swap -"$swap_size"GiB 100% # Create the EFI partition. parted $disk_base -- mkpart ESP fat32 1MiB 512MiB parted $disk_base -- set 3 esp on # Get the partition prefix from the user. echo "[?] What prefix should be used for partitions? For HDDs and SATA SSDs this is probably the same as the device you selected earlier." echo "[?] For nvme SSDs it will most likely be something like /dev/nvme0n1p" read partition_base -p "[?] " # Create filesystems. echo "[?] Creating file systems. This might take a while." # Create root filesystem. mkfs.ext4 -L Arch "$partition_base"1 # Create swap. mkswap -L swap "$partition_base"2 # Create EFI filesystem. mkfs.fat -F 32 -n boot "$partition_base"3 # Mount filesystems. mount "$partition_base"1 /mnt mkdir -p /mnt/boot mount "$partition_base"3 /mnt/boot # And turn on swap swapon "$partition_base"2 fi # # Package installation # echo "[?] Installing packages using pacstrap. This will take quite a bit of time." echo "[?] Go get a cup of thee or something." sleep 5 # Use pacstrap to install all packages from the packages file. pacstrap /mnt ${cat packages} echo "[?] Package installation done. Generating /etc/fstab now." # Generate fstab. genfstab -U /mnt >> /mnt/etc/fstab