#!/bin/bash
# - bof - #



 aUsr_="is_derayo";
#aUsr_="jose";
#aUsr_="carlo";



Opt_=$1;
aPasswd_=$3;
logF_=~/.noInstalled-ArchInstall_$(date +%Y-%m-%d_%H-%M-%S).log;



<<'comment'



curl -o ~/ArchInstall.sh https://www.education.isdevelopment.us/Arch.Ins/01-ArchInstall.sh
chmod +x ~/ArchInstall.sh; ~/./ArchInstall.sh;

vim ~/ArchInstall.sh;
chmod +x ~/ArchInstall.sh; ~/./ArchInstall.sh , , aP;



# :A
# -  - #
# - Download Arch.iso - #

cd ~/Downloads;
sIso_='ArchLinux_2025-06-01(64bit).iso';
sWs_=https://www.education.isdevelopment.us/Arch.Ins/Arch_ISOs.Img/
curl $sWs_$sIso_ -o $sIso_;



# :B
# -  - #
# - Arch installation script - #

# - Method   # 1 - #
# - Recomended for guest users so they can edit adminUser, adminName & adminPasswd - #
curl -o ~/ArchInstall.sh https://www.education.isdevelopment.us/Arch.Ins/01-ArchInstall.sh
vim ~/ArchInstall.sh;
chmod +x ~/ArchInstall.sh; ~/./ArchInstall.sh;



# - Method   # 2 - #
curl -s https://www.education.isdevelopment.us/Arch.Ins/01-ArchInstall.sh -o ~/ArchInstall.sh && chmod +x ~/ArchInstall.sh && ~/./ArchInstall.sh

# - Method   # 3 - #
aI_=ArchInstall.sh;
curl -s https://www.education.isdevelopment.us/Arch.Ins/01-"$aI_" -o ~/$aI_ && chmod +x ~/$aI_ && ~/./$aI_

# - Method   # 4 - #
aI_=ArchInstall.sh;
curl -o ~/$aI_  https://www.education.isdevelopment.us/Arch.Ins/01-"$aI_"
chmod +x ~/$aI_; ~/./$aI_;

# - Method   # 5 - #
cd ~/; rm -rf ~/ArchInstall.sh; vim ~/ArchInstall.sh;
copy & paste this content
chmod +x ~/ArchInstall.sh; ~/./ArchInstall.sh;



# - Configured - #

# -  - #
# - Vim commands - #
https://vim.rtorr.com/

rm -rf ~/.bashrc;
nvim ~/.bashrc;

rm -rf ~/.zshrc;
nvim ~/.zshrc;

ssh-keygen -R 192.168.1.1

# - On client - #
cd ~/.ssh;
ssh-keygen -t rsa;

cat ~/.ssh/id_rsa.pub;

# - On server - #
nvim ~/.ssh/authorized_keys;

sudo apt install curl git htop inxi net-tools ntp neovim screenfetch tree -y;
sudo pacman -S curl git htop inxi net-tools ntp neovim screenfetch tree --noconfirm --needed;

ln /Data/Images/Programs/Linux.Img/Linux_Arch.Img/Arch_Install/Ermanno_Arch.Ins/01-Arch_Btrfs-UEFI_\(Latest\)/10-Arch-Install_IsDevelopmentUs_BIOS-UEFI_Btrfs-Zram-\(Latest\).sh \
   /Data/Education/Arch.Ins/01-ArchInstall.sh;
comment



