diff --git a/Amelia.sh b/Amelia.sh index 686b6a9..c15dda1 100644 --- a/Amelia.sh +++ b/Amelia.sh @@ -2,7 +2,7 @@ # Amelia Installer # Source: https://gitlab.com/prism7/archery -# Version: 8.13.0 +# Version: 9.0.0 set -euo pipefail ################################################################################################### @@ -52,11 +52,11 @@ reload() { --> [${green}Reloading${nc}] " } -next() { +alternatives() { sleep 0.2 NC " - --> [${green}Loading next stage..${nc}] " + --> [${green}Providing alternatives..${nc}] " } pkg_displ() { sleep 0.2 @@ -70,7 +70,7 @@ deskname() { sleep 0.2 YELLOW " - ### ${desktopname} has been selected + ### ${nc}${desktopname} ${yellow}has been selected " } vm() { @@ -139,9 +139,9 @@ line3() { unmount() { sleep 0.2 line3 - REDBG " ${yellow}------------------------- " - REDBG " ${yellow}[!] Unmount and Retry [!] " - REDBG " ${yellow}------------------------- " + REDBG " ${yellow}----------------------------------- " + REDBG " ${yellow}[!] Unmount and Retry [!] " + REDBG " ${yellow}----------------------------------- " echo reload sleep 0.2 @@ -240,6 +240,43 @@ completion_err() { " fi } +term_offer() { + sleep 0.2 + YELLOW " + + ### NOTE: ${desktopname} desktop lacks a native Terminal emulator by design + + + ### You can use linux console (ctrl+alt+F'n') for shell access + + + + + > Install ${nc}'gnome-terminal' ${yellow}for convenience ? [Y/n] " + BLUE " + + +Enter [Y/n]: " + read -r -p " +==> " console + + console="${console:-y}" + console="${console,,}" + + case "${console}" in + y) + terminal="gnome-terminal" + sleep 0.2 + NC " + +==> [${green}Terminal OK${nc}] " ;; + n) + skip ;; + *) + invalid + until term_offer; do : ; done ;; + esac +} amd() { line2 REDBG " ------------------------------- " @@ -373,14 +410,15 @@ Enter a number: " ==> " fontselect echo - if [[ "${fontselect}" == "1" ]]; then - setfont ter-v18b - elif [[ "${fontselect}" == "2" ]]; then - setfont ter-v32b - else - invalid - return 1 - fi + case "${fontselect}" in + 1) + setfont ter-v18b ;; + 2) + setfont ter-v32b ;; + *) + invalid + return 1 ;; + esac clear } ################################################################################################### @@ -503,6 +541,7 @@ ${magenta}###${nc}------------------------------------${magenta}[ ${bwhite}Machi ### This system is a(n) ${nc}${hardw_model} ${yellow}${machine} + ### The ${nc}${cpu_name} ${yellow}cpu microcode will be installed " else @@ -512,6 +551,7 @@ ${magenta}###${nc}------------------------------------${magenta}[ ${bwhite}Machi ### This system is a(n) ${nc}${hardw_model} ${yellow}${hardw_vendor} ${machine} + ### The ${nc}${cpu_name} ${yellow}cpu microcode will be installed " fi @@ -636,11 +676,15 @@ ${magenta}###${nc}------------------------------------${magenta}[ ${bwhite}Local YELLOW " > Select your Locale - - ### [Enter ${nc}'l'${yellow} to list locales, then ${nc}'enter'${yellow} to search or ${nc}'q'${yellow} to quit] - ### Exclude ${nc}'.UTF_8' ${yellow}suffix " + + ### [Enter ${nc}'l'${yellow} to list locales, then ${nc}'enter'${yellow} to search or ${nc}'q'${yellow} to quit] " + RED " + + --------------------------------- + ### ${yellow}Exclude ${nc}'.UTF_8' ${yellow}suffix ${red}### + ---------------------------------" BLUE " @@ -657,7 +701,7 @@ Enter your Locale ${bwhite}(empty for 'en_US')${blue}: " ### en_US.UTF-8 Locale has been selected " elif [[ "${LOCALESET}" == "l" ]]; then - grep -E 'UTF-8' /usr/share/i18n/SUPPORTED | more + grep -E 'UTF-8' /usr/share/i18n/SUPPORTED | less return 1 elif ! grep -q "^#\?$(sed 's/[].*[]/\\&/g' <<< "${LOCALESET}") " /usr/share/i18n/SUPPORTED; then invalid @@ -689,6 +733,7 @@ ${magenta}###${nc}--------------------------------${magenta}[ ${bwhite}Keyboard > Select your Keyboard Layout + ### [Enter ${nc}'l'${yellow} to list layouts, then ${nc}'enter'${yellow} to search or ${nc}'q'${yellow} to quit] " BLUE " @@ -706,7 +751,7 @@ Enter your keyboard layout ${bwhite}(empty for 'us')${blue}: " ### us Keyboard Layout has been selected " elif [[ "${SETKBD}" == "l" ]]; then - localectl list-keymaps | more + localectl list-keymaps | less return 1 elif ! localectl list-keymaps | grep -Fxq "${SETKBD}"; then invalid @@ -893,9 +938,7 @@ ${magenta}###${nc}----------------------------------${magenta}[ ${bwhite}System [5] EFI Boot Entries Deletion - [6] Wireless Regulatory Domain Setup - - [7] System Optimizations + [6] Optimizations [ ] Return to Main Menu " BLUE " @@ -921,16 +964,13 @@ Enter a number: " until dtct_gfx; do : ; done return 1 ;; 4) - until slct_dsktp; do : ; done + until dsktp_setup; do : ; done return 1 ;; 5) until boot_entr; do : ; done return 1 ;; 6) - until wireless_rgd; do : ; done - return 1 ;; - 7) - until sys_opt; do : ; done + until optm_submn; do : ; done return 1 ;; "") until main_menu; do : ; done ;; @@ -1163,26 +1203,35 @@ Enter a number: " ==> " espmnt echo - if [[ "${espmnt}" == "1" ]]; then - esp_mount="/mnt/efi" - btldr_esp_mount="/efi" - sleep 0.2 - YELLOW " + case "${espmnt}" in + 1) + esp_mount="/mnt/efi" + btldr_esp_mount="/efi" + sleep 0.2 + YELLOW " ### '/mnt/efi' mountpoint has been selected - " - elif [[ "${espmnt}" == "2" ]]; then - esp_mount="/mnt/boot" - btldr_esp_mount="/boot" - sleep 0.2 - YELLOW " + " ;; + 2) + esp_mount="/mnt/boot" + btldr_esp_mount="/boot" + sleep 0.2 + YELLOW " ### '/mnt/boot' mountpoint has been selected - " - else - invalid - return 1 - fi + " ;; + "") + sleep 0.2 + RED " + ------------------------------------ + ### ${yellow}Please select a Mountpoint ${red}### + ------------------------------------" + reload + return 1 ;; + *) + invalid + return 1 ;; + esac ok if [[ "${sanity}" == "no" ]]; then until sanity_check; do : ; done @@ -1226,7 +1275,8 @@ Enter a number: " ### NOTE: Keeping User Data on a separate /Home Partition is supported - > Make use of a dedicated /Home Partition ? [Y/n] " + + > Make use of a ${nc}dedicated ${yellow}/Home Partition ? [Y/n] " BLUE " @@ -1269,7 +1319,8 @@ Enter [Y/n]: " sleep 0.2 YELLOW " - > Label your Btrfs snapshots directory: " + + > Label your Btrfs ${nc}snapshots ${yellow}directory: " BLUE " @@ -1369,37 +1420,7 @@ Enter a number: " invalid return 1 ;; esac - - if [[ "${swapmode}" != "4" ]]; then - sleep 0.2 - YELLOW " - - > Enable ${nc}systemd-oomd ${yellow}for enhanced 'OOM' management ? [Y/n]" - BLUE " - - -Enter [Y/n]: " - read -r -p " -==> " oomd - - echo - oomd="${oomd:-y}" - oomd="${oomd,,}" - - if [[ "${oomd}" == "y" ]]; then - YELLOW " - - ### 'Systemd-oomd' has been selected - " - elif [[ "${oomd}" == "n" ]]; then - skip - else - y_n - return 1 - fi - - fi - ok + ok } ################################################################################################### set_swapsize() { @@ -1437,7 +1458,11 @@ Enter Swap size ${bwhite}(in GB)${blue}: " ################################################################################################### dtct_gfx() { + gfx_slct="yes" + vendor="" + vendors="" if [[ "${hypervisor}" != "none" ]]; then + vendor="Virtual Machine" vm sleep 0.2 YELLOW " @@ -1445,7 +1470,7 @@ dtct_gfx() { --> Graphics Setup skipped " return 0 - fi + else sleep 0.2 NC " @@ -1460,12 +1485,12 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Grap amdcards="$(lspci | grep -E 'VGA|Display|3D' | grep -E 'Advanced Micro Devices' | sed 's/.*\[AMD\/ATI\] //g' | cat --number | sed 's/.[0-9]//')" nvidiacount="$(lspci | grep -E 'VGA|Display|3D' | grep -E -c 'NVIDIA Corporation')" nvidiacards="$(lspci | grep -E 'VGA|Display|3D' | grep -E 'NVIDIA Corporation'| sed 's/.*Corporation //g' | cat --number | sed 's/.[0-9]//')" - gfx_slct="yes" - if [[ "${gfxcount}" == "1" ]]; then - dtct_single_gfx - else - dtct_multi_gfx + if [[ "${gfxcount}" == "1" ]]; then + dtct_single_gfx + else + dtct_multi_gfx + fi fi } ################################################################################################### @@ -1495,12 +1520,11 @@ dtct_single_gfx() { ----------------------------------------------------" fi YELLOW " - - > Configure the Graphics subsystem and enable HW acceleration ? [Y/n] - " + > Configure the Graphics subsystem and enable HW acceleration ? [Y/n] " if [[ "${vendor}" == "Nvidia" ]]; then YELLOW " + ### Selecting ${nc}'(n)o' ${yellow}defaults to using the open-source ${nc}'nouveau' ${yellow}driver" fi BLUE " @@ -1686,7 +1710,7 @@ Enter a number: " return 1 ;; esac fi - if [[ "${vendor}" == "Intel" || "${vendor}" == "AMD" ]]; then + if [[ "${vendor}" =~ ^(intel|AMD)$ ]]; then sourcetype="Open-source" gfxconf="y" gfx_conf @@ -1698,11 +1722,7 @@ Enter a number: " sourcetype="Open-source" gfxconf="y" gfx_conf - elif [[ "${vendors}" == "Intel & Nvidia" ]]; then - sourcetype="Open-source & Proprietary" - gfxconf="y" - gfx_conf - elif [[ "${vendors}" == "AMD & Nvidia" ]]; then + elif [[ "${vendors}" =~ ^(Intel & Nvidia|AMD & Nvidia)$ ]]; then sourcetype="Open-source & Proprietary" gfxconf="y" gfx_conf @@ -1933,18 +1953,73 @@ gfxpkgs_set() { fi } ################################################################################################### -slct_dsktp() { +dsktp_setup() { - local prompt="Desktop Setup" - custompkgs="" sleep 0.2 NC " ${magenta}###${nc}--------------------------------------${magenta}[ ${bwhite}Desktop Setup${nc} ${magenta}]${nc}--------------------------------------${magenta}### " + sleep 0.2 YELLOW " + + > Make a selection: " + NC " + + [1] Desktop Selection + + [2] Arch 'base-devel' Meta-package + + [3] Web browser Selection + + [4] Printer & Scanner Support + + [ ] Return to System Configuration " + BLUE " + + +Enter a number: " + read -r -p " +==> " desk_setup + + case "${desk_setup}" in + 1) + until dsktp_slct; do : ; done + return 1 ;; + 2) + until base_devel; do : ; done + return 1 ;; + 3) + until web_browser; do : ; done + return 1 ;; + 4) + until print_scan; do : ; done + return 1 ;; + "") + until sys_submn; do : ; done ;; + *) + invalid + return 1 ;; + esac +} +################################################################################################### +dsktp_slct() { + + sleep 0.2 + NC " + +${magenta}###${nc}------------------------------------${magenta}[ ${bwhite}Desktop Selection${nc} ${magenta}]${nc}------------------------------------${magenta}### + " + deskpkgs="" + custompkgs="" + console="" + local prompt="Desktop Selection" + sleep 0.2 + YELLOW " + + > Make a selection: " NC " @@ -1986,94 +2061,28 @@ Enter a number: " desktopname="Plasma" deskname ;; 2) - desktopname="Minimal Plasma (System Optimized)" + desktopname="Minimal Plasma + Desktop Apps" deskname ;; 3) desktopname="Gnome" deskname ;; 4) - desktopname="Minimal Gnome (System Optimized)" + desktopname="Minimal Gnome + Desktop Apps" deskname ;; 5) desktopname="Xfce" deskname ;; 6) desktopname="Cinnamon" - deskname - sleep 0.2 - YELLOW " - - - ### NOTE: Cinnamon desktop lacks a native Terminal emulator by design - - ### You can use linux console (ctrl+alt+F3) for shell access - - - > Install ${nc}'gnome-terminal' ${yellow}for convenience ? [Y/n] " - BLUE " - - -Enter [Y/n]: " - read -r -p " -==> " console - - console="${console:-y}" - console="${console,,}" - - case "${console}" in - y) - terminal="gnome-terminal" - sleep 0.2 - NC " - -==> [${green}Terminal OK${nc}] " ;; - n) - skip ;; - *) - invalid - return 1 ;; - esac ;; - + deskname + term_offer ;; 7) desktopname="Deepin" deskname ;; 8) desktopname="Budgie" deskname - sleep 0.2 - YELLOW " - - - ### NOTE: Budgie desktop lacks a native Terminal emulator by design - - ### You can use linux console (ctrl+alt+F3) for shell access - - - > Install ${nc}'gnome-terminal' ${yellow}for convenience ? [Y/n] " - BLUE " - - -Enter [Y/n]: " - read -r -p " -==> " console - - console="${console:-y}" - console="${console,,}" - - case "${console}" in - y) - terminal="gnome-terminal" - sleep 0.2 - NC " - -==> [${green}Terminal OK${nc}] " ;; - n) - skip ;; - *) - invalid - return 1 ;; - esac ;; - + term_offer ;; 9) desktopname="Lxqt" deskname ;; @@ -2097,110 +2106,17 @@ Enter [Y/n]: " invalid return 1 ;; esac - - sleep 0.2 - YELLOW " - - - ### NOTE: 'base' meta-package does not include the tools needed for building packages - - > Install ${nc}'base-devel' ${yellow}meta-package ? [Y/n] " - BLUE " - - -Enter [Y/n]: " - read -r -p " -==> " dev - - dev="${dev:-y}" - dev="${dev,,}" - - case "${dev}" in - y) - local prompt="base-devel" - devel="base-devel" - ok ;; - n) - skip ;; - *) - invalid - return 1 ;; - esac - - if [[ "${packages}" =~ ^(1|2|3|4|5|6|7|8|9|10|13)$ ]]; then - sleep 0.2 - YELLOW " - - - ### Web Browser support is available - - > Select Web Browser to install " - NC " - - [1] Firefox - - [2] Chromium - - [3] Vivaldi " - BLUE " - - -Enter a number ${bwhite}(empty to skip)${blue}: " - read -r -p " -==> " web - - local prompt="Web Browser" - case "${web}" in - 1) - web_browser="firefox" - ok ;; - 2) - web_browser="chromium" - ok ;; - 3) - web_browser="vivaldi" - ok ;; - "") - web_browser="" - skip ;; - *) - invalid - return 1 ;; - esac - - if [[ "${hypervisor}" == "none" ]]; then - sleep 0.2 - YELLOW " - - - ### Printer & Scanner support is available - - > Enable support ? [Y/n] " - BLUE " - - -Enter [Y/n]: " - read -r -p " -==> " printer - - printer="${printer:-y}" - printer="${printer,,}" - local prompt="Printer & Scanner Support" - - case "${printer}" in - y) - print_pkgs="cups-pdf cups-browsed cups-pk-helper ipp-usb nss-mdns sane-airscan system-config-printer xdg-utils colord" - ok ;; - n) - skip ;; - *) - invalid - return 1 ;; - esac + ok + if [[ -n "${web}" ]]; then + if [[ "${packages}" =~ ^(11|12)$ ]]; then + until web_browser; do : ; done + fi + fi + if [[ "${printer}" == "y" ]]; then + if [[ "${packages}" =~ ^(11|12)$ ]]; then + until print_scan; do : ; done fi fi - local prompt="Desktop Setup" - ok } ################################################################################################### cust_sys() { @@ -2290,6 +2206,7 @@ Enter a number: " invalid return 1 ;; esac + ok else ok fi @@ -2321,27 +2238,215 @@ Enter services to be enabled ${bwhite}(space-seperated)${blue}: " fi } ################################################################################################### -add_prmtrs() { +base_devel() { - local prompt="Kernel Parameters" + sleep 0.2 + NC " + + +${magenta}###${nc}--------------------------------${magenta}[ ${bwhite}'base-devel' Meta-package${nc} ${magenta}]${nc}--------------------------------${magenta}### + " + local prompt="'base-devel'" + sleep 0.2 YELLOW " - ### Add Your Kernel Parameters + ### NOTE: The ${nc}'base' ${yellow}meta-package does not include the tools needed for building packages - ### Empty to skip " + + > Install ${nc}'base-devel' ${yellow}meta-package ? [Y/n] " BLUE " -Enter your Kernel parameters to be set at boot ${bwhite}(space-seperated)${blue}: " +Enter [Y/n]: " read -r -p " -==> " cust_bootopts +==> " dev - if [[ -z "${cust_bootopts}" ]]; then - skip + dev="${dev:-y}" + dev="${dev,,}" + + case "${dev}" in + y) + devel="base-devel" + ok ;; + n) + skip ;; + *) + invalid + return 1 ;; + esac +} +################################################################################################### +web_browser() { + + if [[ "${packages}" =~ ^(11|12)$ && -n "${revision}" ]]; then + return 0 + fi + sleep 0.2 + NC " + + +${magenta}###${nc}----------------------------------${magenta}[ ${bwhite}Web browser Selection${nc} ${magenta}]${nc}----------------------------------${magenta}### + " + local prompt="Web Browser" + if [[ ! "${packages}" =~ ^(11|12|)$ ]]; then + sleep 0.2 + YELLOW " + + + ### Web Browser support is available + + + + > Select ${nc}Web Browser ${yellow}to install " + NC " + + [1] Firefox + + [2] Chromium + + [3] Vivaldi + + [4] Tor Browser + + [5] Falkon + + [6] Qutebrowser " + BLUE " + + +Enter a number ${bwhite}(empty to skip)${blue}: " + read -r -p " +==> " web + + local prompt="Web Browser" + case "${web}" in + 1) + web_browser="firefox" + web_slct="yes" + ok ;; + 2) + web_browser="chromium" + web_slct="yes" + ok ;; + 3) + web_browser="vivaldi" + web_slct="yes" + ok ;; + 4) + web_browser="torbrowser-launcher" + web_slct="yes" + ok ;; + 5) + web_browser="falkon" + web_slct="yes" + ok ;; + 6) + web_browser="qutebrowser" + web_slct="yes" + ok ;; + "") + web_browser="" + web_slct="yes" + skip ;; + *) + invalid + return 1 ;; + esac else - ok + sleep 0.2 + RED " + ----------------------------------------- + ### ${yellow}Incompatible Selection detected ${red}### + -----------------------------------------" + sleep 0.2 + YELLOW " + + ### Basic Arch Linux, Custom Arch Linux or No Desktop has been detected + + ### No Browser selected + " + web_browser="" + web_slct="" + skip + NC " + + + ${bwhite}Press any key to continue${nc} + + + " + read -r -s -n 1 + fi +} +################################################################################################### +print_scan() { + + sleep 0.2 + NC " + + +${magenta}###${nc}--------------------------------${magenta}[ ${bwhite}Printer & Scanner Support${nc} ${magenta}]${nc}--------------------------------${magenta}### + " + local prompt="Printer & Scanner Support" + if [[ "${hypervisor}" == "none" ]]; then + if [[ ! "${packages}" =~ ^(11|12)$ ]]; then + sleep 0.2 + YELLOW " + + + ### Printer & Scanner support is available + + + + > Enable ${nc}Printer & Scanner ${yellow}support ? [Y/n] " + BLUE " + + +Enter [Y/n]: " + read -r -p " +==> " printer + + printer="${printer:-y}" + printer="${printer,,}" + + case "${printer}" in + y) + print_pkgs="cups-pdf cups-browsed cups-pk-helper ipp-usb nss-mdns sane-airscan system-config-printer xdg-utils colord" + ok ;; + n) + skip ;; + *) + invalid + return 1 ;; + esac + else + sleep 0.2 + RED " + ----------------------------------------- + ### ${yellow}Incompatible Selection detected ${red}### + -----------------------------------------" + sleep 0.2 + YELLOW " + + ### Basic Arch Linux, Custom Arch Linux or No Desktop has been detected + + ### No Support enabled + " + skip + NC " + + + ${bwhite}Press any key to continue${nc} + + + " + read -r -s -n 1 + fi + else + vm + skip fi } ################################################################################################### @@ -2367,7 +2472,8 @@ ${magenta}###${nc}--------------------------------${magenta}[ ${bwhite}EFI Boot " YELLOW " - > Select an EFI Boot Entry to Delete ${red}[!] (CAUTION) [!] + > Select an EFI Boot Entry to Delete ${red}[!] ${nc}(${yellow}CAUTION${nc}) ${red}[!] + " sleep 0.2 @@ -2383,7 +2489,6 @@ Enter a Boot Entry number for Deletion ${bwhite}(empty to skip)${blue}: ${cyan}Entries: ${yellow}${entrnmbr} " read -r -p " ==> " boot_entry - echo if [[ -n "${boot_entry}" ]]; then if [[ "${run_as}" != "root" ]]; then @@ -2412,10 +2517,241 @@ ${cyan}Entries: ${yellow}${entrnmbr} " efi_entr_del="yes" } ################################################################################################### -wireless_rgd() { +optm_submn() { + + sleep 0.2 + NC " + + +${magenta}###${nc}--------------------------------------${magenta}[ ${bwhite}Optimizations${nc} ${magenta}]${nc}--------------------------------------${magenta}### + " + sleep 0.2 + YELLOW " + + + > Make a selection: " + NC " + + [1] Custom Kernel Parameters + + [2] System Watchdogs + + [3] General System Optimizations + + [4] Wireless Regulatory Domain + + [5] Systemd-oomd + + [6] Irqbalance + + [7] Thermald + + [8] Rng-tools + + [9] Rtkit + + [ ] Return to System Configuration " + BLUE " + + +Enter a number: " + read -r -p " +==> " set_optm + + case "${set_optm}" in + 1) + until cust_kern_param; do : ; done + return 1 ;; + 2) + until sys_watchdog; do : ; done + return 1 ;; + 3) + until gen_optm; do : ; done + return 1 ;; + 4) + until ask_wireless_regdom; do : ; done + return 1 ;; + 5) + until systemd_oomd; do : ; done + return 1 ;; + 6) + until irqbalance; do : ; done + return 1 ;; + 7) + until thermald; do : ; done + return 1 ;; + 8) + until rngd; do : ; done + return 1 ;; + 9) + until rtkit; do : ; done + return 1 ;; + "") + set_optm_slct="yes" + until sys_submn; do : ; done ;; + *) + invalid + return 1 ;; + esac +} +################################################################################################### +cust_kern_param() { + + sleep 0.2 + NC " + + +${magenta}###${nc}--------------------------------${magenta}[ ${bwhite}Custom Kernel Parameters${nc} ${magenta}]${nc}--------------------------------${magenta}### + " + sleep 0.2 + YELLOW " + + + ### ${nc}Custom ${yellow}Kernel Parameters can be set at boot time + + + + > Enter your ${nc}own ${yellow}additional Kernel Parameters to be ${nc}added ${yellow}to the Kernel Cmdline ? [y/N] " + BLUE " + + +Enter [y/N]: " + read -r -p " +==> " ask_param + + ask_param="${ask_param:-n}" + ask_param="${ask_param,,}" + + case "${ask_param}" in + y) + until add_prmtrs; do : ; done ;; + n) + skip ;; + *) + invalid + return 1 ;; + esac +} +################################################################################################### +add_prmtrs() { + + local prompt="Kernel Parameters" + YELLOW " + + + ### Add Your Kernel Parameters + + + ### Empty to skip " + BLUE " + + +Enter your own Kernel parameters to be set at boot ${bwhite}(space-seperated)${blue}: " + read -r -p " +==> " cust_bootopts + + if [[ -z "${cust_bootopts}" ]]; then + skip + else + ok + fi +} +################################################################################################### +sys_watchdog() { + + sleep 0.2 + NC " + + +${magenta}###${nc}------------------------------------${magenta}[ ${bwhite}System Watchdogs${nc} ${magenta}]${nc}------------------------------------${magenta}### + " + sleep 0.2 + YELLOW " + + + ### A watchdog is a hardware or software component that keeps track of a system's performance + + ### and intervenes if it notices any strange behaviour or malfunctions + + + ### [Applicable for ${nc}non mission-critical ${yellow}platforms such as desktops & laptops] + + + + > Disable ${nc}Watchdogs ${yellow}in the installed system ? [Y/n] " + BLUE " + + +Enter [Y/n]: " + read -r -p " +==> " kill_watchdog + + kill_watchdog="${kill_watchdog:-y}" + kill_watchdog="${kill_watchdog,,}" + + case "${kill_watchdog}" in + y) + local prompt="Watchdogs Disabled" + ok ;; + n) + skip ;; + *) + invalid + return 1 ;; + esac +} +################################################################################################### +gen_optm() { + + sleep 0.2 + NC " + + +${magenta}###${nc}----------------------------------${magenta}[ ${bwhite}General Optimizations${nc} ${magenta}]${nc}----------------------------------${magenta}### + " + sleep 0.2 + YELLOW " + + + ### General ${nc}System Optimizations ${yellow}are available + + + ### Type ${nc}'v' ${yellow}to view a summary + + + + > Enable System Optimizations ? [Y/n] " + BLUE " + + +Enter [Y/n]: " + read -r -p " +==> " genoptm + + genoptm="${genoptm:-y}" + genoptm="${genoptm,,}" + + case "${genoptm}" in + y) + local prompt="System Optimizations" + ok ;; + n) + skip ;; + v) + view_optm + return 1 ;; + d) + view_optm + return 1 ;; + *) + invalid + return 1 ;; + esac +} +################################################################################################### +ask_wireless_regdom() { if [[ "${hypervisor}" != "none" ]]; then - wrlss_rgd="yes" vm sleep 0.2 YELLOW " @@ -2435,7 +2771,15 @@ ${magenta}###${nc}----------------------------${magenta}[ ${bwhite}Wireless Regu YELLOW " - > Select your Country Code (e.g. US) + + ### The regulatory domain is used to reconfigure wireless drivers, to make sure that wireless + + ### hardware usage complies with local laws set by the FCC, ETSI and other organizations + + + + > Select your Country Code (e.g. ${nc}US${yellow}) + ### [Enter ${nc}'l'${yellow} to list country codes, then ${nc}'enter'${yellow} to search or ${nc}'q'${yellow} to quit] " @@ -2449,7 +2793,7 @@ Enter your Country Code, ie:${nc} ${cyan}US ${bwhite}(empty to skip)${blue}: " if [[ -z "${REGDOM}" ]]; then skip elif [[ "${REGDOM}" == "l" ]]; then - sed 's|^#WIRELESS_REGDOM=||g' /etc/conf.d/wireless-regdom |sed 's|"||g'| more + sed 's|^#WIRELESS_REGDOM=||g' /etc/conf.d/wireless-regdom |sed 's|"||g'| less return 1 elif [[ "${REGDOM}" =~ [[:lower:]] ]]; then sleep 0.2 @@ -2471,103 +2815,236 @@ Enter your Country Code, ie:${nc} ${cyan}US ${bwhite}(empty to skip)${blue}: " " fi ok - wrlss_rgd="yes" } ################################################################################################### -sys_opt() { +systemd_oomd() { + local prompt="Systemd-oomd Setup" sleep 0.2 NC " -${magenta}###${nc}----------------------------------${magenta}[ ${bwhite}System Optimizations${nc} ${magenta}]${nc}----------------------------------${magenta}### +${magenta}###${nc}-----------------------------------${magenta}[ ${bwhite}Systemd-oomd Setup${nc} ${magenta}]${nc}-----------------------------------${magenta}### " - sleep 0.2 YELLOW " - ### ${nc}Custom ${yellow}Kernel Parameters can be set at boot time + ### A system service that uses cgroups-v2 and pressure stall information (PSI) + + ### to monitor system and take corrective action before an 'OOM' occurs in the kernel space - > Enter your own additional Kernel Parameters ? [y/N] " - BLUE " + > Enable ${nc}'systemd-oomd' ${yellow} ? [Y/n] " + RED " -Enter [y/N]: " - read -r -p " -==> " ask_param - - ask_param="${ask_param:-n}" - ask_param="${ask_param,,}" - - case "${ask_param}" in - y) - add_prmtrs ;; - n) - skip ;; - *) - invalid - return 1 ;; - esac - - sleep 0.2 - YELLOW " - - - > Disable ${nc}Watchdogs ${yellow}in the installed system ? [Y/n] - - - ### Applicable for non-critical platforms such as desktops & laptops " + ------------------------------------------------------------------------ + ### ${yellow}Swapping enabled is ${nc}highly recommended ${yellow}for optimal performance ${red}### + ------------------------------------------------------------------------" BLUE " Enter [Y/n]: " read -r -p " -==> " kill_watchdog +==> " oomd - kill_watchdog="${kill_watchdog:-y}" - kill_watchdog="${kill_watchdog,,}" + echo + oomd="${oomd:-y}" + oomd="${oomd,,}" - case "${kill_watchdog}" in - y) - local prompt="Watchdogs Disabled" - ok ;; - n) - skip ;; - *) - invalid - return 1 ;; - esac + if [[ "${oomd}" == "y" ]]; then + YELLOW " + ### 'Systemd-oomd' service will be enabled + " + elif [[ "${oomd}" == "n" ]]; then + skip + else + y_n + return 1 + fi + ok +} +################################################################################################### +irqbalance() { + + local prompt="Irqbalance Setup" + sleep 0.2 + NC " + + +${magenta}###${nc}------------------------------------${magenta}[ ${bwhite}Irqbalance Setup${nc} ${magenta}]${nc}------------------------------------${magenta}### + " sleep 0.2 YELLOW " - ### System ${nc}Optimizations ${yellow}are available + ### Distributes hardware interrupts across processors on a multiprocessor system + + ### in order to increase performance - > Enable System Optimizations ? [Y/n] " + + > Install & enable ${nc}'irqbalance' ${yellow} ? [Y/n] " BLUE " Enter [Y/n]: " read -r -p " -==> " sysopt +==> " irqbalance - sysopt="${sysopt:-y}" - sysopt="${sysopt,,}" + echo + irqbalance="${irqbalance:-y}" + irqbalance="${irqbalance,,}" - case "${sysopt}" in - y) - local prompt="System Optimizations" - ok ;; - n) - skip ;; - *) - invalid - return 1 ;; - esac + if [[ "${irqbalance}" == "y" ]]; then + YELLOW " + + ### 'irqbalance' service will be enabled + " + elif [[ "${irqbalance}" == "n" ]]; then + skip + else + y_n + return 1 + fi + ok +} +################################################################################################### +thermald() { + + local prompt="Thermald Setup" + sleep 0.2 + NC " + + +${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Thermald Setup${nc} ${magenta}]${nc}-------------------------------------${magenta}### + " + sleep 0.2 + YELLOW " + + + ### A Linux daemon used to prevent the overheating of platforms + + ### This daemon monitors temperature and applies compensation using available cooling methods + + + + > Install & enable ${nc}'thermald' ${yellow} ? [Y/n] " + BLUE " + + +Enter [Y/n]: " + read -r -p " +==> " thermald + + echo + thermald="${thermald:-y}" + thermald="${thermald,,}" + + if [[ "${thermald}" == "y" ]]; then + YELLOW " + + ### 'thermald' service will be enabled + " + elif [[ "${thermald}" == "n" ]]; then + skip + else + y_n + return 1 + fi + ok +} +################################################################################################### +rngd() { + + local prompt="Rng-tools Setup" + sleep 0.2 + NC " + + +${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Rng-tools Setup${nc} ${magenta}]${nc}-------------------------------------${magenta}### + " + sleep 0.2 + YELLOW " + + + ### The rngd daemon is capable of using both environmental noise + + ### and hardware random number generators for extracting entropy + + + + > Install & enable ${nc}'rngd' ${yellow} ? [Y/n] " + BLUE " + + +Enter [Y/n]: " + read -r -p " +==> " rngd + + echo + rngd="${rngd:-y}" + rngd="${rngd,,}" + + if [[ "${rngd}" == "y" ]]; then + YELLOW " + + ### 'rngd' service will be enabled + " + elif [[ "${rngd}" == "n" ]]; then + skip + else + y_n + return 1 + fi + ok +} +################################################################################################### +rtkit() { + + local prompt="Rtkit Setup" + sleep 0.2 + NC " + + +${magenta}###${nc}---------------------------------------${magenta}[ ${bwhite}Rtkit Setup${nc} ${magenta}]${nc}---------------------------------------${magenta}### + " + sleep 0.2 + YELLOW " + + + ### RealtimeKit is a D-Bus system service that changes the scheduling policy + + ### of user processes/threads to SCHED_RR, [Realtime Scheduling Mode on request] + + + + > Install & enable ${nc}'rtkit' ${yellow} ? [Y/n] " + BLUE " + + +Enter [Y/n]: " + read -r -p " +==> " rtkit + + echo + rtkit="${rtkit:-y}" + rtkit="${rtkit,,}" + + if [[ "${rtkit}" == "y" ]]; then + YELLOW " + + ### 'rtkit' service will be enabled + " + elif [[ "${rtkit}" == "n" ]]; then + skip + else + y_n + return 1 + fi + ok } ################################################################################################### dsks_submn() { @@ -2626,11 +3103,13 @@ ${magenta}###${nc}------------------------------------${magenta}[ ${bwhite}Disk > Select a disk to manage its GPT: + ### Select disk and: ### Type ${nc}'?'${yellow} for help, ${nc}'x'${yellow} for extra functionality or ${nc}'q'${yellow} to quit " NC " + ${disks}" BLUE " @@ -2693,12 +3172,17 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Mult - ### If ${nc}'(y)es'${yellow} then: + ### If ${nc}'(y)es'${yellow} then: " + RED " - 1. Your ${nc}EFI ${yellow}System Partition (ESP) will stay ${nc}intact${yellow} + ---------------------------------------------------------- + ### ${yellow}Your ${nc}EFI ${yellow}System Partition (ESP) will stay ${nc}intact ${red}### + ---------------------------------------------------------- - 2. Only ${nc}'Manual' ${yellow}Disk Partitioning will be available in ${nc}'Disk Manager'" + ------------------------------------------------------------------------------- + ### ${yellow}Only ${nc}'Manual' ${yellow}Disk Partitioning will be available for ${nc}Disk Management ${red}### + -------------------------------------------------------------------------------" BLUE " @@ -2775,11 +3259,142 @@ Enter a number: " esac } ################################################################################################### -man_preset() { +auto_part() { sleep 0.2 NC " + +${magenta}###${nc}---------------------------------${magenta}[ ${bwhite}Automatic Partitioning${nc} ${magenta}]${nc}---------------------------------${magenta}### + " + sleep 0.2 + line2 + REDBG " ------------------------------------------------------------ " + REDBG " [!] WARNING: All data on selected disk will be destroyed [!] " + REDBG " ------------------------------------------------------------ " + line2 + if [[ -e "${instl_drive}" ]]; then + sgdsk_nmbr="${instl_dsk_nmbr}" + sgdrive="$(echo "${disks}" | awk "\$1 == ${sgdsk_nmbr} {print \$2}")" + if [[ -e "${sgdrive}" ]]; then + capacity="$(fdisk -l "${sgdrive}" | grep -E 'bytes' | grep -E 'Disk' | awk "{print \$5}")" + cap_gib="$((capacity/1024000000))" + rootsize="$((capacity*25/100/1024000000))" + if [[ "${run_as}" != "root" ]]; then + sleep 0.2 + RED " + ----------------------------------- + ### ${yellow}Root Privileges Missing.. ${red}### + -----------------------------------" + reload + until dsks_submn; do : ; done + fi + else + invalid + return 1 + fi + + sleep 0.2 + NC " + ----------------------------------------------------------- + ${cyan}>> ${nc}Apply ${yellowl}'Smart Partitioning' ${nc}on disk ${bwhite}'${instl_drive}'${nc} ? ${cyan}[Y/n]${nc} + ----------------------------------------------------------- + " + read -r -p " +==> " smartpart + + echo + smartpart="${smartpart:-y}" + smartpart="${smartpart,,}" + + if [[ "${smartpart}" == "y" ]]; then + until smart_presets; do : ; done + until set_partsize; do : ; done + until partitioner; do : ; done + elif [[ "${smartpart}" == "n" ]]; then + alternatives + until manual_presets; do : ; done + until set_partsize; do : ; done + until partitioner; do : ; done + else + y_n + return 1 + fi + else + YELLOW " + > Select a disk for Auto-Partitioning: " + NC " + + +${disks}" + BLUE " + + +Enter a disk number ${bwhite}(empty to skip)${blue}: " + read -r -p " +==> " sgdsk_nmbr + echo + + if [[ -n "${sgdsk_nmbr}" ]]; then + sgdrive="$(echo "${disks}" | awk "\$1 == ${sgdsk_nmbr} {print \$2}")" + if [[ -e "${sgdrive}" ]]; then + capacity="$(fdisk -l "${sgdrive}" | grep -E 'bytes' | grep -E 'Disk' | awk "{print \$5}")" + cap_gib="$((capacity/1024000000))" + rootsize="$((capacity*25/100/1024000000))" + if [[ "${run_as}" != "root" ]]; then + sleep 0.2 + RED " + ----------------------------------- + ### ${yellow}Root Privileges Missing.. ${red}### + -----------------------------------" + reload + until dsks_submn; do : ; done + fi + until manual_presets; do : ; done + until set_partsize; do : ; done + until partitioner; do : ; done + else + invalid + return 1 + fi + else + skip + reload + fi + fi + + if [[ -z "${sanity}" ]]; then + until dsks_submn; do : ; done + fi +} +################################################################################################### +smart_presets() { + + if [[ "${fs}" == "1" ]] ; then + if [[ "${sep_home}" == "y" && "${swapmode}" == "1" ]]; then + preset="4" + elif [[ "${sep_home}" == "y" && "${swapmode}" != "1" ]]; then + preset="3" + elif [[ "${sep_home}" == "n" && "${swapmode}" == "1" ]]; then + preset="2" + elif [[ "${sep_home}" == "n" && "${swapmode}" != "1" ]]; then + preset="1" + fi + elif [[ "${fs}" == "2" ]]; then + if [[ "${swapmode}" == "1" ]]; then + preset="2" + elif [[ "${swapmode}" != "1" ]]; then + preset="1" + fi + fi +} +################################################################################################### +manual_presets() { + + preset="" + sleep 0.2 + NC " + ${magenta}###${nc}------------------------------------${magenta}[ ${bwhite}Preset Selection${nc} ${magenta}]${nc}------------------------------------${magenta}### " sleep 0.2 @@ -2816,113 +3431,19 @@ Enter a Preset number ${bwhite}(empty to skip)${blue}: " if [[ "${preset}" =~ ^(1|2|3|4)$ ]]; then presetpart="y" + elif [[ -z "${preset}" ]]; then + skip + else + invalid + return 1 fi } ################################################################################################### -auto_part() { - - slct_autoprt="yes" - #smartpart="" - #presetpart="" - local prompt="Disk Partitions" - local stage_prompt="Auto-Partitioning" +set_partsize() { + + if [[ "${preset}" =~ ^(3|4)$ ]]; then sleep 0.2 - NC " - - -${magenta}###${nc}---------------------------------${magenta}[ ${bwhite}Automatic Partitioning${nc} ${magenta}]${nc}---------------------------------${magenta}### - " - sleep 0.2 - line2 - REDBG " ------------------------------------------------------------ " - REDBG " [!] WARNING: All data on selected disk will be destroyed [!] " - REDBG " ------------------------------------------------------------ " - line2 - if [[ -e "${instl_drive}" && "${use_manpreset}" != "yes" ]]; then - sleep 0.2 - NC " - ----------------------------------------------------------- - ${cyan}>> ${nc}Apply ${yellowl}'Smart Partitioning' ${nc}on disk ${bwhite}'${instl_drive}'${nc} ? ${cyan}[Y/n]${nc} - ----------------------------------------------------------- - " - read -r -p " -==> " smartpart - - echo - smartpart="${smartpart:-y}" - smartpart="${smartpart,,}" - - if [[ "${smartpart}" == "y" ]]; then - sgdsk_nmbr="${instl_dsk_nmbr}" - elif [[ "${smartpart}" == "n" ]]; then - sgdsk_nmbr="${instl_dsk_nmbr}" - use_manpreset="yes" - next - until man_preset; do : ; done - else - y_n - return 1 - fi - else - YELLOW " - > Select a disk for Auto-Partitioning: " - NC " - -${disks}" - BLUE " - - -Enter a disk number ${bwhite}(empty to skip)${blue}: " - read -r -p " -==> " sgdsk_nmbr - echo - fi - - if [[ -n "${sgdsk_nmbr}" ]]; then - sgdrive="$(echo "${disks}" | awk "\$1 == ${sgdsk_nmbr} {print \$2}")" - if [[ -e "${sgdrive}" ]]; then - capacity="$(fdisk -l "${sgdrive}" | grep -E 'bytes' | grep -E 'Disk' | awk "{print \$5}")" - cap_gib="$((capacity/1024000000))" - rootsize="$((capacity*25/100/1024000000))" - if [[ "${run_as}" != "root" ]]; then - sleep 0.2 - RED " - ----------------------------------- - ### ${yellow}Root Privileges Missing.. ${red}### - -----------------------------------" - reload - until dsks_submn; do : ; done - fi - - if [[ -z "${use_manpreset}" ]]; then - if [[ "${fs}" == "2" ]]; then - if [[ "${swapmode}" == "1" ]]; then - preset="2" - elif [[ "${swapmode}" != "1" ]]; then - preset="1" - fi - elif [[ "${fs}" == "1" ]] ; then - if [[ "${sep_home}" == "y" && "${swapmode}" == "1" ]]; then - preset="4" - elif [[ "${sep_home}" == "y" && "${swapmode}" != "1" ]]; then - preset="3" - elif [[ "${sep_home}" == "n" && "${swapmode}" == "1" ]]; then - preset="2" - elif [[ "${sep_home}" == "n" && "${swapmode}" != "1" ]]; then - preset="1" - fi - else - until man_preset; do : ; done - fi - elif [[ -z "${preset}" ]] ; then - next - until manual_part; do : ; done - return 0 - fi - - if [[ "${preset}" == "3" || "${preset}" == "4" ]] ; then - sleep 0.2 - YELLOW " + YELLOW " ### Total detected capacity of disk ${nc}${sgdrive} ${yellow}is ${nc}${cap_gib} GiB${yellow} @@ -2933,156 +3454,117 @@ Enter a disk number ${bwhite}(empty to skip)${blue}: " > Set /Root Partition's Percentage to a custom value ? " - BLUE " + BLUE " Enter a Custom Percentage number ${nc}e.g. 30 ${bwhite}(empty to skip)${blue}: " - read -r -p " + read -r -p " ==> " prcnt - echo - fi + echo - if [[ "${preset}" == "3" || "${preset}" == "4" ]] ; then - if [[ "${prcnt}" =~ [[:alpha:]] ]]; then - sleep 0.2 - RED " + if [[ "${prcnt}" =~ [[:alpha:]] ]]; then + sleep 0.2 + RED " ------------------------------------------- ### ${yellow}Please use only digits as a value ${red}### -------------------------------------------" - reload - return 1 - elif [[ -z "${prcnt}" ]]; then - sleep 0.2 - YELLOW " + reload + return 1 + elif [[ -z "${prcnt}" ]]; then + sleep 0.2 + YELLOW " ### Default /Root Partition's size selected ${nc}[${rootsize} GiB] - " - elif [[ "${prcnt}" -gt "0" && "${prcnt}" -lt "100" ]]; then - rootsize="$((capacity*"${prcnt}"/100/1024000000))" - sleep 0.2 - YELLOW " + " + elif [[ "${prcnt}" -gt "0" && "${prcnt}" -lt "100" ]]; then + rootsize="$((capacity*"${prcnt}"/100/1024000000))" + sleep 0.2 + YELLOW " ### Custom /Root Partition's size selected ${nc}[${rootsize} GiB] - " - elif [[ "${prcnt}" == "100" ]]; then - sleep 0.2 - RED " + " + elif [[ "${prcnt}" == "100" ]]; then + sleep 0.2 + RED " ----------------------------------------------------- ### ${yellowl}WARNING: ${nc}${yellow}No space left for other partitions ${red}### -----------------------------------------------------" - reload - return 1 - else - invalid - return 1 - fi - fi - - case "${preset}" in - 1) - wipefs -af "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - sgdisk -o "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - sgdisk -I -n2:0:0 -t2:8304 -c2:ROOT "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - partprobe -s "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - if [[ "${install}" == "yes" ]]; then - until sanity_check; do : ; done - else - ok - fi ;; - 2) - until set_swapsize; do : ; done - wipefs -af "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - sgdisk -o "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - sgdisk -I -n2:0:+"${swapsize}"G -t2:8200 -c2:SWAP "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - sgdisk -I -n3:0:0 -t3:8304 -c3:ROOT "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - partprobe -s "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - if [[ "${install}" == "yes" ]]; then - until sanity_check; do : ; done - else - ok - fi ;; - 3) - wipefs -af "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - sgdisk -o "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - sgdisk -I -n2:0:+"${rootsize}"G -t2:8304 -c2:ROOT "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - sgdisk -I -n3:0:0 -t3:8302 -c3:HOME "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - partprobe -s "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - if [[ "${install}" == "yes" ]]; then - until sanity_check; do : ; done - else - ok - fi ;; - 4) - wipefs -af "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - until set_swapsize; do : ; done - sgdisk -o "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - sgdisk -I -n2:0:+"${swapsize}"G -t2:8200 -c2:SWAP "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - sgdisk -I -n3:0:+"${rootsize}"G -t3:8304 -c3:ROOT "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - sgdisk -I -n4:0:0 -t4:8302 -c4:HOME "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - partprobe -s "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail - if [[ "${install}" == "yes" ]]; then - until sanity_check; do : ; done - else - ok - fi ;; - "") - if [[ "${smartpart}" == "n" ]]; then - reload - until disk_mngr; do : ; done - return 0 - fi - if [[ "${slct_autoprt}" == "yes" ]]; then - reload - until dsks_submn; do : ; done - return 0 - fi - sleep 0.2 - RED " - -------------------------------- - ### ${yellow}Please select a Preset ${red}### - --------------------------------" - reload - return 1 ;; - *) - invalid - return 1 ;; - esac - - if [[ "${install}" == "yes" ]]; then - return 0 - fi - until dsks_submn; do : ; done - else - invalid - return 1 - fi - else - skip reload - - if [[ -z "${sanity}" ]]; then - until dsks_submn; do : ; done - elif [[ "${sanity}" == "no" ]]; then - until sanity_check; do : ; done - elif [[ "${revision}" == "yes" ]]; then - return 0 - elif [[ "${sanity}" == "ok" ]]; then - if [[ "${install}" == "yes" ]]; then - return 0 - fi - until dsks_submn; do : ; done - fi + return 1 + else + invalid + return 1 fi + fi +} +################################################################################################### +partitioner() { + + if [[ "${partok}" == "y" ]]; then + return 0 + fi + + if [[ "${smartpart}" == "y" ]]; then + local prompt="Disk ${sgdrive} Smart-Partitioned" + elif [[ "${presetpart}" == "y" ]]; then + local prompt="Disk ${sgdrive} Preset-Partitioned" + fi + + if [[ "${preset}" == "1" ]]; then + wipefs -af "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + sgdisk -o "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + sgdisk -I -n2:0:0 -t2:8304 -c2:ROOT "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + partprobe -s "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + if [[ "${install}" == "yes" ]]; then + until sanity_check; do : ; done + else + ok + fi + elif [[ "${preset}" == "2" ]]; then + until set_swapsize; do : ; done + wipefs -af "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + sgdisk -o "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + sgdisk -I -n2:0:+"${swapsize}"G -t2:8200 -c2:SWAP "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + sgdisk -I -n3:0:0 -t3:8304 -c3:ROOT "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + partprobe -s "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + if [[ "${install}" == "yes" ]]; then + until sanity_check; do : ; done + else + ok + fi + elif [[ "${preset}" == "3" ]]; then + wipefs -af "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + sgdisk -o "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + sgdisk -I -n2:0:+"${rootsize}"G -t2:8304 -c2:ROOT "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + sgdisk -I -n3:0:0 -t3:8302 -c3:HOME "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + partprobe -s "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + if [[ "${install}" == "yes" ]]; then + until sanity_check; do : ; done + else + ok + fi + elif [[ "${preset}" == "4" ]]; then + wipefs -af "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + until set_swapsize; do : ; done + sgdisk -o "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + sgdisk -I -n2:0:+"${swapsize}"G -t2:8200 -c2:SWAP "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + sgdisk -I -n3:0:+"${rootsize}"G -t3:8304 -c3:ROOT "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + sgdisk -I -n4:0:0 -t4:8302 -c4:HOME "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + partprobe -s "${sgdrive}" > /dev/null 2> amelia_log.txt || stage_fail + if [[ "${install}" == "yes" ]]; then + until sanity_check; do : ; done + else + ok + fi + fi } ################################################################################################### manual_part() { - local prompt="Disks" - stage_prompt="Partitioning" sleep 0.2 NC " @@ -3120,6 +3602,7 @@ ${magenta}###${nc}-----------------------------------${magenta}[ ${bwhite}Manual > Select a disk to Manage: " NC " + ${disks}" BLUE " @@ -3131,6 +3614,7 @@ Enter a disk number ${bwhite}(empty to skip)${blue}: " if [[ -n "${cgdsk_nmbr}" ]]; then cgdrive="$(echo "${disks}" | awk "\$1 == ${cgdsk_nmbr} {print \$2}")" if [[ -e "${cgdrive}" ]]; then + local prompt="Disk ${cgdrive}" if [[ "${run_as}" != "root" ]]; then sleep 0.2 RED " @@ -3142,13 +3626,8 @@ Enter a disk number ${bwhite}(empty to skip)${blue}: " fi cgdisk "${cgdrive}" clear - sleep 0.2 - NC " - - -==> [${green}Disk ${cgdrive} OK${nc}] " - partprobe -s "${cgdrive}" - return 1 + ok + partprobe -s "${cgdrive}" > /dev/null else invalid return 1 @@ -3156,19 +3635,10 @@ Enter a disk number ${bwhite}(empty to skip)${blue}: " else skip - if [[ "${partok}" == "n" ]]; then - until sanity_check; do : ; done - elif [[ -z "${sanity}" ]]; then + if [[ -z "${sanity}" ]]; then until dsks_submn; do : ; done - elif [[ "${sanity}" == "no" ]]; then + elif [[ "${sanity}" == "no" || "${partok}" == "n" ]]; then until sanity_check; do : ; done - elif [[ "${revision}" == "yes" ]]; then - return 0 - elif [[ "${sanity}" == "ok" ]]; then - if [[ "${install}" == "yes" ]]; then - return 0 - fi - until dsks_submn; do : ; done fi fi done @@ -3772,7 +4242,7 @@ ${multi_swap} fi fi #.................................................................................................. - if [[ ${rootprt} == "fail" ]] || [[ "${espprt}" == "fail" ]] || [[ "${xbootprt}" == "fail" ]] || [[ ${homeprt} == "fail" ]] || [[ ${swapprt} == "fail" ]]; then + if [[ "${rootprt}" == "fail" || "${espprt}" == "fail" || "${xbootprt}" == "fail" || "${homeprt}" == "fail" || "${swapprt}" == "fail" ]]; then sanity="no" else sanity="ok" @@ -3827,19 +4297,10 @@ ${multi_swap} return 0 elif [[ "${partok}" == "n" ]]; then if [[ "${multibooting}" == "n" ]]; then - if [[ "${smartpart}" == "y" ]]; then - next - until manual_part; do : ; done - else - next - if [[ "${slct_autoprt}" != "yes" && "${xbootloader}" != "yes" ]]; then - until auto_part; do : ; done - else - until manual_part; do : ; done - fi - fi + reload + until auto_part; do : ; done elif [[ "${multibooting}" == "y" ]]; then - next + reload until manual_part; do : ; done fi else @@ -3909,17 +4370,8 @@ ${multi_swap} until manual_part; do : ; done fi elif [[ "${multibooting}" == "n" ]]; then - if [[ "${smartpart}" == "n" && -z "${preset}" ]] ; then - next - until manual_part; do : ; done - elif [[ "${smartpart}" == "n" && -n "${preset}" ]] ; then - local stage_prompt="Partitioning" - line2 - stage_fail - else - next - until auto_part; do : ; done - fi + reload + until auto_part; do : ; done fi fi } @@ -4144,7 +4596,7 @@ instl() { until slct_swap; do : ; done fi - if [[ "${hypervisor}" == "none" && "${gfx_slct}" != "yes" ]]; then + if [[ "${hypervisor}" == "none" && -z "${gfx_slct}" ]]; then local stage_prompt="Graphics Setup" completion_err until dtct_gfx; do : ; done @@ -4153,10 +4605,23 @@ instl() { if [[ -z "${packages}" ]]; then local stage_prompt="Desktop Setup" completion_err - until slct_dsktp; do : ; done + until dsktp_slct; do : ; done + fi + if [[ -z "${dev}" ]]; then + until base_devel; do : ; done + fi + if [[ -z "${web_slct}" ]]; then + if [[ ! "${packages}" =~ ^(11|12)$ ]]; then + until web_browser; do : ; done + fi fi if [[ "${hypervisor}" == "none" ]]; then + if [[ -z "${printer}" ]]; then + if [[ ! "${packages}" =~ ^(11|12)$ ]]; then + until print_scan; do : ; done + fi + fi if [[ -z "${efi_entr_del}" ]]; then local stage_prompt="EFI Boot Entries Deletion" completion_err @@ -4164,18 +4629,20 @@ instl() { fi fi - if [[ "${hypervisor}" == "none" ]]; then - if [[ -z "${wrlss_rgd}" ]]; then - local stage_prompt="Wireless Regulatory Domain Setup" - completion_err - until wireless_rgd; do : ; done - fi - fi - - if [[ -z "${sysopt}" ]]; then - local stage_prompt="System Optimizations" + if [[ -z "${set_optm_slct}" ]]; then + local stage_prompt="Optimizations" completion_err - until sys_opt; do : ; done + until cust_kern_param; do : ; done + until sys_watchdog; do : ; done + until gen_optm; do : ; done + if [[ "${hypervisor}" == "none" ]]; then + until ask_wireless_regdom; do : ; done + fi + until systemd_oomd; do : ; done + until irqbalance; do : ; done + until thermald; do : ; done + until rngd; do : ; done + until rtkit; do : ; done fi until instl_dsk; do : ; done until ask_crypt; do : ; done @@ -4186,7 +4653,7 @@ instl() { if [[ "${encrypt}" == "no" ]]; then until set_mode; do : ; done - until confirm_status; do : ; done + until confirm_status; do : ; done elif [[ "${encrypt}" == "yes" ]]; then until sec_erase; do : ; done until luks; do : ; done @@ -4196,7 +4663,7 @@ instl() { until "${swaptype}"; do : ; done fi if [[ -n "${REGDOM}" ]]; then - until wireless_regdom; do : ; done + until set_wireless_regdom; do : ; done fi set_vars chroot_conf @@ -4419,9 +4886,9 @@ ${magenta}###${nc}----------------------------------------${magenta}[ ${bwhite}A if [[ ${fs} == "1" && -e "${home_dev}" && "${sep_home}" == "y" ]]; then if [[ "${smartpart}" == "y" ]]; then homeform="y" - elif [[ "${preset}" == "3" || "${preset}" == "4" || "${preset}" == "7" || "${preset}" == "8" ]]; then + elif [[ "${preset}" =~ ^(3|4)$ ]]; then homeform="y" - elif [[ -z "${smartpart}" ]] || [[ -z "${preset}" ]]; then + elif [[ -z "${smartpart}" || -z "${preset}" ]]; then BLUE " @@ -4739,9 +5206,9 @@ ask_homepart_form() { if [[ ${fs} == "1" && -e "${home_dev}" && "${sep_home}" == "y" ]]; then if [[ "${smartpart}" == "y" ]]; then homeform="y" - elif [[ "${preset}" == "3" || "${preset}" == "4" || "${preset}" == "7" || "${preset}" == "8" ]]; then + elif [[ "${preset}" =~ ^(3|4)$ ]]; then homeform="y" - elif [[ -z "${smartpart}" ]] || [[ -z "${preset}" ]]; then + elif [[ -z "${smartpart}" || -z "${preset}" ]]; then BLUE " @@ -5099,7 +5566,7 @@ ${magenta}###${nc}-------------------------------${magenta}[ ${bwhite}Confirm In until "${swaptype}"; do : ; done fi if [[ -n "${REGDOM}" ]]; then - until wireless_regdom; do : ; done + until set_wireless_regdom; do : ; done fi set_vars chroot_conf @@ -5115,7 +5582,7 @@ ${magenta}###${nc}-------------------------------${magenta}[ ${bwhite}Confirm In revise() { revision="yes" - reset=(xbootloader="" gfxconf="" vendor_slct="" vendor="" packages="" custompkgs="" customservices="" cust_bootopts="" REGDOM="" preset="" autoroot="" autoxboot="" autohome="" autoswap="" vendors="" lowlat="" nogsp="" smartpart="" man_preset="" preset="" presetpart="") + reset=(xbootloader="" gfxconf="" vendor_slct="" vendor="" packages="" custompkgs="" customservices="" cust_bootopts="" REGDOM="" autoroot="" autoxboot="" autohome="" autoswap="" vendors="" lowlat="" nogsp="" sanity="" smartpart="" partok="" preset="" presetpart="" set_optm="" ask_param="" kill_watchdog="" genoptm="" desk_setup="" web_slct="" set_optm_slct="" oomd="" irqbalance="" thermald="" rngd="" rtkit="") export "${reset[@]}" gfxpkgs=() @@ -5132,12 +5599,24 @@ revise() { if [[ "${hypervisor}" == "none" ]]; then until dtct_gfx; do : ; done fi - until slct_dsktp; do : ; done + until dsktp_slct; do : ; done + until base_devel; do : ; done + until web_browser; do : ; done if [[ "${hypervisor}" == "none" ]]; then + until print_scan; do : ; done until boot_entr; do : ; done - until wireless_rgd; do : ; done fi - until sys_opt; do : ; done + until cust_kern_param; do : ; done + until sys_watchdog; do : ; done + until gen_optm; do : ; done + if [[ "${hypervisor}" == "none" ]]; then + until ask_wireless_regdom; do : ; done + fi + until systemd_oomd; do : ; done + until irqbalance; do : ; done + until thermald; do : ; done + until rngd; do : ; done + until rtkit; do : ; done until instl_dsk; do : ; done until ask_crypt; do : ; done if [[ "${swapmode}" == "1" ]]; then @@ -5155,7 +5634,7 @@ revise() { until "${swaptype}"; do : ; done fi if [[ -n "${REGDOM}" ]]; then - until wireless_regdom; do : ; done + until set_wireless_regdom; do : ; done fi set_vars chroot_conf @@ -5451,6 +5930,7 @@ ${magenta}###${nc}-----------------------------------${magenta}[ ${bwhite}Pacman > Select a Country for your Arch Mirrors: + ### [Enter ${nc}'l' ${yellow}to list Countries, then ${nc}'enter' ${yellow}to search or ${nc}'q' ${yellow}to quit] " BLUE " @@ -5466,7 +5946,7 @@ Enter country name or country code ${bwhite}(Empty for Defaults)${blue}: " ==> [${green}Default Mirrors OK${nc}] " elif [[ "${COUNTRY}" == "l" ]]; then - reflector --list-countries | more + reflector --list-countries | less return 1 elif [[ -n "${COUNTRY}" ]]; then line2 @@ -5571,78 +6051,66 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Pacs displaymanager="sddm" bluetooth="bluetooth" network="NetworkManager" - shell="bash" - rtkit="rtkit-daemon" ;; + shell="bash" ;; 2) # Minimal Plasma + Apps: - deskpkgs="${basepkgs[*]} alsa-firmware alsa-utils arj ark bluedevil breeze-gtk ccache dolphin-plugins exfatprogs fdkaac ffmpegthumbs 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 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 nano-syntax-highlighting okular opus-tools p7zip packagekit-qt6 pacman-contrib partitionmanager 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 sox spectacle sshfs terminus-font timidity++ ttf-ubuntu-font-family unarchiver unrar unzip usb_modeswitch usbutils vdpauinfo vlc vorbis-tools wget xdg-desktop-portal xdg-desktop-portal-gtk xdg-desktop-portal-kde zip zsh zsh-autosuggestions zsh-completions zsh-syntax-highlighting ${nrg_plc}" + deskpkgs="${basepkgs[*]} alsa-firmware alsa-utils arj ark bluedevil breeze-gtk ccache dolphin-plugins exfatprogs fdkaac ffmpegthumbs 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 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 nano-syntax-highlighting okular opus-tools p7zip packagekit-qt6 pacman-contrib partitionmanager 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 sddm-kcm skanlite sox spectacle sshfs terminus-font timidity++ ttf-ubuntu-font-family unarchiver unrar unzip usb_modeswitch usbutils vdpauinfo vlc vorbis-tools wget xdg-desktop-portal xdg-desktop-portal-gtk xdg-desktop-portal-kde zip zsh zsh-autosuggestions zsh-completions zsh-syntax-highlighting ${nrg_plc}" displaymanager="sddm" bluetooth="bluetooth" network="NetworkManager" - shell="zsh" - randomgen="rngd" - rtkit="rtkit-daemon" ;; + shell="zsh" ;; 3) # Gnome Desktop: deskpkgs="${basepkgs[*]} gnome xdg-desktop-portal" displaymanager="gdm" bluetooth="bluetooth" network="NetworkManager" - shell="bash" - rtkit="rtkit-daemon" ;; + shell="bash" ;; 4) # Minimal Gnome + Apps: - deskpkgs="${basepkgs[*]} dconf-editor 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-system-monitor gnome-text-editor gnome-tweaks gvfs gvfs-afc gvfs-mtp loupe nautilus power-profiles-daemon simple-scan sushi xdg-desktop-portal-gnome xdg-user-dirs-gtk alsa-firmware alsa-utils ccache 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 libfido2 libva-utils lrzip mac man-db man-pages meld mesa-utils nano-syntax-highlighting p7zip pacman-contrib powerline powerline-fonts qbittorrent realtime-privileges reflector rng-tools 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}" + deskpkgs="${basepkgs[*]} dconf-editor 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-system-monitor gnome-text-editor gnome-tweaks gvfs gvfs-afc gvfs-mtp loupe nautilus power-profiles-daemon simple-scan sushi xdg-desktop-portal-gnome xdg-user-dirs-gtk alsa-firmware alsa-utils ccache 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 libfido2 libva-utils lrzip mac man-db man-pages meld mesa-utils nano-syntax-highlighting p7zip pacman-contrib powerline powerline-fonts qbittorrent realtime-privileges reflector 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}" displaymanager="gdm" bluetooth="bluetooth" network="NetworkManager" - shell="zsh" - randomgen="rngd" - rtkit="rtkit-daemon" ;; + shell="zsh" ;; 5) # Xfce Desktop: deskpkgs="${basepkgs[*]} xfce4 gvfs lightdm-gtk-greeter network-manager-applet pavucontrol xdg-desktop-portal xfce4-screensaver" displaymanager="lightdm" network="NetworkManager" - shell="bash" - rtkit="rtkit-daemon" ;; + shell="bash" ;; 6) # Cinnamon Desktop: deskpkgs="${basepkgs[*]} cinnamon blueberry gnome-keyring gvfs lightdm-slick-greeter xdg-desktop-portal ${terminal}" displaymanager="lightdm" bluetooth="bluetooth" network="NetworkManager" - shell="bash" - rtkit="rtkit-daemon" ;; + shell="bash" ;; 7) # Deepin Desktop: deskpkgs="${basepkgs[*]} deepin deepin-kwin deepin-terminal xdg-desktop-portal" displaymanager="lightdm" network="NetworkManager" - shell="bash" - rtkit="rtkit-daemon" ;; + shell="bash" ;; 8) # Budgie Desktop: deskpkgs="${basepkgs[*]} budgie lightdm-gtk-greeter arc-gtk-theme papirus-icon-theme nautilus network-manager-applet xdg-desktop-portal ${terminal}" displaymanager="lightdm" network="NetworkManager" - shell="bash" - rtkit="rtkit-daemon" ;; + shell="bash" ;; 9) # Lxqt Desktop: deskpkgs="${basepkgs[*]} lxqt breeze-icons gvfs network-manager-applet sddm xdg-desktop-portal xscreensaver" displaymanager="sddm" network="NetworkManager" - shell="bash" - rtkit="rtkit-daemon" ;; + shell="bash" ;; 10) # Mate Desktop: deskpkgs="${basepkgs[*]} mate mate-terminal mate-media blueman network-manager-applet mate-power-manager lightdm-gtk-greeter xdg-desktop-portal" displaymanager="lightdm" bluetooth="bluetooth" network="NetworkManager" - shell="bash" - rtkit="rtkit-daemon" ;; + shell="bash" ;; 11) # Base System: deskpkgs="${basepkgs[*]}" @@ -5688,8 +6156,7 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Pacs deskpkgs="${basepkgs[*]} cosmic cosmic-player xdg-desktop-portal" displaymanager="cosmic-greeter" network="NetworkManager" - shell="bash" - rtkit="rtkit-daemon" ;; + shell="bash" ;; esac pkg_displ @@ -5764,7 +6231,7 @@ FSTAB fi } ################################################################################################### -wireless_regdom() { +set_wireless_regdom() { local stage_prompt="Wireless Regulatory Domain" sleep 0.2 @@ -5971,7 +6438,7 @@ ZRAMCONF nvidia_hook() { if [[ "${gfxconf}" == "y" && "${vendor}" == "Nvidia" ]] || [[ "${gfxconf}" == "y" && "${vendors}" =~ "Nvidia" ]]; then - if [[ "${nvname}" == "nvidia-open" ]] || [[ "${nvname}" == "nvidia" ]] || [[ "${nvname}" == "nvidia-lts" ]]; then + if [[ "${nvname}" =~ ^(nvidia-open|nvidia|nvidia-lts)$ ]]; then local stage_prompt="Nvidia Hook Creation" if arch-chroot /mnt <<-NVIDIAHOOK > /dev/null 2>&1 2> amelia_log.txt ; then mkdir -p /etc/pacman.d/hooks/ || exit @@ -6120,14 +6587,63 @@ AMD_WATCHDOG if [[ "${oomd}" == "y" ]]; then local stage_prompt="Systemd-oomd Service Activation" - if arch-chroot /mnt <<-SYSTEMD_OOMD > /dev/null 2>&1 2> amelia_log.txt ; then + if arch-chroot /mnt <<-OOMD > /dev/null 2>&1 2> amelia_log.txt ; then mkdir -p /etc/systemd/system.conf.d > /dev/null 2>&1 || exit - cat <<-SET_OOMD > /etc/systemd/system.conf.d/00-oomd.conf || exit + cat <<-OOMD_CONF > /etc/systemd/system.conf.d/00-oomd.conf || exit [Manager] DefaultMemoryAccounting=yes -SET_OOMD +OOMD_CONF systemctl enable systemd-oomd || exit -SYSTEMD_OOMD +OOMD + stage_ok + else + stage_fail + fi + fi + + if [[ "${irqbalance}" == "y" ]]; then + local stage_prompt="Irqbalance Service Activation" + if arch-chroot /mnt <<-IRQBALANCE > /dev/null 2>&1 2> amelia_log.txt ; then + pacman -S --noconfirm irqbalance || exit + systemctl enable irqbalance || exit +IRQBALANCE + stage_ok + else + stage_fail + fi + fi + + if [[ "${thermald}" == "y" ]]; then + local stage_prompt="Thermald Service Activation" + if arch-chroot /mnt <<-THERMALD > /dev/null 2>&1 2> amelia_log.txt ; then + pacman -S --noconfirm thermald || exit + systemctl enable thermald || exit +THERMALD + stage_ok + else + stage_fail + fi + fi + + if [[ "${rngd}" == "y" ]]; then + local stage_prompt="Rngd Service Activation" + if arch-chroot /mnt <<-RNGD > /dev/null 2>&1 2> amelia_log.txt ; then + pacman -S --noconfirm rng-tools || exit + systemctl enable rngd || exit +RNGD + stage_ok + else + stage_fail + fi + fi + + if [[ "${rtkit}" == "y" ]]; then + local stage_prompt="Rtkit Service Activation" + if arch-chroot /mnt <<-RTKIT > /dev/null 2>&1 2> amelia_log.txt ; then + pacman -S --noconfirm rtkit || exit + systemctl enable rtkit-daemon || exit + usermod -aG realtime ${USERNAME} +RTKIT stage_ok else stage_fail @@ -6146,31 +6662,146 @@ PRINT_CONF stage_fail fi fi +} +################################################################################################### +optimizations() { - if [[ -n "${randomgen}" ]]; then - local stage_prompt="Random Generator Service Activation" - if arch-chroot /mnt <<-RANDOMGEN > /dev/null 2>&1 2> amelia_log.txt ; then - systemctl enable rngd || exit -RANDOMGEN + if [[ "${genoptm}" == "y" ]]; then + local stage_prompt="General System Optimizations" + if arch-chroot /mnt <<-GENOPTM > /dev/null 2>&1 2> amelia_log.txt ; then + pacman -S --noconfirm 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 + #!/hint/bash + 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" + 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 + cat <<-SYSCTL > /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 + vm.max_map_count = 1048576 + kernel.printk = 0 0 0 0 + ${perf_stream} +SYSCTL + 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) { + 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 + mkdir -p /etc/systemd/journald.conf.d > /dev/null 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 > /dev/null 2>&1 || exit + cat <<-TIMEOUT > /etc/systemd/user.conf.d/00-timeout.conf || exit + [Manager] + DefaultTimeoutStopSec=5s + DefaultTimeoutAbortSec=5s +TIMEOUT + sed -i "/# set linenumbers/"'s/^#//' /etc/nanorc || exit + sed -i "/# set minibar/"'s/^#//' /etc/nanorc || exit + sed -i "/# 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 stage_ok else stage_fail fi - fi - if [[ "${sysopt}" == "y" ]]; then - optimizations - if [[ -n "${rtkit}" ]]; then - local stage_prompt="Rtkit Service Activation" - if arch-chroot /mnt <<-REALTIME > /dev/null 2>&1 2> amelia_log.txt ; then - systemctl enable ${rtkit} || exit -REALTIME + if [[ -f /mnt/etc/udisks2/mount_options.conf ]]; then + local stage_prompt="Udisks2 Mount Options" + if arch-chroot /mnt <<-UDISKS2 > /dev/null 2>&1 2> amelia_log.txt ; then + cat <<-UDISKS_CONF > /etc/udisks2/mount_options.conf || exit + [defaults] + ntfs_drivers=ntfs,ntfs3 + ntfs:ntfs_defaults=uid=*,gid=*,iocharset=utf8,windows_names + ntfs:ntfs3_defaults=uid=*,gid=*,iocharset=utf8,windows_names + exfat_defaults=uid=*,gid=*,iocharset=utf8,errors=remount-ro +UDISKS_CONF +UDISKS2 stage_ok else stage_fail fi fi - if [[ "${hypervisor}" == "none" ]]; then + + if [[ -n ${REGDOM} ]]; then local stage_prompt="Wpa_Supplicant Configuration" if arch-chroot /mnt <<-WPA > /dev/null 2>&1 2> amelia_log.txt ; then cat <<-SUPPLICANT > /etc/wpa_supplicant/wpa_supplicant.conf || exit @@ -6187,6 +6818,13 @@ WPA fi } ################################################################################################### +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 + fi +} +################################################################################################### secboot_sign() { if [[ ${sb_sign} == "y" ]]; then @@ -6370,134 +7008,6 @@ set_vars() { mkinitcpio_hooks="HOOKS=(${HOOKS[*]})" } ################################################################################################### -optimizations() { - - local stage_prompt="System Optimizations" - if arch-chroot /mnt <<-OPTIMIZE > /dev/null 2>&1 2> amelia_log.txt ; then - pacman -S --noconfirm 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 - #!/hint/bash - 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" - 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 - cat <<-SYSCTL > /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 - vm.max_map_count = 1048576 - kernel.printk = 0 0 0 0 - ${perf_stream} -SYSCTL - cat <<-UDISKS2 > /etc/udisks2/mount_options.conf || exit - [defaults] - ntfs_drivers=ntfs,ntfs3 - ntfs:ntfs_defaults=uid=*,gid=*,iocharset=utf8,windows_names - ntfs:ntfs3_defaults=uid=*,gid=*,iocharset=utf8,windows_names - exfat_defaults=uid=*,gid=*,iocharset=utf8,errors=remount-ro -UDISKS2 - 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) { - 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 - mkdir -p /etc/systemd/journald.conf.d > /dev/null 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 > /dev/null 2>&1 || exit - cat <<-TIMEOUT > /etc/systemd/user.conf.d/00-timeout.conf || exit - [Manager] - DefaultTimeoutStopSec=5s - DefaultTimeoutAbortSec=5s -TIMEOUT - sed -i "/# set linenumbers/"'s/^#//' /etc/nanorc || exit - sed -i "/# set minibar/"'s/^#//' /etc/nanorc || exit - sed -i "/# 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 - usermod -aG realtime ${USERNAME} - 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 -OPTIMIZE - stage_ok - else - stage_fail - fi -} -################################################################################################### chroot_conf() { sleep 0.2 @@ -6631,6 +7141,7 @@ CUSTOMSERV nvidia_hook mkinitcpio_preset var_opts + optimizations secboot_sign completion installation="ok" @@ -6645,7 +7156,7 @@ CUSTOMSERV tty="$(tty)" 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="" gfxconf="" gfx_conf="" gfx_setup="" vendor="" vendor1="" vendor2="" vendor3="" vendor_slct="" packages="" efi_entr_del="" wrlss_rgd="" sanity="" install="" bootldr_pkgs="" devel="" REGDOM="" gfx_bootopts="" btrfs_bootopts="" trim="" swapmode="" homecrypt="" greeter="" revision="" greeternmbr="" cust_bootopts="" bluetooth="" vmpkgs="" vm_services="" perf_stream="" displaymanager="" wireless_reg="" bitness="" bootloader="" gfx_slct="" espsize="" autoroot="" autoesp="" autoxboot="" autohome="" autoswap="" rootprt="" espprt="" xbootprt="" homeprt="" swapprt="" partok="" use_manpreset="" 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="" uki="" ukify="" slct_autoprt="" 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="" vendors="" printer="" print_pkgs="" web="" web_browser="" shell="" randomgen="" rtkit="" sysopt="") + vars=(LOCALESET="" SETLOCALE="" lcl_slct="" USERNAME="" kernelnmbr="" fs="" gfxcount="" gfxcard="" intelcount="" intelcards="" nvidiacount="" nvidiacards="" amdcount="" amdcards="" gfxconf="" gfx_conf="" gfx_setup="" vendor="" vendor1="" vendor2="" vendor3="" vendor_slct="" packages="" efi_entr_del="" sanity="" install="" bootldr_pkgs="" devel="" REGDOM="" gfx_bootopts="" btrfs_bootopts="" trim="" swapmode="" homecrypt="" greeter="" revision="" greeternmbr="" cust_bootopts="" bluetooth="" 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="" 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="" vendors="" dev="" web="" web_browser="" printer="" print_pkgs="" shell="" genoptm="" set_optm="" ask_param="" desk_setup="" web_slct="" set_optm_slct="" irqbalance="" thermald="" rngd="" rtkit="") export "${vars[@]}" clear first_check