From 7a7f4875fcd54ee99525363efe949074b1de6a1e Mon Sep 17 00:00:00 2001 From: Jane Doe Date: Wed, 22 Oct 2025 18:40:32 +0300 Subject: [PATCH] Change: Efi System Partition size increased to 1 GiB Add: If 'Grub' has been selected, the user can now select the .efi Boot Path to be installed to (Standard - Fallback) change: Code refactoring --- Amelia.sh | 1095 +++++++++++++++++++++++++++-------------------------- 1 file changed, 548 insertions(+), 547 deletions(-) diff --git a/Amelia.sh b/Amelia.sh index 967fc66..dd8f465 100644 --- a/Amelia.sh +++ b/Amelia.sh @@ -2,7 +2,7 @@ # Amelia Installer # Source: https://gitlab.com/prism7/archery -# Version: 9.9.4 +# Version: 9.9.5 set -euo pipefail ################################################################################################### @@ -373,7 +373,7 @@ failure() { } # END PROMPT FUNCTIONS ################################################################################################### -# FUNCTIONS +# SYSTEM FUNCTIONS mode_check() { if [[ "${run_as}" == "root" ]]; then @@ -1271,8 +1271,43 @@ Enter a number: " sleep 0.2 YELLOW " - ### Grub has been selected - " ;; + > Select a Boot Path to install to: " + NC " + + [1] Standard Path + + [2] Fallback Path -- for Removable Devices (recommended) " + BLUE " + + +Enter a number: " + read -r -p " +==> " path + echo + + case "${path}" in + 1) + YELLOW " + + ### Grub (Standard Boot Path) has been selected + " ;; + 2) + YELLOW " + + ### Grub (Fallback Boot Path) has been selected + " ;; + "") + sleep 0.2 + RED " + ----------------------------------- + ### ${nc}Please select a Boot Path ${red}### + -----------------------------------" + reload + return 1 ;; + *) + invalid + return 1 ;; + esac ;; "") sleep 0.2 RED " @@ -2036,11 +2071,11 @@ ${magenta}###${nc}------------------------------------${magenta}[ ${bwhite}Deskt [1] Plasma - [2] Plasma Light (Amelia's version) + [2] Plasma Lite [3] Gnome - [4] Gnome Light (Amelia's version) + [4] Gnome Lite [5] Xfce @@ -2072,13 +2107,13 @@ Enter a number: " desktopname="Plasma" deskname ;; 2) - desktopname="Plasma Light" + desktopname="Plasma Lite" deskname ;; 3) desktopname="Gnome" deskname ;; 4) - desktopname="Gnome Light" + desktopname="Gnome Lite" deskname ;; 5) desktopname="Xfce" @@ -2122,7 +2157,6 @@ Enter a number: " if [[ -n "${web}" && "${desktop}" =~ ^(11|12)$ ]]; then until web_browser; do : ; done fi - if [[ "${printer}" == "y" && "${desktop}" =~ ^(11|12)$ ]]; then until print_scan; do : ; done fi @@ -3362,7 +3396,7 @@ ______________________________________________ ################################################################################################### ask_multibooting() { - [[ "${multibooting}" == "n" ]] && return 0 + [[ "${multibooting}" == "n" ]] && return 0 local prompt="MultiBoot Status" sleep 0.2 @@ -3604,14 +3638,14 @@ manual_presets() { ${magenta}###${nc}------------------------------------${magenta}[ ${bwhite}Preset Selection${nc} ${magenta}]${nc}------------------------------------${magenta}### " - if [[ -z "${nowarning}" ]]; then - sleep 0.2 - line2 - REDBG " ------------------------------------------------------------ " - REDBG " [!] WARNING: All data on selected disk will be destroyed [!] " - REDBG " ------------------------------------------------------------ " - line2 - fi + if [[ -z "${nowarning}" ]]; then + sleep 0.2 + line2 + REDBG " ------------------------------------------------------------ " + REDBG " [!] WARNING: All data on selected disk will be destroyed [!] " + REDBG " ------------------------------------------------------------ " + line2 + fi YELLOW " > Select a Partition Layout Preset: " @@ -3623,13 +3657,13 @@ ${magenta}###${nc}------------------------------------${magenta}[ ${bwhite}Prese - [1] Create '/ESP' & '/Root' (${cyan}Ext4${nc},${magenta}Btrfs${nc}) + [1] Create ESP & /Root (${cyan}Ext4${nc},${magenta}Btrfs${nc}) - [2] Create '/ESP', '/Root' & '/Swap' (${cyan}Ext4${nc},${magenta}Btrfs${nc}) + [2] Create ESP, /Root & /Swap (${cyan}Ext4${nc},${magenta}Btrfs${nc}) - [3] Create '/ESP', '/Root' & '/Home' (${cyan}Ext4${nc}) + [3] Create ESP, /Root & /Home (${cyan}Ext4${nc}) - [4] Create '/ESP', '/Root', '/Home' & '/Swap' (${cyan}Ext4${nc}) " + [4] Create ESP, /Root, /Home & /Swap (${cyan}Ext4${nc}) " BLUE " @@ -3656,9 +3690,7 @@ Enter a Preset number ${bwhite}(empty to skip)${blue}: " ################################################################################################### set_partsize() { - if [[ "${partok}" == "y" ]]; then - return 0 - fi + [[ "${partok}" == "y" ]] && return 0 if [[ "${preset}" =~ ^(3|4)$ ]]; then sleep 0.2 @@ -3668,9 +3700,9 @@ set_partsize() { ### Total detected capacity of disk ${nc}${sgdrive} ${yellow}is ${nc}${cap_gib} GiB${yellow} - ### ${nc}Default ${yellow}Root partition's size is aprox. ${nc}25%${yellow} of total disk capacity + ### ${nc}Default ${yellow}Root partition's size is set to aprox. ${nc}25%${yellow} of total disk capacity - ### ${nc}Current ${yellow}Root partition's size is ${nc}[${rootsize} GiB]${yellow} + ### Root partition's ${nc}current ${yellow}size will be ${nc}[${rootsize} GiB]${yellow} > Adjust Root Partition's size (by setting a custom ${nc}% ${yellow}value) ? " @@ -3720,9 +3752,9 @@ Enter ${nc}% ${blue}value ${nc}eg. 40 ${bwhite}(empty to skip)${blue}: " ################################################################################################### partitioner() { - if [[ "${partok}" == "y" ]]; then - return 0 - elif [[ -z "${preset}" && "${install}" == "yes" ]]; then + [[ "${partok}" == "y" ]] && return 0 + + if [[ -z "${preset}" && "${install}" == "yes" ]]; then until sanity_check; do : ; done return 0 elif [[ -z "${preset}" ]]; then @@ -3745,23 +3777,23 @@ partitioner() { fi if [[ "${preset}" == "1" ]]; then - sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > "${void}" 2> "${log}" || stage_fail + sgdisk -I -n1:0:+1024M -t1:ef00 -c1:ESP "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n2:0:0 -t2:8304 -c2:ROOT "${sgdrive}" > "${void}" 2> "${log}" || stage_fail partprobe -s "${sgdrive}" > "${void}" 2> "${log}" || stage_fail elif [[ "${preset}" == "2" ]]; then until set_swapsize; do : ; done - sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > "${void}" 2> "${log}" || stage_fail + sgdisk -I -n1:0:+1024M -t1:ef00 -c1:ESP "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n2:0:+"${swapsize}"G -t2:8200 -c2:SWAP "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n3:0:0 -t3:8304 -c3:ROOT "${sgdrive}" > "${void}" 2> "${log}" || stage_fail partprobe -s "${sgdrive}" > "${void}" 2> "${log}" || stage_fail elif [[ "${preset}" == "3" ]]; then - sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > "${void}" 2> "${log}" || stage_fail + sgdisk -I -n1:0:+1024M -t1:ef00 -c1:ESP "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n2:0:+"${rootsize}"G -t2:8304 -c2:ROOT "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n3:0:0 -t3:8302 -c3:HOME "${sgdrive}" > "${void}" 2> "${log}" || stage_fail partprobe -s "${sgdrive}" > "${void}" 2> "${log}" || stage_fail elif [[ "${preset}" == "4" ]]; then until set_swapsize; do : ; done - sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > "${void}" 2> "${log}" || stage_fail + sgdisk -I -n1:0:+1024M -t1:ef00 -c1:ESP "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n2:0:+"${swapsize}"G -t2:8200 -c2:SWAP "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n3:0:+"${rootsize}"G -t3:8304 -c3:ROOT "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n4:0:0 -t4:8302 -c4:HOME "${sgdrive}" > "${void}" 2> "${log}" || stage_fail @@ -4683,15 +4715,15 @@ Re-enter password: " read -r -p " ==> " CRYPTPASS2 - if [[ "${CRYPTPASS}" != "${CRYPTPASS2}" ]]; then - sleep 0.2 - RED " + if [[ "${CRYPTPASS}" != "${CRYPTPASS2}" ]]; then + sleep 0.2 + RED " --------------------------------------------------- ### ${nc}Passwords don't match. Please try again.. ${red}### ---------------------------------------------------" - reload - return 1 - fi + reload + return 1 + fi line2 sleep 0.2 YELLOW " @@ -5179,21 +5211,21 @@ manual_mode() { volumes="$(fdisk -l | grep '^/dev' | cat --number)" until form_esp; do : ; done - if [[ "${xbootloader}" == "yes" ]]; then - until form_xboot; do : ; done - fi + if [[ "${xbootloader}" == "yes" ]]; then + until form_xboot; do : ; done + fi until form_root; do : ; done - if [[ -e "${home_dev}" && "${sep_home}" == "y" ]]; then - until form_home; do : ; done - fi + if [[ -e "${home_dev}" && "${sep_home}" == "y" ]]; then + until form_home; do : ; done + fi until mount_mnt; do : ; done until mount_esp; do : ; done - if [[ "${xbootloader}" == "yes" ]]; then - until mount_xboot; do : ; done - fi - if [[ -e "${home_dev}" && "${sep_home}" == "y" ]]; then - until mount_home; do : ; done - fi + if [[ "${xbootloader}" == "yes" ]]; then + until mount_xboot; do : ; done + fi + if [[ -e "${home_dev}" && "${sep_home}" == "y" ]]; then + until mount_home; do : ; done + fi } ################################################################################################### form_esp() { @@ -5220,48 +5252,48 @@ Enter a partition number ${bwhite}(empty to skip and proceed)${blue}: " read -r -p " ==> " form_esp_nmbr - if [[ -n "${form_esp_nmbr}" ]]; then - esppart="$(echo "${volumes}" | awk "\$1 == ${form_esp_nmbr} {print \$2}")" - manespfs="$(lsblk -dno FSTYPE "${esppart}")" - if [[ -e "${esppart}" ]]; then - if [[ "${multibooting}" == "n" ]]; then - if mkfs.fat -F 32 -n ESP "${esppart}" > "${void}" 2> "${log}" ; then - sleep 0.2 - NC " + if [[ -n "${form_esp_nmbr}" ]]; then + esppart="$(echo "${volumes}" | awk "\$1 == ${form_esp_nmbr} {print \$2}")" + manespfs="$(lsblk -dno FSTYPE "${esppart}")" + if [[ -e "${esppart}" ]]; then + if [[ "${multibooting}" == "n" ]]; then + if mkfs.fat -F 32 -n ESP "${esppart}" > "${void}" 2> "${log}" ; then + sleep 0.2 + NC " ==> [${green}Format & Label /ESP OK${nc}] " - return 0 - else - do_umount - until manual_part; do : ; done - until form_esp; do : ; done - return 0 - fi - elif [[ "${multibooting}" == "y" && "${manespfs}" == "vfat" ]]; then - sleep 0.2 - NC " + return 0 + else + do_umount + until manual_part; do : ; done + until form_esp; do : ; done + return 0 + fi + elif [[ "${multibooting}" == "y" && "${manespfs}" == "vfat" ]]; then + sleep 0.2 + NC " ==> [${green}/Unformatted ESP OK${nc}] " - return 0 - elif [[ "${multibooting}" == "y" && "${manespfs}" != "vfat" ]]; then - if mkfs.fat -F 32 -n ESP "${esppart}" > "${void}" 2> "${log}" ; then - sleep 0.2 - NC " + return 0 + elif [[ "${multibooting}" == "y" && "${manespfs}" != "vfat" ]]; then + if mkfs.fat -F 32 -n ESP "${esppart}" > "${void}" 2> "${log}" ; then + sleep 0.2 + NC " ==> [${green}Format & Label /ESP OK${nc}] " - return 0 - else - do_umount - until manual_part; do : ; done - until form_esp; do : ; done - return 0 + return 0 + else + do_umount + until manual_part; do : ; done + until form_esp; do : ; done + return 0 + fi fi + else + invalid + return 1 fi - else - invalid - return 1 fi - fi RED " --------------------------------------------------- ### ${yellow}WARNING: ${nc}PARTITION HAS NOT BEEN FORMATTED ${red}### @@ -5295,26 +5327,26 @@ Enter a partition number ${bwhite}(empty to skip and proceed)${blue}: " read -r -p " ==> " form_xboot_nmbr - if [[ -n "${form_xboot_nmbr}" ]]; then - xbootpart="$(echo "${volumes}" | awk "\$1 == ${form_xboot_nmbr} {print \$2}")" - if [[ -e "${xbootpart}" ]]; then - if mkfs.fat -F 32 -n XBOOTLDR "${xbootpart}" > "${void}" 2> "${log}" ; then - sleep 0.2 - NC " + if [[ -n "${form_xboot_nmbr}" ]]; then + xbootpart="$(echo "${volumes}" | awk "\$1 == ${form_xboot_nmbr} {print \$2}")" + if [[ -e "${xbootpart}" ]]; then + if mkfs.fat -F 32 -n XBOOTLDR "${xbootpart}" > "${void}" 2> "${log}" ; then + sleep 0.2 + NC " ==> [${green}Format & Label /XBOOTLDR OK${nc}] " - return 0 + return 0 + else + do_umount + until manual_part; do : ; done + until form_xboot; do : ; done + return 0 + fi else - do_umount - until manual_part; do : ; done - until form_xboot; do : ; done - return 0 + invalid + return 1 fi - else - invalid - return 1 fi - fi RED " --------------------------------------------------- ### ${yellow}WARNING: ${nc}PARTITION HAS NOT BEEN FORMATTED ${red}### @@ -5348,54 +5380,54 @@ Enter a partition number ${bwhite}(empty to skip and proceed)${blue}: " read -r -p " ==> " form_root_nmbr - if [[ -n "${form_root_nmbr}" ]]; then - rootpart="$(echo "${volumes}" | awk "\$1 == ${form_root_nmbr} {print \$2}")" - if [[ -e "${rootpart}" ]]; then + if [[ -n "${form_root_nmbr}" ]]; then + rootpart="$(echo "${volumes}" | awk "\$1 == ${form_root_nmbr} {print \$2}")" + if [[ -e "${rootpart}" ]]; then #-------------------------------------------------------------------------------------------------- - if [[ "${fs}" == "1" ]]; then - if mkfs.ext4 -F "${rootpart}" > "${void}" 2> "${log}" ; then - tune2fs -O fast_commit "${rootpart}" > "${void}" 2> "${log}" || err_abort - sleep 0.2 - NC " + if [[ "${fs}" == "1" ]]; then + if mkfs.ext4 -F "${rootpart}" > "${void}" 2> "${log}" ; then + tune2fs -O fast_commit "${rootpart}" > "${void}" 2> "${log}" || err_abort + sleep 0.2 + NC " ==> [${green}Format ${roottype} OK${nc}] " - else - do_umount - until manual_part; do : ; done - until form_root; do : ; done - return 0 - fi -#-------------------------------------------------------------------------------------------------- - elif [[ "${fs}" == "2" ]]; then - if mkfs.btrfs -f "${rootpart}" > "${void}" 2> "${log}" ; then - mount "${rootpart}" /mnt > "${void}" 2> "${log}" || err_abort - btrfs subvolume create /mnt/@ > "${void}" 2> "${log}" || err_abort - btrfs subvolume create /mnt/@home > "${void}" 2> "${log}" || err_abort - btrfs subvolume create /mnt/@cache > "${void}" 2> "${log}" || err_abort - btrfs subvolume create /mnt/@log > "${void}" 2> "${log}" || err_abort - btrfs subvolume create /mnt/@tmp > "${void}" 2> "${log}" || err_abort - btrfs subvolume create /mnt/@snapshots > "${void}" 2> "${log}" || err_abort - if [[ "${swapmode}" == "2" ]]; then - btrfs subvolume create /mnt/@swap > "${void}" 2> "${log}" || err_abort + else + do_umount + until manual_part; do : ; done + until form_root; do : ; done + return 0 fi - umount /mnt > "${void}" 2> "${log}" || err_abort - sleep 0.2 - NC " +#-------------------------------------------------------------------------------------------------- + elif [[ "${fs}" == "2" ]]; then + if mkfs.btrfs -f "${rootpart}" > "${void}" 2> "${log}" ; then + mount "${rootpart}" /mnt > "${void}" 2> "${log}" || err_abort + btrfs subvolume create /mnt/@ > "${void}" 2> "${log}" || err_abort + btrfs subvolume create /mnt/@home > "${void}" 2> "${log}" || err_abort + btrfs subvolume create /mnt/@cache > "${void}" 2> "${log}" || err_abort + btrfs subvolume create /mnt/@log > "${void}" 2> "${log}" || err_abort + btrfs subvolume create /mnt/@tmp > "${void}" 2> "${log}" || err_abort + btrfs subvolume create /mnt/@snapshots > "${void}" 2> "${log}" || err_abort + if [[ "${swapmode}" == "2" ]]; then + btrfs subvolume create /mnt/@swap > "${void}" 2> "${log}" || err_abort + fi + umount /mnt > "${void}" 2> "${log}" || err_abort + sleep 0.2 + NC " ==> [${green}Format ${roottype} OK${nc}] " - else - do_umount - until manual_part; do : ; done - until form_root; do : ; done - return 0 + else + do_umount + until manual_part; do : ; done + until form_root; do : ; done + return 0 + fi fi + else + invalid + return 1 fi - else - invalid - return 1 - fi YELLOW " @@ -5407,40 +5439,40 @@ Enter a name ${bwhite}(empty to skip and proceed)${blue}: " read -r -p " ==> " rootpartname - if [[ -n "${rootpartname}" ]]; then - if [[ "${fs}" == "1" ]]; then - if e2label "${rootpart}" "${rootpartname}" > "${void}" 2> "${log}" ; then + if [[ -n "${rootpartname}" ]]; then + if [[ "${fs}" == "1" ]]; then + if e2label "${rootpart}" "${rootpartname}" > "${void}" 2> "${log}" ; then + sleep 0.2 + NC " + +==> [${green}Label ${roottype} OK${nc}] " + return 0 + else + err_try + return 1 + fi + elif [[ "${fs}" == "2" ]]; then + mount "${rootpart}" /mnt || err_abort + btrfs filesystem label /mnt "${rootpartname}" > "${void}" 2> "${log}" || err_abort + umount /mnt || err_abort sleep 0.2 NC " ==> [${green}Label ${roottype} OK${nc}] " return 0 - else - err_try - return 1 fi - elif [[ "${fs}" == "2" ]]; then - mount "${rootpart}" /mnt || err_abort - btrfs filesystem label /mnt "${rootpartname}" > "${void}" 2> "${log}" || err_abort - umount /mnt || err_abort - sleep 0.2 - NC " - -==> [${green}Label ${roottype} OK${nc}] " - return 0 fi - fi - skip - return 0 - else - RED " + skip + return 0 + else + RED " --------------------------------------------------- ### ${yellow}WARNING: ${nc}PARTITION HAS NOT BEEN FORMATTED ${red}### ---------------------------------------------------" - sleep 2 - skip - return 0 - fi + sleep 2 + skip + return 0 + fi done } ################################################################################################### @@ -5955,7 +5987,7 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}LUKS YELLOW " - > Initiating Encryption process: + > Encrypting selected partition(s): " if echo -n "${CRYPTPASS}" | cryptsetup luksFormat --label CRYPTROOT "${root_dev}" > "${void}"; then @@ -6248,57 +6280,26 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Pacs gfxpkgs_set if [[ "${bootloader}" == "2" ]]; then - if [[ "${fs}" == "1" ]]; then - bootldr_pkgs="grub os-prober" - elif [[ "${fs}" == "2" ]]; then - bootldr_pkgs="grub-btrfs inotify-tools os-prober" - fi + [[ "${fs}" == "1" ]] && bootldr_pkgs="grub os-prober" + [[ "${fs}" == "2" ]] && bootldr_pkgs="grub-btrfs inotify-tools os-prober" fi basepkgs=(base efibootmgr nano networkmanager pkgstats sudo vim "${bootldr_pkgs}" "${fstools}" "${kernel}" "${microcode}" "${shell_pkgs}") - - if [[ -n "${shell}" ]]; then - basepkgs+=("${shell}") - fi - if [[ -n "${nrg_plc}" ]]; then - basepkgs+=("${nrg_plc}") - fi - if [[ "${vendor}" == "Virtual Machine" ]]; then - basepkgs+=("${vmpkgs}") - else - basepkgs+=(alsa-firmware linux-firmware sof-firmware) - fi - if [[ ! "${desktop}" =~ ^(11|12)$ ]]; then - basepkgs+=(7zip alsa-utils bluez bluez-hid2hci bluez-obex bluez-utils exfatprogs git glibc-locales gst-libav gst-plugin-libcamera gst-plugin-pipewire gst-plugins-bad gst-plugins-good gst-plugins-ugly libfido2 man-db man-pages mesa-utils nano-syntax-highlighting pacman-contrib pipewire-alsa pipewire-libcamera pipewire-pulse pipewire-zeroconf reflector usb_modeswitch xdg-user-dirs) - fi - if [[ "${terminal}" == "y" ]]; then - basepkgs+=(gnome-terminal) - fi - if [[ -n "${ukify}" ]]; then - basepkgs+=("${ukify}") - fi - if [[ -n "${zram}" ]]; then - basepkgs+=("${zram}") - fi - if [[ -n "${gfxpkgs[*]}" ]]; then - basepkgs+=("${gfxpkgs[*]}") - fi - if [[ "${nvdprop}" == "y" ]]; then - basepkgs+=("${kernel}-headers") - fi - if [[ -n "${devel}" ]]; then - basepkgs+=("${devel}") - fi - if [[ -n "${wireless_reg}" ]]; then - basepkgs+=("${wireless_reg}") - fi - if [[ -n "${print_pkgs}" ]]; then - basepkgs+=("${print_pkgs}") - fi - if [[ -n "${web_pkg}" ]]; then - basepkgs+=("${web_pkg}") - fi + [[ -n "${shell}" ]] && basepkgs+=("${shell}") + [[ -n "${nrg_plc}" ]] && basepkgs+=("${nrg_plc}") + [[ -n "${ukify}" ]] && basepkgs+=("${ukify}") + [[ -n "${zram}" ]] && basepkgs+=("${zram}") + [[ -n "${gfxpkgs[*]}" ]] && basepkgs+=("${gfxpkgs[*]}") + [[ -n "${devel}" ]] && basepkgs+=("${devel}") + [[ -n "${wireless_reg}" ]] && basepkgs+=("${wireless_reg}") + [[ -n "${print_pkgs}" ]] && basepkgs+=("${print_pkgs}") + [[ -n "${web_pkg}" ]] && basepkgs+=("${web_pkg}") + [[ "${vendor}" == "Virtual Machine" ]] && basepkgs+=("${vmpkgs}") + [[ "${vendor}" != "Virtual Machine" ]] && basepkgs+=(alsa-firmware linux-firmware sof-firmware) + [[ "${terminal}" == "y" ]] && basepkgs+=(gnome-terminal) + [[ "${nvdprop}" == "y" ]] && basepkgs+=("${kernel}-headers") + [[ ! "${desktop}" =~ ^(11|12)$ ]] && basepkgs+=(7zip alsa-utils bluez bluez-hid2hci bluez-obex bluez-utils exfatprogs git glibc-locales gst-libav gst-plugin-libcamera gst-plugin-pipewire gst-plugins-bad gst-plugins-good gst-plugins-ugly libfido2 man-db man-pages mesa-utils nano-syntax-highlighting pacman-contrib pipewire-alsa pipewire-libcamera pipewire-pulse pipewire-zeroconf reflector usb_modeswitch xdg-user-dirs) case "${desktop}" in @@ -6306,7 +6307,7 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Pacs deskpkgs="${basepkgs[*]} dolphin-plugins konsole plasma plasma-x11-session qt6-multimedia-gstreamer" displaymanager="sddm" ;; - 2) # Plasma Light Desktop: + 2) # Plasma Lite Desktop: deskpkgs="${basepkgs[*]} ark bluedevil breeze-gtk colord-kde dolphin-plugins flatpak-kcm freerdp kate kcalc kclock kde-gtk-config kdegraphics-mobipocket kdegraphics-thumbnailers kdenetwork-filesharing kdeplasma-addons kdf kdialog keditbookmarks kget kimageformats kio-admin kio-gdrive kio-zeroconf konsole krdc krfb kscreen kwayland-integration kwrited okular purpose ocean-sound-theme packagekit-qt6 partitionmanager plasma5-integration plasma-browser-integration plasma-desktop plasma-disks plasma-firewall plasma-nm plasma-pa plasma-systemmonitor plasma-wayland-protocols plasma-x11-session sddm-kcm spectacle appmenu-gtk-module arj dosfstools ffmpegthumbs icoutils kvantum libappimage lrzip lzop maliit-keyboard ntfs-3g power-profiles-daemon qt5-xmlpatterns qt6-connectivity qt6-multimedia-gstreamer unarchiver unrar xdg-desktop-portal-gtk" displaymanager="sddm" ;; @@ -6314,7 +6315,7 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Pacs deskpkgs="${basepkgs[*]} gnome" displaymanager="gdm" ;; - 4) # Gnome Light Desktop: + 4) # Gnome Lite Desktop: deskpkgs="${basepkgs[*]} dconf-editor file-roller gdm gnome-browser-connector gnome-calculator gnome-clocks gnome-console gnome-control-center gnome-disk-utility gnome-keyring gnome-menus gnome-shell-extensions gnome-system-monitor gnome-text-editor gnome-tweaks gnome-user-share gvfs gvfs-afc gvfs-mtp gvfs-smb loupe papers sushi dosfstools glib2-devel gparted ntfs-3g power-profiles-daemon unrar unzip xorg-xhost zip" displaymanager="gdm" ;; @@ -6348,35 +6349,17 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Pacs 12) # Custom System: custarray=(base sudo "${bootldr_pkgs}" "${custompkgs}" "${fstools}" "${kernel}" "${microcode}") - if [[ -n "${shell}" ]]; then - custarray+=("${shell}") - fi - if [[ "${vendor}" == "Virtual Machine" ]]; then - custarray+=("${vmpkgs}") - else - custarray+=(linux-firmware) - fi - if [[ -n "${ukify}" ]]; then - custarray+=("${ukify}") - fi - if [[ -n "${zram}" ]]; then - custarray+=("${zram}") - fi - if [[ -n "${gfxpkgs[*]}" ]]; then - custarray+=("${gfxpkgs[*]}") - fi - if [[ "${nvdprop}" == "y" ]]; then - custarray+=("${kernel}-headers") - fi - if [[ "${greeternmbr}" =~ ^(1|2|3)$ ]]; then - custarray+=("${greeter}") - fi - if [[ -n "${wireless_reg}" ]]; then - custarray+=("${wireless_reg}") - fi - if [[ -n "${print_pkgs}" ]]; then - custarray+=("${print_pkgs}") - fi + [[ -n "${shell}" ]] && custarray+=("${shell}") + [[ -n "${ukify}" ]] && custarray+=("${ukify}") + [[ -n "${zram}" ]] && custarray+=("${zram}") + [[ -n "${gfxpkgs[*]}" ]] && custarray+=("${gfxpkgs[*]}") + [[ -n "${wireless_reg}" ]] && custarray+=("${wireless_reg}") + [[ -n "${print_pkgs}" ]] && custarray+=("${print_pkgs}") + [[ "${vendor}" == "Virtual Machine" ]] && custarray+=("${vmpkgs}") + [[ "${vendor}" != "Virtual Machine" ]] && custarray+=(linux-firmware) + [[ "${nvdprop}" == "y" ]] && custarray+=("${kernel}-headers") + [[ "${greeternmbr}" =~ ^(1|2|3)$ ]] && custarray+=("${greeter}") + deskpkgs="${custarray[*]}" ;; 13) # Cosmic Desktop: @@ -6424,7 +6407,7 @@ swapfile() { ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Swapfile Setup${nc} ${magenta}]${nc}-------------------------------------${magenta}### " if arch-chroot /mnt <<-SWAPFILE > "${void}" 2>&1 2> "${log}" ; then - mkswap -U clear --size ${swapsize}G --file /swapfile || exit + mkswap -U clear --size ${swapsize}G --file /swapfile || exit SWAPFILE cat >> /mnt/etc/fstab <<-FSTAB || err_abort /swapfile none swap defaults 0 0 @@ -6444,9 +6427,9 @@ swapfile_btrfs() { ${magenta}###${nc}----------------------------------${magenta}[ ${bwhite}Btrfs Swapfile Setup${nc} ${magenta}]${nc}----------------------------------${magenta}### " - if arch-chroot /mnt <<-SWAPFILE > "${void}" 2>&1 2> "${log}" ; then - btrfs filesystem mkswapfile --size ${swapsize}g --uuid clear /swap/swapfile || exit -SWAPFILE + if arch-chroot /mnt <<-SWAPFILE_BTRFS > "${void}" 2>&1 2> "${log}" ; then + btrfs filesystem mkswapfile --size ${swapsize}g --uuid clear /swap/swapfile || exit +SWAPFILE_BTRFS cat >> /mnt/etc/fstab <<-FSTAB || err_abort /swap/swapfile none swap defaults 0 0 FSTAB @@ -6477,31 +6460,31 @@ main_chroot() { local stage_prompt="Base System Configuration" if arch-chroot /mnt <<-CONF > "${void}" 2>&1 2> "${log}" ; then - sed -i "/^#${SETLOCALE}/s/^#//" /etc/locale.gen || exit - locale-gen || exit - echo LANG=${SETLOCALE} > /etc/locale.conf || exit - export LANG=${SETLOCALE} || exit - echo KEYMAP=${SETKBD} > /etc/vconsole.conf || exit - cat <<-MKINITCPIO > /etc/mkinitcpio.conf.d/mkinitcpiod.conf || exit + sed -i "/^#${SETLOCALE}/s/^#//" /etc/locale.gen || exit + locale-gen || exit + echo LANG=${SETLOCALE} > /etc/locale.conf || exit + export LANG=${SETLOCALE} || exit + echo KEYMAP=${SETKBD} > /etc/vconsole.conf || exit + cat <<-MKINITCPIO > /etc/mkinitcpio.conf.d/mkinitcpiod.conf || exit ${mkinitcpio_mods} ${mkinitcpio_bins} ${mkinitcpio_hooks} MKINITCPIO - mkinitcpio -P || exit - ln -sf /usr/share/zoneinfo/$(curl -s http://ip-api.com/line?fields=timezone) /etc/localtime || exit - hwclock --systohc || exit - echo ${HOSTNAME} > /etc/hostname || exit - cat <<-HOSTS > /etc/hosts || exit + mkinitcpio -P || exit + ln -sf /usr/share/zoneinfo/$(curl -s http://ip-api.com/line?fields=timezone) /etc/localtime || exit + hwclock --systohc || exit + echo ${HOSTNAME} > /etc/hostname || exit + cat <<-HOSTS > /etc/hosts || exit 127.0.0.1 localhost ::1 localhost 127.0.1.1 ${HOSTNAME}.localdomain ${HOSTNAME} HOSTS - echo root:${ROOTPASSWD2} | chpasswd || exit - chsh -s /bin/${shellname} || exit - useradd -m -G wheel -s /bin/${shellname} ${USERNAME} || exit - echo ${USERNAME}:${USERPASSWD2} | chpasswd || exit - echo "%wheel ALL=(ALL) ALL" | tee /etc/sudoers.d/sudoersd || exit - visudo -c /etc/sudoers.d/sudoersd || exit + echo root:${ROOTPASSWD2} | chpasswd || exit + chsh -s /bin/${shellname} || exit + useradd -m -G wheel -s /bin/${shellname} ${USERNAME} || exit + echo ${USERNAME}:${USERPASSWD2} | chpasswd || exit + echo "%wheel ALL=(ALL) ALL" | tee /etc/sudoers.d/sudoersd || exit + visudo -c /etc/sudoers.d/sudoersd || exit CONF stage_ok else @@ -6514,21 +6497,21 @@ btldrcfg() { if [[ "${bootloader}" == "1" ]]; then local stage_prompt="Systemd-boot Configuration" if [[ "${xbootloader}" == "no" ]]; then - if arch-chroot /mnt <<-BOOTCTL > "${void}" 2>&1 2> "${log}" ; then - bootctl install || exit - sed -i "/^#timeout 3/s/^#//" ${btldr_esp_mount}/loader/loader.conf || exit - systemctl enable systemd-boot-update || exit -BOOTCTL + if arch-chroot /mnt <<-SDBOOT_INSTL > "${void}" 2>&1 2> "${log}" ; then + bootctl install || exit + sed -i "/^#timeout 3/s/^#//" ${btldr_esp_mount}/loader/loader.conf || exit + systemctl enable systemd-boot-update || exit +SDBOOT_INSTL stage_ok else stage_fail fi elif [[ "${xbootloader}" == "yes" ]]; then - if arch-chroot /mnt <<-XBOOTCTL > "${void}" 2>&1 2> "${log}" ; then - bootctl --esp-path=/efi --boot-path=/boot install || exit - sed -i "/^#timeout 3/s/^#//" ${btldr_esp_mount}/loader/loader.conf || exit - systemctl enable systemd-boot-update || exit -XBOOTCTL + if arch-chroot /mnt <<-SD_XBOOTLDR_INSTL > "${void}" 2>&1 2> "${log}" ; then + bootctl --esp-path=/efi --boot-path=/boot install || exit + sed -i "/^#timeout 3/s/^#//" ${btldr_esp_mount}/loader/loader.conf || exit + systemctl enable systemd-boot-update || exit +SD_XBOOTLDR_INSTL stage_ok else stage_fail @@ -6536,9 +6519,9 @@ XBOOTCTL fi elif [[ "${bootloader}" == "2" ]]; then local stage_prompt="Grub Configuration" - if arch-chroot /mnt <<-GRUB > "${void}" 2>&1 2> "${log}" ; then - cp /etc/default/grub /etc/default/grub.bak || exit - cat <<-CFG > /etc/default/grub || exit + if arch-chroot /mnt <<-GRUB_CONF > "${void}" 2>&1 2> "${log}" ; then + cp /etc/default/grub /etc/default/grub.bak || exit + cat <<-CFG > /etc/default/grub || exit GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="Arch" @@ -6553,28 +6536,47 @@ XBOOTCTL GRUB_DISABLE_OS_PROBER=false #GRUB_TERMINAL_OUTPUT=console CFG -GRUB +GRUB_CONF stage_ok else stage_fail fi local stage_prompt="Grub Installation" - if [[ "${sb_sign}" == "y" ]]; then - if arch-chroot /mnt <<-SBGRUBINST > "${void}" 2>&1 2> "${log}" ; then - grub-install --target=${uefimode} --efi-directory=${btldr_esp_mount} --bootloader-id=GRUB --removable --modules="tpm" --disable-shim-lock --recheck || exit - sed -i 's/SecureBoot/SecureB00t/' ${btldr_esp_mount}/EFI/BOOT/"${efiname}".EFI || exit - grub-mkconfig -o /boot/grub/grub.cfg || exit -SBGRUBINST + if [[ "${sb_sign}" == "y" && "${path}" == "1" ]]; then + if arch-chroot /mnt <<-SB_GRUB_INSTL > "${void}" 2>&1 2> "${log}" ; then + grub-install --target=${uefimode} --efi-directory=${btldr_esp_mount} --bootloader-id=GRUB --modules="tpm" --disable-shim-lock --recheck || exit + sed -i 's/SecureBoot/SecureB00t/' ${btldr_esp_mount}/EFI/GRUB/grubx${bitness}.efi || exit + grub-mkconfig -o /boot/grub/grub.cfg || exit +SB_GRUB_INSTL stage_ok else stage_fail fi - elif [[ "${sb_sign}" == "n" ]]; then - if arch-chroot /mnt <<-GRUBINST > "${void}" 2>&1 2> "${log}" ; then - grub-install --target=${uefimode} --efi-directory=${btldr_esp_mount} --bootloader-id=GRUB --recheck || exit - grub-mkconfig -o /boot/grub/grub.cfg || exit -GRUBINST + elif [[ "${sb_sign}" == "y" && "${path}" == "2" ]]; then + if arch-chroot /mnt <<-SB_GRUB_INSTL_RMV > "${void}" 2>&1 2> "${log}" ; then + grub-install --target=${uefimode} --efi-directory=${btldr_esp_mount} --bootloader-id=GRUB --removable --modules="tpm" --disable-shim-lock --recheck || exit + sed -i 's/SecureBoot/SecureB00t/' ${btldr_esp_mount}/EFI/BOOT/${efiname}.EFI || exit + grub-mkconfig -o /boot/grub/grub.cfg || exit +SB_GRUB_INSTL_RMV + stage_ok + else + stage_fail + fi + elif [[ "${sb_sign}" == "n" && "${path}" == "1" ]]; then + if arch-chroot /mnt <<-GRUB_INSTL > "${void}" 2>&1 2> "${log}" ; then + grub-install --target=${uefimode} --efi-directory=${btldr_esp_mount} --bootloader-id=GRUB --recheck || exit + grub-mkconfig -o /boot/grub/grub.cfg || exit +GRUB_INSTL + stage_ok + else + stage_fail + fi + elif [[ "${sb_sign}" == "n" && "${path}" == "2" ]]; then + if arch-chroot /mnt <<-GRUB_INSTL_RMV > "${void}" 2>&1 2> "${log}" ; then + grub-install --target=${uefimode} --efi-directory=${btldr_esp_mount} --bootloader-id=GRUB --removable --recheck || exit + grub-mkconfig -o /boot/grub/grub.cfg || exit +GRUB_INSTL_RMV stage_ok else stage_fail @@ -6584,7 +6586,7 @@ GRUBINST if [[ "${fs}" == "2" ]]; then local stage_prompt="Grub-Btrfsd Service Activation" if arch-chroot /mnt <<-GRUB_BTRFSD > "${void}" 2>&1 2> "${log}" ; then - systemctl enable grub-btrfsd || exit + systemctl enable grub-btrfsd || exit GRUB_BTRFSD stage_ok else @@ -6594,10 +6596,10 @@ GRUB_BTRFSD if [[ "${nvdprop}" == "y" ]]; then local stage_prompt="Grub/Nvidia Configuration" - if arch-chroot /mnt <<-NVGRUB > "${void}" 2>&1 2> "${log}" ; then - sed -i "/^#GRUB_TERMINAL_OUTPUT=console/s/^#//" /etc/default/grub || exit - grub-mkconfig -o /boot/grub/grub.cfg || exit -NVGRUB + if arch-chroot /mnt <<-NVIDIA_GRUB > "${void}" 2>&1 2> "${log}" ; then + sed -i "/^#GRUB_TERMINAL_OUTPUT=console/s/^#//" /etc/default/grub || exit + grub-mkconfig -o /boot/grub/grub.cfg || exit +NVIDIA_GRUB stage_ok else stage_fail @@ -6611,7 +6613,7 @@ trimcfg() { if [[ -n "${trim}" ]]; then local stage_prompt="Trim Service Activation" if arch-chroot /mnt <<-TRIM > "${void}" 2>&1 2> "${log}" ; then - systemctl enable ${trim} || exit + systemctl enable ${trim} || exit TRIM stage_ok else @@ -6624,9 +6626,9 @@ vm_serv() { if [[ -n "${vm_services}" ]]; then local stage_prompt="VM Service(s) Activation" - if arch-chroot /mnt <<-VM > "${void}" 2>&1 2> "${log}" ; then - systemctl enable ${vm_services} || exit -VM + if arch-chroot /mnt <<-VM_SRVC > "${void}" 2>&1 2> "${log}" ; then + systemctl enable ${vm_services} || exit +VM_SRVC stage_ok else stage_fail @@ -6639,22 +6641,22 @@ zramcfg() { if [[ -n "${zram}" ]]; then local stage_prompt="Zram Swap Activation" zram_service="systemd-zram-setup@zram0.service" - if arch-chroot /mnt <<-ZRAMCONF > "${void}" 2>&1 2> "${log}" ; then - mkdir -p /etc/systemd/zram-generator.conf.d || exit - cat <<-ZCONF > /etc/systemd/zram-generator.conf.d/zram.conf || exit + if arch-chroot /mnt <<-ZRAM_CONF > "${void}" 2>&1 2> "${log}" ; then + mkdir -p /etc/systemd/zram-generator.conf.d || exit + cat <<-ZRAM_GEN > /etc/systemd/zram-generator.conf.d/zram.conf || exit [zram0] zram-size = ram / 2 compression-algorithm = zstd -ZCONF - cat <<-VMZCONF > /etc/sysctl.d/99-vm-zram-parameters.conf || exit +ZRAM_GEN + cat <<-ZRAM_VM > /etc/sysctl.d/99-vm-zram-parameters.conf || exit vm.swappiness = 180 vm.watermark_boost_factor = 0 vm.watermark_scale_factor = 125 vm.page-cluster = 0 -VMZCONF - systemctl daemon-reload || exit - systemctl start ${zram_service} || exit -ZRAMCONF +ZRAM_VM + systemctl daemon-reload || exit + systemctl start ${zram_service} || exit +ZRAM_CONF stage_ok else stage_fail @@ -6666,25 +6668,25 @@ nvidia_hook() { if [[ "${nvdprop}" == "y" && -n "${nvname}" ]]; then local stage_prompt="Nvidia Hook Creation" - if arch-chroot /mnt <<-NVIDIAHOOK > "${void}" 2>&1 2> "${log}" ; then - mkdir -p /etc/pacman.d/hooks/ || exit - cat <<-HOOK > /etc/pacman.d/hooks/nvidia.hook || exit - [Trigger] - Operation=Install - Operation=Upgrade - Operation=Remove - Type=Package - Target=${nvname} - Target=${kernel} - - [Action] - Description=Update NVIDIA module in initcpio - Depends=mkinitcpio - When=PostTransaction - NeedsTargets - Exec=/bin/sh -c 'while read -r trg; do case $trg in linux*) exit 0; esac; done; /usr/bin/mkinitcpio -P' + if arch-chroot /mnt <<-NVIDIA_HOOK > "${void}" 2>&1 2> "${log}" ; then + mkdir -p /etc/pacman.d/hooks/ || exit + cat <<-HOOK > /etc/pacman.d/hooks/nvidia.hook || exit + [Trigger] + Operation=Install + Operation=Upgrade + Operation=Remove + Type=Package + Target=${nvname} + Target=${kernel} + + [Action] + Description=Update NVIDIA module in initcpio + Depends=mkinitcpio + When=PostTransaction + NeedsTargets + Exec=/bin/sh -c 'while read -r trg; do case $trg in linux*) exit 0; esac; done; /usr/bin/mkinitcpio -P' HOOK -NVIDIAHOOK +NVIDIA_HOOK stage_ok else stage_fail @@ -6701,16 +6703,16 @@ mkinitcpio_preset() { mkdir -p "${esp_mount}"/EFI/Linux || exit fi if arch-chroot /mnt <<-UKI > "${void}" 2>&1 2> "${log}" ; then - mkdir /etc/cmdline.d || exit - echo "rw ${boot_opts[*]}" | tee /etc/cmdline.d/cmdlined.conf || exit - cp /etc/mkinitcpio.d/${kernel}.preset /etc/mkinitcpio.d/${kernel}.preset.bak || exit - cat <<-MKINITPRESET > /etc/mkinitcpio.d/${kernel}.preset || exit + mkdir /etc/cmdline.d || exit + echo "rw ${boot_opts[*]}" | tee /etc/cmdline.d/cmdlined.conf || exit + cp /etc/mkinitcpio.d/${kernel}.preset /etc/mkinitcpio.d/${kernel}.preset.bak || exit + cat <<-MKINITPRESET > /etc/mkinitcpio.d/${kernel}.preset || exit ALL_config="/etc/mkinitcpio.conf.d/mkinitcpiod.conf" ALL_kver="/boot/vmlinuz-${kernel}" PRESETS=('default') default_uki="${btldr_esp_mount}/EFI/Linux/arch-${kernel}.efi" MKINITPRESET - mkinitcpio -P || exit + mkinitcpio -P || exit UKI stage_ok else @@ -6725,16 +6727,16 @@ UKI fi elif [[ "${uki}" == "n" ]]; then - if arch-chroot /mnt <<-NOUKI > "${void}" 2>&1 2> "${log}" ; then - cp /etc/mkinitcpio.d/${kernel}.preset /etc/mkinitcpio.d/${kernel}.preset.bak || exit - cat <<-MKINITPRESET > /etc/mkinitcpio.d/${kernel}.preset || exit + if arch-chroot /mnt <<-NO_UKI > "${void}" 2>&1 2> "${log}" ; then + cp /etc/mkinitcpio.d/${kernel}.preset /etc/mkinitcpio.d/${kernel}.preset.bak || exit + cat <<-MKINITCPIO_PRESET > /etc/mkinitcpio.d/${kernel}.preset || exit ALL_config="/etc/mkinitcpio.conf.d/mkinitcpiod.conf" ALL_kver="/boot/vmlinuz-${kernel}" PRESETS=('default') default_image="/boot/initramfs-${kernel}.img" -MKINITPRESET - mkinitcpio -P || exit -NOUKI +MKINITCPIO_PRESET + mkinitcpio -P || exit +NO_UKI stage_ok else stage_fail @@ -6747,9 +6749,9 @@ var_opts() { if [[ "${sb_sign}" == "y" && "${setrescue}" == "y" ]]; then local stage_prompt="Rescue Entry Creation" if [[ "${bootloader}" == "1" ]]; then - if arch-chroot /mnt <<-RESCUE > "${void}" 2>&1 2> "${log}" ; then - echo "systemd.unit=rescue.target rw ${boot_opts[*]}" | tee /etc/cmdline.d/rescued.conf || exit - cat <<-PRESET > /etc/mkinitcpio.d/${kernel}.preset || exit + if arch-chroot /mnt <<-SDBOOT_RESCUE_ENTRY > "${void}" 2>&1 2> "${log}" ; then + echo "systemd.unit=rescue.target rw ${boot_opts[*]}" | tee /etc/cmdline.d/rescued.conf || exit + cat <<-PRESET > /etc/mkinitcpio.d/${kernel}.preset || exit ALL_config="/etc/mkinitcpio.conf.d/mkinitcpiod.conf" ALL_kver="/boot/vmlinuz-${kernel}" PRESETS=('default' 'rescue') @@ -6758,19 +6760,19 @@ var_opts() { rescue_uki="${btldr_esp_mount}/EFI/Linux/rescue.efi" rescue_options="--cmdline /etc/cmdline.d/rescued.conf" PRESET - mkinitcpio -P || exit -RESCUE + mkinitcpio -P || exit +SDBOOT_RESCUE_ENTRY stage_ok else stage_fail fi elif [[ "${bootloader}" == "2" ]]; then - if arch-chroot /mnt <<-RESCUE > "${void}" 2>&1 2> "${log}" ; then - touch /boot/grub/custom.cfg - grep -E -A 11 "'Arch Linux'" /boot/grub/grub.cfg > /boot/grub/custom.cfg || exit - sed -i 's/Arch Linux/Rescue Environment/' /boot/grub/custom.cfg || exit - sed -i '/vmlinuz/ s/$/ systemd.unit=rescue.target/' /boot/grub/custom.cfg || exit -RESCUE + if arch-chroot /mnt <<-GRUB_RESCUE_ENTRY > "${void}" 2>&1 2> "${log}" ; then + touch /boot/grub/custom.cfg + grep -E -A 11 "'Arch Linux'" /boot/grub/grub.cfg > /boot/grub/custom.cfg || exit + sed -i 's/Arch Linux/Rescue Environment/' /boot/grub/custom.cfg || exit + sed -i '/vmlinuz/ s/$/ systemd.unit=rescue.target/' /boot/grub/custom.cfg || exit +GRUB_RESCUE_ENTRY stage_ok else stage_fail @@ -6781,8 +6783,8 @@ RESCUE if [[ "${multilib}" == "y" ]]; then local stage_prompt="Multilib Configuration" if arch-chroot /mnt <<-MULTILIB > "${void}" 2>&1 2> "${log}" ; then - sed -i "/\[multilib\]/,/Include/"'s/^#//' /etc/pacman.conf || exit - pacman -Syy || exit + sed -i "/\[multilib\]/,/Include/"'s/^#//' /etc/pacman.conf || exit + pacman -Syy || exit MULTILIB stage_ok else @@ -6793,7 +6795,7 @@ MULTILIB if [[ "${CPU}" == *"GenuineIntel"* && "${kill_watchdog}" == "y" ]]; then local stage_prompt="Intel Watchdog Configuration" if arch-chroot /mnt <<-INTEL_WATCHDOG > "${void}" 2>&1 2> "${log}" ; then - echo "blacklist iTCO_wdt" | tee /etc/modprobe.d/blacklist.conf || exit + echo "blacklist iTCO_wdt" | tee /etc/modprobe.d/blacklist.conf || exit INTEL_WATCHDOG stage_ok else @@ -6802,7 +6804,7 @@ INTEL_WATCHDOG elif [[ "${CPU}" == *"AuthenticAMD"* && "${kill_watchdog}" == "y" ]]; then local stage_prompt="AMD Watchdog Configuration" if arch-chroot /mnt <<-AMD_WATCHDOG > "${void}" 2>&1 2> "${log}" ; then - echo "blacklist sp5100_tco" | tee /etc/modprobe.d/blacklist.conf || exit + echo "blacklist sp5100_tco" | tee /etc/modprobe.d/blacklist.conf || exit AMD_WATCHDOG stage_ok else @@ -6813,12 +6815,12 @@ AMD_WATCHDOG if [[ "${oomd}" == "y" ]]; then local stage_prompt="Systemd-oomd Service Activation" if arch-chroot /mnt <<-OOMD > "${void}" 2>&1 2> "${log}" ; then - mkdir -p /etc/systemd/system.conf.d > "${void}" 2>&1 || exit - cat <<-OOMD_CONF > /etc/systemd/system.conf.d/00-oomd.conf || exit + mkdir -p /etc/systemd/system.conf.d > "${void}" 2>&1 || exit + cat <<-OOMD_CONF > /etc/systemd/system.conf.d/00-oomd.conf || exit [Manager] DefaultMemoryAccounting=yes OOMD_CONF - systemctl enable systemd-oomd || exit + systemctl enable systemd-oomd || exit OOMD stage_ok else @@ -6829,8 +6831,8 @@ OOMD if [[ "${irqbalance}" == "y" ]]; then local stage_prompt="Irqbalance Service Activation" if arch-chroot /mnt <<-IRQBALANCE > "${void}" 2>&1 2> "${log}" ; then - pacman -S --noconfirm irqbalance || exit - systemctl enable irqbalance || exit + pacman -S --noconfirm irqbalance || exit + systemctl enable irqbalance || exit IRQBALANCE stage_ok else @@ -6841,8 +6843,8 @@ IRQBALANCE if [[ "${thermald}" == "y" ]]; then local stage_prompt="Thermald Service Activation" if arch-chroot /mnt <<-THERMALD > "${void}" 2>&1 2> "${log}" ; then - pacman -S --noconfirm thermald || exit - systemctl enable thermald || exit + pacman -S --noconfirm thermald || exit + systemctl enable thermald || exit THERMALD stage_ok else @@ -6853,8 +6855,8 @@ THERMALD if [[ "${rngd}" == "y" ]]; then local stage_prompt="Rngd Service Activation" if arch-chroot /mnt <<-RNGD > "${void}" 2>&1 2> "${log}" ; then - pacman -S --noconfirm rng-tools || exit - systemctl enable rngd || exit + pacman -S --noconfirm rng-tools || exit + systemctl enable rngd || exit RNGD stage_ok else @@ -6865,9 +6867,9 @@ RNGD if [[ "${rtkit}" == "y" ]]; then local stage_prompt="Rtkit Service Activation" if arch-chroot /mnt <<-RTKIT > "${void}" 2>&1 2> "${log}" ; then - pacman -S --noconfirm realtime-privileges rtkit || exit - systemctl enable rtkit-daemon || exit - usermod -aG realtime ${USERNAME} + pacman -S --noconfirm realtime-privileges rtkit || exit + systemctl enable rtkit-daemon || exit + usermod -aG realtime ${USERNAME} RTKIT stage_ok else @@ -6879,7 +6881,7 @@ RTKIT local stage_prompt="Power-profiles-daemon Removal" if [[ -e usr/lib/power-profiles-daemon ]]; then if arch-chroot /mnt <<-PPD > "${void}" 2>&1 2> "${log}" ; then - pacman -Rns --noconfirm power-profiles-daemon || exit + pacman -Rns --noconfirm power-profiles-daemon || exit PPD stage_ok else @@ -6889,9 +6891,9 @@ PPD local stage_prompt="Tlp Service Activation" if arch-chroot /mnt <<-TLP > "${void}" 2>&1 2> "${log}" ; then - pacman -S --noconfirm tlp || exit - systemctl enable tlp - systemctl mask systemd-rfkill.service systemd-rfkill.socket || exit + pacman -S --noconfirm tlp || exit + systemctl enable tlp + systemctl mask systemd-rfkill.service systemd-rfkill.socket || exit TLP stage_ok else @@ -6902,9 +6904,9 @@ TLP if [[ "${printer}" == "y" ]]; then local stage_prompt="Print & Scan Services Activation" if arch-chroot /mnt <<-PRINT_CONF > "${void}" 2>&1 2> "${log}" ; then - systemctl enable avahi-daemon.socket cups.socket cups-browsed ipp-usb || exit - sed -i 's|^hosts.*|hosts: mymachines mdns_minimal resolve [!UNAVAIL=return] files myhostname dns|g' /etc/nsswitch.conf || exit - sed -i 's/ interface = [^ ]*/ interface = all/g' /etc/ipp-usb/ipp-usb.conf || exit + systemctl enable avahi-daemon.socket cups.socket cups-browsed ipp-usb || exit + sed -i 's|^hosts.*|hosts: mymachines mdns_minimal resolve [!UNAVAIL=return] files myhostname dns|g' /etc/nsswitch.conf || exit + sed -i 's/ interface = [^ ]*/ interface = all/g' /etc/ipp-usb/ipp-usb.conf || exit PRINT_CONF stage_ok else @@ -6918,9 +6920,9 @@ foreign() { if [[ -n "${web_aur}" ]]; then local stage_prompt="Base-devel Installation" if [[ "${dev}" != "y" ]]; then - if arch-chroot /mnt <<-BASE-DEVEL > "${void}" 2>&1 2> "${log}" ; then - pacman -S --noconfirm base-devel || exit -BASE-DEVEL + if arch-chroot /mnt <<-BASE_DEVEL > "${void}" 2>&1 2> "${log}" ; then + pacman -S --noconfirm base-devel || exit +BASE_DEVEL stage_ok else stage_fail @@ -6929,7 +6931,7 @@ BASE-DEVEL local stage_prompt="Git Installation" if [[ "${desktop}" =~ ^(11|12)$ ]]; then if arch-chroot /mnt <<-GIT > "${void}" 2>&1 2> "${log}" ; then - pacman -S --noconfirm git || exit + pacman -S --noconfirm git || exit GIT stage_ok else @@ -6937,11 +6939,11 @@ GIT fi fi local stage_prompt="AUR Packages Installation" - if arch-chroot /mnt <<-AURGIT-PKGS > "${void}" 2>&1 2> "${log}" ; then - sed -i 's|if (( EUID == 0 )); then|if (( EUID != 0 )); then|g' /usr/bin/makepkg || exit - git clone --branch ${web_aur} --single-branch https://github.com/archlinux/aur.git ${web_aur} && cd ${web_aur} && makepkg -s --noconfirm && sudo pacman -U --noconfirm *x86_64.pkg.tar.zst && cd .. && rm -rf ${web_aur} || exit - sed -i 's|if (( EUID != 0 )); then|if (( EUID == 0 )); then|g' /usr/bin/makepkg || exit -AURGIT-PKGS + if arch-chroot /mnt <<-AUR_GIT_PKGS > "${void}" 2>&1 2> "${log}" ; then + sed -i 's|if (( EUID == 0 )); then|if (( EUID != 0 )); then|g' /usr/bin/makepkg || exit + git clone --branch ${web_aur} --single-branch https://github.com/archlinux/aur.git ${web_aur} && cd ${web_aur} && makepkg -s --noconfirm && sudo pacman -U --noconfirm *x86_64.pkg.tar.zst && cd .. && rm -rf ${web_aur} || exit + sed -i 's|if (( EUID != 0 )); then|if (( EUID == 0 )); then|g' /usr/bin/makepkg || exit +AUR_GIT_PKGS stage_ok else stage_fail @@ -6953,17 +6955,17 @@ optimizations() { if [[ "${genoptm}" == "y" ]]; then local stage_prompt="General System Optimizations" - if arch-chroot /mnt <<-GENOPTM > "${void}" 2>&1 2> "${log}" ; then - pacman -S --noconfirm ccache ntfs-3g pbzip2 pigz || exit - sed -i 's/^#Color/Color\nILoveCandy/' /etc/pacman.conf || exit - update-pciids || exit - cat <<-MKINITCPIO >> /etc/mkinitcpio.conf.d/mkinitcpiod.conf || exit + if arch-chroot /mnt <<-GEN_OPTM > "${void}" 2>&1 2> "${log}" ; then + pacman -S --noconfirm ccache ntfs-3g pbzip2 pigz || exit + sed -i 's/^#Color/Color\nILoveCandy/' /etc/pacman.conf || exit + update-pciids || exit + cat <<-MKINITCPIO >> /etc/mkinitcpio.conf.d/mkinitcpiod.conf || exit COMPRESSION="zstd" COMPRESSION_OPTIONS=(-c -T$(nproc) --auto-threads=logical -) MODULES_DECOMPRESS="yes" MKINITCPIO - mkinitcpio -P || exit - cat <<-MAKEPKG > /etc/makepkg.conf.d/makepkgd.conf || exit + mkinitcpio -P || exit + cat <<-MAKEPKG > /etc/makepkg.conf.d/makepkgd.conf || exit #!/hint/bash CFLAGS="-march=native -O2 -pipe -fno-plt -fexceptions \ -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security \ @@ -6976,7 +6978,7 @@ MKINITCPIO COMPRESSBZ2=(pbzip2 -c -f) COMPRESSZST=(zstd -c -T0 --auto-threads=logical -) MAKEPKG - cat <<-SYSCTL > /etc/sysctl.d/99-sysctld.conf || exit + cat <<-SYSCTL > /etc/sysctl.d/99-sysctld.conf || exit net.core.netdev_max_backlog = 16384 net.ipv4.tcp_fastopen = 3 net.ipv4.tcp_tw_reuse = 1 @@ -6991,7 +6993,7 @@ MAKEPKG kernel.printk = 0 0 0 0 ${perf_stream} SYSCTL - cat <<-POLKIT > /etc/polkit-1/rules.d/99-udisks2.rules || exit + cat <<-POLKIT > /etc/polkit-1/rules.d/99-udisks2.rules || exit // Original rules: https://github.com/coldfix/udiskie/wiki/Permissions // Changes: Added org.freedesktop.udisks2.filesystem-mount-system, as this is used by Dolphin. polkit.addRule(function(action, subject) { @@ -7022,30 +7024,30 @@ SYSCTL } }); POLKIT - mkdir -p /etc/systemd/journald.conf.d > ${void} 2>&1 || exit - cat <<-JOURNAL > /etc/systemd/journald.conf.d/00-journald.conf || exit + mkdir -p /etc/systemd/journald.conf.d > ${void} 2>&1 || exit + cat <<-JOURNAL > /etc/systemd/journald.conf.d/00-journald.conf || exit [Journal] SystemMaxUse=100M JOURNAL - mkdir -p /etc/systemd/user.conf.d > ${void} 2>&1 || exit - cat <<-TIMEOUT > /etc/systemd/user.conf.d/00-timeout.conf || exit + mkdir -p /etc/systemd/user.conf.d > ${void} 2>&1 || exit + cat <<-TIMEOUT > /etc/systemd/user.conf.d/00-timeout.conf || exit [Manager] DefaultTimeoutStopSec=5s DefaultTimeoutAbortSec=5s TIMEOUT - sed -i \ - -e '/^# set linenumbers/s/^#//' \ - -e '/^# set minibar/s/^#//' \ - -e '/^# set mouse/s/^#//' /etc/nanorc || exit - echo " include /usr/share/nano/*.nanorc" | tee -a /etc/nanorc || exit - echo tcp_bbr | tee /etc/modules-load.d/modulesd.conf || exit - cat <<-SUDOERS > /etc/sudoers.d/sudoersd || exit + sed -i \ + -e '/^# set linenumbers/s/^#//' \ + -e '/^# set minibar/s/^#//' \ + -e '/^# set mouse/s/^#//' /etc/nanorc || exit + echo " include /usr/share/nano/*.nanorc" | tee -a /etc/nanorc || exit + echo tcp_bbr | tee /etc/modules-load.d/modulesd.conf || exit + cat <<-SUDOERS > /etc/sudoers.d/sudoersd || exit Defaults pwfeedback Defaults editor=/usr/bin/nano %wheel ALL=(ALL) ALL SUDOERS - visudo -c /etc/sudoers.d/sudoersd || exit -GENOPTM + visudo -c /etc/sudoers.d/sudoersd || exit +GEN_OPTM stage_ok else stage_fail @@ -7054,7 +7056,7 @@ GENOPTM if [[ -d /mnt/etc/udisks2 ]]; then local stage_prompt="Udisks2 Mount Options" if arch-chroot /mnt <<-UDISKS2 > "${void}" 2>&1 2> "${log}" ; then - cat <<-UDISKS_CONF > /etc/udisks2/mount_options.conf || exit + cat <<-UDISKS_CONF > /etc/udisks2/mount_options.conf || exit [defaults] ntfs_drivers=ntfs3,ntfs ntfs:ntfs3_defaults=uid=*,gid=*,windows_names @@ -7071,7 +7073,7 @@ UDISKS2 if [[ -n "${REGDOM}" ]]; then local stage_prompt="Wpa_Supplicant Configuration" if arch-chroot /mnt <<-WPA > "${void}" 2>&1 2> "${log}" ; then - cat <<-SUPPLICANT > /etc/wpa_supplicant/wpa_supplicant.conf || exit + cat <<-SUPPLICANT > /etc/wpa_supplicant/wpa_supplicant.conf || exit country=${REGDOM} wps_cred_add_sae=1 pmf=2 @@ -7088,7 +7090,7 @@ WPA view_optm() { if [[ "${genoptm}" == "v" ]]; then - typeset -f optimizations |grep -E 'pacman|/pacman.conf|update-pciids|usermod|systemctl|/etc|/mkinitcpio.conf.d|/makepkg.conf.d|/sysctl.d|/polkit-1/rules.d|/systemd/journald.conf.d|/systemd/user.conf.d|/nanorc|/modules-load.d|/sudoers.d|/udisks2|/wpa_supplicant/'| less + typeset -f optimizations |grep -E 'pacman|/pacman.conf|update-pciids|usermod|systemctl|/etc|/mkinitcpio.conf.d|/makepkg.conf.d|/sysctl.d|/polkit-1/rules.d|/systemd/journald.conf.d|/systemd/user.conf.d|/nanorc|/modules-load.d|/sudoers.d|/udisks2|/wpa_supplicant/' | less fi } ################################################################################################### @@ -7097,41 +7099,55 @@ secboot_sign() { if [[ "${sb_sign}" == "y" ]]; then local stage_prompt="Secure-Boot Signing" if [[ "${bootloader}" == "1" ]]; then - if arch-chroot /mnt <<-SECSIGN > "${void}" 2>&1 2> "${log}" ; then - pacman -S --noconfirm sbctl || exit - sbctl create-keys || exit - sbctl enroll-keys -m || exit - sbctl sign -s /boot/vmlinuz-${kernel} || exit - sbctl sign -s ${btldr_esp_mount}/EFI/BOOT/"${efiname}".EFI || exit - sbctl sign -s ${btldr_esp_mount}/EFI/Linux/arch-${kernel}.efi || exit - sbctl sign -s ${btldr_esp_mount}/EFI/systemd/systemd-bootx"${bitness}".efi || exit - sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx"${bitness}".efi.signed /usr/lib/systemd/boot/efi/systemd-bootx"${bitness}".efi || exit -SECSIGN + if arch-chroot /mnt <<-SDBOOT_SEC_SIGN > "${void}" 2>&1 2> "${log}" ; then + pacman -S --noconfirm sbctl || exit + sbctl create-keys || exit + sbctl enroll-keys -m || exit + sbctl sign -s /boot/vmlinuz-${kernel} || exit + sbctl sign -s ${btldr_esp_mount}/EFI/BOOT/${efiname}.EFI || exit + sbctl sign -s ${btldr_esp_mount}/EFI/Linux/arch-${kernel}.efi || exit + sbctl sign -s ${btldr_esp_mount}/EFI/systemd/systemd-bootx${bitness}.efi || exit + sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx${bitness}.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx${bitness}.efi || exit +SDBOOT_SEC_SIGN stage_ok else stage_fail fi if [[ "${setrescue}" == "y" ]]; then local stage_prompt="Rescue Entry Secure-Boot Signing" - if arch-chroot /mnt <<-RESCSECSIGN > "${void}" 2>&1 2> "${log}" ; then - sbctl sign -s ${btldr_esp_mount}/EFI/Linux/rescue.efi || exit -RESCSECSIGN + if arch-chroot /mnt <<-SDBOOT_RESCUE_SEC_SIGN > "${void}" 2>&1 2> "${log}" ; then + sbctl sign -s ${btldr_esp_mount}/EFI/Linux/rescue.efi || exit +SDBOOT_RESCUE_SEC_SIGN stage_ok else stage_fail fi fi elif [[ "${bootloader}" == "2" ]]; then - if arch-chroot /mnt <<-SECSIGN > "${void}" 2>&1 2> "${log}" ; then - pacman -S --noconfirm sbctl || exit - sbctl create-keys || exit - sbctl enroll-keys -m || exit - sbctl sign -s /boot/vmlinuz-${kernel} || exit - sbctl sign -s ${btldr_esp_mount}/EFI/BOOT/"${efiname}".EFI || exit -SECSIGN - stage_ok - else - stage_fail + if [[ "${path}" == "1" ]]; then + if arch-chroot /mnt <<-GRUB_SEC_SIGN > "${void}" 2>&1 2> "${log}" ; then + pacman -S --noconfirm sbctl || exit + sbctl create-keys || exit + sbctl enroll-keys -m || exit + sbctl sign -s /boot/vmlinuz-${kernel} || exit + sbctl sign -s ${btldr_esp_mount}/EFI/GRUB/grubx${bitness}.efi || exit +GRUB_SEC_SIGN + stage_ok + else + stage_fail + fi + elif [[ "${path}" == "2" ]]; then + if arch-chroot /mnt <<-GRUB_FALLBACK_SEC_SIGN > "${void}" 2>&1 2> "${log}" ; then + pacman -S --noconfirm sbctl || exit + sbctl create-keys || exit + sbctl enroll-keys -m || exit + sbctl sign -s /boot/vmlinuz-${kernel} || exit + sbctl sign -s ${btldr_esp_mount}/EFI/BOOT/${efiname}.EFI || exit +GRUB_FALLBACK_SEC_SIGN + stage_ok + else + stage_fail + fi fi fi fi @@ -7139,45 +7155,41 @@ SECSIGN ################################################################################################### set_vars() { - # Main Kernel Parameters - boot_opts=() - # Graphics Kernel Parameters - gfx_bootopts=() - # Mkinitcpio Modules + # Mkinitcpio Modules/Binaries/Hooks MODULES=() - # Mkinitcpio Binaries BINARIES=() - # Mkinitcpio Hooks HOOKS=() - # Zram Swap - if [[ "${swapmode}" == "3" ]]; then - # Zram Swap Kernel Parameters - zram_bootopts="zswap.enabled=0" - fi - # Mkinitcpio Btrfs Binary - if [[ "${fs}" == "2" ]]; then - # Mkinitcpio Binaries - BINARIES+=(/usr/bin/btrfs) - fi + #-------------------------------------------------------------------------------------------------- - # ENCRYPTION = 'YES' + # BINARIES SETUP + + # Btrfs Mkinitcpio Binary + [[ "${fs}" == "2" ]] && BINARIES+=(/usr/bin/btrfs) + +#-------------------------------------------------------------------------------------------------- + # LUKS ENCRYPTION if [[ "${encrypt}" == "yes" ]]; then - # Mkinitcpio Modules (Encryption) - MODULES+=("${fs_mod}") + # Encrypted Root Device encr_root_dev="/dev/mapper/${ENCROOT}" # Encrypted Root Options encr_root_opts="rd.luks.name=$(blkid -s UUID -o value "${root_dev}")=${ENCROOT}" - # Encryption Kernel Parameters + + + # ATTENTION LUKS ROOT KERNEL CMDLINE encr_root_bootopts="${encr_root_opts} root=${encr_root_dev}" - # SWAP SETUP (Encryption) +#-------------------------------------------------------------------------------------------------- + # LUKS SWAP SETUP + # Encrypted Swap Partition if [[ "${swapmode}" == "1" ]]; then # Encrypted Swap Partition Options encr_swap_opts="rd.luks.name=$(blkid -s UUID -o value "${swap_dev}")=swap" - # Encrypted Swap Kernel Parameters + + # ATTENTION LUKS SWAP PARTITION KERNEL CMDLINE encr_swap_bootopts="resume=/dev/mapper/swap ${encr_swap_opts}" + # Encrypted Swapfile elif [[ "${swapmode}" == "2" ]]; then # Ext4 Offset calculation @@ -7187,121 +7199,110 @@ set_vars() { elif [[ "${fs}" == "2" ]]; then offst="$(btrfs inspect-internal map-swapfile -r /mnt/swap/swapfile)" fi - # Encrypted Swap Kernel Parameters + + # ATTENTION LUKS SWAPFILE KERNEL CMDLINE encr_swap_bootopts="resume=${encr_root_dev} resume_offset=${offst}" fi +#-------------------------------------------------------------------------------------------------- + # LUKS HOOKS SETUP - # HOOKS SETUP (Encryption) - # Nvidia Proprietary Driver + # Nvidia Proprietary GFX Hooks if [[ "${nvdprop}" == "y" ]]; then HOOKS+=(systemd keyboard autodetect microcode modconf sd-vconsole block sd-encrypt filesystems) - # Open-source Drivers + # Open-source GFX Hooks else HOOKS+=(systemd keyboard autodetect microcode modconf kms sd-vconsole block sd-encrypt filesystems) fi + # Add Fsck Hook + [[ "${fs}" == "1" ]] && HOOKS+=(fsck) - # Fsck - if [[ "${fs}" == "1" ]]; then - HOOKS+=(fsck) - fi +#-------------------------------------------------------------------------------------------------- + # LUKS MODULES SETUP - # MAIN KERNEL PARAMETERS (Encryption) - # Encrypted Root Kernel Parameters - boot_opts+=("${encr_root_bootopts}") - # Encrypted Swap Kernel Parameters - if [[ -n "${encr_swap_bootopts}" ]]; then - boot_opts+=("${encr_swap_bootopts}") - fi + # LUKS Mkinitcpio Modules + MODULES+=("${fs_mod}") - # ENCRYPTION = 'NO' +#-------------------------------------------------------------------------------------------------- + # ATTENTION MAIN KERNEL CMDLINE + boot_opts=("${encr_root_bootopts}") + + # If LUKS Swap: + [[ -n "${encr_swap_bootopts}" ]] && boot_opts+=("${encr_swap_bootopts}") + +#-------------------------------------------------------------------------------------------------- + # NO ENCRYPTION elif [[ "${encrypt}" == "no" ]]; then + # HOOKS SETUP - # Nvidia Proprietary Driver + + # Nvidia Proprietary GFX Hooks if [[ "${nvdprop}" == "y" ]]; then HOOKS+=(systemd autodetect microcode modconf keyboard sd-vconsole block filesystems) - # Open-source Drivers + # Open-source GFX Hooks else HOOKS+=(systemd autodetect microcode modconf kms keyboard sd-vconsole block filesystems) fi + # Add Fsck Hook + [[ "${fs}" == "1" ]] && HOOKS+=(fsck) - # Fsck - if [[ "${fs}" == "1" ]]; then - HOOKS+=(fsck) - fi +#-------------------------------------------------------------------------------------------------- + # ATTENTION MAIN KERNEL CMDLINE + boot_opts=() - # MAIN KERNEL PARAMETERS - if [[ "${autoroot}" == "y" ]]; then - boot_opts+=("${multiroot_bootopts}") - fi + # If Multiroot: + [[ "${autoroot}" == "y" ]] && boot_opts+=("${multiroot_bootopts}") fi #-------------------------------------------------------------------------------------------------- - # GFX CONFIGURATION + # GFX CONFIGURATION - # Nvidia Proprietary Drivers - if [[ "${nvdprop}" == "y" ]]; then - MODULES+=(nvidia nvidia_modeset nvidia_uvm nvidia_drm) - gfx_bootopts+=(nvidia.NVreg_UsePageAttributeTable=1) + # Gfx Kernel Cmdline + gfx_bootopts=() - # Multi-Graphics including Intel - if [[ "${vendors}" =~ "Intel" ]]; then - MODULES+=(i915) - fi + # Nvidia Proprietary + if [[ "${nvdprop}" == "y" ]]; then + MODULES+=(nvidia nvidia_modeset nvidia_uvm nvidia_drm) + gfx_bootopts+=(nvidia.NVreg_UsePageAttributeTable=1) - # Multi-Graphics including AMD - if [[ "${vendors}" =~ "AMD" ]]; then - MODULES+=(amdgpu) - fi + # MultiGfx with Intel + [[ "${vendors}" =~ "Intel" ]] && MODULES+=(i915) + # MultiGfx with AMD + [[ "${vendors}" =~ "AMD" ]] && MODULES+=(amdgpu) - # Disable GSP Firmware - if [[ "${nogsp}" == "y" ]]; then - gfx_bootopts+=(nvidia.NVreg_EnableGpuFirmware=0) - fi + # Disable GSP Firmware + [[ "${nogsp}" == "y" ]] && gfx_bootopts+=(nvidia.NVreg_EnableGpuFirmware=0) + # Enable Experimental Low Latency Interrupts + [[ "${lowlat}" == "y" ]] && gfx_bootopts+=(nvidia.NVreg_RegistryDwords=RMIntrLockingMode=1) + fi - # Enable Experimental Low Latency Interrupts - if [[ "${lowlat}" == "y" ]]; then - gfx_bootopts+=(nvidia.NVreg_RegistryDwords=RMIntrLockingMode=1) - fi + # AMD + if [[ "${vendor}" == "AMD" || "${vendors}" =~ "AMD" ]]; then + if [[ -n "${islands}" && -z "${nvdprop}" ]]; then + MODULES+=(amdgpu) fi - - # AMD - if [[ "${vendor}" == "AMD" || "${vendors}" =~ "AMD" ]]; then - if [[ -n "${islands}" && -z "${nvdprop}" ]]; then - MODULES+=(amdgpu) - fi - - # 'Southern Islands' support - if [[ "${islands}" == "1" ]]; then - gfx_bootopts+=(amdgpu.dc=1 radeon.si_support=0 amdgpu.si_support=1) - + # 'Southern Islands' support + if [[ "${islands}" == "1" ]]; then + gfx_bootopts+=(amdgpu.dc=1 radeon.si_support=0 amdgpu.si_support=1) # 'Sea Islands' support - elif [[ "${islands}" == "2" ]]; then - gfx_bootopts+=(amdgpu.dc=1 radeon.cik_support=0 amdgpu.cik_support=1) - fi + elif [[ "${islands}" == "2" ]]; then + gfx_bootopts+=(amdgpu.dc=1 radeon.cik_support=0 amdgpu.cik_support=1) fi + fi #-------------------------------------------------------------------------------------------------- - # MAIN KERNEL PARAMETERS - if [[ -n "${gfx_bootopts[*]}" ]]; then - boot_opts+=("${gfx_bootopts[*]}") - fi - if [[ "${kill_watchdog}" == "y" ]]; then - boot_opts+=(nowatchdog) - fi - if [[ -n "${cust_bootopts}" ]]; then - boot_opts+=("${cust_bootopts}") - fi - if [[ -n "${btrfs_bootopts}" ]]; then - boot_opts+=("${btrfs_bootopts}") - fi - if [[ -n "${zram_bootopts}" ]]; then - boot_opts+=("${zram_bootopts}") - fi + # ATTENTION ADD TO MAIN KERNEL CMDLINE - # MAIN MKINITCPIO MODULES - mkinitcpio_mods="MODULES=(${MODULES[*]})" - # MAIN MKINITCPIO BINARIES - mkinitcpio_bins="BINARIES=(${BINARIES[*]})" - # MAIN MKINITCPIO HOOKS - mkinitcpio_hooks="HOOKS=(${HOOKS[*]})" + [[ -n "${gfx_bootopts[*]}" ]] && boot_opts+=("${gfx_bootopts[*]}") + [[ -n "${cust_bootopts}" ]] && boot_opts+=("${cust_bootopts}") + [[ -n "${btrfs_bootopts}" ]] && boot_opts+=("${btrfs_bootopts}") + [[ "${swapmode}" == "3" ]] && boot_opts+=(zswap.enabled=0) + [[ "${kill_watchdog}" == "y" ]] && boot_opts+=(nowatchdog) + +#-------------------------------------------------------------------------------------------------- + # MAIN MKINITCPIO MODULES + mkinitcpio_mods="MODULES=(${MODULES[*]})" + # MAIN MKINITCPIO BINARIES + mkinitcpio_bins="BINARIES=(${BINARIES[*]})" + # MAIN MKINITCPIO HOOKS + mkinitcpio_hooks="HOOKS=(${HOOKS[*]})" } ################################################################################################### chroot_conf() { @@ -7320,7 +7321,7 @@ ${magenta}###${nc}--------------------------------${magenta}[ ${bwhite}Chroot & if [[ "${desktop}" == "7" ]]; then local stage_prompt="Deepin Greeter Configuration" if arch-chroot /mnt <<-DEEPIN > "${void}" 2>&1 2> "${log}" ; then - sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-deepin-greeter|g' /etc/lightdm/lightdm.conf || exit + sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-deepin-greeter|g' /etc/lightdm/lightdm.conf || exit DEEPIN stage_ok else @@ -7329,7 +7330,7 @@ DEEPIN elif [[ "${desktop}" =~ ^(5|8|10)$ ]]; then local stage_prompt="GTK Greeter Configuration" if arch-chroot /mnt <<-GTK > "${void}" 2>&1 2> "${log}" ; then - sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-gtk-greeter|g' /etc/lightdm/lightdm.conf || exit + sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-gtk-greeter|g' /etc/lightdm/lightdm.conf || exit GTK stage_ok else @@ -7338,7 +7339,7 @@ GTK elif [[ "${desktop}" == "6" ]]; then local stage_prompt="Slick Greeter Configuration" if arch-chroot /mnt <<-SLICK > "${void}" 2>&1 2> "${log}" ; then - sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-slick-greeter|g' /etc/lightdm/lightdm.conf || exit + sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-slick-greeter|g' /etc/lightdm/lightdm.conf || exit SLICK stage_ok else @@ -7350,7 +7351,7 @@ SLICK if [[ "${vendor}" != "Virtual Machine" && "${desktop}" != "11" ]]; then local stage_prompt="Bluetooth Services Activation" if arch-chroot /mnt <<-BLUETOOTH > "${void}" 2>&1 2> "${log}" ; then - systemctl enable bluetooth || exit + systemctl enable bluetooth || exit BLUETOOTH stage_ok else @@ -7360,9 +7361,9 @@ BLUETOOTH if [[ -n "${displaymanager}" ]]; then local stage_prompt="Display Manager Service Activation" - if arch-chroot /mnt <<-DMSERVICE > "${void}" 2>&1 2> "${log}" ; then - systemctl enable ${displaymanager} || exit -DMSERVICE + if arch-chroot /mnt <<-DM > "${void}" 2>&1 2> "${log}" ; then + systemctl enable ${displaymanager} || exit +DM stage_ok else stage_fail @@ -7372,7 +7373,7 @@ DMSERVICE if [[ "${desktop}" != "12" ]]; then local stage_prompt="Network Manager Service Activation" if arch-chroot /mnt <<-NETWORK > "${void}" 2>&1 2> "${log}" ; then - systemctl enable NetworkManager || exit + systemctl enable NetworkManager || exit NETWORK stage_ok else @@ -7390,7 +7391,7 @@ NETWORK if [[ "${greeternmbr}" == "1" ]]; then local stage_prompt="GTK Greeter Configuration" if arch-chroot /mnt <<-GTK > "${void}" 2>&1 2> "${log}" ; then - sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-gtk-greeter|g' /etc/lightdm/lightdm.conf || exit + sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-gtk-greeter|g' /etc/lightdm/lightdm.conf || exit GTK stage_ok else @@ -7399,7 +7400,7 @@ GTK elif [[ "${greeternmbr}" == "2" ]]; then local stage_prompt="Slick Greeter Configuration" if arch-chroot /mnt <<-SLICK > "${void}" 2>&1 2> "${log}" ; then - sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-slick-greeter|g' /etc/lightdm/lightdm.conf || exit + sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-slick-greeter|g' /etc/lightdm/lightdm.conf || exit SLICK stage_ok else @@ -7408,7 +7409,7 @@ SLICK elif [[ "${greeternmbr}" == "3" ]]; then local stage_prompt="Deepin Greeter Configuration" if arch-chroot /mnt <<-DEEPIN > "${void}" 2>&1 2> "${log}" ; then - sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-deepin-greeter|g' /etc/lightdm/lightdm.conf || exit + sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-deepin-greeter|g' /etc/lightdm/lightdm.conf || exit DEEPIN stage_ok else @@ -7419,9 +7420,9 @@ DEEPIN if [[ -n "${customservices}" ]]; then local stage_prompt="Custom Service(s) Activation" - if arch-chroot /mnt <<-CUSTOMSERV > "${void}" 2>&1 2> "${log}" ; then - systemctl enable ${customservices} || exit -CUSTOMSERV + if arch-chroot /mnt <<-CUSTOM_SRVC > "${void}" 2>&1 2> "${log}" ; then + systemctl enable ${customservices} || exit +CUSTOM_SRVC stage_ok else stage_fail @@ -7444,7 +7445,7 @@ CUSTOMSERV reboot exit } -# END FUNCTIONS +# END SYSTEM FUNCTIONS ################################################################################################### clear @@ -7454,7 +7455,7 @@ CUSTOMSERV log="Amelia_log.txt" disks="$(lsblk --nodeps --paths --noheadings --output=name,size,model | cat --number)" trg="" - vars=(LOCALESET="" SETLOCALE="" lcl_slct="" USERNAME="" kernelnmbr="" fs="" gfxcount="" gfxcard="" intelcount="" intelcards="" nvidiacount="" nvidiacards="" amdcount="" amdcards="" vendor="" vendors="" desktop="" terminal="" efi_entr_del="" sanity="" install="" bootldr_pkgs="" devel="" REGDOM="" gfx_bootopts="" btrfs_bootopts="" trim="" swapmode="" homecrypt="" greeter="" greeternmbr="" cust_bootopts="" vmpkgs="" vm_services="" perf_stream="" displaymanager="" wireless_reg="" bitness="" bootloader="" gfx_slct="" espsize="" autoroot="" autoesp="" autoxboot="" autohome="" autoswap="" rootprt="" espprt="" xbootprt="" homeprt="" swapprt="" partok="" instl_drive="" sgdsk_nmbr="" part_mode="" preset="" capacity="" cap_gib="" rootsize="" sgdrive="" cgdrive="" smartpart="" presetpart="" prcnt="" roottype="" stage_prompt="" zram="" zram_bootopts="" xbootloader="" multibooting="" hypervisor="" mkinitcpio_mods="" mkinitcpio_bins="" uki="" ukify="" cng_espmnt="" sep_home="" encr_swap_bootopts="" uefimode="" luks_encrypt="" nrg_plc="" multilib="" nvname="" nogsp="" luks_root="" luks_swap="" luks_home="" installation="" kill_watchdog="" oomd="" setrescue="" lowlat="" dev="" web="" web_pkg="" web_aur="" web_slct="" printer="" print_pkgs="" shellnmbr="" shell="" shellname="" shellname2="" shell_pkgs="" genoptm="" set_optm="" ask_param="" desk_setup="" set_optm_slct="" irqbalance="" thermald="" rngd="" rtkit="" tlp="" CRYPTPASS="" CRYPTPASS2="" askoptm="" gptslct="" gptok="" gptabort="" nvdprop="" nowarning="" efiname="") + vars=(LOCALESET="" SETLOCALE="" lcl_slct="" USERNAME="" kernelnmbr="" fs="" gfxcount="" gfxcard="" intelcount="" intelcards="" nvidiacount="" nvidiacards="" amdcount="" amdcards="" vendor="" vendors="" desktop="" terminal="" efi_entr_del="" sanity="" install="" bootldr_pkgs="" devel="" REGDOM="" gfx_bootopts="" btrfs_bootopts="" trim="" swapmode="" homecrypt="" greeter="" greeternmbr="" cust_bootopts="" vmpkgs="" vm_services="" perf_stream="" displaymanager="" wireless_reg="" bitness="" bootloader="" gfx_slct="" espsize="" autoroot="" autoesp="" autoxboot="" autohome="" autoswap="" rootprt="" espprt="" xbootprt="" homeprt="" swapprt="" partok="" instl_drive="" sgdsk_nmbr="" part_mode="" preset="" capacity="" cap_gib="" rootsize="" sgdrive="" cgdrive="" smartpart="" presetpart="" prcnt="" roottype="" stage_prompt="" zram="" xbootloader="" multibooting="" hypervisor="" mkinitcpio_mods="" mkinitcpio_bins="" uki="" ukify="" cng_espmnt="" sep_home="" encr_swap_bootopts="" uefimode="" luks_encrypt="" nrg_plc="" multilib="" nvname="" nogsp="" luks_root="" luks_swap="" luks_home="" installation="" kill_watchdog="" oomd="" setrescue="" lowlat="" dev="" web="" web_pkg="" web_aur="" web_slct="" printer="" print_pkgs="" shellnmbr="" shell="" shellname="" shellname2="" shell_pkgs="" genoptm="" set_optm="" ask_param="" desk_setup="" set_optm_slct="" irqbalance="" thermald="" rngd="" rtkit="" tlp="" CRYPTPASS="" CRYPTPASS2="" askoptm="" gptslct="" gptok="" gptabort="" nvdprop="" nowarning="" efiname="" path="") export "${vars[@]}" sleep 0.2 CYANBG "************************************************************************************************* "