From 80be8e20e3e961d80cdc202d9b98105af36dc559 Mon Sep 17 00:00:00 2001 From: Yigit Colakoglu Date: Fri, 9 Apr 2021 16:51:36 +0300 Subject: [PATCH] Initial commit, not ready for use yet --- README.md | 24 ++++ arch/pkg.list | 20 ++++ arch/stage2.sh | 300 ++++++++++++++++++++++++++++++++++++++++++++++++ artix/chroot.sh | 270 +++++++++++++++++++++++++++++++++++++++++++ artix/pkg.list | 25 ++++ yaass.sh | 282 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 921 insertions(+) create mode 100644 README.md create mode 100644 arch/pkg.list create mode 100755 arch/stage2.sh create mode 100755 artix/chroot.sh create mode 100644 artix/pkg.list create mode 100755 yaass.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..b04abb2 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# YAASS — Yeet's Automatic Arch Setup Scripts + +YAASS is a small project that aims to make installing arch & artix linux easier +and straight-forward. It tries not to make too many assumptions on what the user +wants to do with their setup and prompts for input when there is a choice that +needs to be made. However, it provides a set of default settings that work just fine. +It doesn't install any packages besides some that **I** believe is essential like +connman (Network Manager), git, vim, tmux and xorg. + +## Usage + +You just need to download the yass.sh and run it. Assuming you already have an +installation usb and booted from it of course. If you want to save a few clicks, +you can do: + +```sh +bash -C <(https://yigitcolakoglu.com/auto-yass.sh) +``` + + +## Distros Currently Supported + +* Arch Linux +* Artix Linux (OpenRC) diff --git a/arch/pkg.list b/arch/pkg.list new file mode 100644 index 0000000..f7fd4b0 --- /dev/null +++ b/arch/pkg.list @@ -0,0 +1,20 @@ +connman +efibootmgr +refind +dhcpcd +python +git +vim +pulseaudio +xorg +xorg-server +xorg-xinit +xorg-apps +xf86-video-intel +sudo +cronie +wget +curl +dash +mksh +acpi diff --git a/arch/stage2.sh b/arch/stage2.sh new file mode 100755 index 0000000..d605fc4 --- /dev/null +++ b/arch/stage2.sh @@ -0,0 +1,300 @@ +#!/bin/bash + +export NC='\033[0m' +export RED='\033[0;31m' +export GREEN='\033[0;32m' +export ORANGE='\033[0;33m' +export BLUE='\033[0;34m' +export PURPLE='\033[0;35m' +export CYAN='\033[0;36m' +export LIGHTGRAY='\033[0;37m' +export DARKGRAY='\033[1;30m' +export LIGHTRED='\033[1;31m' +export LIGHTGREEN='\033[1;32m' +export YELLOW='\033[1;33m' +export LIGHTBLUE='\033[1;34m' +export LIGHTPURPLE='\033[1;35m' +export LIGHTCYAN='\033[1;36m' +export WHITE='\033[1;37m' + +verbose=0 + +info(){ + printf "[\e[32mINFO\e[0m]:%s\n" "$1" +} + +debug(){ + if [ $verbose ]; then + printf "[\e[33mDEBUG\e[0m]:%s\n" "$1" + fi +} + +error(){ + printf "[\e[31mERROR\e[0m]:%s\n" "$1" +} + +prompt(){ + printf "[\e[35mPROMPT\e[0m]: %s" "$1" + read -r ans + printf "%s" "$ans" +} + +install_deps(){ + info "Installing dependencies" + sudo pacman -Sy --needed --noconfirm git tmux 2> /dev/null > /dev/null +} + +banner(){ + echo "${CYAN} +dP dP .d888888 .d888888 .d88888b .d88888b +Y8. .8P d8' 88 d8' 88 88. \"' 88. \"' + Y8aa8P 88aaaaa88a 88aaaaa88a \`Y88888b. \`Y88888b. + 88 88 88 88 88 \`8b \`8b + 88 88 88 88 88 d8' .8P d8' .8P + dP 88 88 88 88 Y88888P Y88888P + ${NC}" + echo " ${PURPLE}Yeet's Automated Arch Setup Script${NC}" +} + + +clear + +boot=$1 +root=$2 +swap=$3 + +if [ ! "$(wc -l /install/device)" = "3" ]; then + home=$4 +fi + +ln -sf /usr/share/zoneinfo/Europe/Istanbul /etc/localtime +hwclock --systohc +echo -e "en_US.UTF-8 UTF-8\ntr_TR.UTF-8 UTF-8" > /etc/locale.gen +locale-gen +echo "LANG=en_US.UTF-8" > /etc/locale.conf +if [ ! -f "/tmp/.blackarch" ]; then + curl https://blackarch.org/strap.sh > /tmp/strap.sh + chmod +x /tmp/strap.sh + /tmp/strap.sh + + if [ -f "/install/artix" ]; then + echo -e "\n[multilib]\nInclude = /etc/pacman.d/mirrorlist-arch" >> /etc/pacman.conf + echo -e "\n[lib32]\nInclude = /etc/pacman.d/mirrorlist\n\n[options]\nILoveCandy\nTotalDownload\nColor" >> /etc/pacman.conf + else + echo -e "\n[multilib]\nInclude = /etc/pacman.d/mirrorlist\n\n[options]\nILoveCandy\nTotalDownload\nColor" >> /etc/pacman.conf + fi + + + echo -n "Are you going to use a flexo server?(y/N): " + read flexo + + if [ "$flexo" = "y" ]; then + echo -n "Please enter ip address of flexo server: " + read flexo_ip + echo -e "\nServer = http://$flexo_ip:7878/\$repo/os/\$arch\n" >> /etc/pacman.d/mirrorlist + fi + pacman -Syy + + echo -n "Did any errors occur?(y/N): " + read errors + + if [ "$errors" = "y" ]; then + echo "Dropping you into a shell so that you can fix them, once you quit the shell, the installation will continue from where you left off." + bash + fi + touch /tmp/.blackarch +fi + +clear + +echo "Please enter hostname: " +read hostname +echo $hostname > /etc/hostname + +echo "Set password for root: " +passwd root + +echo "Please enter name for regular user:" +read username + +useradd -m $username +echo "Set password for user $username: " +passwd $username +usermod -aG wheel $username + + +echo -e "127.0.0.1 localhost\n::1 localhost\n127.0.0.1 $hostname.localdomain $hostname" > /etc/hosts + +if [ -f "/install/encrypted" ]; then +cat << EOF > /etc/initcpio/hooks/openswap +run_hook () +{ + x=0; + while [ ! -b /dev/mapper/root ] && [ \$x -le 10 ]; do + x=$((x+1)) + sleep .2 + done + mkdir crypto_key_device + mount /dev/mapper/root crypto_key_device + cryptsetup open --key-file crypto_key_device/root/.keys/swap-keyfile $swap swap + umount crypto_key_device +} +EOF + +cat << EOF > /etc/initcpio/install/openswap +build () +{ + add_runscript +} +help () +{ +cat< /etc/initcpio/hooks/openhome +run_hook () +{ + x=0; + while [ ! -b /dev/mapper/root ] && [ \$x -le 10 ]; do + x=$((x+1)) + sleep .2 + done + mkdir crypto_key_device + mount /dev/mapper/root crypto_key_device + cryptsetup open --key-file crypto_key_device/root/.keys/home-keyfile $home home + umount crypto_key_device +} +EOF +cat << EOF > /etc/initcpio/install/openhome +build () +{ + add_runscript +} +help () +{ +cat< /etc/mkinitcpio.conf +MODULES=(vfat i915) +BINARIES=() +FILES=() +HOOKS=(base udev plymouth autodetect keyboard keymap consolefont modconf block plymouth-encrypt openswap openhome resume filesystems fsck) +EOF +else +cat << EOF > /etc/mkinitcpio.conf +MODULES=(vfat i915) +BINARIES=() +FILES=() +HOOKS=(base udev plymouth autodetect keyboard keymap consolefont modconf block plymouth-encrypt openswap resume filesystems fsck) +EOF +fi +else +cat << EOF > /etc/mkinitcpio.conf +MODULES=(vfat i915) +BINARIES=() +FILES=() +HOOKS=(base udev plymouth autodetect keyboard keymap consolefont modconf block plymouth resume filesystems fsck) +EOF +fi + +pacman -Syu --noconfirm $(cat /install/packages.base | xargs) + +refind-install + +if [ -f "/install/encrypted" ]; then +line=1 + +blkid | while IFS= read -r i; do + echo "$line: $i" + ((line=line+1)) +done + +echo -n "Please select the device you will save the LUKS key to: " +read keydev + +uuid=$(blkid | sed -n 's/.*UUID=\"\([^\"]*\)\".*/\1/p' | sed -n "$keydev"p) +cat << EOF > /boot/refind_linux.conf +"Boot with encryption" "root=/dev/mapper/root resume=/dev/mapper/swap cryptdevice=UUID=$(blkid -s UUID -o value $root):root:allow-discards cryptkey=UUID=$uuid:vfat:key.yeet rw loglevel=3 quiet splash" +EOF +clear +else +cat << EOF > /boot/refind_linux.conf +"Boot without encryption" "root=UUID=$(blkid -s UUID -o value $root) resume=UUID=$(blkid -s UUID -o value $swap) rw loglevel=3 quiet splash" +EOF +fi + +mkdir -p /etc/sudoers.d +echo "%wheel ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/nopwd + + +sudo -u $username bash -c "git clone https://aur.archlinux.org/yay.git /tmp/yay" +sudo -u $username bash -c "(cd /tmp/yay; makepkg --noconfirm -si)" +sudo -u $username bash -c "yay --noconfirm -S plymouth" + +if [ -f "/install/artix" ]; then + sudo -u $username bash -c "yay --noconfirm -S plymouth-openrc-plugin" +fi +clear + +echo -n "Would you like to automatically install my dotfiles?(y/N): " +read dotfiles + +if [ "$dotfiles" = "y" ]; then + pacman -R --noconfirm vim + sudo -u $username bash -c "git clone --recurse-submodules https://github.com/theFr1nge/dotfiles.git ~/.dotfiles" + sudo -u $username bash -c "(cd ~/.dotfiles; ./install.sh)" + clear +fi +git clone https://github.com/adi1090x/plymouth-themes.git /tmp/pthemes +cat << EOF > /etc/plymouth/plymouthd.conf +[Daemon] +Theme=sphere +ShowDelay=0 +DeviceTimeout=8 +EOF +cp -r /tmp/pthemes/pack_4/sphere /usr/share/plymouth/themes +clear + +echo -e "/boot/EFI/refind\n2\n2" | sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/bobafetthotmail/refind-theme-regular/master/install.sh)" + +if [ -f "/install/artix" ]; then + sudo rc-update add cronie + sudo rc-update add acpi + sudo rc-update add dbus + sudo rc-update add connmand + sudo rc-update add syslog-ng +else + systemctl enable connman + systemctl enable cronie +fi + +clear + +mkinitcpio -P + +if [ -f "/install/encrypted" ]; then + vim /etc/fstab +fi +pacman --noconfirm -R nano # uninstall nano, eww + +clear + +rm -rf /etc/sudoers.d/nopwd +echo "Defaults env_reset,pwfeedback" > /etc/sudoers.d/wheel +echo "%wheel ALL=(ALL) ALL" >> /etc/sudoers.d/wheel +echo "$username $hostname =NOPASSWD: /sbin/shutdown ,/sbin/halt,/sbin/reboot,/sbin/hibernate, /bin/pacman -Syyuw --noconfirm" >> /etc/sudoers.d/wheel + +ln -sf /bin/dash /bin/sh + +clear + +echo "SETUP COMPLETE" +bash +rm -rf /install diff --git a/artix/chroot.sh b/artix/chroot.sh new file mode 100755 index 0000000..4c91200 --- /dev/null +++ b/artix/chroot.sh @@ -0,0 +1,270 @@ +#!/bin/bash + +ln -sf /bin/bash /bin/sh + +if [ ! -f "/install/device" ]; then + mkdir -p /install + echo "Now you will specify the partitions you have created" + echo "Please enter the suffix for each partition. For Ex:" + echo "1 if boot partition is /dev/sda1 or p1 if boot is on /dev/nvme0n1p1 and the disk is /dev/nvme0n1" + echo -n "Please enter boot partition suffix: " + read boot_p + boot=$device$boot_p + echo -n "Please enter root partition suffix: " + read root_p + root=$device$root_p + echo -n "Please enter swap partition suffix: " + read swap_p + swap=$device$swap_p + echo -n "Did you create a home partition as well?(y/N): " + read home_s + if [ "$home_s" = "y" ]; then + echo -n "Please enter home partition suffix: " + read home_p + home=$device$home_p + echo -en "$boot\n$root\n$swap\n$home" > /install/device + else + echo -en "$boot\n$root\n$swap" > /install/device + fi +fi + +clear + +boot=$(head -n 1 /install/device | tail -n 1) +root=$(head -n 2 /install/device | tail -n 1) +swap=$(head -n 3 /install/device | tail -n 1) +if [ ! "$(wc -l /install/device)" = "3" ]; then + home=$(head -n 4 /install/device | tail -n 1) +fi + +ln -sf /usr/share/zoneinfo/Europe/Istanbul /etc/localtime +hwclock --systohc +echo -e "en_US.UTF-8 UTF-8\ntr_TR.UTF-8 UTF-8" > /etc/locale.gen +locale-gen +echo "LANG=en_US.UTF-8" > /etc/locale.conf +if [ ! -f "/tmp/.blackarch" ]; then + curl https://blackarch.org/strap.sh > /tmp/strap.sh + chmod +x /tmp/strap.sh + /tmp/strap.sh + + if [ -f "/install/artix" ]; then + echo -e "\n[multilib]\nInclude = /etc/pacman.d/mirrorlist-arch" >> /etc/pacman.conf + echo -e "\n[lib32]\nInclude = /etc/pacman.d/mirrorlist\n\n[options]\nILoveCandy\nTotalDownload\nColor" >> /etc/pacman.conf + else + echo -e "\n[multilib]\nInclude = /etc/pacman.d/mirrorlist\n\n[options]\nILoveCandy\nTotalDownload\nColor" >> /etc/pacman.conf + fi + + + echo -n "Are you going to use a flexo server?(y/N): " + read flexo + + if [ "$flexo" = "y" ]; then + echo -n "Please enter ip address of flexo server: " + read flexo_ip + echo -e "\nServer = http://$flexo_ip:7878/\$repo/os/\$arch\n" >> /etc/pacman.d/mirrorlist + fi + pacman -Syy + + echo -n "Did any errors occur?(y/N): " + read errors + + if [ "$errors" = "y" ]; then + echo "Dropping you into a shell so that you can fix them, once you quit the shell, the installation will continue from where you left off." + bash + fi + touch /tmp/.blackarch +fi + +clear + +echo "Please enter hostname: " +read hostname +echo $hostname > /etc/hostname + +echo "Set password for root: " +passwd root + +echo "Please enter name for regular user:" +read username + +useradd -m $username +echo "Set password for user $username: " +passwd $username +usermod -aG wheel $username + + +echo -e "127.0.0.1 localhost\n::1 localhost\n127.0.0.1 $hostname.localdomain $hostname" > /etc/hosts + +if [ -f "/install/encrypted" ]; then +cat << EOF > /etc/initcpio/hooks/openswap +run_hook () +{ + x=0; + while [ ! -b /dev/mapper/root ] && [ \$x -le 10 ]; do + x=$((x+1)) + sleep .2 + done + mkdir crypto_key_device + mount /dev/mapper/root crypto_key_device + cryptsetup open --key-file crypto_key_device/root/.keys/swap-keyfile $swap swap + umount crypto_key_device +} +EOF + +cat << EOF > /etc/initcpio/install/openswap +build () +{ + add_runscript +} +help () +{ +cat< /etc/initcpio/hooks/openhome +run_hook () +{ + x=0; + while [ ! -b /dev/mapper/root ] && [ \$x -le 10 ]; do + x=$((x+1)) + sleep .2 + done + mkdir crypto_key_device + mount /dev/mapper/root crypto_key_device + cryptsetup open --key-file crypto_key_device/root/.keys/home-keyfile $home home + umount crypto_key_device +} +EOF +cat << EOF > /etc/initcpio/install/openhome +build () +{ + add_runscript +} +help () +{ +cat< /etc/mkinitcpio.conf +MODULES=(vfat i915) +BINARIES=() +FILES=() +HOOKS=(base udev plymouth autodetect keyboard keymap consolefont modconf block plymouth-encrypt openswap openhome resume filesystems fsck) +EOF +else +cat << EOF > /etc/mkinitcpio.conf +MODULES=(vfat i915) +BINARIES=() +FILES=() +HOOKS=(base udev plymouth autodetect keyboard keymap consolefont modconf block plymouth-encrypt openswap resume filesystems fsck) +EOF +fi +else +cat << EOF > /etc/mkinitcpio.conf +MODULES=(vfat i915) +BINARIES=() +FILES=() +HOOKS=(base udev plymouth autodetect keyboard keymap consolefont modconf block plymouth resume filesystems fsck) +EOF +fi + +pacman -Syu --noconfirm $(cat /install/packages.base | xargs) + +refind-install + +if [ -f "/install/encrypted" ]; then +line=1 + +blkid | while IFS= read -r i; do + echo "$line: $i" + ((line=line+1)) +done + +echo -n "Please select the device you will save the LUKS key to: " +read keydev + +uuid=$(blkid | sed -n 's/.*UUID=\"\([^\"]*\)\".*/\1/p' | sed -n "$keydev"p) +cat << EOF > /boot/refind_linux.conf +"Boot with encryption" "root=/dev/mapper/root resume=/dev/mapper/swap cryptdevice=UUID=$(blkid -s UUID -o value $root):root:allow-discards cryptkey=UUID=$uuid:vfat:key.yeet rw loglevel=3 quiet splash" +EOF +clear +else +cat << EOF > /boot/refind_linux.conf +"Boot without encryption" "root=UUID=$(blkid -s UUID -o value $root) resume=UUID=$(blkid -s UUID -o value $swap) rw loglevel=3 quiet splash" +EOF +fi + +mkdir -p /etc/sudoers.d +echo "%wheel ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/nopwd + + +sudo -u $username bash -c "git clone https://aur.archlinux.org/yay.git /tmp/yay" +sudo -u $username bash -c "(cd /tmp/yay; makepkg --noconfirm -si)" +sudo -u $username bash -c "yay --noconfirm -S plymouth" + +if [ -f "/install/artix" ]; then + sudo -u $username bash -c "yay --noconfirm -S plymouth-openrc-plugin" +fi +clear + +echo -n "Would you like to automatically install my dotfiles?(y/N): " +read dotfiles + +if [ "$dotfiles" = "y" ]; then + pacman -R --noconfirm vim + sudo -u $username bash -c "git clone --recurse-submodules https://github.com/theFr1nge/dotfiles.git ~/.dotfiles" + sudo -u $username bash -c "(cd ~/.dotfiles; ./install.sh)" + clear +fi +git clone https://github.com/adi1090x/plymouth-themes.git /tmp/pthemes +cat << EOF > /etc/plymouth/plymouthd.conf +[Daemon] +Theme=sphere +ShowDelay=0 +DeviceTimeout=8 +EOF +cp -r /tmp/pthemes/pack_4/sphere /usr/share/plymouth/themes +clear + +echo -e "/boot/EFI/refind\n2\n2" | sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/bobafetthotmail/refind-theme-regular/master/install.sh)" + +if [ -f "/install/artix" ]; then + sudo rc-update add cronie + sudo rc-update add acpi + sudo rc-update add dbus + sudo rc-update add connmand + sudo rc-update add syslog-ng +else + systemctl enable connman + systemctl enable cronie +fi + +clear + +mkinitcpio -P + +if [ -f "/install/encrypted" ]; then + vim /etc/fstab +fi +pacman --noconfirm -R nano # uninstall nano, eww + +clear + +rm -rf /etc/sudoers.d/nopwd +echo "Defaults env_reset,pwfeedback" > /etc/sudoers.d/wheel +echo "%wheel ALL=(ALL) ALL" >> /etc/sudoers.d/wheel +echo "$username $hostname =NOPASSWD: /sbin/shutdown ,/sbin/halt,/sbin/reboot,/sbin/hibernate, /bin/pacman -Syyuw --noconfirm" >> /etc/sudoers.d/wheel + +ln -sf /bin/dash /bin/sh + +clear + +echo "SETUP COMPLETE" +bash +rm -rf /install diff --git a/artix/pkg.list b/artix/pkg.list new file mode 100644 index 0000000..289a309 --- /dev/null +++ b/artix/pkg.list @@ -0,0 +1,25 @@ +efibootmgr +refind +python +git +vim +pulseaudio +xorg +xorg-server +xorg-xinit +xorg-apps +xf86-video-intel +sudo +wget +curl +dash +mksh +acpi +dbus +syslog-ng +connman +avahi-openrc +acpi-openrc +dbus-openrc +syslog-ng-openrc +connman-openrc diff --git a/yaass.sh b/yaass.sh new file mode 100755 index 0000000..e839bd2 --- /dev/null +++ b/yaass.sh @@ -0,0 +1,282 @@ +#!/bin/bash + +export NC='\033[0m' +export RED='\033[0;31m' +export GREEN='\033[0;32m' +export ORANGE='\033[0;33m' +export BLUE='\033[0;34m' +export PURPLE='\033[0;35m' +export CYAN='\033[0;36m' +export LIGHTGRAY='\033[0;37m' +export DARKGRAY='\033[1;30m' +export LIGHTRED='\033[1;31m' +export LIGHTGREEN='\033[1;32m' +export YELLOW='\033[1;33m' +export LIGHTBLUE='\033[1;34m' +export LIGHTPURPLE='\033[1;35m' +export LIGHTCYAN='\033[1;36m' +export WHITE='\033[1;37m' + +verbose=0 + +info(){ + printf "[\e[32mINFO\e[0m]:%s\n" "$1" +} + +debug(){ + if [ $verbose ]; then + printf "[\e[33mDEBUG\e[0m]:%s\n" "$1" + fi +} + +error(){ + printf "[\e[31mERROR\e[0m]:%s\n" "$1" +} + +prompt(){ + printf "[\e[35mPROMPT\e[0m]: %s" "$1" + read -r ans + printf "%s" "$ans" +} + +install_deps(){ + info "Installing dependencies" + sudo pacman -Sy --needed --noconfirm git tmux 2> /dev/null > /dev/null +} + +banner(){ + echo "${CYAN} +dP dP .d888888 .d888888 .d88888b .d88888b +Y8. .8P d8' 88 d8' 88 88. \"' 88. \"' + Y8aa8P 88aaaaa88a 88aaaaa88a \`Y88888b. \`Y88888b. + 88 88 88 88 88 \`8b \`8b + 88 88 88 88 88 d8' .8P d8' .8P + dP 88 88 88 88 Y88888P Y88888P + ${NC}" + echo " ${PURPLE}Yeet's Automated Arch Setup Script${NC}" +} + +help(){ + echo " +${GREEN} Usage:${NC}\n + -o Select the OS you are installing this on +${ORANGE}Author:${NC} Yigit Colakoglu aka. ${BLUE}<===8 Fr1nge 8===>${NC}\n" + exit 0 +} + +os="" + +while [[ $# -gt 0 ]] +do + key="$1" + case $key in + -o|--os) + os="$(echo "$2" | tr '[:upper:]' '[:lower:]')" + shift 2 + ;; + -v|--verbose) + verbose=1 + shift + ;; + *) + help + ;; + esac +done + +if [ "$os" = "" ]; then + os=$(prompt "Please enter the OS you want to install on(Arch/Artix): " | tr '[:upper:]' '[:lower:]') +fi + +if [ ! "$os" = "arch" ] && [ ! "$os" = "artix" ]; then + error "OS must be Arch or Artix" + exit 1 +fi + +# Disk setup +lsblk + +device=$(prompt "What is the install device: ") +info "Installing to $device... (Enter to continue)" +read -r _ + +clear + +wipe=$(prompt "Would you like to wipe and re-partition the disk $device?(Y/n): ") + +if [ ! "$wipe" = "n" ]; then + # Disk wipe + secure=$(prompt "Should I do a secure wipe?(y/N): ") + if [ "$secure" = "y" ]; then + info "Writing random data to disk, this might take a while if you have a large drive..." + cryptsetup open -q --type plain -d /dev/urandom "$device" wipe + dd if=/dev/zero of=/dev/mapper/wipe status=progress + cryptsetup -q close wipe + fi + info "Wiping the partition table..." + cryptsetup erase "$device" + wipefs -a -f "$device" + sleep 1 +fi + +clear +# Run cfdisk for manual partitioning +cfdisk "$device" +clear +sleep 2 +[ ! "$(command -v partprobe)" = "" ] && partprobe +lsblk "$device" +satisfied=$(prompt "Are you satisfied with your partitions?(Y/n): ") + +while [ "$satisfied" = "n" ]; do + cfdisk "$device" + clear + [ ! "$(command -v partprobe)" = "" ] && partprobe + lsblk "$device" + satisfied=$(prompt "Are you satisfied with your partitions?(Y/n): ") +done +clear + +lsblk "$device" +echo "" +echo "Now you will specify the partitions you have created" +echo "Please enter the suffix for each partition. For Ex:" +echo "1 if boot partition is /dev/sda1 or p1 if boot is on /dev/nvme0n1p1 and the disk is /dev/nvme0n1" +boot_p=$(prompt "Please enter boot partition suffix: ") +root_p=$(prompt "Please enter root partition suffix: ") +swap_p=$(prompt "Please enter swap partition suffix: ") +boot=$device$boot_p +root=$device$root_p +swap=$device$swap_p +if [ -z "$home_s" ]; then + home_s=$(prompt "Did you create a home partition as well?(y/N): ") +fi +if [ "$home_s" = "y" ]; then + home_p=$(prompt "Please enter home partition suffix: ") + home=$device$home_p +fi + +clear + +# Create the boot partition +info "Formatting boot partition" +mkfs.fat -F32 "$boot" + +encryption=$(prompt "Would you like to enrypt your disks?(y/N): ") + +if [ "$encryption" = "y" ]; then + clear + info "Running benchmark" + cryptsetup benchmark + cipher=$(prompt "Please select the ciphering algorithm(aes-xts-plain64): ") + if [ "$cipher" = "" ]; then + cipher="aes-xts-plain64" + fi + iter=$("Please select the iter time(750): ") + + if [ "$iter" = "" ]; then + iter="750" + fi + keysize=$("Please select the key size(512): ") + if [ "$keysize" = "" ]; then + keysize="512" + fi + # Create the swap partition + mkdir /root/.keys + dd if=/dev/urandom of=/root/.keys/swap-keyfile bs=1024 count=4 + chmod 600 /root/.keys/swap-keyfile + cryptsetup --key-size "$keysize" --cipher "$cipher" --iter-time "$iter" -q luksFormat "$swap" < /root/.keys/swap-keyfile + info "Keyfile saved to /root/.keys/swap-keyfile" + cryptsetup open --key-file="/root/.keys/swap-keyfile" "$swap" swap + mkswap /dev/mapper/swap + swapon /dev/mapper/swap + + # Create the root partition + root_pass="$(prompt "Enter password for root encryption")" + + echo "$root_pass" | cryptsetup --key-size "$keysize" --cipher "$cipher" --iter-time "$iter" -q luksFormat "$root" + dd bs=512 count=4 if=/dev/random of=/root/.keys/root-keyfile iflag=fullblock + chmod 600 /root/.keys/root-keyfile + echo "$root_pass" | cryptsetup luksAddKey "$root" /root/.keys/root-keyfile + echo "[INFO]: Keyfile saved to /root/.keys/root-keyfile" + cryptsetup open --key-file="/root/.keys/root-keyfile" "$root" root + mkfs.ext4 -F /dev/mapper/root + + mkdir /mnt/sys + mount /dev/mapper/root /mnt/sys + + if [ "$home_s" = "y" ]; then + home_pass="$(prompt "Enter password for home encryption")" + echo "$home_pass" | cryptsetup --key-size "$keysize" --cipher "$cipher" --iter-time "$iter" -q luksFormat "$home" + dd bs=512 count=4 if=/dev/random of=/root/.keys/home-keyfile iflag=fullblock + chmod 600 /root/.keys/home-keyfile + echo "$home_pass" | cryptsetup luksAddKey "$home" /root/.keys/home-keyfile + echo "[INFO]: Keyfile saved to /root/.keys/home-keyfile" + cryptsetup open --key-file="/root/.keys/home-keyfile" "$home" home + mkfs.ext4 -F /dev/mapper/home + mkdir /mnt/sys/home + mount "/dev/mapper/home" /mnt/sys/home + fi +else + mkswap "$swap" + swapon "$swap" + mkfs.ext4 -F "$root" + mkdir /mnt/sys + mount "$root" /mnt/sys + if [ "$home_s" = "y" ]; then + mkfs.ext4 -F "$home" + mkdir /mnt/sys/home + mount "$home" /mnt/sys/home + fi +fi + +mkdir /mnt/sys/boot +mount "$boot" /mnt/sys/boot + +clear + +mkdir /mnt/sys/install +case $os in + arch) + pacstrap /mnt/sys base linux linux-firmware base-devel vi nano + genfstab -U /mnt/sys >> /mnt/sys/etc/fstab + curl https://raw.githubusercontent.com/theFr1nge/YAASS/main/arch/pkg.list > /mnt/sys/install/packages.base + curl https://raw.githubusercontent.com/theFr1nge/YAASS/main/arch/stage2.sh > /mnt/sys/install/stage2.sh + ;; + artix) + basestrap /mnt/sys base linux linux-firmware base-devel vi nano openrc + fstabgen -U /mnt/sys >> /mnt/sys/etc/fstab + curl https://raw.githubusercontent.com/theFr1nge/YAASS/main/artix/pkg.list > /mnt/sys/install/packages.base + curl https://raw.githubusercontent.com/theFr1nge/YAASS/main/artix/stage2.sh > /mnt/sys/install/stage2.sh + ;; +esac + +chmod +x /mnt/sys/install/stage2.sh + +tmpfs_ok=$(prompt "Would you like to use tmpfs (This can drastically improve performance)?(Y/n): ") + +if [ ! "$tmpfs_ok" = "n" ]; then + tmpfs_size=$("How big should the tmpfs be?(end with G or M): ") + printf "\n#tmpfs\ntmpfs /tmp tmpfs rw,nodev,nosuid,size=%s 0 0\n" "$tmpfs_size" >> /mnt/sys/etc/fstab +fi + +clear + + +if [ ! "$encryption" = "n" ]; then + cp -r /root/.keys /mnt/sys/root +fi + +if [ "$os" = "arch" ];then + if [ "$home_s" = "y" ]; then + tmux new-session -s "arch-setup" "arch-chroot /mnt/sys /install/stage2.sh \"$boot\" \"$root\" \"$swap\" \"$home\"" || arch-chroot /mnt/sys /install/stage2.sh "$boot" "$root" "$swap" "$home" + else + tmux new-session -s "arch-setup" "arch-chroot /mnt/sys /install/stage2.sh \"$boot\" \"$root\" \"$swap\"" || arch-chroot /mnt/sys /install/stage2.sh "$boot" "$root" "$swap" + fi +else + if [ "$home_s" = "y" ]; then + tmux new-session -s "artix-setup" "artix-chroot /mnt/sys /install/stage2.sh \"$boot\" \"$root\" \"$swap\" \"$home\"" || artix-chroot /mnt/sys /install/stage2.sh "$boot" "$root" "$swap" "$home" + else + tmux new-session -s "artix-setup" "artix-chroot /mnt/sys /install/stage2.sh \"$boot\" \"$root\" \"$swap\"" || artix-chroot /mnt/sys /install/stage2.sh "$boot" "$root" "$swap" + fi +fi