# -  - #
# - Greetings_ - #
function Greetings_(){
  clear;
  echo "    _             _       ___           _        _ _ ";
  echo "   / \   _ __ ___| |__   |_ _|_ __  ___| |_ __ _| | |";
  echo "  / _ \ | '__/ __| '_ \   | || '_ \/ __| __/ _' | | |";
  echo " / ___ \| | | (__| | | |  | || | | \__ \ || (_| | | |";
  echo "/_/   \_\_|  \___|_| |_| |___|_| |_|___/\__\__,_|_|_|";
  echo "";
  echo "by Djalmar Enrique Rayo (2025) - GNU General Public License (GPL)";
  echo "---------------------------------------------------------------------------";
  echo "";
  echo "  Warning: This script is going to format the HDD/SSD/NVME02 automatically,";
  echo "           Run this script at your own risk.";
  echo "";
  echo "Important: Do your installation on a Virtual Environment first for testing.";
  echo "           Use method  # 1 so you will be able to:";
  echo "           Change adminUser_, adminName_ & adminPasswd_ variables";
  echo "           according to your needs & heart content.";
  echo "";
  echo "Procedure: 1. Start computer with Arch.iso usb.";
  echo "           2. Create passwd for root:       passwd;";
  echo "           3. Show computer's IPa:          ip a;";
  echo "           4. ssh into computer as root:    ssh root@192.168.1.100;";
  echo "";
  echo "           5. Open terminal & paste next commands:";
  echo "";
  echo "           curl -o ~/ArchInstall.sh https://www.education.isdevelopment.us/Arch.Ins/01-ArchInstall.sh"
  echo "           vim ~/ArchInstall.sh"
  echo "";
  echo "           6. Configure variables system_= ('BIOS' or 'UEFI'), adminUser_, adminName_ & adminPasswd_ as you need.";
  echo "";
  echo "           chmod +x ~/ArchInstall.sh; ~/./ArchInstall.sh"
  echo "";
  echo "Original lsblk:";
  echo "";

  lsblk;
  echo -e "\n\n";
  
  while true; do
    read -p "Do you want to start the installation now? (Yy/Nn): " yn
    case $yn in
        [Yy]* )
          echo -e "\n\n\nInstallation starting..."
          break;;
        [Nn]* )
          rm -rf /ArchInstall.sh;
          rm -rf ~/ArchInstall.sh;
          exit;
          break;;
        * ) echo "Please answer (y)es or (n)o.";;
    esac
done
}



hostName_=$(echo $(uname -n));
if [ "$hostName_" == "archiso" ]; then
   hostName_="ArchBtrfs"; fi;



uWServer_='www.education.isdevelopment.us';

adminUser_='is_derayo';
adminName_="Djalmar Enrique Rayo";
adminPasswd_='Admin';

if [ "$aUsr_" == "jose" ]; then
  adminUser_='jose';
  adminName_="Jose Maria Rayo";
  adminPasswd_='JMRayo';
fi;

if [ "$aUsr_" == "carlo" ]; then
  adminUser_='cvandemberg';
  adminName_="Jose Carlo Vandemberg";
  adminPasswd_='1972';
fi;



if [ "$aPasswd_" != "" ]; then
     adminPasswd_=$aPasswd_; fi;
rootPasswd_=$adminPasswd_;



 system_='BIOS';
#system_='UEFI';
if [ "$system_" == "BIOS" ]; then dType_=1; else dType_=2; fi;



# -  - #
# - Log_ - #
function Log_(){
  local gsS1_="ArchInstall\nPrograms not installed:";

  if [ -f "$logF_" ]; then
    rm -rf $logF_; fi;
  
  echo -e "$gsS1_\n" > $logF_;
  echo -e "\nCreating the log file... check for errors...";
  echo -e "\n5 seconds pause...";
  sleep 5;
}



Disk_='';
Disk1_='';
Disk2_='';
Disk3_='';



