From 07f30327d304f3a9c770ceb8c9b6a8827809db7d Mon Sep 17 00:00:00 2001 From: elementrick Date: Tue, 27 Aug 2024 18:37:17 +0000 Subject: [PATCH] Add: Support for UKI's has been added. Full Disk Encryption is planned to be added in the future. Change: 'sgdisk' now uses the -I (--align-end) flag when creating partitions, needed when setting 'LUKS' encryption on volumes Change: Chrooting and setting the 'base' system now resides in a seperate function (main_chroot), to avoid code repetition Change: Setting final variables now resides in a seperate function (set_vars) Change: Custom Plasma & custom Gnome setups have been renamed to 'Minimal Plasma & Minimal Gnome' and now support selecting one of the available bootloaders Change: 'lsblk' now uses a simpler syntax for detecting filesystems on volume Remove: 'xsane' package has been removed from Plasma Minimal setup Change: Now 'grub' configuration takes place in /etc/default/grub.d/00-custom.cfg file, as a drop-in file Change: Now the installer opens 'Automatic Partitioning' prompt by default If 'Sanity Check' succeeds and 'Multibooting' is 'n' > Continue with current disk partition layout > 'n' Fix: A bug has been fixed that would reset 'mkinitcpio hooks' to 'empty', when inside a 'VM' environment and the user has been revising the installation Minor indentation and visual changes --- Amelia.sh | 986 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 588 insertions(+), 398 deletions(-) diff --git a/Amelia.sh b/Amelia.sh index ea45549..722708e 100644 --- a/Amelia.sh +++ b/Amelia.sh @@ -1,7 +1,7 @@ #!/bin/bash # Amelia Installer -# Version: 7.0 +# Version: 7.1 set -euo pipefail trap 's=$?; echo "$0: Error on line "$LINENO": $BASH_COMMAND"; exit $s' ERR @@ -29,85 +29,85 @@ trap 's=$?; echo "$0: Error on line "$LINENO": $BASH_COMMAND"; exit $s' ERR bwhite="\e[0;97m" #bright nc="\e[0m" -REDBGBL (){ +REDBGBL() { echo -e "${redbgbl} $1${nc}" } -REDBG (){ +REDBG() { echo -e "${redbg} $1${nc}" } -RED (){ +RED() { echo -e "${red} $1${nc}" } -GREENBGBL (){ +GREENBGBL() { echo -e "${greenbgbl} $1${nc}" } -GREENBG (){ +GREENBG() { echo -e "${greenbg} $1${nc}" } -GREEN (){ +GREEN() { echo -e "${green} $1${nc}" } -YELLOWBGBL (){ +YELLOWBGBL() { echo -e "${yellowbgbl} $1${nc}" } -YELLOWBG (){ +YELLOWBG() { echo -e "${yellowbg} $1${nc}" } -YELLOW (){ +YELLOW() { echo -e "${yellow} $1${nc}" } -YELLOWL (){ +YELLOWL() { echo -e "${yellowl} $1${nc}" } -BLUEBGBL (){ +BLUEBGBL() { echo -e "${bluebgbl} $1${nc}" } -BLUEBG (){ +BLUEBG() { echo -e "${bluebg} $1${nc}" } -BLUE (){ +BLUE() { echo -e "${blue} $1${nc}" } -MAGENTABGBL (){ +MAGENTABGBL() { echo -e "${magentabgbl} $1${nc}" } -MAGENTABG (){ +MAGENTABG() { echo -e "${magentabg} $1${nc}" } -MAGENTA (){ +MAGENTA() { echo -e "${magenta} $1${nc}" } -CYANBGBL (){ +CYANBGBL() { echo -e "${cyanbgbl} $1${nc}" } -CYANBG (){ +CYANBG() { echo -e "${cyanbg} $1${nc}" } -CYAN (){ +CYAN() { echo -e "${cyan} $1${nc}" } -NC (){ +NC() { echo -e "${nc} $1${nc}" } -WHITEB (){ +WHITEB() { echo -e "${bwhite} $1${nc}" } # END COLOR FUNCTIONS ################################################################################################### # PROMPT FUNCTIONS -skip (){ +skip() { sleep 0.2 YELLOW " --> Skipping.. " } -reload (){ +reload() { sleep 0.2 NC " --> [${green}Reloading${nc}] " } -invalid (){ +invalid() { sleep 0.2 RED " -------------------------- @@ -115,7 +115,7 @@ invalid (){ --------------------------" reload } -err_try (){ +err_try() { sleep 0.2 RED " -------------------------------------------- @@ -123,7 +123,7 @@ err_try (){ --------------------------------------------" reload } -err_abort (){ +err_abort() { sleep 0.2 RED " ------------------------ @@ -131,13 +131,13 @@ err_abort (){ ------------------------" failure } -line2 (){ +line2() { printf '\n\n' } -line3 (){ +line3() { printf '\n\n\n' } -unmount (){ +unmount() { sleep 0.2 line3 REDBG " ${yellow}------------------------- " @@ -168,7 +168,7 @@ ${magenta}###${nc}-----------------------------------${magenta}[ ${bwhite}Unmoun failure fi } -unmount_noabort (){ +unmount_noabort() { sleep 0.2 line3 REDBG " ${yellow}------------------------- " @@ -198,18 +198,18 @@ ${magenta}###${nc}-----------------------------------${magenta}[ ${bwhite}Unmoun reload fi } -umount_abort (){ +umount_abort() { unmount reload } -umount_manual (){ +umount_manual() { unmount sleep 0.2 NC " --> [Switching to ${green}Manual Mode${nc}]" } -choice (){ +choice() { sleep 0.2 RED " -------------------------------------------- @@ -217,7 +217,7 @@ choice (){ --------------------------------------------" reload } -y_n (){ +y_n() { sleep 0.2 RED " ---------------------------------------------- @@ -225,7 +225,7 @@ y_n (){ ----------------------------------------------" reload } -yes_no (){ +yes_no() { sleep 0.2 RED " ------------------------------------------------- @@ -233,26 +233,26 @@ yes_no (){ -------------------------------------------------" reload } -ok (){ +ok() { sleep 0.2 NC " ==> [${green}${prompt} OK${nc}] " } -stage_ok (){ +stage_ok() { sleep 0.2 NC " ==> [${green}${stage_prompt} configuration OK${nc}] " sleep 2 } -stage_fail (){ +stage_fail() { sleep 0.2 line2 REDBG " ${yellow}[!] ${stage_prompt} configuration FAILED [!]" failure } -completion_err (){ +completion_err() { sleep 0.2 CYAN " @@ -261,7 +261,7 @@ completion_err (){ [!] Please complete${nc} '${stage_prompt}' ${cyan}to continue " } -intel (){ +intel() { line2 BLUEBG " --------------------------------- " BLUEBG " ### INTEL Graphics detected ### " @@ -271,7 +271,7 @@ intel (){ * ${vgacard} " } -nvidia (){ +nvidia() { line2 GREENBG " ---------------------------------- " GREENBG " ### NVIDIA Graphics detected ### " @@ -281,7 +281,7 @@ nvidia (){ * ${vgacard} " } -amd (){ +amd() { line2 REDBG " ------------------------------- " REDBG " ### AMD Graphics detected ### " @@ -291,7 +291,7 @@ amd (){ * ${vgacard} " } -arch (){ +arch() { sleep 0.2 line3 BLUEBG "************************************************************************************************* " @@ -301,7 +301,7 @@ arch (){ BLUEBG "************************************************************************************************* " line2 } -cnfg (){ +cnfg() { sleep 0.2 line3 MAGENTABG "------------------------------------------------------------------------------------------------- " @@ -310,7 +310,7 @@ cnfg (){ echo sleep 0.2 } -completion (){ +completion() { sleep 0.2 line3 GREENBG "************************************************************************************************* " @@ -320,7 +320,7 @@ completion (){ GREENBG "************************************************************************************************* " line3 } -failure (){ +failure() { sleep 0.2 line3 REDBG "************************************************************************************************* " @@ -335,7 +335,7 @@ failure (){ ################################################################################################### # FUNCTIONS -first_check (){ +first_check() { if [[ "${tty}" == *"tty"* && -f /usr/share/kbd/consolefonts/ter-v18b.psf.gz && -f /usr/share/kbd/consolefonts/ter-v32b.psf.gz ]]; then until slct_font; do : ; done @@ -354,7 +354,7 @@ first_check (){ fi } ################################################################################################### -slct_font (){ +slct_font() { sleep 0.2 NC " @@ -389,7 +389,7 @@ Enter a number: " clear } ################################################################################################### -uefi_check (){ +uefi_check() { bootmode="$(cat /sys/firmware/efi/fw_platform_size)" local prompt="UEFI ${bootmode}-bit Mode" @@ -411,7 +411,7 @@ ${magenta}###${nc}---------------------------------${magenta}[ ${bwhite}UEFI Mod fi } ################################################################################################### -connection_check (){ +connection_check() { local prompt="Internet Connection" sleep 0.2 @@ -435,7 +435,7 @@ ${magenta}###${nc}--------------------------------${magenta}[ ${bwhite}Internet fi } ################################################################################################### -upd_clock (){ +upd_clock() { local prompt="System Clock" sleep 0.2 @@ -451,7 +451,7 @@ ${magenta}###${nc}-----------------------------------${magenta}[ ${bwhite}System ok } ################################################################################################### -dtct_microcode (){ +dtct_microcode() { local prompt="Microcode" sleep 0.2 @@ -478,7 +478,7 @@ ${magenta}###${nc}-----------------------------------${magenta}[ ${bwhite}Microc ok } ################################################################################################### -main_menu (){ +main_menu() { sleep 0.2 NC " @@ -534,7 +534,7 @@ Enter a number: " esac } ################################################################################################### -persnl_submn (){ +persnl_submn() { sleep 0.2 NC " @@ -578,7 +578,7 @@ Enter a number: " esac } ################################################################################################### -slct_locale (){ +slct_locale() { local prompt="Locale" sleep 0.2 @@ -628,7 +628,7 @@ Enter your Locale ${bwhite}(empty for 'en_US')${blue}: " lcl_slct="yes" } ################################################################################################### -slct_kbd (){ +slct_kbd() { local prompt="Keyboard Layout" sleep 0.2 @@ -675,7 +675,7 @@ Enter your keyboard layout ${bwhite}(empty for 'us')${blue}: " ok } ################################################################################################### -user_setup (){ +user_setup() { local prompt="User" sleep 0.2 @@ -743,7 +743,7 @@ Re-enter${nc} ${cyan}${USERNAME}'s ${blue}password: " ok } ################################################################################################### -rootuser_setup (){ +rootuser_setup() { local prompt="Root User" sleep 0.2 @@ -787,7 +787,7 @@ Re-enter${nc} ${cyan}Root ${blue}user's password: " ok } ################################################################################################### -slct_hostname (){ +slct_hostname() { local prompt="Hostname" sleep 0.2 @@ -823,7 +823,7 @@ Enter a hostname: " ok } ################################################################################################### -sys_submn (){ +sys_submn() { sleep 0.2 NC " @@ -836,7 +836,7 @@ ${magenta}###${nc}----------------------------------${magenta}[ ${bwhite}System > Select a Submenu: " NC " - [1] Kernel, Bootloader & ESP Mountpoint Setup + [1] Kernel, Bootloader, ESP Mountpoint & UKI Setup [2] Filesystem & Swap Setup @@ -862,6 +862,7 @@ Enter a number: " until slct_krnl; do : ; done until ask_bootldr; do : ; done until slct_espmnt; do : ; done + until set_uki; do : ; done return 1 ;; 2) until ask_fs; do : ; done @@ -888,7 +889,7 @@ Enter a number: " esac } ################################################################################################### -slct_krnl (){ +slct_krnl() { local prompt="Kernel" sleep 0.2 @@ -962,11 +963,12 @@ Enter a number: " if [[ "${vga_slct}" == "yes" ]]; then local stage_prompt="Graphics Setup" completion_err + until dtct_hyper; do : ; done until dtct_vga; do : ; done fi } ################################################################################################### -ask_bootldr (){ +ask_bootldr() { local prompt="Bootloader" sleep 0.2 @@ -1019,7 +1021,7 @@ Enter a number: " ok } ################################################################################################### -slct_espmnt (){ +slct_espmnt() { local prompt="ESP Mountpoint" sleep 0.2 @@ -1073,7 +1075,43 @@ Enter a number: " fi } ################################################################################################### -ask_fs (){ +set_uki() { + + local prompt="UKI Setup" + sleep 0.2 + NC " + + +${magenta}###${nc}----------------------------------------${magenta}[ ${bwhite}UKI Setup${nc} ${magenta}]${nc}-----------------------------------------${magenta}###${nc} + " + YELLOW " + + > Make use of Unified Kernel Image(s) ? [y/n]" + BLUE " + + +Enter [y/n]: " + read -r -p " +==> " uki + echo + + if [[ "${uki}" == "y" ]]; then + sleep 0.2 + ukify="systemd-ukify" + YELLOW " + + ### 'UKI' has been selected + " + elif [[ "${uki}" == "n" ]]; then + skip + else + y_n + return 1 + fi + ok +} +################################################################################################### +ask_fs() { local prompt="Filesystem Setup" sleep 0.2 @@ -1182,7 +1220,7 @@ Enter a name: " ok } ################################################################################################### -ask_swap (){ +ask_swap() { local prompt="Swap Setup" sleep 0.2 @@ -1229,6 +1267,7 @@ Enter a number: " if [[ "${vga_slct}" == "yes" ]]; then local stage_prompt="Graphics Setup" completion_err + until dtct_hyper; do : ; done until dtct_vga; do : ; done fi return 0 @@ -1256,6 +1295,7 @@ Enter a number: " if [[ "${vga_slct}" == "yes" ]]; then local stage_prompt="Graphics Setup" completion_err + until dtct_hyper; do : ; done until dtct_vga; do : ; done fi return 0 @@ -1289,6 +1329,7 @@ Enter a number: " if [[ "${vga_slct}" == "yes" ]]; then local stage_prompt="Graphics Setup" completion_err + until dtct_hyper; do : ; done until dtct_vga; do : ; done fi return 0 @@ -1318,11 +1359,12 @@ Enter a number: " if [[ "${vga_slct}" == "yes" ]]; then local stage_prompt="Graphics Setup" completion_err + until dtct_hyper; do : ; done until dtct_vga; do : ; done fi } ################################################################################################### -set_swapsize (){ +set_swapsize() { local prompt="Swapsize" BLUE " @@ -1355,7 +1397,7 @@ Enter Swap size ${bwhite}(in GB)${blue}: " fi } ################################################################################################### -dtct_hyper (){ +dtct_hyper() { hypervisor="$(systemd-detect-virt)" if [[ "${hypervisor}" != "none" ]]; then @@ -1379,17 +1421,18 @@ dtct_hyper (){ esac } ################################################################################################### -dtct_vga (){ +dtct_vga() { if [[ "${hypervisor}" != "none" ]]; then return 0 fi if [[ -z "${kernelnmbr}" ]]; then - local stage_prompt="Kernel, Bootloader & ESP Mountpoint Setup" + local stage_prompt="Kernel, Bootloader, ESP Mountpoint & UKI Setup" completion_err until slct_krnl; do : ; done until ask_bootldr; do : ; done until slct_espmnt; do : ; done + until set_uki; do : ; done return 1 fi if [[ -z "${fs}" ]]; then @@ -1421,7 +1464,7 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Grap fi } ################################################################################################### -dtct_single_vga (){ +dtct_single_vga() { local prompt="Graphics Setup" @@ -1469,7 +1512,7 @@ Enter [y/n]: " vga_conf } ################################################################################################### -dtct_multi_vga (){ +dtct_multi_vga() { local prompt="Graphics Setup" @@ -1618,7 +1661,7 @@ Enter a number: " vga_conf } ################################################################################################### -vga_conf (){ +vga_conf() { local prompt="Graphics Setup" @@ -1851,7 +1894,7 @@ Enter [y/n]: " ok } ################################################################################################### -slct_dsktp (){ +slct_dsktp() { local prompt="Desktop Setup" custompkgs="" @@ -1868,11 +1911,11 @@ ${magenta}###${nc}--------------------------------------${magenta}[ ${bwhite}Des [1] Plasma - [2] Custom Plasma & Systemd-boot & System Optimizations + [2] Minimal Plasma & Desktop Apps & System Optimizations [3] Gnome - [4] Custom Gnome & Systemd-boot & System Optimizations + [4] Minimal Gnome & Desktop Apps & System Optimizations [5] Xfce @@ -1901,11 +1944,11 @@ Enter a number: " 1) desktopname="Plasma" ;; 2) - desktopname="Custom Plasma (System Optimized)" ;; + desktopname="Minimal Plasma (System Optimized)" ;; 3) desktopname="Gnome" ;; 4) - desktopname="Custom Gnome (System Optimized)" ;; + desktopname="Minimal Gnome (System Optimized)" ;; 5) desktopname="Xfce" ;; 6) @@ -2070,7 +2113,7 @@ Enter [y/n]: " ok } ################################################################################################### -cust_sys (){ +cust_sys() { local prompt="Custom Arch Linux" until add_pkgs; do : ; done @@ -2080,7 +2123,7 @@ cust_sys (){ ok } ################################################################################################### -add_pkgs (){ +add_pkgs() { local prompt="Add Packages" sleep 0.2 @@ -2164,7 +2207,7 @@ Enter a number: " fi } ################################################################################################### -add_services (){ +add_services() { local prompt="Add Services" sleep 0.2 @@ -2192,7 +2235,7 @@ Enter services to be enabled ${bwhite}(space-seperated)${blue}: " fi } ################################################################################################### -add_prmtrs (){ +add_prmtrs() { local prompt="Kernel Parameters" sleep 0.2 @@ -2220,7 +2263,7 @@ Enter your Kernel parameters to be set at boot ${bwhite}(space-seperated)${blue} fi } ################################################################################################### -boot_entr (){ +boot_entr() { if [[ "${hypervisor}" != "none" ]]; then efi_entr_del="yes" @@ -2233,14 +2276,13 @@ boot_entr (){ ${magenta}###${nc}--------------------------------${magenta}[ ${bwhite}EFI Boot Entries Deletion${nc} ${magenta}]${nc}--------------------------------${magenta}###${nc} " - YELLOW " > Select an EFI Boot Entry to Delete ${red}[!] (CAUTION) [!] " sleep 0.2 - efibootmgr + efibootmgr --unicode boot_entry=" " while [[ -n "${boot_entry}" ]]; do @@ -2262,7 +2304,7 @@ Enter a${nc} ${cyan}BootOrder${blue} number for Deletion ${bwhite}(empty to skip reload until sys_submn; do : ; done fi - if efibootmgr -b "${boot_entry}" -B; then + if efibootmgr -b "${boot_entry}" -B --unicode; then sleep 0.2 NC " @@ -2279,7 +2321,7 @@ Enter a${nc} ${cyan}BootOrder${blue} number for Deletion ${bwhite}(empty to skip efi_entr_del="yes" } ################################################################################################### -wireless_rgd (){ +wireless_rgd() { if [[ "${hypervisor}" != "none" ]]; then wrlss_rgd="yes" @@ -2335,7 +2377,7 @@ Enter your Country Code, ie:${nc} ${cyan}US ${bwhite}(empty to skip)${blue}: " wrlss_rgd="yes" } ################################################################################################### -dsks_submn (){ +dsks_submn() { sleep 0.2 NC " @@ -2374,7 +2416,7 @@ Enter a number: " esac } ################################################################################################### -gpt_mngr (){ +gpt_mngr() { local prompt="Disk GPT" sleep 0.2 @@ -2441,7 +2483,7 @@ ______________________________________________ done } ################################################################################################### -ask_multibooting (){ +ask_multibooting() { local prompt="MultiBoot Status" sleep 0.2 @@ -2451,6 +2493,7 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Mult " YELLOW " + > Are you Multi-Booting with other OS's ? [y/n]" BLUE " @@ -2481,7 +2524,7 @@ Enter [y/n]: " ok } ################################################################################################### -disk_mngr (){ +disk_mngr() { if [[ "${multibooting}" == "y" ]]; then until manual_part; do : ; done @@ -2528,7 +2571,7 @@ Enter a number: " esac } ################################################################################################### -man_preset (){ +man_preset() { sleep 0.2 NC " @@ -2572,7 +2615,7 @@ Enter a Preset number ${bwhite}(empty to skip)${blue}: " echo } ################################################################################################### -auto_part (){ +auto_part() { local prompt="Disk Partitions" local stage_prompt="Auto-Partitioning" @@ -2737,9 +2780,9 @@ Enter a Custom Percentage number ${nc}e.g. 30 ${bwhite}(empty to skip)${blue}: " case "${preset}" in 1) - sgdisk -o "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 1:0:+512M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 2:0:0 -t 2:8304 -c 2:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -o "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 1:0:+512M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 2:0:0 -t 2:8304 -c 2:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail if [[ "${install}" == "yes" ]]; then autopart="yes" until sanity_check; do : ; done @@ -2748,10 +2791,10 @@ Enter a Custom Percentage number ${nc}e.g. 30 ${bwhite}(empty to skip)${blue}: " fi ;; 2) until set_swapsize; do : ; done - sgdisk -o "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 1:0:+512M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 2:0:+"${swapsize}"G -t 2:8200 -c 2:Swap "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 3:0:0 -t 3:8304 -c 3:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -o "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 1:0:+512M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 2:0:+"${swapsize}"G -t 2:8200 -c 2:Swap "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 3:0:0 -t 3:8304 -c 3:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail if [[ "${install}" == "yes" ]]; then autopart="yes" until sanity_check; do : ; done @@ -2759,10 +2802,10 @@ Enter a Custom Percentage number ${nc}e.g. 30 ${bwhite}(empty to skip)${blue}: " ok fi ;; 3) - sgdisk -o "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 1:0:+512M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 2:0:+"${rootsize}"G -t 2:8304 -c 2:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 3:0:0 -t 3:8302 -c 3:Home "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -o "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 1:0:+512M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 2:0:+"${rootsize}"G -t 2:8304 -c 2:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 3:0:0 -t 3:8302 -c 3:Home "${sgdrive}" > /dev/null 2>&1 || stage_fail if [[ "${install}" == "yes" ]]; then autopart="yes" until sanity_check; do : ; done @@ -2771,11 +2814,11 @@ Enter a Custom Percentage number ${nc}e.g. 30 ${bwhite}(empty to skip)${blue}: " fi ;; 4) until set_swapsize; do : ; done - sgdisk -o "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 1:0:+512M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 2:0:+"${swapsize}"G -t 2:8200 -c 2:Swap "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 3:0:+"${rootsize}"G -t 3:8304 -c 3:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 4:0:0 -t 4:8302 -c 4:Home "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -o "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 1:0:+512M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 2:0:+"${swapsize}"G -t 2:8200 -c 2:Swap "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 3:0:+"${rootsize}"G -t 3:8304 -c 3:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 4:0:0 -t 4:8302 -c 4:Home "${sgdrive}" > /dev/null 2>&1 || stage_fail if [[ "${install}" == "yes" ]]; then autopart="yes" until sanity_check; do : ; done @@ -2783,10 +2826,10 @@ Enter a Custom Percentage number ${nc}e.g. 30 ${bwhite}(empty to skip)${blue}: " ok fi ;; 5) - sgdisk -o "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 1:0:+200M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 2:0:+300M -t 2:ea00 -c 2:XBOOTLDR "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 3:0:0 -t 3:8304 -c 3:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -o "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 1:0:+200M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 2:0:+300M -t 2:ea00 -c 2:XBOOTLDR "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 3:0:0 -t 3:8304 -c 3:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail if [[ "${install}" == "yes" ]]; then autopart="yes" until sanity_check; do : ; done @@ -2795,11 +2838,11 @@ Enter a Custom Percentage number ${nc}e.g. 30 ${bwhite}(empty to skip)${blue}: " fi ;; 6) until set_swapsize; do : ; done - sgdisk -o "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 1:0:+200M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 2:0:+300M -t 2:ea00 -c 2:XBOOTLDR "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 3:0:+"${swapsize}"G -t 3:8200 -c 3:Swap "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 4:0:0 -t 4:8304 -c 4:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -o "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 1:0:+200M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 2:0:+300M -t 2:ea00 -c 2:XBOOTLDR "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 3:0:+"${swapsize}"G -t 3:8200 -c 3:Swap "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 4:0:0 -t 4:8304 -c 4:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail if [[ "${install}" == "yes" ]]; then autopart="yes" until sanity_check; do : ; done @@ -2807,11 +2850,11 @@ Enter a Custom Percentage number ${nc}e.g. 30 ${bwhite}(empty to skip)${blue}: " ok fi ;; 7) - sgdisk -o "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 1:0:+200M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 2:0:+300M -t 2:ea00 -c 2:XBOOTLDR "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 3:0:+"${rootsize}"G -t 3:8304 -c 3:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 4:0:0 -t 4:8302 -c 4:Home "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -o "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 1:0:+200M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 2:0:+300M -t 2:ea00 -c 2:XBOOTLDR "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 3:0:+"${rootsize}"G -t 3:8304 -c 3:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 4:0:0 -t 4:8302 -c 4:Home "${sgdrive}" > /dev/null 2>&1 || stage_fail if [[ "${install}" == "yes" ]]; then autopart="yes" until sanity_check; do : ; done @@ -2820,12 +2863,12 @@ Enter a Custom Percentage number ${nc}e.g. 30 ${bwhite}(empty to skip)${blue}: " fi ;; 8) until set_swapsize; do : ; done - sgdisk -o "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 1:0:+200M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 2:0:+300M -t 2:ea00 -c 2:XBOOTLDR "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 3:0:+"${swapsize}"G -t 3:8200 -c 3:Swap "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 4:0:+"${rootsize}"G -t 4:8304 -c 4:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail - sgdisk -n 5:0:0 -t 5:8302 -c 5:Home "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -o "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 1:0:+200M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 2:0:+300M -t 2:ea00 -c 2:XBOOTLDR "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 3:0:+"${swapsize}"G -t 3:8200 -c 3:Swap "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 4:0:+"${rootsize}"G -t 4:8304 -c 4:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail + sgdisk -I -n 5:0:0 -t 5:8302 -c 5:Home "${sgdrive}" > /dev/null 2>&1 || stage_fail if [[ "${install}" == "yes" ]]; then autopart="yes" until sanity_check; do : ; done @@ -2877,7 +2920,7 @@ Enter a Custom Percentage number ${nc}e.g. 30 ${bwhite}(empty to skip)${blue}: " fi } ################################################################################################### -manual_part (){ +manual_part() { local prompt="Disks" stage_prompt="Partitioning" @@ -2971,7 +3014,7 @@ Enter a disk number ${bwhite}(empty to skip)${blue}: " done } ################################################################################################### -instl_dsk (){ +instl_dsk() { sleep 0.2 NC " @@ -3038,7 +3081,7 @@ Enter a disk number: " fi } ################################################################################################### -sanity_check (){ +sanity_check() { sleep 0.2 NC " @@ -3356,7 +3399,7 @@ ${multi_swap} fi if [[ -e "${esp_dev}" ]]; then - espsize="$(lsblk -b "${esp_dev}" --noheadings --output=size)" + espsize="$(lsblk -dno SIZE --bytes "${esp_dev}")" if [[ "${espsize}" -lt "209715200" ]]; then if [[ "${bootloader}" == "1" ]]; then if [[ "${espmnt}" == "1" ]]; then @@ -3411,6 +3454,10 @@ ${multi_swap} ==> [EFI System Partition ${green}OK${nc}] " elif [[ "${espmnt}" == "2" ]]; then espprt="ok" + sleep 0.2 + NC " + +==> [EFI System Partition ${green}OK${nc}] " fi fi fi @@ -3522,8 +3569,18 @@ ${multi_swap} ok return 0 elif [[ "${partok}" == "n" ]]; then + if [[ "${multibooting}" == "n" ]]; then + if [[ "${smartpart}" == "y" ]]; then + reload + until manual_part; do : ; done + else + reload + until auto_part; do : ; done + fi + elif [[ "${multibooting}" == "y" ]]; then reload until manual_part; do : ; done + fi else y_n return 1 @@ -3606,7 +3663,7 @@ ${multi_swap} fi } ################################################################################################### -ask_crypt (){ +ask_crypt() { local prompt="Encryption Setup" sleep 0.2 @@ -3738,7 +3795,7 @@ Enter a name: " fi } ################################################################################################### -instl (){ +instl() { install="yes" if [[ -z "${lcl_slct}" ]]; then @@ -3761,11 +3818,12 @@ instl (){ fi if [[ -z "${kernelnmbr}" ]]; then - local stage_prompt="Kernel, Bootloader & ESP Mountpoint Setup" + local stage_prompt="Kernel, Bootloader, ESP Mountpoint & UKI Setup" completion_err until slct_krnl; do : ; done until ask_bootldr; do : ; done until slct_espmnt; do : ; done + until set_uki; do : ; done fi if [[ -z "${fs}" ]]; then @@ -3827,11 +3885,12 @@ instl (){ if [[ -n "${REGDOM}" ]]; then until wireless_regdom; do : ; done fi + set_vars chroot_conf fi } ################################################################################################### -swappart (){ +swappart() { local stage_prompt="Swap Partition" sleep 0.2 @@ -3847,7 +3906,7 @@ ${magenta}###${nc}----------------------------------${magenta}[ ${bwhite}Swap P fi } ################################################################################################### -set_mode (){ +set_mode() { if [[ "${rootcount}" -gt "1" || "${espcount}" -gt "1" || "${xbootcount}" -gt "1" || "${homecount}" -gt "1" || "${swapcount}" -gt "1" ]]; then line2 @@ -3928,7 +3987,7 @@ Enter a Mode number: " sleep 0.2 } ################################################################################################### -auto_mode (){ +auto_mode() { sleep 0.2 NC " @@ -3941,7 +4000,7 @@ ${magenta}###${nc}----------------------------------------${magenta}[ ${bwhite}A " sleep 0.2 - espfs="$(lsblk -f --noheadings "${esp_dev}" | awk "{print \$2}")" + espfs="$(lsblk -dno FSTYPE "${esp_dev}")" if [[ "${fs}" == "1" ]]; then if mkfs.ext4 -F -L Root "${root_dev}" > /dev/null 2>&1 ; then @@ -4091,7 +4150,7 @@ ${magenta}###${nc}----------------------------------------${magenta}[ ${bwhite}A fi } ################################################################################################### -manual_mode (){ +manual_mode() { volumes="$(fdisk -l | grep '^/dev' | cat --number)" until form_esp; do : ; done @@ -4112,7 +4171,7 @@ manual_mode (){ fi } ################################################################################################### -form_esp (){ +form_esp() { sleep 0.2 NC " @@ -4125,8 +4184,8 @@ ${magenta}###${nc}-------------------------------${magenta}[ ${bwhite}Format EFI while [[ -n "${form_esp_nmbr}" ]]; do YELLOW " - > Select an EFI System Partition to format as vfat " - NC " + > Select an EFI System Partition to format as ${nc}vfat + ${volumes}" BLUE " @@ -4138,7 +4197,7 @@ Enter a partition number ${bwhite}(empty to skip and proceed)${blue}: " if [[ -n "${form_esp_nmbr}" ]]; then esppart="$(echo "${volumes}" | awk "\$1 == ${form_esp_nmbr} { print \$2}")" - manespfs="$(lsblk -f --noheadings "${esppart}" | awk "{print \$2}")" + manespfs="$(lsblk -dno FSTYPE "${esppart}")" if [[ -e "${esppart}" ]]; then if [[ "${multibooting}" == "n" ]]; then if mkfs.fat -F 32 -n ESP "${esppart}" > /dev/null 2>&1 ; then @@ -4187,7 +4246,7 @@ Enter a partition number ${bwhite}(empty to skip and proceed)${blue}: " done } ################################################################################################### -form_xboot (){ +form_xboot() { sleep 0.2 NC " @@ -4200,8 +4259,8 @@ ${magenta}###${nc}--------------------------${magenta}[ ${bwhite}Format Linux E while [[ -n "${form_xboot_nmbr}" ]]; do YELLOW " - > Select a Linux Extended Boot Partition to format as vfat " - NC " + > Select a Linux Extended Boot Partition to format as ${nc}vfat + ${volumes}" BLUE " @@ -4240,7 +4299,7 @@ Enter a partition number ${bwhite}(empty to skip and proceed)${blue}: " done } ################################################################################################### -form_root (){ +form_root() { sleep 0.2 NC " @@ -4253,8 +4312,8 @@ ${magenta}###${nc}----------------------------------${magenta}[ ${bwhite}Format while [[ -n "${form_root_nmbr}" ]]; do YELLOW " - > Select a ${roottype} Partition to format as ${fsname} " - NC " + > Select a ${roottype} Partition to format as ${nc}${fsname} + ${volumes}" BLUE " @@ -4359,7 +4418,7 @@ Enter a name ${bwhite}(empty to skip and proceed)${blue}: " done } ################################################################################################### -ask_homepart_form (){ +ask_homepart_form() { if [[ ${fs} == "1" && -e "${home_dev}" && "${sep_home}" == "y" ]]; then if [[ "${smartpart}" == "y" ]]; then @@ -4405,7 +4464,7 @@ ask_homepart_form (){ fi } ################################################################################################### -form_home (){ +form_home() { sleep 0.2 NC " @@ -4418,8 +4477,8 @@ ${magenta}###${nc}----------------------------------${magenta}[ ${bwhite}Format while [[ -n "${form_home_nmbr}" ]]; do YELLOW " - > Select a /Home Partition to format as Ext4 " - NC " + > Select a /Home Partition to format as ${nc}Ext4 + ${volumes} " @@ -4484,7 +4543,7 @@ Enter a name ${bwhite}(empty to skip and proceed)${blue}: " done } ################################################################################################### -mount_mnt (){ +mount_mnt() { local prompt="Mount ${roottype}" sleep 0.2 @@ -4495,8 +4554,8 @@ ${magenta}###${nc}----------------------------------${magenta}[ ${bwhite}Mount " YELLOW " - > Select a ${roottype} Partition to mount to ${nc}/mnt " - NC " + > Select a ${roottype} Partition to mount to ${nc}/mnt + ${volumes} " @@ -4551,7 +4610,7 @@ Enter your${nc} ${cyan}${roottype} ${blue}partition number: " fi } ################################################################################################### -mount_esp (){ +mount_esp() { local prompt="Mount ESP" sleep 0.2 @@ -4562,8 +4621,8 @@ ${magenta}###${nc}-----------------------------------${magenta}[ ${bwhite}Mount " YELLOW " - > Select an EFI System Partition to mount to ${nc}${esp_mount} " - NC " + > Select an EFI System Partition to mount to ${nc}${esp_mount} + ${volumes}" @@ -4596,7 +4655,7 @@ Enter your${nc} ${cyan}/ESP ${blue}partition number: " fi } ################################################################################################### -mount_xboot (){ +mount_xboot() { local prompt="Mount XBOOTLDR" sleep 0.2 @@ -4607,8 +4666,8 @@ ${magenta}###${nc}--------------------------------${magenta}[ ${bwhite}Mount XBO " YELLOW " - > Select a Linux Extended Boot Partition to mount to ${nc}/mnt/boot " - NC " + > Select a Linux Extended Boot Partition to mount to ${nc}/mnt/boot + ${volumes}" @@ -4642,7 +4701,7 @@ Enter your${nc} ${cyan}/XBOOTLDR ${blue}partition number: " fi } ################################################################################################### -mount_home (){ +mount_home() { local prompt="Mount /Home" sleep 0.2 @@ -4653,8 +4712,8 @@ ${magenta}###${nc}----------------------------------${magenta}[ ${bwhite}Mount " YELLOW " - > Select a /Home Partition to mount to ${nc}/mnt/home " - NC " + > Select a /Home Partition to mount to ${nc}/mnt/home + ${volumes}" @@ -4689,7 +4748,7 @@ Enter your${nc} ${cyan}/Home ${blue}partition number: " fi } ################################################################################################### -confirm_status (){ +confirm_status() { local prompt="System Ready" sleep 0.2 @@ -4721,6 +4780,7 @@ ${magenta}###${nc}-------------------------------${magenta}[ ${bwhite}Confirm In if [[ -n "${REGDOM}" ]]; then until wireless_regdom; do : ; done fi + set_vars chroot_conf elif [[ "${agree}" == "no" ]]; then unmount @@ -4731,7 +4791,7 @@ ${magenta}###${nc}-------------------------------${magenta}[ ${bwhite}Confirm In fi } ################################################################################################### -revise (){ +revise() { revision="yes" xbootloader="" @@ -4746,8 +4806,10 @@ revise (){ until slct_krnl; do : ; done until ask_bootldr; do : ; done until slct_espmnt; do : ; done + until set_uki; do : ; done until ask_fs; do : ; done until ask_swap; do : ; done + until dtct_hyper; do : ; done until dtct_vga; do : ; done until slct_dsktp; do : ; done until boot_entr; do : ; done @@ -4771,11 +4833,12 @@ revise (){ if [[ -n "${REGDOM}" ]]; then until wireless_regdom; do : ; done fi + set_vars chroot_conf fi } ################################################################################################### -sec_erase (){ +sec_erase() { local prompt="Secure Erasure" sleep 0.2 @@ -4834,7 +4897,7 @@ Enter a disk number ${bwhite}(empty to skip)${blue}: " done } ################################################################################################### -luks (){ +luks() { espfs="$(lsblk -f --noheadings "${esp_dev}" | awk "{print \$2}")" sleep 0.2 @@ -5039,7 +5102,7 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}LUKS sleep 0.2 } ################################################################################################### -opt_pcmn (){ +opt_pcmn() { local prompt="PacMan" sleep 0.2 @@ -5136,7 +5199,7 @@ Enter a number: " ok } ################################################################################################### -pacstrap_system (){ +pacstrap_system() { local prompt="Pacstrap System" sleep 0.2 @@ -5154,11 +5217,11 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Pacs fi fi if [[ "${vendor}" == "Virtual Machine" ]]; then - basepkgs="base pkgstats nano sudo vim ${bootldr_pkgs} ${fstools} ${kernel} ${microcode} ${vmpkgs} ${devel} ${zram}" + basepkgs="base pkgstats nano sudo vim ${bootldr_pkgs} ${fstools} ${kernel} ${microcode} ${vmpkgs} ${devel} ${zram} ${ukify}" elif [[ "${vendor}" == "Nvidia" ]]; then - basepkgs="base linux-firmware pkgstats nano sudo vim ${bootldr_pkgs} ${fstools} ${kernel} ${kernel}-headers ${microcode} ${vgapkgs} ${wireless_reg} ${devel} ${zram}" + basepkgs="base linux-firmware pkgstats nano sudo vim ${bootldr_pkgs} ${fstools} ${kernel} ${kernel}-headers ${microcode} ${vgapkgs} ${wireless_reg} ${devel} ${zram} ${ukify}" else - basepkgs="base linux-firmware pkgstats nano sudo vim ${bootldr_pkgs} ${fstools} ${kernel} ${microcode} ${vgapkgs} ${wireless_reg} ${devel} ${zram}" + basepkgs="base linux-firmware pkgstats nano sudo vim ${bootldr_pkgs} ${fstools} ${kernel} ${microcode} ${vgapkgs} ${wireless_reg} ${devel} ${zram} ${ukify}" fi case "${packages}" in @@ -5168,8 +5231,8 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Pacs bluetooth="bluetooth" network="NetworkManager" ;; - 2) # Custom Plasma & Systemd-boot & Optimized System: - deskpkgs="${basepkgs} alsa-firmware alsa-utils arj ark bluedevil breeze-gtk ccache cups-pdf cups-pk-helper dolphin-plugins e2fsprogs efibootmgr exfatprogs fdkaac ffmpegthumbs firefox git glibc-locales gst-libav gst-plugin-libcamera gst-plugin-msdk gst-plugin-opencv gst-plugin-pipewire gst-plugin-qmlgl gst-plugin-va gst-plugin-wpe gst-plugins-ugly gstreamer-vaapi htop icoutils ipp-usb kamera kamoso kate kcalc kde-gtk-config kdegraphics-mobipocket kdegraphics-thumbnailers kdenetwork-filesharing kdeplasma-addons kdesdk-kio kdesdk-thumbnailers kdialog keditbookmarks kget kimageformats kinit kio-admin kio-gdrive kio-zeroconf kompare konsole kscreen kvantum kwrited libappimage libfido2 libktorrent libmms libnfs libva-utils lirc lrzip lua52-socket lzop mac man-db man-pages mesa-demos mesa-utils mold nano-syntax-highlighting nss-mdns ntfs-3g okular opus-tools p7zip packagekit-qt6 pacman-contrib partitionmanager pbzip2 pdfmixtool pigz pipewire-alsa pipewire-pulse plasma-browser-integration plasma-desktop plasma-disks plasma-firewall plasma-nm plasma-pa plasma-wayland-protocols power-profiles-daemon powerdevil powerline powerline-fonts print-manager python-pyqt6 python-reportlab qbittorrent qt6-imageformats qt6-scxml qt6-virtualkeyboard realtime-privileges reflector rng-tools sddm-kcm skanlite sof-firmware sox spectacle sshfs system-config-printer terminus-font timidity++ ttf-ubuntu-font-family unarchiver unrar unzip usb_modeswitch usbutils vdpauinfo vlc vorbis-tools vorbisgain wget xdg-desktop-portal xdg-desktop-portal-gtk xdg-desktop-portal-kde xsane zip zsh zsh-autosuggestions zsh-completions zsh-syntax-highlighting ${nrg_plc}" ;; + 2) # Minimal Plasma & Apps & System optimizations: + deskpkgs="${basepkgs} alsa-firmware alsa-utils arj ark bluedevil breeze-gtk ccache cups-pdf cups-pk-helper dolphin-plugins e2fsprogs efibootmgr exfatprogs fdkaac ffmpegthumbs firefox git glibc-locales gst-libav gst-plugin-libcamera gst-plugin-msdk gst-plugin-opencv gst-plugin-pipewire gst-plugin-qmlgl gst-plugin-va gst-plugin-wpe gst-plugins-ugly gstreamer-vaapi htop icoutils ipp-usb kamera kamoso kate kcalc kde-gtk-config kdegraphics-mobipocket kdegraphics-thumbnailers kdenetwork-filesharing kdeplasma-addons kdesdk-kio kdesdk-thumbnailers kdialog keditbookmarks kget kimageformats kinit kio-admin kio-gdrive kio-zeroconf kompare konsole kscreen kvantum kwrited libappimage libfido2 libktorrent libmms libnfs libva-utils lirc lrzip lua52-socket lzop mac man-db man-pages mesa-demos mesa-utils mold nano-syntax-highlighting nss-mdns ntfs-3g okular opus-tools p7zip packagekit-qt6 pacman-contrib partitionmanager pbzip2 pdfmixtool pigz pipewire-alsa pipewire-pulse plasma-browser-integration plasma-desktop plasma-disks plasma-firewall plasma-nm plasma-pa plasma-wayland-protocols power-profiles-daemon powerdevil powerline powerline-fonts print-manager python-pyqt6 python-reportlab qbittorrent qt6-imageformats qt6-scxml qt6-virtualkeyboard realtime-privileges reflector rng-tools sddm-kcm skanlite sof-firmware sox spectacle sshfs system-config-printer terminus-font timidity++ ttf-ubuntu-font-family unarchiver unrar unzip usb_modeswitch usbutils vdpauinfo vlc vorbis-tools vorbisgain wget xdg-desktop-portal xdg-desktop-portal-gtk xdg-desktop-portal-kde zip zsh zsh-autosuggestions zsh-completions zsh-syntax-highlighting ${nrg_plc}" ;; 3) # Gnome Desktop: deskpkgs="${basepkgs} gnome networkmanager" @@ -5177,7 +5240,7 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Pacs bluetooth="bluetooth" network="NetworkManager" ;; - 4) # Custom Gnome & Systemd-boot & Optimized System: + 4) # Minimal Gnome & Apps & System optimizations: deskpkgs="${basepkgs} evince file-roller gdm gnome-calculator gnome-clocks gnome-console gnome-control-center gnome-disk-utility gnome-keyring gnome-menus gnome-session gnome-shell-extensions gnome-shell-extension-appindicator gnome-system-monitor gnome-text-editor gnome-tweaks gvfs gvfs-afc gvfs-mtp loupe malcontent nautilus networkmanager power-profiles-daemon simple-scan sushi system-config-printer xdg-desktop-portal-gnome xdg-user-dirs-gtk alsa-firmware alsa-utils ccache cups-pdf e2fsprogs efibootmgr exfatprogs fdkaac git glib2-devel glibc-locales gnome-browser-connector gparted gst-libav gst-plugin-libcamera gst-plugin-msdk gst-plugin-opencv gst-plugin-pipewire gst-plugin-qmlgl gst-plugin-va gst-plugin-wpe gst-plugins-ugly gstreamer-vaapi htop icoutils ipp-usb libfido2 libva-utils lrzip mac man-db man-pages meld mesa-utils mold nano-syntax-highlighting nss-mdns ntfs-3g p7zip pacman-contrib pbzip2 pdfmixtool pigz pipewire-alsa pipewire-pulse powerline powerline-fonts qbittorrent realtime-privileges reflector rng-tools sof-firmware sox terminus-font ttf-ubuntu-font-family unrar unzip usb_modeswitch usbutils vdpauinfo vlc wget zip zsh zsh-autosuggestions zsh-completions zsh-syntax-highlighting ${nrg_plc}" ;; 5) # Xfce Desktop: @@ -5238,7 +5301,7 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Pacs fi } ################################################################################################### -swapfile (){ +swapfile() { local stage_prompt="Swapfile" sleep 0.2 @@ -5247,11 +5310,11 @@ swapfile (){ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Swapfile Setup${nc} ${magenta}]${nc}-------------------------------------${magenta}###${nc} " - if arch-chroot /mnt <<-SWAP > /dev/null 2>&1 ; then + if arch-chroot /mnt <<-SWAPFILE > /dev/null 2>&1 ; then mkswap -U clear --size ${swapsize}G --file /swapfile > /dev/null 2>&1 || exit -SWAP +SWAPFILE cat >> /mnt/etc/fstab <<-FSTAB || err_abort - /swapfile none swap defaults 0 0 + /swapfile none swap defaults 0 0 FSTAB stage_ok else @@ -5259,7 +5322,7 @@ FSTAB fi } ################################################################################################### -swapfile_btrfs (){ +swapfile_btrfs() { local stage_prompt="Btfrs Swapfile" sleep 0.2 @@ -5268,11 +5331,11 @@ swapfile_btrfs (){ ${magenta}###${nc}----------------------------------${magenta}[ ${bwhite}Btrfs Swapfile Setup${nc} ${magenta}]${nc}----------------------------------${magenta}###${nc} " - if arch-chroot /mnt <<-SWAP > /dev/null 2>&1 ; then + if arch-chroot /mnt <<-SWAPFILE > /dev/null 2>&1 ; then btrfs filesystem mkswapfile --size ${swapsize}g --uuid clear /swap/swapfile > /dev/null 2>&1 || exit -SWAP +SWAPFILE cat >> /mnt/etc/fstab <<-FSTAB || err_abort - /swap/swapfile none swap defaults 0 0 + /swap/swapfile none swap defaults 0 0 FSTAB stage_ok else @@ -5280,7 +5343,7 @@ FSTAB fi } ################################################################################################### -wireless_regdom (){ +wireless_regdom() { local stage_prompt="Wireless Regdom" sleep 0.2 @@ -5296,40 +5359,98 @@ ${magenta}###${nc}--------------------------${magenta}[ ${bwhite}Setting Up Wire fi } ################################################################################################### -btldr_conf (){ +main_chroot() { + + stage_prompt="Base System" + if arch-chroot /mnt <<-CONF > /dev/null 2>&1 ; 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 <<-MKINIT_CONF > /etc/mkinitcpio.conf.d/mkinitcpiod.conf || exit + ${mkinitcpio_mods} + ${mkinitcpio_hooks} +MKINIT_CONF + 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 + useradd -m -G wheel -s /bin/bash ${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 + stage_fail + fi +} +################################################################################################### +btldr_conf() { if [[ "${bootloader}" == "1" ]]; then cnfg local stage_prompt="Systemd-boot" if [[ "${espmnt}" == "1" ]]; then - if arch-chroot /mnt <<-XBOOTCTL > /dev/null 2>&1 ; then - bootctl --esp-path=/efi --boot-path=/boot install || exit - echo "default arch.conf" > /boot/loader/loader.conf || exit - echo " - title ${entrname} - linux /vmlinuz-${kernel} - initrd /initramfs-${kernel}.img - options rw ${boot_opts}" | tee /boot/loader/entries/arch.conf || exit - systemctl enable systemd-boot-update || exit -XBOOTCTL - stage_ok - else - stage_fail + if [[ "${uki}" == "n" ]]; then + if arch-chroot /mnt <<-XBOOTCTL_NOUKI > /dev/null 2>&1 ; then + bootctl --esp-path=/efi --boot-path=/boot install || exit + echo "default arch.conf" > /boot/loader/loader.conf || exit + cat <<-SDBOOT_CONF > /boot/loader/entries/arch.conf || exit + title ${entrname} + linux /vmlinuz-${kernel} + initrd /initramfs-${kernel}.img + options rw ${boot_opts} +SDBOOT_CONF + systemctl enable systemd-boot-update || exit +XBOOTCTL_NOUKI + stage_ok + else + stage_fail + fi + elif [[ "${uki}" == "y" ]]; then + if arch-chroot /mnt <<-XBOOTCTL_UKI > /dev/null 2>&1 ; then + bootctl --esp-path=/efi --boot-path=/boot install || exit + systemctl enable systemd-boot-update || exit +XBOOTCTL_UKI + stage_ok + else + stage_fail + fi fi elif [[ "${espmnt}" == "2" ]]; then - if arch-chroot /mnt <<-BOOTCTL > /dev/null 2>&1 ; then - bootctl install || exit - echo "default arch.conf" > /boot/loader/loader.conf || exit - echo " - title ${entrname} - linux /vmlinuz-${kernel} - initrd /initramfs-${kernel}.img - options rw ${boot_opts}" | tee /boot/loader/entries/arch.conf || exit - systemctl enable systemd-boot-update || exit -BOOTCTL - stage_ok - else - stage_fail + if [[ "${uki}" == "n" ]]; then + if arch-chroot /mnt <<-BOOTCTL_NOUKI > /dev/null 2>&1 ; then + bootctl install || exit + echo "default arch.conf" > /boot/loader/loader.conf || exit + cat <<-SDBOOT_CONF > /boot/loader/entries/arch.conf || exit + title ${entrname} + linux /vmlinuz-${kernel} + initrd /initramfs-${kernel}.img + options rw ${boot_opts} +SDBOOT_CONF + systemctl enable systemd-boot-update || exit +BOOTCTL_NOUKI + stage_ok + else + stage_fail + fi + elif [[ "${uki}" == "y" ]]; then + if arch-chroot /mnt <<-BOOTCTL_UKI > /dev/null 2>&1 ; then + bootctl install || exit + systemctl enable systemd-boot-update || exit +BOOTCTL_UKI + stage_ok + else + stage_fail + fi fi fi elif [[ "${bootloader}" == "2" ]]; then @@ -5337,16 +5458,50 @@ BOOTCTL local stage_prompt="Grub" if arch-chroot /mnt <<-GRUB > /dev/null 2>&1 ; then grub-install --target=x86_64-efi --efi-directory=${btldr_esp_mount} --bootloader-id=GRUB || exit - sed -i \ - -e 's|^GRUB_CMDLINE_LINUX_DEFAULT.*|GRUB_CMDLINE_LINUX_DEFAULT="${boot_opts}"|g' \ - -e "/^#GRUB_DISABLE_OS_PROBER=false/s/^#//" \ - /etc/default/grub || exit - grub-mkconfig -o /boot/grub/grub.cfg || exit + mkdir -p /etc/default/grub.d/ || exit + cat <<-GRUB_CONF > /etc/default/grub.d/00-custom.cfg || exit + GRUB_DEFAULT=0 + GRUB_TIMEOUT=5 + GRUB_DISTRIBUTOR="Arch" + GRUB_CMDLINE_LINUX_DEFAULT="${boot_opts}" + GRUB_CMDLINE_LINUX="" + GRUB_PRELOAD_MODULES="part_gpt part_msdos" + GRUB_ENABLE_CRYPTODISK=y + GRUB_TIMEOUT_STYLE=menu + GRUB_TERMINAL_INPUT=console + GRUB_GFXMODE=auto + GRUB_GFXPAYLOAD_LINUX=keep + GRUB_DISABLE_RECOVERY=true + GRUB_DISABLE_OS_PROBER=false + #GRUB_TERMINAL_OUTPUT=console +GRUB_CONF + grub-mkconfig -o /boot/grub/grub.cfg GRUB - stage_ok - else - stage_fail - fi + stage_ok + else + stage_fail + fi + + if [[ "${uki}" == "y" ]]; then + cnfg + local stage_prompt="Grub_Uki-Entry" + esp_dev_uuid="$(lsblk -dno UUID "${esp_dev}")" + if arch-chroot /mnt <<-GRUB_UKI > /dev/null 2>&1 ; then + cat <<-GRUB_UKI_ENTRY >> /boot/grub/custom.cfg + menuentry "Arch Linux" { + insmod fat + insmod chain + search --no-floppy --set=root --fs-uuid ${esp_dev_uuid} + chainloader /EFI/Linux/arch-${kernel}.efi + } +GRUB_UKI_ENTRY +GRUB_UKI + stage_ok + else + stage_fail + fi + fi + if [[ "${fs}" == "2" ]]; then cnfg local stage_prompt="Grub-Btrfsd" @@ -5358,11 +5513,12 @@ GRUB_BTRFSD stage_fail fi fi + if [[ "${vgaconf}" == "y" && "${vendor}" == "Nvidia" ]]; then cnfg local stage_prompt="Grub-Nvidia" if arch-chroot /mnt <<-NVIDIA_GRUB > /dev/null 2>&1 ; then - sed -i "/^#GRUB_TERMINAL_OUTPUT=console/s/^#//" /etc/default/grub || exit + sed -i "/^#GRUB_TERMINAL_OUTPUT=console/s/^#//" /etc/default/grub.d/00-custom.cfg || exit grub-mkconfig -o /boot/grub/grub.cfg || exit NVIDIA_GRUB stage_ok @@ -5373,7 +5529,7 @@ NVIDIA_GRUB fi } ################################################################################################### -trim_conf (){ +trim_conf() { if [[ -n "${trim}" ]]; then cnfg @@ -5388,7 +5544,7 @@ TRIM fi } ################################################################################################### -vm_serv_conf (){ +vm_serv_conf() { if [[ -n "${vm_services}" ]]; then cnfg @@ -5403,7 +5559,7 @@ VM fi } ################################################################################################### -nvidia_serv_conf (){ +nvidia_serv_conf() { if [[ -n "${nvidia_services}" ]]; then cnfg @@ -5418,7 +5574,7 @@ NVIDIA_SERV fi } ################################################################################################### -zram_conf (){ +zram_conf() { if [[ -n "${zram}" ]]; then cnfg @@ -5426,10 +5582,11 @@ zram_conf (){ zram_service="systemd-zram-setup@zram0.service" if arch-chroot /mnt <<-ZRAM > /dev/null 2>&1 ; then mkdir -p /etc/systemd/zram-generator.conf.d - echo " - [zram0] - zram-size = ram / 2 - compression-algorithm = zstd" | tee /etc/systemd/zram-generator.conf.d/zram.conf || exit + cat <<-ZRAM_CONF > /etc/systemd/zram-generator.conf.d/zram.conf || exit + [zram0] + zram-size = ram / 2 + compression-algorithm = zstd +ZRAM_CONF systemctl daemon-reload || exit systemctl start ${zram_service} || exit ZRAM @@ -5440,7 +5597,7 @@ ZRAM fi } ################################################################################################### -nvidia_hook_conf (){ +nvidia_hook_conf() { if [[ "${vgaconf}" == "y" && "${vendor}" == "Nvidia" ]]; then if [[ "${kernelnmbr}" == "1" ]] || [[ "${kernelnmbr}" == "2" && "${family}" == "1" ]] || [[ "${kernelnmbr}" == "2" && "${family}" == "2" && "${nvdriver}" == "2" ]]; then @@ -5448,21 +5605,22 @@ nvidia_hook_conf (){ local stage_prompt="Nvidia-Hook" if arch-chroot /mnt <<-NVIDIA_HOOK > /dev/null 2>&1 ; then mkdir -p /etc/pacman.d/hooks/ || exit - echo " - [Trigger] - Operation=Install - Operation=Upgrade - Operation=Remove - Type=Package - Target=${nvname} - Target=${kernel} + 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' " | tee /etc/pacman.d/hooks/nvidia.hook || exit + [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 NVIDIA_HOOK stage_ok else @@ -5472,46 +5630,61 @@ NVIDIA_HOOK fi } ################################################################################################### -main_chroot (){ +uki_conf() { - stage_prompt="Base System" - if arch-chroot /mnt <<-CONF > /dev/null 2>&1 ; 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 - echo " - ${mkinitcpio_mods} - ${mkinitcpio_hooks}" | tee /etc/mkinitcpio.conf.d/mkinitcpiod.conf || 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 - echo " - 127.0.0.1 localhost - ::1 localhost - 127.0.1.1 ${HOSTNAME}.localdomain ${HOSTNAME}" >> /etc/hosts || exit - echo root:${ROOTPASSWD2} | chpasswd || exit - useradd -m -G wheel -s /bin/bash ${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 - stage_fail + if [[ "${uki}" == "y" ]]; then + cnfg + local stage_prompt="UKI" + if [[ ! -e "${esp_mount}"/EFI/Linux ]]; then + mkdir -p "${esp_mount}"/EFI/Linux || exit + fi + if [[ "${bootloader}" == "1" ]]; then + if arch-chroot /mnt <<- UKI > /dev/null 2>&1 ; then + mkdir /etc/cmdline.d || exit + echo "rw ${boot_opts}" | tee /etc/cmdline.d/cmdline.conf || exit + cp /etc/mkinitcpio.d/${kernel}.preset /etc/mkinitcpio.d/${kernel}.preset.bak + cat <<-MKINITCPIO_PRESET > /etc/mkinitcpio.d/${kernel}.preset || exit + ALL_kver="/boot/vmlinuz-${kernel}" + PRESETS=('default') + default_config="/etc/mkinitcpio.conf.d/mkinitcpiod.conf" + default_uki="${btldr_esp_mount}/EFI/Linux/arch-${kernel}.efi" +MKINITCPIO_PRESET + mkinitcpio -P || exit +UKI + stage_ok + else + stage_fail + fi + if [[ -e /mnt/boot/initramfs-"${kernel}".img ]]; then + rm /mnt/boot/initramfs-"${kernel}".img || exit + fi + if [[ -e /mnt/boot/initramfs-"${kernel}"-fallback.img ]]; then + rm /mnt/boot/initramfs-"${kernel}"-fallback.img || exit + fi + elif [[ "${bootloader}" == "2" ]]; then + if arch-chroot /mnt <<- UKI > /dev/null 2>&1 ; then + mkdir /etc/cmdline.d || exit + echo "rw ${boot_opts}" | tee /etc/cmdline.d/cmdline.conf || exit + cp /etc/mkinitcpio.d/${kernel}.preset /etc/mkinitcpio.d/${kernel}.preset.bak + cat <<-MKINITCPIO_PRESET > /etc/mkinitcpio.d/${kernel}.preset || exit + ALL_kver="/boot/vmlinuz-${kernel}" + PRESETS=('default') + default_config="/etc/mkinitcpio.conf.d/mkinitcpiod.conf" + default_image="/boot/initramfs-${kernel}.img" + default_uki="${btldr_esp_mount}/EFI/Linux/arch-${kernel}.efi" +MKINITCPIO_PRESET + mkinitcpio -P || exit +UKI + stage_ok + else + stage_fail + fi + fi fi } ################################################################################################### -chroot_conf (){ +set_vars() { - sleep 0.2 - NC " - - -${magenta}###${nc}--------------------------------${magenta}[ ${bwhite}Chroot & Configure System${nc} ${magenta}]${nc}--------------------------------${magenta}###${nc} - " # Linux-Hardened = No Swap if [[ "${kernelnmbr}" == "3" ]]; then swapmode="4" @@ -5708,7 +5881,16 @@ ${magenta}###${nc}--------------------------------${magenta}[ ${bwhite}Chroot & fi fi -#-------------------------------------------------------------------------------------------------- +} +################################################################################################### +chroot_conf() { + + sleep 0.2 + NC " + + +${magenta}###${nc}--------------------------------${magenta}[ ${bwhite}Chroot & Configure System${nc} ${magenta}]${nc}--------------------------------${magenta}###${nc} + " # 'Vanilla' Configuration: if [[ "${packages}" =~ ^(1|3|5|6|7|8|9|10|11)$ ]]; then @@ -5784,6 +5966,7 @@ NETWORK nvidia_serv_conf zram_conf nvidia_hook_conf + uki_conf completion fi #-------------------------------------------------------------------------------------------------- @@ -5839,12 +6022,13 @@ CUSTOM_SERV nvidia_serv_conf zram_conf nvidia_hook_conf + uki_conf completion fi #-------------------------------------------------------------------------------------------------- - # Plasma / Gnome & Systemd-boot Optimized System Configuration: + # Minimal Plasma/Gnome Optimized System Configuration: if [[ "${packages}" == "2" || "${packages}" == "4" ]]; then - stage_prompt="Custom System" + stage_prompt="Optimized System" cnfg if [[ "${packages}" == "2" ]]; then displaymanager="sddm" @@ -5856,7 +6040,7 @@ CUSTOM_SERV ${nrg_plc} performance NRG fi - if arch-chroot /mnt <<-CUSTOM_CONF > /dev/null 2>&1 ; then + if arch-chroot /mnt <<-OPTIMIZED_CONF > /dev/null 2>&1 ; then sed -i "/^#${SETLOCALE}/s/^#//" /etc/locale.gen || exit locale-gen || exit echo LANG=${SETLOCALE} > /etc/locale.conf || exit @@ -5864,137 +6048,142 @@ NRG echo KEYMAP=${SETKBD} > /etc/vconsole.conf || exit sed -i "/^#Color/s/^#//" /etc/pacman.conf || exit update-pciids || exit - echo ' - ${mkinitcpio_mods} - ${mkinitcpio_hooks} - COMPRESSION="zstd" - COMPRESSION_OPTIONS=(-c -T$(nproc) --auto-threads=logical -) - MODULES_DECOMPRESS="yes"' | tee /etc/mkinitcpio.conf.d/mkinitcpiod.conf || exit + cat <<-MKINITCPIO_CONF > /etc/mkinitcpio.conf.d/mkinitcpiod.conf || exit + ${mkinitcpio_mods} + ${mkinitcpio_hooks} + COMPRESSION="zstd" + COMPRESSION_OPTIONS=(-c -T$(nproc) --auto-threads=logical -) + MODULES_DECOMPRESS="yes" +MKINITCPIO_CONF mkinitcpio -P || exit - echo ' - CFLAGS="-march=native -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer" - LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,-z,pack-relative-relocs,-fuse-ld=mold" - RUSTFLAGS="-C force-frame-pointers=yes -C opt-level=3 -C target-cpu=native -C link-arg=-fuse-ld=mold" - MAKEFLAGS="-j$(nproc)" - BUILDENV=(!distcc color ccache check !sign) - OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug lto) - COMPRESSGZ=(pigz -c -f -n) - COMPRESSBZ2=(pbzip2 -c -f) - COMPRESSZST=(zstd -c -T0 --auto-threads=logical -)' | tee /etc/makepkg.conf.d/makepkgd.conf || exit + cat <<-MAKEPKG_CONF > /etc/makepkg.conf.d/makepkgd.conf || exit + CFLAGS="-march=native -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer" + LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,-z,pack-relative-relocs,-fuse-ld=mold" + RUSTFLAGS="-C force-frame-pointers=yes -C opt-level=3 -C target-cpu=native -C link-arg=-fuse-ld=mold" + MAKEFLAGS="-j$(nproc)" + BUILDENV=(!distcc color ccache check !sign) + OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug lto) + COMPRESSGZ=(pigz -c -f -n) + COMPRESSBZ2=(pbzip2 -c -f) + COMPRESSZST=(zstd -c -T0 --auto-threads=logical -) +MAKEPKG_CONF 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 - echo " - 127.0.0.1 localhost - ::1 localhost - 127.0.1.1 ${HOSTNAME}.localdomain ${HOSTNAME}" >> /etc/hosts || exit - echo " - net.core.netdev_max_backlog = 16384 - net.core.somaxconn = 8192 - net.core.rmem_default = 1048576 - net.core.rmem_max = 16777216 - net.core.wmem_default = 1048576 - net.core.wmem_max = 16777216 - net.core.optmem_max = 65536 - net.ipv4.tcp_rmem = 4096 1048576 2097152 - net.ipv4.tcp_wmem = 4096 65536 16777216 - net.ipv4.udp_rmem_min = 8192 - net.ipv4.udp_wmem_min = 8192 - net.ipv4.tcp_fastopen = 3 - net.ipv4.tcp_max_syn_backlog = 8192 - net.ipv4.tcp_max_tw_buckets = 2000000 - net.ipv4.tcp_tw_reuse = 1 - net.ipv4.tcp_fin_timeout = 10 - net.ipv4.tcp_slow_start_after_idle = 0 - net.ipv4.tcp_keepalive_time = 60 - net.ipv4.tcp_keepalive_intvl = 10 - net.ipv4.tcp_keepalive_probes = 6 - net.ipv4.tcp_mtu_probing = 1 - net.ipv4.tcp_sack = 1 - net.core.default_qdisc = cake - net.ipv4.tcp_congestion_control = bbr - net.ipv4.ip_local_port_range = 30000 65535 - net.ipv4.conf.default.rp_filter = 1 - net.ipv4.conf.all.rp_filter = 1 - vm.vfs_cache_pressure = 50 - vm.mmap_min_addr = 65536 - kernel.printk = 0 0 0 0 - ${perf_stream}" | tee /etc/sysctl.d/99-sysctld.conf || exit - echo " - [defaults] - ntfs:ntfs3_defaults=uid=1000,gid=1000,windows_names - ntfs:ntfs3_allow=uid=1000,gid=1000,umask,dmask,fmask,iocharset,discard,nodiscard,sparse,nosparse,hidden,nohidden,sys_immutable,nosys_immutable,showmeta,noshowmeta,prealloc,noprealloc,hide_dot_files,nohide_dot_files,windows_names,nocase,case" | tee /etc/udisks2/mount_options.conf || exit - echo ' - // 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) { - var YES = polkit.Result.YES; - var permission = { - // required for udisks1: - "org.freedesktop.udisks.filesystem-mount": YES, - "org.freedesktop.udisks.luks-unlock": YES, - "org.freedesktop.udisks.drive-eject": YES, - "org.freedesktop.udisks.drive-detach": YES, - // required for udisks2: - "org.freedesktop.udisks2.filesystem-mount": YES, - "org.freedesktop.udisks2.encrypted-unlock": YES, - "org.freedesktop.udisks2.eject-media": YES, - "org.freedesktop.udisks2.power-off-drive": YES, - // Dolphin specific: - "org.freedesktop.udisks2.filesystem-mount-system": YES, - // required for udisks2 if using udiskie from another seat (e.g. systemd): - "org.freedesktop.udisks2.filesystem-mount-other-seat": YES, - "org.freedesktop.udisks2.filesystem-unmount-others": YES, - "org.freedesktop.udisks2.encrypted-unlock-other-seat": YES, - "org.freedesktop.udisks2.encrypted-unlock-system": YES, - "org.freedesktop.udisks2.eject-media-other-seat": YES, - "org.freedesktop.udisks2.power-off-drive-other-seat": YES - }; - if (subject.isInGroup("wheel")) { - return permission[action.id]; - } - });' | tee /etc/polkit-1/rules.d/99-udisks2.rules || exit + cat <<-HOSTS >> /etc/hosts || exit + 127.0.0.1 localhost + ::1 localhost + 127.0.1.1 ${HOSTNAME}.localdomain ${HOSTNAME} +HOSTS + cat <<-SYSCTL_CONF > /etc/sysctl.d/99-sysctld.conf || exit + net.core.netdev_max_backlog = 16384 + net.core.somaxconn = 8192 + net.core.rmem_default = 1048576 + net.core.rmem_max = 16777216 + net.core.wmem_default = 1048576 + net.core.wmem_max = 16777216 + net.core.optmem_max = 65536 + net.ipv4.tcp_rmem = 4096 1048576 2097152 + net.ipv4.tcp_wmem = 4096 65536 16777216 + net.ipv4.udp_rmem_min = 8192 + net.ipv4.udp_wmem_min = 8192 + net.ipv4.tcp_fastopen = 3 + net.ipv4.tcp_max_syn_backlog = 8192 + net.ipv4.tcp_max_tw_buckets = 2000000 + net.ipv4.tcp_tw_reuse = 1 + net.ipv4.tcp_fin_timeout = 10 + net.ipv4.tcp_slow_start_after_idle = 0 + net.ipv4.tcp_keepalive_time = 60 + net.ipv4.tcp_keepalive_intvl = 10 + net.ipv4.tcp_keepalive_probes = 6 + net.ipv4.tcp_mtu_probing = 1 + net.ipv4.tcp_sack = 1 + net.core.default_qdisc = cake + net.ipv4.tcp_congestion_control = bbr + net.ipv4.ip_local_port_range = 30000 65535 + net.ipv4.conf.default.rp_filter = 1 + net.ipv4.conf.all.rp_filter = 1 + vm.vfs_cache_pressure = 50 + vm.mmap_min_addr = 65536 + kernel.printk = 0 0 0 0 + ${perf_stream} +SYSCTL_CONF + cat <<-UDISKS2_CONF > /etc/udisks2/mount_options.conf || exit + [defaults] + ntfs:ntfs3_defaults=uid=1000,gid=1000,windows_names + ntfs:ntfs3_allow=uid=1000,gid=1000,umask,dmask,fmask,iocharset,discard,nodiscard,sparse,nosparse,hidden,nohidden,sys_immutable,nosys_immutable,showmeta,noshowmeta,prealloc,noprealloc,hide_dot_files,nohide_dot_files,windows_names,nocase,case +UDISKS2_CONF + cat <<-POLKIT_CONF > /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) { + var YES = polkit.Result.YES; + var permission = { + // required for udisks1: + "org.freedesktop.udisks.filesystem-mount": YES, + "org.freedesktop.udisks.luks-unlock": YES, + "org.freedesktop.udisks.drive-eject": YES, + "org.freedesktop.udisks.drive-detach": YES, + // required for udisks2: + "org.freedesktop.udisks2.filesystem-mount": YES, + "org.freedesktop.udisks2.encrypted-unlock": YES, + "org.freedesktop.udisks2.eject-media": YES, + "org.freedesktop.udisks2.power-off-drive": YES, + // Dolphin specific: + "org.freedesktop.udisks2.filesystem-mount-system": YES, + // required for udisks2 if using udiskie from another seat (e.g. systemd): + "org.freedesktop.udisks2.filesystem-mount-other-seat": YES, + "org.freedesktop.udisks2.filesystem-unmount-others": YES, + "org.freedesktop.udisks2.encrypted-unlock-other-seat": YES, + "org.freedesktop.udisks2.encrypted-unlock-system": YES, + "org.freedesktop.udisks2.eject-media-other-seat": YES, + "org.freedesktop.udisks2.power-off-drive-other-seat": YES + }; + if (subject.isInGroup("wheel")) { + return permission[action.id]; + } + }); +POLKIT_CONF mkdir -p /etc/systemd/journald.conf.d > /dev/null 2>&1 || exit - echo " + cat <<-JOURNAL_CONF > /etc/systemd/journald.conf.d/00-journald.conf || exit [Journal] - SystemMaxUse=100M" | tee /etc/systemd/journald.conf.d/00-journald.conf || exit + SystemMaxUse=100M +JOURNAL_CONF mkdir -p /etc/systemd/user.conf.d > /dev/null 2>&1 || exit - echo " - [Manager] - DefaultTimeoutStopSec=5s - DefaultTimeoutAbortSec=5s" | tee /etc/systemd/user.conf.d/00-userd.conf || exit + cat <<-USER_CONF > /etc/systemd/user.conf.d/00-userd.conf || exit + [Manager] + DefaultTimeoutStopSec=5s + DefaultTimeoutAbortSec=5s +USER_CONF 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 sed -i "/# set linenumbers/"'s/^#//' /etc/nanorc || exit echo tcp_bbr | tee /etc/modules-load.d/modulesd.conf || exit - echo " - country=${REGDOM} - wps_cred_add_sae=1 - pmf=2" | tee /etc/wpa_supplicant/wpa_supplicant.conf || exit - bootctl install || exit - echo "default arch.conf" > /boot/loader/loader.conf || exit - echo " - title ${entrname} - linux /vmlinuz-${kernel} - initrd /initramfs-${kernel}.img - options rw ${boot_opts}" | tee /boot/loader/entries/arch.conf || exit + cat <<-SUPPLICANT_CONF > /etc/wpa_supplicant/wpa_supplicant.conf || exit + country=${REGDOM} + wps_cred_add_sae=1 + pmf=2 +SUPPLICANT_CONF echo root:${ROOTPASSWD2} | chpasswd || exit chsh -s /bin/zsh || exit useradd -m -G wheel,realtime -s /bin/zsh ${USERNAME} || exit echo ${USERNAME}:${USERPASSWD2} | chpasswd || exit - echo " - Defaults pwfeedback - Defaults editor=/usr/bin/nano - %wheel ALL=(ALL) ALL" | tee /etc/sudoers.d/sudoersd || exit - visudo -c /etc/sudoers.d/sudoersd || exit - systemctl enable avahi-daemon bluetooth cups ipp-usb NetworkManager rngd systemd-boot-update ${displaymanager} ${trim} ${vm_services} ${nvidia_services} || exit -CUSTOM_CONF + cat <<-SUDOERS_CONF > /etc/sudoers.d/sudoersd || exit + Defaults pwfeedback + Defaults editor=/usr/bin/nano + %wheel ALL=(ALL) ALL +SUDOERS_CONF + visudo -c /etc/sudoers.d/sudoersd + systemctl enable avahi-daemon bluetooth cups ipp-usb NetworkManager rngd ${displaymanager} ${trim} ${vm_services} ${nvidia_services} || exit +OPTIMIZED_CONF stage_ok else stage_fail fi + btldr_conf zram_conf nvidia_hook_conf + uki_conf completion fi umount -R /mnt @@ -6082,6 +6271,7 @@ CUSTOM_CONF multibooting="" hypervisor="" mkinitcpio_mods="" + ukify="" clear first_check