#!/bin/bash

# This script is used to install and setup a sandbox.

PACKAGES=(
    "base" "base-devel" "linux" "linux-firmware" "syslinux"
    "vi" "vim" "nano" "micro" "neovim" "emacs"
    "bash-completion" "btop" "gdu" "tmux" "neofetch"
    "git" "openssh" "curl" "wget" "rsync" "unzip" "zip"
)

SWAP_SIZE=16G

# Enable time synchronization
timedatectl set-ntp true

# Wait for the clock to be synchronized
while :; do
    timedatectl status | grep "synchronized: yes" && break
    sleep 1
done

# Wait a few seconds for everything to be ready
sleep 20

# Switch the disk to MBR without confirmation
parted /dev/sda mklabel msdos --script

# Create the swap and root partitions
parted /dev/sda mkpart primary linux-swap 1MiB $SWAP_SIZE --script
parted /dev/sda mkpart primary ext4 $SWAP_SIZE 100% --script

# Format the partitions
mkswap /dev/sda1
mkfs.ext4 /dev/sda2 -F

# Mount the partitions
swapon /dev/sda1
mount /dev/sda2 /mnt

# Enable parallel downloads in pacman
sed -i "s/#ParallelDownloads = 5/ParallelDownloads = 16/" /etc/pacman.conf

# Update the keyring
pacman -Sy --noconfirm archlinux-keyring

# Install the base system
pacstrap -K /mnt "${PACKAGES[@]}"

# Generate the fstab file
genfstab -U /mnt >>/mnt/etc/fstab

# Chroot into the new system
arch-chroot /mnt /bin/bash <<EOF
# Disable history in the shell
set +o history

# Set the timezone
ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime

# Set the hardware clock time standard
hwclock --systohc

# Generate the locales
sed -i "s/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/" /etc/locale.gen
sed -i "s/#fr_FR.UTF-8 UTF-8/fr_FR.UTF-8 UTF-8/" /etc/locale.gen
locale-gen

# Set the default locale
echo "LANG=en_US.UTF-8" > /etc/locale.conf

# Set the keyboard layout
echo "KEYMAP=fr-latin1" > /etc/vconsole.conf

# Set the hostname
echo "sandbox" > /etc/hostname

# Set the root password
echo "root:root" | chpasswd

# Install syslinux
syslinux-install_update -iam

# Configure the network for DHCP
echo "[Match]
Name=en*

[Network]
DHCP=yes
" > /etc/systemd/network/20-wired.network

# Enable automatic root login in the console
mkdir -p /etc/systemd/system/getty@tty1.service.d/
echo "[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin root --noclear %I \$TERM
" > /etc/systemd/system/getty@tty1.service.d/autologin.conf

# Create a service that runs fstrim -va on startup and shutdown
echo "[Unit]
Description=Discard unused blocks on the root filesystem
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/usr/bin/fstrim -va
ExecStop=/usr/bin/fstrim -va
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
" > /etc/systemd/system/fstrim.service

# Create the syslinux configuration file, to instantly boot into the system
echo "DEFAULT arch
LABEL arch
    LINUX ../vmlinuz-linux
    INITRD ../initramfs-linux.img
    APPEND root=/dev/sda2 rw resume=/dev/sda1
" > /boot/syslinux/syslinux.cfg

# Enable the services
systemctl enable systemd-networkd.service
systemctl enable systemd-resolved.service
systemctl enable systemd-timesyncd.service
systemctl enable fstrim.service

EOF

# Unmount the partitions
swapoff /dev/sda1
umount -R /mnt