Added 'set -euo pipefail' flag

Set some variables (only to comply with the 'set -u' flag)
Replaced some color functions with simple 'echo' commands
'Secure Erasure': Now a prompt informs about the need to reboot system after erasing the disk, which also takes place automatically when done
'chroot_conf' > 'Custom System Configuration': Now when 'grub' is selected, enabling services will take effect only if a(ny) service(s) have been first set to be enabled
'chroot_conf': Renamed a few 'HERE-docs' for clarification
'Select Desktop' > 'Custom System' > 'Custom Packages Setup': Now, if 'lightdm' has been set as a custom package, a prompt will ask you to select between 'lightdm-gtk-greeter' & 'lightdm-slick-greeter' for convenience, and said greeter will be automatically installed and also lightdm automatically configured for said greeter.
NOTE: The user only has to set 'lightdm' service to be enabled in next step
This commit is contained in:
Jane Doe 2024-02-10 18:22:41 +00:00
parent f2fd59f82d
commit a69659a550

246
Amelia.sh
View file

@ -1,8 +1,9 @@
#!/bin/bash
# Amelia Installer
# Version: 3.3
# Version: 3.4
set -euo pipefail
###########################################################################################
# ### COLOR FUNCTIONS ###
@ -261,7 +262,7 @@ first_check (){
REDBG " ----------------------------------------
### WARNING: High Risk Of Data Loss ###
----------------------------------------"
NC
echo
else
PURPLE "
### The installer must be run as Root (Not 'wheel' group user) "
@ -386,7 +387,7 @@ ${purple}###${nc} Main Menu ${purple}###${nc}
[3] Disk Management
[4] Start Installation (Auto-Navigated) "
[4] Start Installation (${cyan}Auto-Navigation${nc}) "
BLUE "
@ -564,7 +565,7 @@ ${purple}###${nc} User Setup ${purple}###${nc}
Enter a username: "
read -p "
==> " USERNAME
NC
echo
if [[ -z "${USERNAME}" ]]; then
sleep 0.5
@ -584,7 +585,7 @@ Enter a username: "
Enter a password for${nc} ${cyan}"${USERNAME}"${blue}: "
read -p "
==> " USERPASSWD
NC
echo
if [[ -z "${USERPASSWD}" ]]; then
sleep 0.5
@ -598,7 +599,7 @@ Enter a password for${nc} ${cyan}"${USERNAME}"${blue}: "
Re-enter${nc} ${cyan}"${USERNAME}"'s ${blue}password: "
read -p "
==> " USERPASSWD2
NC
echo
if [[ "${USERPASSWD}" != "${USERPASSWD2}" ]]; then
sleep 0.5
@ -639,7 +640,7 @@ Enter a password for the${nc}${cyan} Root ${blue}user: "
Re-enter${nc} ${cyan}Root ${blue}user's password: "
read -p "
==> " ROOTPASSWD2
NC
echo
if [[ "${ROOTPASSWD}" != "${ROOTPASSWD2}" ]]; then
sleep 0.5
@ -665,7 +666,7 @@ ${purple}###${nc} Hostname Setup ${purple}###${nc}
Enter a hostname: "
read -p "
==> " HOSTNAME
NC
echo
if [[ -z "${HOSTNAME}" ]]; then
sleep 0.5
@ -891,7 +892,7 @@ ${purple}###${nc} Filesystem Selection ${purple}###${nc}
Enter a number: "
read -p "
==> " fs
NC
echo
case "${fs}" in
1)
@ -1016,7 +1017,7 @@ set_swapsize (){
Enter Swapfile size ${bwhite}(in GiB)${blue}: "
read -p "
==> " swapsize
NC
echo
if [[ -z "${swapsize}" ]]; then
sleep 0.5
@ -1085,7 +1086,7 @@ ${purple}###${nc} Graphics Setup ${purple}###${nc}
if [[ "${vendor}" == "Virtual Machine" ]]; then
vgaconf="n"
NC
echo
skip
ok
return 0
@ -1129,7 +1130,7 @@ Enter a number ${bwhite}(empty to skip)${blue}: "
==> " islands
if [[ -z "${islands}" ]]; then
skip
NC
echo
elif [[ "${islands}" == "1" ]]; then
NC "
@ -1196,12 +1197,12 @@ Enter a number: "
==> [${green}Turing+ OK${nc}]
"
else
NC
echo
invalid
return 1
fi
else
NC
echo
invalid
return 1
fi
@ -1257,7 +1258,7 @@ Enter a number: "
### ""${vendor}"" Graphics will be automatically configured
"
elif [[ "${vgaconf}" == "n" ]]; then
NC
echo
skip
else
invalid
@ -1391,11 +1392,11 @@ Enter [y/n]: "
==> [${green}Terminal OK${nc}] " ;;
n)
NC
echo
skip ;;
"")
sleep 0.5
NC
echo
RED "
[!] Please type 'y' or 'n' to continue "
reload
@ -1434,11 +1435,11 @@ Enter [y/n]: "
==> [${green}Terminal OK${nc}] " ;;
n)
NC
echo
skip ;;
"")
sleep 0.5
NC
echo
RED "
[!] Please type 'y' or 'n' to continue "
reload
@ -1495,11 +1496,11 @@ Enter [y/n]: "
==> [${green}base-devel OK${nc}] " ;;
n)
NC
echo
skip ;;
"")
sleep 0.5
NC
echo
RED "
[!] Please type 'y' or 'n' to continue "
reload
@ -1528,11 +1529,11 @@ Enter [y/n]: "
y)
add_prmtrs ;;
n)
NC
echo
skip ;;
"")
sleep 0.5
NC
echo
RED "
[!] Please type 'y' or 'n' to continue "
reload
@ -1575,6 +1576,59 @@ Enter your packages ${bwhite}(space-seperated)${blue}: "
[!] Please enter package(s) to continue "
reload
return 1
elif [[ "${custompkgs}" =~ "lightdm" ]]; then
echo
sleep 0.5
NC "
_________________________________
${purple}###${nc} Lightdm Greeter Selection ${purple}###${nc}
"
YELLOW "
> Select a Greeter: "
NC "
[1] Gtk
[2] Slick "
BLUE "
Enter a number: "
read -p "
==> " greeternmbr
case "${greeternmbr}" in
1)
greeter="lightdm-gtk-greeter"
sleep 0.5
NC "
==> [${green}Lightdm Gtk Greeter OK${nc}] " ;;
2)
greeter="lightdm-slick-greeter"
sleep 0.5
NC "
==> [${green}Lightdm Slick Greeter OK${nc}] " ;;
"")
sleep 0.5
echo
RED "
[!] Please make a selection.. "
reload
return 1 ;;
*)
invalid
return 1 ;;
esac
else
ok
fi
@ -1600,7 +1654,7 @@ Enter your services ${bwhite}(space-seperated)${blue}: "
==> " customservices
if [[ -z "${customservices}" ]]; then
NC
echo
skip
else
ok
@ -1627,7 +1681,7 @@ Enter your Kernel parameters ${bwhite}(space-seperated)${blue}: "
==> " cust_bootopts
if [[ -z "${cust_bootopts}" ]]; then
NC
echo
skip
else
ok
@ -1660,7 +1714,7 @@ ${purple}###${nc} EFI Boot Entries Deletion ${purple}###${nc}
Enter a${nc} ${cyan}BootOrder${blue} number for Deletion ${bwhite}(empty to skip)${blue}: "
read -p "
==> " boot_entry
NC
echo
if [[ -n "${boot_entry}" ]]; then
@ -1707,7 +1761,7 @@ ${purple}###${nc} Wireless Regulatory Domain Setup ${purple}###${nc}
"
skip
ok
NC
echo
return 0
fi
@ -1718,7 +1772,7 @@ Enter your Country Code, ie:${nc} ${cyan}US ${bwhite}(empty to skip)${blue}: "
==> " REGDOM
if [[ -z "${REGDOM}" ]]; then
NC
echo
skip
elif [[ "${REGDOM}" =~ [[:lower:]] ]]; then
sleep 0.5
@ -1955,7 +2009,7 @@ ${disks} "
Enter a disk number: "
read -p "
==> " instl_dsk_nmbr
NC
echo
if [[ -n "${instl_dsk_nmbr}" ]]; then
instl_drive="$(echo "${disks}" | awk "\$1 == "${instl_dsk_nmbr}" {print \$2}")"
@ -2162,7 +2216,7 @@ ${purple}###${nc} Encryption Setup ${purple}###${nc}
"
read -p "
==> " encrypt
NC
echo
if [[ "${encrypt}" == "no" ]]; then
skip
@ -2179,7 +2233,7 @@ ${purple}###${nc} Encryption Setup ${purple}###${nc}
Enter a name: "
read -p "
==> " ENCROOT
NC
echo
if [[ -z "${ENCROOT}" ]]; then
sleep 0.5
@ -2220,7 +2274,7 @@ Enter a name: "
"
read -p "
==> " homecrypt
NC
echo
if [[ "${homecrypt}" == "no" ]]; then
skip
@ -2235,7 +2289,7 @@ Enter a name: "
Enter a name: "
read -p "
==> " ENCRHOME
NC
echo
if [[ -z "${ENCRHOME}" ]]; then
sleep 0.5
@ -2400,7 +2454,6 @@ instl (){
if [[ "${encrypt}" == "no" ]]; then
until set_mode; do : ; done
until confirm_status; do : ; done
return 0
elif [[ "${encrypt}" == "yes" ]]; then
until sec_erase; do : ; done
@ -2416,7 +2469,6 @@ instl (){
fi
until chroot_conf; do : ; done
return 0
fi
}
###########################################################################################
@ -2460,7 +2512,7 @@ ${purple}###${nc} Mode Selection ${purple}###${nc}
Enter a Mode number: "
read -p "
==> " setmode
NC
echo
case "${setmode}" in
1)
@ -2488,7 +2540,7 @@ Enter a Mode number: "
"
sleep 0.5
lsblk -f
NC
echo
sleep 1
}
###########################################################################################
@ -2879,7 +2931,7 @@ ask_homepart_form (){
"
read -p "
==> " homeform
NC
echo
if [[ "${homeform}" == "y" ]]; then
if mkdir -pv /mnt/home; then
@ -3036,7 +3088,7 @@ ${volumes} "
Enter your${nc} ${cyan}"${roottype}"${blue} partition number: "
read -p "
==> " mntroot_nmbr
NC
echo
if [[ -n "${mntroot_nmbr}" ]]; then
rootpart="$(echo "${volumes}" | awk "\$1 == "${mntroot_nmbr}" { print \$2}")"
@ -3103,7 +3155,7 @@ ${volumes} "
Enter your${nc} ${cyan}/BOOT${blue} partition number: "
read -p "
==> " mntboot_nmbr
NC
echo
if [[ -n "${mntboot_nmbr}" ]]; then
bootpart="$(echo "${volumes}" | awk "\$1 == "${mntboot_nmbr}" { print \$2}")"
@ -3148,7 +3200,7 @@ ${volumes} "
Enter your${nc} ${cyan}/HOME${blue} partition number: "
read -p "
==> " mnthome_nmbr
NC
echo
if [[ -n "${mnthome_nmbr}" ]]; then
homepart="$(echo "${volumes}" | awk "\$1 == "${mnthome_nmbr}" { print \$2}")"
@ -3193,7 +3245,6 @@ ${purple}###${nc} Confirm Installation Status ${purple}###${nc}
"
read -p "
==> " agree
NC
if [[ "${agree}" == "yes" ]]; then
ok
@ -3206,7 +3257,6 @@ ${purple}###${nc} Confirm Installation Status ${purple}###${nc}
until wireless_regdom; do : ; done
fi
until chroot_conf; do : ; done
return 0
elif [[ "${agree}" == "no" ]]; then
reload
@ -3229,7 +3279,6 @@ ${purple}###${nc} Unmount Filesystems ${purple}###${nc}
fi
revise
return 0
else
sleep 0.5
@ -3276,7 +3325,9 @@ ${purple}###${nc} Secure Disk Erasure ${purple}###${nc}
while [[ -n "${erase_dsk_nmbr}" ]]; do
YELLOW "
> Select a disk for Secure Erasure ${red}[!] (CAUTION) [!]${nc} "
> Select a disk for Secure Erasure ${red}[!] (CAUTION) [!]${yellow}
### A ${nc}reboot${yellow} is mandatory and will take effect imediatelly when done "
NC "
@ -3287,32 +3338,35 @@ ${disks}"
Enter a disk number ${bwhite}(empty to skip)${blue}: "
read -p "
==> " erase_dsk_nmbr
NC
echo
if [[ -n "${erase_dsk_nmbr}" ]]; then
erasedrive="$(echo "${disks}" | awk "\$1 == "${erase_dsk_nmbr}" {print \$2}")"
if [[ -e "${erasedrive}" ]]; then
cryptsetup open --type plain -d /dev/urandom "${erasedrive}" temp &&
dd if=/dev/zero of=/dev/mapper/temp status=progress bs=1M oflag=direct &&
if cryptsetup close temp; then
sleep 0.5
NC "
cryptsetup close temp
sleep 0.5
NC "
==> [${green}Drive "${erasedrive}" Erased OK${nc}] "
else
err_try
return 1
fi
sleep 1
NC "
==> [${green}Rebooting${nc}] "
sleep 3
reboot
else
invalid
return 1
fi
else
skip
ok
fi
done
ok
}
###########################################################################################
luks (){
@ -3449,7 +3503,7 @@ ${purple}###${nc} LUKS Encryption ${purple}###${nc}
"
read -p "
==> " homeform
NC
echo
if [[ "${homeform}" == "y" ]]; then
if mkfs.ext4 -F -L HOME "${home_dev}"; then
@ -3514,7 +3568,7 @@ ${purple}###${nc} LUKS Encryption ${purple}###${nc}
"
sleep 0.5
lsblk -f
NC
echo
sleep 1
}
###########################################################################################
@ -3543,7 +3597,7 @@ ${purple}###${nc} Optimize PacMan ${purple}###${nc}
Enter country name or code ${bwhite}(Empty for Defaults)${blue}: "
read -p "
==> " COUNTRY
NC
echo
if [[ -z "${COUNTRY}" ]] ; then
sleep 0.5
@ -3577,7 +3631,7 @@ Enter country name or code ${bwhite}(Empty for Defaults)${blue}: "
Enter [y/n]: "
read -p "
==> " parallel
NC
echo
if [[ "${parallel}" == "y" ]]; then
sleep 0.5
@ -3598,7 +3652,7 @@ Enter [y/n]: "
Enter a number: "
read -p "
==> " parallelnmbr
NC
echo
if [[ "${parallelnmbr}" =~ ^(2|3|4|5)$ ]]; then
sed -i "s|#ParallelDownloads = 5|ParallelDownloads = "${parallelnmbr}"|g" /etc/pacman.conf
@ -3721,9 +3775,9 @@ ${purple}###${nc} Pacstrap System ${purple}###${nc}
11) # NOTE: Custom System:
if [[ "${vendor}" == "Virtual Machine" ]]; then
deskpkgs="base sudo "${bootldr_pkgs}" "${custompkgs}" "${fstools}" "${kernel}" "${microcode}""
deskpkgs="base sudo "${bootldr_pkgs}" "${custompkgs}" "${fstools}" "${kernel}" "${microcode}" "${greeter}""
else
deskpkgs="base linux-firmware sudo "${bootldr_pkgs}" "${custompkgs}" "${fstools}" "${kernel}" "${microcode}" "${vgapkgs}" "${wireless_reg}""
deskpkgs="base linux-firmware sudo "${bootldr_pkgs}" "${custompkgs}" "${fstools}" "${kernel}" "${microcode}" "${vgapkgs}" "${wireless_reg}" "${greeter}""
fi ;;
esac
@ -3829,7 +3883,7 @@ REGDOM
###########################################################################################
chroot_conf (){
local prompt="System"
local prompt="Arch Linux"
sleep 0.5
NC "
_________________________________
@ -3946,7 +4000,7 @@ ${purple}###${nc} Chroot & Configure System ${purple}###${nc}
if [[ "${packages}" =~ ^(1|3|4|5|6|7|8|9|10)$ ]]; then
arch-chroot /mnt <<-SYSTEM
arch-chroot /mnt <<-VANILLA_CONF
sed -i "/^#${SETLOCALE}/s/^#//" /etc/locale.gen &&
locale-gen &&
echo LANG=${SETLOCALE} > /etc/locale.conf &&
@ -3971,7 +4025,7 @@ ${purple}###${nc} Chroot & Configure System ${purple}###${nc}
echo "
%wheel ALL=(ALL) ALL" | tee /etc/sudoers.d/sudoedits &&
visudo -c /etc/sudoers.d/sudoedits
SYSTEM
VANILLA_CONF
if [[ -f /mnt/etc/lightdm/lightdm.conf ]]; then
if [[ "${packages}" == "6" ]]; then
@ -3979,13 +4033,13 @@ SYSTEM
sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-deepin-greeter|g' /etc/lightdm/lightdm.conf
DEEPIN
elif [[ "${packages}" == "7" ]]; then
arch-chroot /mnt <<-BUDGIE
arch-chroot /mnt <<-GTK
sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-gtk-greeter|g' /etc/lightdm/lightdm.conf
BUDGIE
GTK
else
arch-chroot /mnt <<-LIGHTDM
arch-chroot /mnt <<-SLICK
sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-slick-greeter|g' /etc/lightdm/lightdm.conf
LIGHTDM
SLICK
fi
fi
@ -4001,6 +4055,7 @@ LIGHTDM
options rw ${boot_opts}" | tee /boot/loader/entries/arch.conf &&
systemctl enable systemd-boot-update ${bluetooth} ${displaymanager} ${network} ${trim}
BOOTCTL
elif [[ "${bootloader}" == "2" ]]; then
arch-chroot /mnt <<-GRUB
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB &&
@ -4023,7 +4078,6 @@ GRUBBTRFSD
sed -i "/^#GRUB_TERMINAL_OUTPUT=console/s/^#//" /etc/default/grub &&
grub-mkconfig -o /boot/grub/grub.cfg
NVIDIAGRUB
fi
fi
@ -4069,7 +4123,7 @@ NVIDIAHOOK
NRG
fi
arch-chroot /mnt <<-OPTIMIZED
arch-chroot /mnt <<-OPTIMIZED_CONF
sed -i "/^#${SETLOCALE}/s/^#//" /etc/locale.gen &&
locale-gen &&
echo LANG=${SETLOCALE} > /etc/locale.conf &&
@ -4205,7 +4259,7 @@ NRG
%wheel ALL=(ALL) ALL" | tee /etc/sudoers.d/sudoedits &&
visudo -c /etc/sudoers.d/sudoedits &&
systemctl enable avahi-daemon bluetooth cups ipp-usb NetworkManager rngd sddm systemd-boot-update ufw ${trim}
OPTIMIZED
OPTIMIZED_CONF
if [[ "${vgaconf}" == "y" && "${vendor}" == "Nvidia" ]]; then
if [[ "${kernelnmbr}" == "1" ]] || [[ "${kernelnmbr}" == "2" && "${family}" == "1" ]] || [[ "${kernelnmbr}" == "2" && "${family}" == "2" && ${nvdriver} == "2" ]]; then
@ -4242,7 +4296,7 @@ NVIDIAHOOK
# NOTE: Custom System Configuration (Add any extra configuration below):
if [[ "${packages}" == "11" ]]; then
arch-chroot /mnt <<-CUSTOM
arch-chroot /mnt <<-CUSTOM_CONF
sed -i "/^#${SETLOCALE}/s/^#//" /etc/locale.gen &&
locale-gen &&
echo LANG=${SETLOCALE} > /etc/locale.conf &&
@ -4266,7 +4320,20 @@ NVIDIAHOOK
echo "
%wheel ALL=(ALL) ALL" | tee /etc/sudoers.d/sudoedits &&
visudo -c /etc/sudoers.d/sudoedits
CUSTOM
CUSTOM_CONF
if [[ -f /mnt/etc/lightdm/lightdm.conf ]]; then
if [[ "${greeternmbr}" == "1" ]]; then
arch-chroot /mnt <<-GTK
sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-gtk-greeter|g' /etc/lightdm/lightdm.conf
GTK
elif [[ "${greeternmbr}" == "2" ]]; then
arch-chroot /mnt <<-SLICK
sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-slick-greeter|g' /etc/lightdm/lightdm.conf
SLICK
fi
fi
if [[ "${bootloader}" == "1" ]]; then
arch-chroot /mnt <<-BOOTCTL
@ -4280,6 +4347,7 @@ CUSTOM
options rw ${boot_opts}" | tee /boot/loader/entries/arch.conf &&
systemctl enable systemd-boot-update ${customservices} ${trim}
BOOTCTL
elif [[ "${bootloader}" == "2" ]]; then
arch-chroot /mnt <<-GRUB
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB &&
@ -4288,8 +4356,14 @@ BOOTCTL
-e "/^#GRUB_DISABLE_OS_PROBER=false/s/^#//" \
/etc/default/grub &&
grub-mkconfig -o /boot/grub/grub.cfg
systemctl enable ${customservices} ${trim}
GRUB
if [[ -n "${customservices}" || -n "${trim}" ]]; then
arch-chroot /mnt <<-SERVICES
systemctl enable ${customservices} ${trim}
SERVICES
fi
if [[ "${bootloader}" == "2" && "${fs}" == "2" ]]; then
arch-chroot /mnt <<-GRUBBTRFSD
systemctl enable grub-btrfsd
@ -4339,12 +4413,32 @@ NVIDIAHOOK
# ### END FUNCTIONS ###
###########################################################################################
clear
set -eo pipefail
run_as="$(whoami)"
tty="$(tty)"
disks="$(lsblk --nodeps --paths --noheadings --output=name,size,model | cat --number)"
SETLOCALE=""
USERNAME=""
kernelnmbr=""
fs=""
vgaconf=""
packages=""
efi_entr_del=""
wrlss_rgd=""
sanity=""
install=""
bootldr_pkgs=""
devel=""
REGDOM=""
vga_bootopts=""
btrfs_opts=""
trim=""
swapmode=""
homecrypt=""
greeter=""
revision=""
greeternmbr=""
clear
first_check
sleep 1
CYAN "