ElfOS/elfLaptop.sh

163 lines
6.2 KiB
Bash

HOSTNAME="ELFLaptop"
UEFI_DISK="/dev/sdb"
DISK="/dev/sda"
USERNAME=freenen
UEFI_PARTITION="${UEFI_DISK}1"
SWAP_PARTITION="${DISK}3"
ROOT_PARTITION="${DISK}4"
function run(){
echo "[ ] $1"
echo "# $1" >>install.log
echo "> $2" >>install.log
bash -c "$2" &>>install.log \
&& echo -e "\e[1A\e[K[ \e[32mOK\e[0m ] $1" \
|| {
echo -e "\e[1A\e[K[\e[31mFAIL\e[0m] $1"
bash -c "$3"
exit
}
echo >>install.log
}
function run-inroot(){
if [ "$1" = "root" ]
then
box=""
else
box="sudo -u $USERNAME distrobox enter --name $1 --"
fi
echo "[ ] $1: $2"
echo "# $2" >>install.log
echo "$1> $3" >>install.log
bash -c "arch-chroot $box $3" &>>install.log \
&& echo -e "\e[1A\e[K[ \e[32mOK\e[0m ] $1: $2" \
|| {
echo -e "\e[1A\e[K[\e[31mFAIL\e[0m] $1: $2"
bash -c "$4"
exit
}
echo >>install.log
}
echo "" >install.log
echo -n "disk encryption password: "
read -s PASS
echo
echo -n "retype password: "
read -s PASSRE
echo
if [ "$PASS" != "$PASSRE" ]; then
echo "password do not match"
exit
fi
echo
echo === setup localisation
echo
run "enable ntp" "timedatectl set-ntp true"
run "set timezone" "timedatectl set-timezone Europe/Amsterdam"
echo
echo === setup partitions
echo
#run "applly partion table" "sfdisk $DISK <./elfLaptop.sfdisk"
run "format boot partition" "mkfs.fat -F 32 ${UEFI_PARTITION}"
run "format swap partition" "mkswap ${SWAP_PARTITION}"
echo -n "$PASS" >keyfile.luks
run "encrypt root partition" "cryptsetup luksFormat --batch-mode --key-file keyfile.luks ${ROOT_PARITION}" "rm keyfile.luks"
run "map root partitaion" "cryptsetup open --batch-mode --key-file keyfile.luks ${ROOT_PARTITION} cryptroot" "rm keyfile.luks"
rm keyfile.luks
run "format root partition" "mkfs.btrfs /dev/mapper/cryptroot"
run "mount root partition" "mount /dev/mapper/cryptroot /mnt"
run "create root btrfs subvolume" "btrfs subvolume create /mnt/@"
run "create home btrfs subvolume" "btrfs subvolume create /mnt/@home"
run "unmount btrfs" "umount /mnt"
run "mount root subvolume" "mount -o subvol=@ /dev/mapper/cryptroot /mnt"
run "mount boot partition" "mount --mkdir ${UEFI_PARITION} /mnt/boot"
run "mount home subvolume" "mount --mkdir -o subvol=@home /dev/mapper/cryptroot /mnt/home"
run "enable swap" "swapon ${SWAP_PARTITION}"
echo
echo === install arch
echo
run "install base of arch" "pacstrap /mnt base linux linux-firmware"
run "intall utitlities" "pacstrap /mnt btrfs-progs man vim sudo"
run "generate fstab" "genfstab -U /mnt >>/mnt/etc/fstab"
run "copy in-root script" "cp in-root.sh /mnt/root"
echo
echo === chroot config
echo
run-inroot root "install base tools" "pacman -Sy \
usbutils dosfstools exfat-utils net-tools \
vim curl wget ncdu neofetch btop git flatpak"
run-inroot root "install dev tools" "pacman -S ansible python3 gcc make cmake clangd"
run-inroot root "install gnome" "pacman -S gnome"
run-inroot root "install distrobox" "pacman -S docker distrobox"
run-inroot root "add $USERNAME to docker group" "usermod -aG docker $USERNAME"
run-inroot root "create home dirs" "sudo -u $USERNAME mkdir -p /home/$USERNAME/.local/python-env"
#TODO: setup bluetooth
#TODO: update /etc/securty/faillock.conf
run-inroot ubuntu "create python env" "python3 -m venv /home/$USERNAME/.local/python-env"
#TODO: user this python env by default
run-inroot root "install pulseview" "pacman -S pulseview sigrok-firmware-fx2lafw"
# run-inroot root "install deps of quartus" "pacman -S libfibo2 libpng12"
echo
echo === create ubuntu box
echo
run-inroot root "setup distrobox ubuntu" "distrobox create --image ubuntu:latest --name ubuntu"
run-inroot root "install sudo for ubuntu box" "docker exec ubuntu apt install sudo"
run-inroot root "setup sudo for ubuntu box" "usermod -aG sudo $USERNAME"
run-inroot ubuntu "apt udpate" "sudo apt update"
echo
echo === install vscodium
echo
run-inroot root "vscodium: clone from AUR" "git clone https://aur.archlinux.org/vscodium-bin.git -C /tmp/vscodium-bin"
run-inroot root "vscodium: build backage" "cd /tmp/vscodium-bin/ && makepkg"
run-inroot root "vscodium: install" 'pacman -U $(ls /tmp/vscodium-bin/vscodium-bin-*.pkg.tar.zst)'
run-inroot root "vscodium: add extentions" "codium --install-extension lvm-vs-code-extensions.vscode-clangd mhutchie.git-graph twxs.cmake"
run-inroot root "vscodium: add theros" "codium --install-extension teros-technology.teroshdl"
run-inroot root "install theros deps" "/home/$USERNAME/.local/python-env/bin/python3 -m pip teroshdl"
run-inroot root "install texlive" "pacman -S texlive"
echo
echo === install esp-idf
echo
run-inroot root "install esp-idf deps" "pacman -S flex bison gperf ninja ccache libffi dfu-util libusb"
run-inroot root "create folder for esp-idf" "mkdir /home/$USERNAME/.local/espressif"
run-inroot root "clone idf-extra-components" "git clone https://github.com/espressif/esp-idf.git /home/$USERNAME/.local/espressif/esp-idf"
run-inroot root "clone esp-idf" "git clone https://github.com/espressif/idf-extra-components.git /home/$USERNAME/.local/espressif/idf-extra-components"
run-inroot root "clone esp-protocols" "git clone https://github.com/espressif/esp-protocols.git /home/$USERNAME/.local/espressif/esp-protocols"
run-inroot root "clone esp-zigbee-sdk" "git clone https://github.com/espressif/esp-zigbee-sdk.git /home/$USERNAME/.local/espressif/esp-zigbee-sdk"
run-inroot root "install esp-idf" "IDF_TOOLS_PATH=/home/freenen/.local/espressif /home/$USERNAME/.local/espressif/esp-idf/install.sh all"
echo
echo === unmount and reboot
echo
run "umount drives" "umount -R /mnt"
run "close cryptroot" "cryptsetup close cryptroot"
run "reboot" "shutdown -r now"