# -  - #
# - diskName_ - #
function diskName_(){
  local d_='' d1_='sda' d2_='vda' d3_='nvme0n1';

  d_=$(lsblk | grep -oF "$d1_");
  if [ "$d_" == "" ]; then
    d_=$(lsblk | grep -oF "$d2_");
    if [ "$d_" == "" ]; then
      d_=$(lsblk | grep -oF "$d3_");
      if [ "$d_" == "" ]; then
        echo "There is not disk present in the computer to format...";
        return;
      else
        Disk_=$d3_;
      fi;
    else
      Disk_=$d2_;
    fi;
  else
    Disk_=$d1_;
  fi;

  if [ "$d_" == "$d3_" ]; then
    Disk1_=$Disk_'p1';
    Disk2_=$Disk_'p2';
    Disk3_=$Disk_'p3';
  else
    Disk1_=$Disk_'1';
    Disk2_=$Disk_'2';
    Disk3_=$Disk_'3';
  fi;

  echo -e "\n\n";
  echo "Disk name found in your computer:";
  echo "";
  echo "Disk :" $Disk_;
  echo "Disk1:" $Disk1_;
  echo "Disk2:" $Disk2_;
  if [ "$dType_" == "2" ]; then
    echo "Disk3:" $Disk3_; fi;
  echo "";
  echo "5 Seconds pause ...";
  sleep 5;
}



# -  - #
# - createDisk_Bios_ - #
function createDisk_Bios_(){

diskName_;

<<'comment'
sudo wipefs -a -f /dev/sda;
sudo wipefs -o 0x1fe /dev/sda;
sudo sgdisk --zap-all /dev/sda;
comment

sudo sgdisk --zap-all /dev/$Disk_;

(
echo o     # New empty DOS partition table
echo n     # New partition
echo p     # Primary partition
echo 1     # Partition number
echo       # First sector (default: 1)
echo +100G  # Arch partition
echo n     # Add a new partition
echo p     # Primary partition
echo 2     # Partition number
echo       # First sector (default: 1)
echo       # Last sector (default, rest of partition Data)
echo w     # Write changes
) | sudo fdisk /dev/$Disk_;

(echo Y) | sudo mkfs.btrfs -L Arch /dev/$Disk1_;
(echo Y) | sudo mkfs.btrfs -L Data /dev/$Disk2_;

  echo -e "\n\n";
  echo 'DOS (bios) partition table was created...';
  echo 'Disk was formated...';
  echo -e "\n\n";
  lsblk -f;
  echo -e "\n\n";
  sleep 10;
}



# -  - #
# - createDisk_UEFI_ - #
function createDisk_UEFI_(){

diskName_;

<<'comment'
sudo wipefs -a -f /dev/sda;
sudo wipefs -o 0x1fe /dev/sda;
sudo sgdisk --zap-all /dev/sda;
comment

sudo sgdisk --zap-all /dev/$Disk_;

(
echo o     # New empty GPT partition table
echo Y     # Yes
echo n     # New partition
echo p     # Primary partition
echo 1     # Partition number
echo       # First sector (default: 1)
echo +640M # Arch partition
echo ef00  # EFI system partition
echo n     # New partition
echo p     # Primary partition
echo 2     # Partition number
echo       # First sector (default: 1)
echo +45G  # Arch
echo 8300  # Linux filesystem
echo n     # Add a new partition
echo p     # Primary partition
echo 3     # Data
echo       # First sector (default: 1)
echo       # Last sector (default, rest of partition Data) 
echo 8300  # Linux filesystem
echo w     # Write changes
echo Y     # Write changes
) | sudo gdisk /dev/$Disk_;

           sudo mkfs.vfat -n BOOT /dev/$Disk1_;
(echo Y) | sudo mkfs.btrfs -L Arch /dev/$Disk2_;
(echo Y) | sudo mkfs.btrfs -L Data /dev/$Disk3_;

  echo -e "\n\n";
  echo 'GPT (uefi) partition table was created...';
  echo 'Disk was formated...';
  echo -e "\n\n";
  lsblk -f;
  echo -e "\n\n";
  sleep 10;
}



# -  - #
# - diskLabels_ 1 $Disk1_ $Disk2_ $Disk3_ $Disk4_ - #
function diskLabels_(){
  local sType_=$1 $Disk1_=$2 $Disk2_=$3 $Disk3_=$4;

  case $sType_ in
    ''|*[!0-9]*)
      echo '';
      echo 'Its not a number...';
      ;;
    1)
      if [ $(lsblk -f | grep -oF  "$Disk1_") = $Disk1_ ] && \
         [ $(lsblk -f | grep -oF  "$Disk2_") = $Disk2_ ]; then return; fi;
      sudo e2label /dev/$Disk1_ Arch;
      sudo e2label /dev/$Disk2_ Data;
      ;;
    2)
      if [ $(lsblk -f | grep -oF  "$Disk1_") = $Disk1_ ] && \
         [ $(lsblk -f | grep -oF  "$Disk2_") = $Disk2_ ] && \
         [ $(lsblk -f | grep -oF  "$Disk3_") = $Disk3_ ]; then return; fi;
      sudo dosfslabel /dev/$Disk1_ BOOT;
      sudo e2label /dev/$Disk2_ Arch;
      sudo e2label /dev/$Disk3_ Data;
      ;;
    *)
      echo "Option no valid: " $sType_;
      ;;
  esac
}



# -  - #
# - createDisk_ 1 - #
function createDisk_(){
  local sD_=$1;
  case $sD_ in
    ''|*[!0-9]*)
      echo '';
      echo 'Its not a number...';
      ;;
    1)
      createDisk_Bios_;
      ;;
    2)
      createDisk_UEFI_;
      ;;
    *)
      echo "Option no valid: " $sD_;
      ;;
  esac

  echo -e "\n\n\n";
  echo "Mounts as shown...";
  echo -e "\n\n";
  lsblk -f;
  echo -e "\n\n";
  echo "10 seconds pause (disk structure)...";
  sleep 10;
}



# -  - #
# - ArchBase1_ - #
function ArchBase1_(){

  # -  - #
  # - Loadkeys (us=English es=Espanol) - #
  loadkeys us;

  # -  - #
  # - Timezone - #
  timedatectl set-ntp true;
  timedatectl set-timezone America/New_York;
  timedatectl status;



<<'comment'
  # -  - #
  # - BTRFS Requirements - #
  sda - vda - nvme0n1
  ├─sda1 vfat  FAT32 BOOT
  ├─sda2 btrfs       Arch
  └─sda3 btrfs       Data
comment



  # -  - #
  # - Mount partitions & Create subvolumes - #

  echo -e "\n\n\n";

  # -  - #
  # - Mount sda/vda/nvme0n1 - #
  if [ "$system_" == "BIOS" ]; then
    diskLabels_ 1 $Disk1_ $Disk2_;
    mount /dev/$Disk1_ /mnt;
  elif [ "$system_" == "UEFI" ]; then
    diskLabels_ 2 $Disk1_ $Disk2_ $Disk3_;
    mount /dev/$Disk2_ /mnt;
  fi;



  # -  - #
  # - Create subvolumes - #
  btrfs subvolume create /mnt/@;
  btrfs subvolume create /mnt/@.snapshots;
  btrfs subvolume create /mnt/@cache
  btrfs subvolume create /mnt/@home;
  btrfs subvolume create /mnt/@log
  btrfs subvolume create /mnt/@var;
  umount /mnt;



  # -  - #
  # - Mount subvolumes - #

  if [ "$system_" == "BIOS" ]; then
    mount -o ssd,noatime,nodiratime,compress=lzo,space_cache=v2,discard=async,autodefrag,subvol=@ /dev/$Disk1_ /mnt;
    mkdir -p /mnt/{boot/efi,home,.snapshots,var};
    mount -o ssd,noatime,nodiratime,compress=lzo,space_cache=v2,discard=async,autodefrag,subvol=@home /dev/$Disk1_ /mnt/home;
    mount -o ssd,noatime,nodiratime,compress=lzo,space_cache=v2,discard=async,autodefrag,subvol=@.snapshots /dev/$Disk1_ /mnt/.snapshots;
    mount -o ssd,noatime,nodiratime,compress=lzo,space_cache=v2,discard=async,autodefrag,subvol=@var /dev/$Disk1_ /mnt/var;
    mkdir -p /mnt/var/{cache,log};
    mount -o ssd,noatime,nodiratime,compress=lzo,space_cache=v2,discard=async,autodefrag,subvol=@cache /dev/$Disk1_ /mnt/var/cache;
    mount -o ssd,noatime,nodiratime,compress=lzo,space_cache=v2,discard=async,autodefrag,subvol=@log /dev/$Disk1_ /mnt/var/log;
  elif [ "$system_" == "UEFI" ]; then
    mount -o ssd,noatime,nodiratime,compress=lzo,space_cache=v2,discard=async,autodefrag,subvol=@ /dev/$Disk2_ /mnt;
    mkdir -p /mnt/{boot/efi,home,.snapshots,var};
    mount -o ssd,noatime,nodiratime,compress=lzo,space_cache=v2,discard=async,autodefrag,subvol=@home /dev/$Disk2_ /mnt/home;
    mount -o ssd,noatime,nodiratime,compress=lzo,space_cache=v2,discard=async,autodefrag,subvol=@.snapshots /dev/$Disk2_ /mnt/.snapshots;
    mount -o ssd,noatime,nodiratime,compress=lzo,space_cache=v2,discard=async,autodefrag,subvol=@var /dev/$Disk2_ /mnt/var;
    mkdir -p /mnt/var/{cache,log};
    mount -o ssd,noatime,nodiratime,compress=lzo,space_cache=v2,discard=async,autodefrag,subvol=@cache /dev/$Disk2_ /mnt/var/cache;
    mount -o ssd,noatime,nodiratime,compress=lzo,space_cache=v2,discard=async,autodefrag,subvol=@log /dev/$Disk2_ /mnt/var/log;
  fi;



  # -  - #
  # - Create Data subvolume - #
  mkdir -p /mnt/Data;

  if [ "$system_" == "BIOS" ]; then
    mount /dev/$Disk2_ /mnt/Data;
  elif [ "$system_" == "UEFI" ]; then
    mount /dev/$Disk3_ /mnt/Data;
  fi;

  btrfs subvolume create /mnt/Data/@Data;
  umount /mnt/Data;



  # -  - #
  # - Mount Data subvolume - #

  if [ "$system_" == "BIOS" ]; then
    mount -o ssd,noatime,nodiratime,compress=lzo,space_cache=v2,discard=async,autodefrag,subvol=@Data /dev/$Disk2_ /mnt/Data;
  elif [ "$system_" == "UEFI" ]; then
    # -  - #
    # - Efi mount - #
    mount /dev/$Disk1_ /mnt/boot/efi;
    mount -o ssd,noatime,nodiratime,compress=lzo,space_cache=v2,discard=async,autodefrag,subvol=@Data /dev/$Disk3_ /mnt/Data;
  fi;

  echo -e "\n\n\n";
  echo "lsblk -f as is right now...";
  echo -e "\n\n";
  lsblk -f;
  echo -e "\n\n";
  sleep 10;



  # -  - #
  # - Install linux base - #
  pacstrap /mnt base base-devel btrfs-progs dhcpcd dialog grub grub-btrfs linux linux-headers \
                linux-firmware net-tools netctl networkmanager network-manager-applet \
                networkmanager-openvpn wpa_supplicant;


  # -  - #
  # - Generate fstab file - #
  fstabF_=/mnt/etc/fstab;
  genfstab -U /mnt >> $fstabF_;

  # -  - #
  # - Copy script /mnt & continue with phase two of the installation - #
  cp ArchInstall.sh /mnt;
  arch-chroot /mnt ./ArchInstall.sh 2 $Disk_ $adminPasswd_;
}



# -  - #
# - ArchBase2_ - #
function ArchBase2_(){
  local Disk_=$2 \
        ltimeF_=/etc/localtime \
        lgenF_=/etc/locale.gen \
        localeF_=/etc/locale.conf \
        vconsoleF_=/etc/vconsole.conf \
        hostnameF_=/etc/hostname \
        hostsF_=/etc/hosts;

  echo -e "\n\n";
  echo "Disk transferred from phase one installation... $Disk_";
  echo "10 Seconds pause...";
  echo "";
  sleep 10;

  # -  - #
  # - Set localtime - #
  ln -sf /usr/share/zoneinfo/America/New_York $ltimeF_;

  # -  - #
  # - Set hardware clock - #
  hwclock --systohc;

  # -  - #
  # - generate locate - #
  sed -i 's/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' $lgenF_;
  locale-gen;

  # -  - #
  # - Set English language - #
  echo "LANG=en_US.UTF-8" >> $localeF_;
  # - Set Espanol language - #
  #echo "LANG=es_US.UTF-8" >> $localeF_;

  # -  - #
  # - Set keyboard layout - #
  echo "KEYMAP=us" >> $vconsoleF_;

  # -  - #
  # - Set hostname - #
  rm -rf $hostnameF_;
  echo $hostName_ >> $hostnameF_;
  hostnamectl set-hostname $hostName_;

  # -  - #
  # - Set local ip address - #
  rm -rf $hostsF_;
  echo "127.0.0.1 localhost" > $hostsF_;
  echo "::1       localhost" >> $hostsF_;
  echo '127.0.1.1 '$hostName_'.localdomain '$hostName_ >> $hostsF_;


  Log_;

  # -  - #
  # - Additional software - #

  lPrograms1_="figlet gedit git lolcat mesa nano neovim openssh samba snapper sshfs sudo tilix";
  tInstall_=$(sPackages_ "$lPrograms1_");
  pacman -S $tInstall_ --noconfirm --needed;



  # -  - #
  # - Hardware software - #

  # -  - #
  # - All video cards (generics) - #
  if [ "$hostName_" != "HPLaptopArch" ] && [ "$hostName_" != "HPDesktopArch" ]; then
    lPrograms1_="xf86-video-amdgpu xf86-video-ati xf86-video-fbdev xf86-video-intel \
                 xf86-video-nouveau xf86-video-vesa";
    tInstall_=$(sPackages_ "$lPrograms1_");
    pacman -S $tInstall_ --noconfirm --needed;
  fi;

  # -  - #
  # - Intel, Amd & nvidia - #
  if [ "$hostName_" != "HPLaptopArch" ] && [ "$hostName_" != "iMac" ]; then
    lPrograms1_="intel-ucode amd-ucode nvidia nvidia-utils";
    tInstall_=$(sPackages_ "$lPrograms1_");
    pacman -S $tInstall_ --noconfirm --needed;
  fi;

  # -  - #
  # - Intel & nVidia- #
  if [ "$hostName_" != "HPLaptopArch" ]; then
    lPrograms1_="intel-ucode nvidia nvidia-utils";
    tInstall_=$(sPackages_ "$lPrograms1_");
    pacman -S $tInstall_ --noconfirm --needed;
  fi;



  # -  - #
  # - Utilitary software - #
  lPrograms1_="acpi acpi_call alsa-utils bluez bluez-utils dnsutils inetutils powertop \
               tlp wireless_tools xdg-utils xdg-user-dirs";
  tInstall_=$(sPackages_ "$lPrograms1_");
  pacman -S $tInstall_ --noconfirm --needed;



  # -  - #
  # - If (UEFI) - #
  if [ "$system_" == "UEFI" ]; then
    lPrograms1_="efibootmgr dosfstools mtools";
    tInstall_=$(sPackages_ "$lPrograms1_");
    pacman -S $tInstall_ --noconfirm --needed;
  fi;



  # -  - #
  # - Double boot activation - #
  lPrograms1_="os-prober";
  tInstall_=$(sPackages_ "$lPrograms1_");
  pacman -S $tInstall_ --noconfirm --needed;

  os-prober;
  grubF_=/etc/default/grub;
  sed -i 's/#GRUB_DISABLE_OS_PROBER=false/GRUB_DISABLE_OS_PROBER=false/' $grubF_;
 


  # -  - #
  # - Install grub - #

  # - Prepare grub Btrfs configuration - #
  initF_=/etc/mkinitcpio.conf;
  sed -i 's/MODULES=()/MODULES=(btrfs)/' $initF_;
  mkinitcpio -p linux;

  if [ "$system_" == "BIOS" ]; then
     grub-install /dev/$Disk_;
  elif [ "$system_" == "UEFI" ]; then
     grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB --recheck;
  fi;
  echo "";
  echo "15 seconds pause (grub-installed)...";
  echo -e "\n\n";
  sleep 15;

  # -  - #
  # - Create grub.cfg file - #
  grubCfg_=/boot/grub/grub.cfg;  
  grub-mkconfig -o $grubCfg_;
  echo "";
  echo "15 seconds pause (grub-mkconfig configured)...";
  echo -e "\n\n";
  sleep 15;



  # -  - #
  # - Root password & create new user & password - #

  # -  - #
  echo "";
  echo "Creating root password...";
  echo 'root:'$rootPasswd_ | chpasswd;  
  sleep 5;

  echo "";
  echo "Authorizing root user full ssh access...";
  sshdConf_=/etc/ssh/sshd_config;  
  sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' $sshdConf_;
  sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' $sshdConf_;
  sleep 5;

  # -  - #
  echo "";
  echo "Creating admin user...";
  useradd -m $adminUser_;
  usermod -aG audio,optical,storage,video,wheel $adminUser_;
  usermod -c "$adminName_" $adminUser_; 
  echo $adminUser_':'$adminPasswd_ | chpasswd;
  sleep 5;



  # -  - #
  # - Authorize wheel to sudo - #
  sed -i 's/# %wheel ALL=(ALL:ALL) ALL/%wheel ALL=(ALL:ALL) ALL/' /etc/sudoers;



  # -  - #
  # - Printer software - #
  lPrograms1_="cups cups-pdf hplip libcups system-config-printer";
  tInstall_=$(sPackages_ "$lPrograms1_");
  pacman -S $tInstall_ --noconfirm --needed;
  systemctl enable cups;



  # -  - #
  # - Additional software - #
  lPrograms1_="audacious bash-completion bleachbit bpytop curl dolphin duf evince fastfetch figlet filelight \
              file-roller filezilla firefox gcc geeqie gimp gnome-disk-utility gnome-calculator \
              gnome-multi-writer gnome-packagekit gnome-terminal gnome-system-monitor gpart \
              gparted gpicview gvfs htop kpat libreoffice man mate-icon-theme-faenza nmap \
              ntfs-3g pavucontrol plank poppler-glib postgresql pv pydf python p7zip rsync \
              screenfetch simple-scan smplayer spectacle tar testdisk thunar transmission-gtk \
              tree unrar unzip viewnior vlc whois wget yajl";
  tInstall_=$(sPackages_ "$lPrograms1_");
  pacman -S $tInstall_ --noconfirm --needed;



<<'comment'
  # -  - #
  # - Banner - #
  figlet "Rayo";

  # -  - #
  # - Center - #
  figlet -c "Rayo";

  # -  - #
  # - Center & color - #
  figlet -c "Rayo" | lolcat;

  # -  - #
  # - Fonts - #
  
  showfigfonts;
  banner
  big
  block
  bubble
  digital
  ivrit
  lean
  mini
  script
  shadow
  slant
  small
  smscript
  smshadow
  smslant
  standard

  # -  - #
  # - Fonts - #
  figlet -f small "Additional";
  figlet -f small "Programs";

  figlet -f small "Additional" | lolcat;
  figlet -f small "Programs" | lolcat;

  figlet -f standard "Additional";
  figlet -f standard "Programs";
comment



  # - MariaDB client - #
  lPrograms1_="adapta-gtk-theme archlinux-wallpaper binutils brasero \
               fakeroot gpicview gtkmm3 make mariadb-clients papirus-icon-theme \
               viewnior xfburn";
  tInstall_=$(sPackages_ "$lPrograms1_");
  pacman -S $tInstall_ --noconfirm --needed;



<<'comment'
  # -  - #
  sudo su;
  echo "export EDITOR=nvim" >> .bashrc;
  source .bashrc;
  systemctl edit --full grub-btrfsd;

  ExecStart=/usr/bin/grub-btrfsd --syslog -t

  grub-mkconfig -o /boot/grub/grub.cfg;
comment



  # -  - #
  # - Enable ssh & NetworkManager - #
  systemctl enable sshd;
  systemctl enable NetworkManager;

  createzRam_;

  rm -rf /ArchInstall.sh;

  # -  - #
  # - Exit & reboot - #
  echo "";
  printf "\e[1;32mDone! Type umount -a and shutdown now.\e[0m";
  echo "";

}



# -  - #
# - create-zRam_ - #
function createzRam_(){
  local zRamCnf_=/etc/systemd/zram-generator.conf \
        tzRamCnf_=~/tzRamCnf_.tmp;
  echo -e "\n\n";
  echo "Install zram...";

  lPrograms1_="zram-generator";
  tInstall_=$(sPackages_ "$lPrograms1_");
  pacman -S $tInstall_ --noconfirm --needed;

  if [ -f "$zRamCnf_" ]; then
    echo "$zRamCnf_ already exists!"
  else
	  touch $tzRamCnf_;
	  echo "[zram0]" > $tzRamCnf_;
	  echo "zram-size = ram / 2" >> $tzRamCnf_;
	  echo "compression-algorithm = zstd" >> $tzRamCnf_;
	  echo "swap-priority = 100" >> $tzRamCnf_;
	  echo "fs-type = swap" >> $tzRamCnf_;

    mv $tzRamCnf_ $zRamCnf_;

    echo "";
    echo "$zRamCnf_ details...";
    echo "";
    cat $zRamCnf_;

    systemctl daemon-reload;
    systemctl start /dev/zram0;
  fi;
  echo "DONE! Reboot now and check with free -h the ZRAM installation.";
  echo "";
}



# -  - #
# - sPackages_ - #
function sPackages_(){
  local sS1_='' sS2_='' sS3_='' sS4_='' 
        lPacks_=$1 ;
  
  while true;
  do
    sS1_=$(echo "$lPacks_" | awk '{print $1}');
    lPacks_=$(echo "${lPacks_/$sS1_/"$sS2_"}");

    sS4_=$(echo $(pacman -Ssq | grep -oF "$sS1_" ) | awk '{print $1;}' );
    if [ "$sS4_" != "" ]; then
      sS3_=$sS3_" "$sS1_;
    else
      echo -e "$sS1_" >> $logF_;
    fi;
    sS1_='';

    lPacks_=$(echo "$lPacks_" | xargs);
    if [[ "$lPacks_" == "" ]]; then
      break; fi;
  done

  echo $sS3_;
}



# -  - #
# - checkComputer_ - #
function checkComputer_(){
  local sMsg_="This process cannot be executed on: $hostName_...";
  echo -e '\nChecking computer...\n';
  if [ "$hostName_" == "HPLaptopArch" ] || [ "$hostName_" == "HPDesktopArch" ]; then
     rm -rf ~/ArchInstall.sh;
     echo -e "\n$sMsg_\n\n\n";
     sleep 10;
     exit;
  fi;
  echo "";
}



case $Opt_ in
  ''|*[!0-9]*)
    Greetings_;
    checkComputer_;
    createDisk_ $dType_;
    ArchBase1_;
    umount -a;
    echo "";
    echo "Arch installation is done...";
    echo "";
    read -t 5 -p "System will shutdown now.";
    echo "";
    shutdown now;
    ;;
  2)
    ArchBase2_ $1 $2;
    ;;
  *)
    echo "Option no valid: " $Opt_;
    ;;
esac



<<'comment'
cd ~/; rm -rf ~/ArchInstall.sh; vim ~/ArchInstall.sh;
copy & paste this content
chmod +x ~/ArchInstall.sh; ~/./ArchInstall.sh;
comment



# - eof - #