# - bof - #
#!/bin/bash



clear;



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

# - Configured - #

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

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

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;
comment



# -  - #
# - Global variables - #
Dir_=($PWD);
cHost_="$HOSTNAME";



uServerIP_isdevelopmentUS_='www.isdevelopment.us';    # 69.126.62.117
gateway4_isdevelopmentUS_='192.168.1.1';

uServerIP_uSVManager='192.168.1.101';
gateway4_uSVManager='192.168.1.1';

uServerIP_uSProxmox='192.168.1.100';
gateway4_uSProxmox='192.168.1.1';


ViManager_='Yes';
VEProxmox_='No';
RealMetal_='No';
WebServer_='No';


if [ "$ViManager_" == "Yes" ]; then
   uServerIP_=$uServerIP_uSVManager;
   gateway4_=$gateway4_uSVManager;
elif [ "$VEProxmox_" == "Yes" ]; then
   uServerIP_=$uServerIP_uSProxmox;
   gateway4_=$gateway4_uSProxmox;
elif [ "$WebServer_" == "Yes" ]; then
   uServerIP_=$uServerIP_isdevelopmentUS_;
   gateway4_=$gateway4_isdevelopmentUS_;
elif [ "$RealMetal_" == "Yes" ]; then
   uServerIP_=$uServerIP_isdevelopmentUS_;
   gateway4_=$gateway4_isdevelopmentUS_;
fi;


Addresses_='8.8.8.8, 8.8.4.4';

rootPasswd_='Administrator2';
masterUser_='is_derayo';
masterPasswd_=$rootPasswd_;
adminName_='Djalmar Enrique Rayo';
adminPasswd_=$rootPasswd_;
userPasswd_=$rootPasswd_;

 Hyprland_='Yes';
 Hyprland_='No';

Disk_='';
Disk1_='';
d1_='sda' d2_='vda' d3_='';

if [ "$cHost_" == "iMac" ]; then d1_='sdb'; fi;
if [ "$cHost_" == "HPLaptopArch" ]; then d1_='nvme0n1'; fi;


# -  - #
# - 1.Xfce 2.Cinnamon 3.Kde-Plasma 4.Gnome 5.Deepin(NoGood) 6.Budgie 7.OpenBox 8.XMonad 9.NoDesktop - #
 Desktop_=1;      # Xfce
#Desktop_=9;      # NoDesktop


 PulseAudio_='No';
 #PulseAudio_='Yes';
 if [ "$Desktop_" == "9" ]; then
    PulseAudio_='No'; fi;

 PipeWire_='Yes';
#PipeWire_='No';
 if [ "$Desktop_" == "9" ]; then
    PipeWire_='No'; fi;
 if [ "$Hyprland_" == "No" ]; then
    PipeWire_='Yes'; fi;


 Btrfs_='Yes';
#Btrfs_='No';

 zPool_='Yes';
 zPool_='No';

 zMirror_='Yes';
 zMirror_='No';

 _bashrc_='No';
 _bashrc_='Yes';

 dropbox_='Yes';
 dropbox_='No';

 Plank_='No';
 Plank_='Yes';

 Paru_='Yes';
#Paru_='No';

 preLoad_='Yes';
#preLoad_='No';


 aDesktopConf_='/etc/aDesktop.Conf';

# -  - #
# - sample_ - #
function sample_(){
  local pacmanF_=/etc/pacman.conf \
        sSed_='ParallelDownloads = 5' \
        candy_='ILoveCandy';
  local msg_0='Configuring '$pacmanF_' ...' \
        msg_1=$pacmanF_' already configured...' \  
        sS1_='' sS2_='' sS3_='' sS4_='';
  echo '';
}



# -  - #
# - AdditionalSoftware_ - #
function AdditionalSoftware_(){
  local pacmanF_=/etc/pacman.conf \
        sSed_='ParallelDownloads = 5' \
        candy_='ILoveCandy';
  local msg_0='Configuring '$pacmanF_' ...' \
        msg_1='Additional software already installed...' \
        sS1_='' sS2_='' sS3_='' sS4_='';
  local sS10_='# - Additional software installed - #' sS20_='' \
        tmp_=~/tmp.txt;
  local sC_1='#ILoveCandy' sC_2='';
  echo '';



  if [ -f "$aDesktopConf_" ]; then
     sS20_=$(echo $(cat $aDesktopConf_ | grep "$sS10_" ));
     if [ "$sS10_" == "$sS20_" ]; then echo $msg_1; sleep 5; return; fi;
  fi;

  echo $msg_0;



  #sS1_=$(echo $(cat $pacmanF_ | grep "$sSed_" ));
  #sS2_=$(echo $(cat $pacmanF_ | grep -oF "$candy_" ));
  #if [ "$sS1_" == "$sSed_" ] && [ "$sS2_" == "$candy_" ]; then echo $msg_1; return; else echo $msg_0; fi;

  Install-Reflector_;



  echo '';
  echo 'Installing additional software...';
  sudo pacman -S firefox fastfetch gedit screenfetch tilix neovim --noconfirm --needed;
  sudo pacman -S ttf-jetbrains-mono-nerd --noconfirm --needed;
  sudo pacman -S vscode --noconfirm --needed;
  sudo pacman -S flatpak eza --noconfirm --needed;
  #sudo pacman -S neofetch --noconfirm --needed;


  # -  - #
  # - Configure pacman.conf - #
<<'comment'
  pacmanF_=/etc/pacman.conf;
comment

  echo "Configuring $pacmanF_...";

  sudo sed -i 's/#ParallelDownloads = 5/'"$sSed_"'/' $pacmanF_;
  sudo sed -i 's/#ParallelDownloads = 3/'"$sSed_"'/' $pacmanF_;
  sudo sed -i 's/ParallelDownloads = 3/'"$sSed_"'/' $pacmanF_;
  sudo sed -i 's/#Color/Color/' $pacmanF_;
  ln=$(sed -n '/ParallelDownloads = 5/{=}' $pacmanF_);

  # -  - #
  # - Search ILoveCandy - #
  sC_2=$( cat $pacmanF_ | grep $sC_1);
  if [ "$sC_2" != "" ]; then
     sudo sed -i 's/#ILoveCandy/ILoveCandy/' $pacmanF_;
  else
     sC_2=$( cat $pacmanF_ | grep $candy_);
     if [ "$sC_2" == "" ]; then
        ln=$(echo "$(($ln + 1))");
        sudo sed -i $ln' i ILoveCandy' $pacmanF_;
     fi;
  fi;



  if [ "$zPool_" == "Yes" ]; then
     #sed -i -e '$a\' file
     #echo "" >> $pacmanF_;
     sudo sed -i -e '$ a \ ' $pacmanF_;
     #echo "[archzfs]" >> $pacmanF_;
     sudo sed -i '$ a [archzfs]' $pacmanF_;
     #echo "SigLevel = Optional TrustAll" >> $pacmanF_;
     sudo sed -i '$ a SigLevel = Optional TrustAll' $pacmanF_;
     sudo sed -i '$ a Server = https://archzfs.com/$repo/$arch' $pacmanF_;
  fi;



  Update_;

  echo "";
  echo "Installing samba...";
  sudo pacman -S samba --noconfirm --needed;
  sudo pacman -S nautilus-share gvfs-smb --noconfirm --needed;

  echo "";
  echo "Installing xorg server...";
  sudo pacman -S xorg xorg-server xorg-xinit --noconfirm --needed;


  Install-Yay_;
  Install-Yaourt_;


  echo "";
  echo "Installing pamac...";
  yay -S pamac-aur --noconfirm --needed;


  if [ "$Paru_" == "Yes" ]; then
     echo "";
     echo "Installing paru helper...";
     yay -S paru --noconfirm --needed;
  fi;

  if [ "$preLoad_" == "Yes" ]; then
     echo "";
     echo "Installing preLoad...";
     yay -S preload --noconfirm --needed;
  fi;


  Install-Brave_;


  if [ "$zPool_" == "Yes" ]; then
     echo ""
     echo "Installing Zfs software...";
     yay -S zfs-utils zfs-dkms --noconfirm --needed;

     sudo systemctl enable zfs-import-cache \
                           zfs-mount \
                           zfs-import.target \
                           zfs.target;
     sudo systemctl start  zfs.target;

     # -  - #
     # - Enable ZFS support without rebooting - #
     sudo modprobe zfs;
  fi;



  echo "";
  echo "Installing additional software...";

  # - Icon themes - #
  yay -S antu-classic-icon-theme-git arc-faenza-icon-theme --noconfirm --needed;
  yay -S arc-gtk-theme arc-icon-theme pinta --noconfirm --needed;

  yay -S archdroid-icon-theme ardis-icon-theme-circle faba-icon-theme-git inxi \
         la-capitaine-icon-theme-git moka-icon-theme-git --noconfirm --needed;

  yay -S numix-gtk-theme numix-icon-theme numix-square-icon-theme pix \
         whitesur-icon-theme --noconfirm --needed;

  #paru -S tela-icon-theme --noconfirm --needed;
  #paru -S paper-icon-theme-git --noconfirm --needed;

  yay -S faenza-cupertino-icon-theme --noconfirm --needed;
  yay -S numix-circle-icon-theme --noconfirm --needed;

  # -  - #
  # - Download youtube videos - #
  yay -S yt-dlp --noconfirm --needed;
  # -  - #
  # - Download sample - #
  # yt-dlp https://www.youtube.com/watch?v=-RY1YMvceRY;



  if [ "$dropbox_" == "Yes" ]; then
     echo '';
     echo "Installing dropbox...";
     yay -S dropbox --noconfirm --needed;
  fi;



  # -  - #
  # - Audio software - #
  if [ "$Desktop_" != "9" ]; then
     if [ "$PulseAudio_" == "Yes" ]; then
        Install-PulseAudio_;
     fi;
     if [ "$PipeWire_" == "Yes" ]; then
        Install-PipeWire_;
     fi;
  fi;



  ttf-ms-fonts_;
  BalenaEtcher_;
  ClipGrab_;



cat <<EOT>> $tmp_;
# - bof - #

$sS10_



# - eof - #
EOT



  sudo mv $tmp_ $aDesktopConf_;
  sudo chown root:root $aDesktopConf_;

  sudo inxi -SCMm -t c -P -x;

  cd $Dir_;
  echo "";
  echo "Additional software has been installed...";
  echo "";
  sleep 10;
}



# -  - #
# - Install-PulseAudio_ - #
function Install-PulseAudio_(){
    sudo pacman -S alsa-utils pavucontrol pulseaudio pulseaudio-alsa pulseaudio-bluetooth --noconfirm --needed;
}

# -  - #
# - Install-PipeWire_ - #
function Install-PipeWire_(){
    sudo pacman -S alsa-utils pavucontrol \
                   pipewire pipewire-alsa pipewire-jack pipewire-pulse \
                   sof-firmware wireplumber --needed;
   #sudo pacman -S pipewire pipewire-alsa pipewire-pulse --noconfirm --needed;
   #sudo pacman -S pavucontrol --noconfirm --needed;
   #sudo pacman -S wireplumber --noconfirm --needed;
}



# -  - #
# - Install-Reflector_ - #
function Install-Reflector_(){
  local sS_1='reflector' sS_2='';
  echo '';

  # -  - #
  # - Search package in repository - #
  sS_2=$( pacman -Ss "$sS_1" | grep $sS_1);
  if [ "$sS_2" == "" ]; then 
     echo "Reflector no available in repository..."; echo ''; return; fi;

  # -  - #
  # - Check if package is installed already - #
  sS_2=$(pacman -Qqe | grep $sS_1);
  if [ "$sS_1" != "$sS_2" ]; then
     echo "Installing Reflector...";
     sudo pacman -S reflector --noconfirm --needed;
  fi;

  # -  - #
  # - Updating arch mirrorlist - #
  echo '';
  echo 'Updating arch mirror list...';
  sudo reflector --verbose --threads 50 -l 101 -f 101 --number 50 --sort rate --save /etc/pacman.d/mirrorlist;
  echo '';
  echo 'Mirror list updated...';

  sleep 10;
}



# -  - #
# - Install-Yay_ - #
function Install-Yay_(){
  local sS_1='yay' Dir_=($PWD) \
        sS_2='';
  echo '';
  sS_2=$(pacman -Qqe | grep $sS_1);
  if [ "$sS_1" == "$sS_2" ]; then
     echo "Yay helper already installed...";
  else
     echo "Installing yay helper...";
     cd ~/Downloads;
     git clone https://aur.archlinux.org/yay-git.git;
     cd yay-git;
     #makepkg -si PKGBUILD;
     makepkg -si;
  fi;

  yay --save --answerclean All --answerdiff All;
  yay --save --nocleanmenu --nodiffmenu;
  cd $Dir_;
  echo '';
  sleep 10;
}



# -  - #
# - Install-Yaourt_ - #
function Install-Yaourt_(){
  local sS_1='yaourt' Dir_=($PWD) \
        sS_2='';
  echo '';
  sS_2=$(pacman -Qqe | grep $sS_1);
  if [ "$sS_1" == "$sS_2" ]; then
     echo "Yaourt helper already installed...";
  else
     echo "Installing Yaourt helper...";
     cd ~/Downloads;
     git clone https://aur.archlinux.org/package-query.git;
     cd package-query;
     echo 'Y' | makepkg -si PKGBUILD;

     cd ~/Downloads;
     git clone https://aur.archlinux.org/yaourt.git;
     cd yaourt;
     echo 'Y' | makepkg -si PKGBUILD;
  fi;
  cd $Dir_;
  sleep 10;
}



# -  - #
# - Update system - #
function Update_(){
  echo "";
  echo 'Updating system...';
  sudo pacman -Syu --noconfirm && sudo pacman -Syyuu --noconfirm;        
  echo "System has been updated...";
  sleep 10;
}



# -  - #
# - sshPublicKey_ - #
function sshPublicKey_(){
  local pKey_1='ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDvYwMbfEpfIgxa/ZJlkEWmk/YvXWmX5RlPxXs15/XLzfb4E5sYiKdJanVp6NTEYf1f6PmCndzQ7qrgD9FcrjRFhej6wBf5rM7DIHLvt7KvVVPzk2YTBmuaFbKaF9MaRqLpRlkFxuRQuy0k1AEOW1T/yPOZ/6ip7ts91LlFJU7DC+NVwG+5tbJs9q1NZcpF93Onc/aZDctm0swkx17tzzY3Y4jXara+DzrYTwqTy1FF5V+sYDLNkL7PcY+MwW+jJEPszRSiYVOptvNXCyz+5nGI1zNjIQqayEcvtanBk9NeDQ2Q+fy+1EfAz0wYgHFaBR8WG5i/iE6ViM+ik9F4+jWe/Hr07bVLvLSDwjRtlxhhN044BNcSBdjXG1EmtY7f0w3sREi6HxrUcsjO4CdVe4NcyaM7620aDO1admwR/23/wlwJG/lFBlY87EZqMDWKJDxv3OBt5mZSg/MZEPRreYC1jkC3WiYSz3I1vf4zQMeV9rJTf/96245jNxfI+ozEIcE= is_derayo@HPLaptopArch';
  local pKey_2='ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC6FvLj9fKZLzmuKg6S+cyMjYF2knvXWt0XR9rzv9BLh6w3lWZwErGEC/ZN+lWFz1k+lHXQqDdirdMTcN4dG1PSGDSY9nWDNgQ69eBzy56jwpqqwUeYKxo2+easPkfkpqaskBqsBZkTJy5siI1+dqbVURY1ANgC/DCsRX+C911lq56xKfmtd+ulm3HaDo53E0RowIqLOpNaQK2RfX9pfU0EIOyX4doWTD1CDq/YSUoheXiEGfg5tZmFSSq7w6/623bSJOuBeGa9n5+HNWoWeHm+jlzPOq/W8/n5MflzfEMQxdi9Ot2Fz1Llz2H+zTIqQTNlHyXPABsg8EA7lA1DSUjBK4JojdUm/pfYD8BGdJXL7Lh09emgFKTGDDfI+tB2RwFXlfR+z8Byn7X3T9NytlCINYW25Hs0H3UnypdSvt0LrCdzWsOucamtj0QU8bcFNivIJjX8xe00p/NQ2bRQA/tSqAnomGZuR8VK9UXa4GtyvMml2VGV/a0nbGfOjGpg/qk= is_derayo@HPDesktopArch';
  local sName_='sshPublicKey' \
        ssh_=~/.ssh \
        rootSsh_=/root/.ssh \
        aKeys_=~/.ssh/authorized_keys;
  local msg_0='Configuring '$sName_' ...' \
        msg_1=$sName_' already configured...' \
        sS1_='' sS2_='';
  echo "";

  if [ -d "$ssh_" ] && [ -f "$aKeys_" ]; then
    sS1_=$(echo $(cat "$aKeys_" | grep "$pKey_1"));
    sS2_=$(echo $(cat "$aKeys_" | grep "$pKey_2"));
    if [ "$sS1_" == "$pKey_1" ] && [ "$sS2_" == "$pKey_2" ]; then echo $msg_1; sleep 5; return; fi;
  fi;
  echo $msg_0;

  mkdir -p $ssh_;
  chmod 700 $ssh_;
  #rm -rf $aKeys_;
  touch $aKeys_;
  chmod 600 $aKeys_;

  if [ "$sS1_" == "" ]; then echo $pKey_1 >> $aKeys_; fi;
  if [ "$sS2_" == "" ]; then echo $pKey_2 >> $aKeys_; fi;

  sudo mkdir -p $rootSsh_;
  sudo chmod 700 $rootSsh_;
  sudo cp -p $aKeys_ $rootSsh_;
  sudo chown -R root:root $rootSsh_;

  echo $sName_' has been configured...';
  sleep 10;
}



# -  - #
# - bashrc - #
function bashrc_(){
  local b_=~/.bashrc Dir_=($PWD) \
        bPath_=/Images/Programs/Linux.Img/Linux_Arch.Img/Arch_Configuration/Arch_bashrc_fstab_pacman-conf.Ins/ \
        aBash_=Arch_bashrc.sh;
  local msg_0='Configuring '$b_'...' \
        msg_1=$b_' already configured...' \
        conf_='# - Configured - #' \
        sS1_='' sS2_='';
  local rDFile_=/Images/Programs/Linux.Img/Linux_Arch.Img/Arch_Configuration/Arch_bashrc_fstab_pacman-conf.Ins/root_DotProfile.sh \
        rDFile_Downloaded=~/Downloads/root_DotProfile.sh \
        sProfile_=/root/.profile;
  echo '';

  if [ -f "$b_" ]; then
     sS1_=$(echo $(cat $b_ | grep -oF "$conf_" ));
     if [ "$sS1_" == "$conf_" ]; then echo $msg_1; sleep 5; return; fi;
  fi;

  cd ~/;
  echo $msg_0;
  curl http://$uServerIP_$bPath_$aBash_ -o $b_;

  sS1_=$(echo $(cat $b_ | grep -oF "$conf_" ));
  if [ "$sS1_" == "" ]; then
     sed -i "5 i # -  - #" $b_; 
     sed -i "6 i $conf_" $b_;
     sed -i "7 i # -  - #" $b_; 
  fi

  sudo cp $b_ /root;

  cd ~/Downloads;
  curl -O http://$uServerIP_$rDFile_;
  sudo mv $rDFile_Downloaded $sProfile_;
  sudo chown root:root $sProfile_;

  cd $Dir_;
  echo $b_" file has been configured...";
  sleep 10;
}



# -  - #
# - Data - #
function Data_(){
  local dD_='Data' \
        dDp_='DataPool' \
        dDoc_=Documents \
        searchZfs='';
  local msg_0="Configuring $dD_ partition..." \
        msg_1=$dD_' partition already configured...' \
        aUser_=$masterUser_ \
        searchData_="" \
        fsF_=/etc/fstab \
        fsTxt_=fstab.txt;
  echo "";

  # -  - #
  # - Create Data folder - #
  sudo mkdir -p /$dD_;

  searchData_=$(echo $(cat $fsF_ | grep "$dD_" | grep -v "$dDp_") | grep -oF "$dD_")
  if [ "$searchData_" == "$dD_" ]; then echo $msg_1; sleep 5; return; fi;

  echo $msg_0;
  mkdir -p ~/$dDoc_;

  sleep 2;
  echo "";
  echo 'Modifying fstab file...';

  # -  - #
  # - UUID Disk - #
  UUID=$(echo $(lsblk -f | grep "$dD_" | grep -v "$dDp_") | awk '{print $5;}');

  if [ "$UUID" == "" ]; then 
     UUID=$(echo $(lsblk -f | grep "$dD_" | grep -v "$dDp_") | awk '{print $4;}'); fi;

  cat /etc/fstab > ~/$dDoc_/$fsTxt_;
  echo "UUID="$UUID"   /Data  ext4    defaults            0       2" >> ~/$dDoc_/$fsTxt_;

  sudo cp ~/$dDoc_/$fsTxt_ $fsF_;
  rm -r ~/$dDoc_/$fsTxt_;
  rm -r ~/$dDoc_;

  sleep 2;
  echo "";
  echo "Mounting $dD_ partition...";
  echo "";

  # -  - #
  # - Load fstab - #
  sudo mount -a;
  sudo systemctl daemon-reload;

  # -  - #
  echo 'Creating Documents directories...';
  sudo mkdir -p /$dD_/$dDoc_;
  sudo mkdir -p /$dD_/$dDoc_/Downloads;
  sudo mkdir -p /$dD_/$dDoc_/Music;
  sudo mkdir -p /$dD_/$dDoc_/Pictures;
  sudo mkdir -p /$dD_/$dDoc_/Videos;

  sudo mkdir -p /$dD_/Images;
  sudo mkdir -p /$dD_/Images/Backup;
  sudo mkdir -p /$dD_/Images/Programs;
  sudo mkdir -p /$dD_/Images/VManager;

  # -  - #
  sudo chown -R $aUser_:$aUser_ /$dD_;
  sudo chmod -R 775 /$dD_;

  echo "";
  echo $dD_" partition has been configured...";
  sleep 10;
}



# -  - #
# - Zfs Data - #
function zData_(){
  local zD_='Data' \
        zDp_='DataPool' \
        searchZfs='';
  local msg_0='Configuring Zfs '$zD_' partition...' \
        msg_1='Zfs '$zD_' partition already configured...' \
        aUser_=$masterUser_ dl='';
  echo "";

  sudo modprobe zfs;
  # - Check if zData exists - #
  searchZfs=$(echo $(zpool list | grep "$zD_" | grep -v "$zDp_") | grep -oF "$zD_");
  if [ "$searchZfs" == "Data" ]; then echo $msg_1; sleep 5; return; fi;

  echo 'Processing Zfs '$zD_' partition...';
  UUID=$(echo $(lsblk -f | grep "$zD_" | grep -v "$zDp_") | awk '{print $5;}');

  if [ "$UUID" == "" ]; then 
     UUID=$(echo $(lsblk -f | grep "$zD_" | grep -v "$zDp_") | awk '{print $4;}'); fi;

  # - Check if dl is empty - #
  if [ "$UUID" == "" ]; then echo $zD_" partition doesn't exist..."; return; else \
     echo 'Creating Zfs '$zD_' partition...'; fi;

  # -  - #
  #echo 'Creating Zfs '$zD_'...';  
  sudo rm -rf /$zD_;
  sudo zpool create -f $zD_ /dev/disk/by-uuid/$UUID;

  echo 'Enabling compression...';
  sudo zfs set compression=on $zD_;

  # -  - #
  echo 'Creating Documents DataSets...';  
  sudo zfs create $zD_/Documents;
  sudo zfs create $zD_/Documents/Downloads;
  sudo zfs create $zD_/Documents/Music;
  sudo zfs create $zD_/Documents/Pictures;
  sudo zfs create $zD_/Documents/Videos;

  # -  - #
  # - Create Images DataSets - #
  zDataImagesDataSets_ $zD_;

  sudo chown -R $aUser_:$aUser_ /$zD_;
  sudo chmod 775 -R /$zD_;

  echo "";
  echo $zD_" zpool status...";
  echo "";
  zpool status -v $zD_;
  read -t 3 -p '';
  echo "";

  echo ""
  echo "Zfs Documents DataSets...";
  zfs list;
  echo "";
  read -t 3 -p '';

  echo "";
  echo 'Zfs '$zD_" has been configured...";
  sleep 10;
}



# -  - #
# - Create Images DataSets - #
function zDataImagesDataSets_(){
  local zD_=$1 \
        sda_='sda' sdb_='sdb' sdc_='sdc' \
        vda_='vda' vdb_='vdb' vdc_='vdc' \
        aUser_=$masterUser_;
  echo "";

  sdaT='sda'; sdbT='sdb'; sdcT='sdc';
  vdaT='vda'; vdbT='vdb'; vdcT='vdc';
  
  sdaT=$(lsblk | grep -oF $sda_' ');   # sda_
  sdbT=$(lsblk | grep -oF $sdb_' ');   # sdb_
  sdcT=$(lsblk | grep -oF $sdc_' ');   # sdc_

  vdaT=$(lsblk | grep -oF $vda_' ');   # vda_
  vdbT=$(lsblk | grep -oF $vdb_' ');   # vdb_
  vdcT=$(lsblk | grep -oF $vdc_' ');   # vdc_

  if [[ "$sdbT" == "" && "$sdcT" == "" ]]; then
     sdb_=''; sdc_='';
     if [[ "$vdbT" == "" && "$vdcT" == "" ]]; then
       vdb_=''; vdc_='';
       echo '';
       echo 'Creating Images DataSets...';
       sudo zfs create $zD_/Images;
       sudo zfs create $zD_/Images/Backup;
       sudo zfs create $zD_/Images/Programs;
       sudo zfs create $zD_/Images/VManager;
       echo '';
       return
     fi;
  fi;
}



# -  - #
# - Zfs DataPool - #
function zDataPool_(){
  local zD_='DataPool' \
        sda_='sda' sdb_='sdb' sdc_='sdc' \
        vda_='vda' vdb_='vdb' vdc_='vdc' \
        hdd_1='' hdd_2='' \
        searchZfs='';
  local msg_0='Configuring Zfs '$zD_' partition...' \
        msg_1='Zfs '$zD_' partition already configured...' \
        msg_3='There were no additional HDDs to create Zfs '$zD_' partition...' \
        aUser_=$masterUser_ usb_='' \
        nDisks_=0;
  echo "";

  sdaT=""; sdbT=""; sdcT="";
  vdaT=""; vdbT=""; vdcT="";

  # echo '';
  # echo $sda_ $sdb_ $sdc_ $vda_ $vdb_ $vdc_;

  sdaT=$(lsblk | grep -oF $sda_' ');   # sda_
  sdbT=$(lsblk | grep -oF $sdb_' ');   # sdb_
  sdcT=$(lsblk | grep -oF $sdc_' ');   # sdc_

  vdaT=$(lsblk | grep -oF $vda_' ');   # vda_
  vdbT=$(lsblk | grep -oF $vdb_' ');   # vdb_
  vdcT=$(lsblk | grep -oF $vdc_' ');   # vdc_

  if [[ "$sdbT" == "" && "$sdcT" == "" ]]; then
     sda_=''; sdb_=''; sdc_='';
     if [[ "$vdbT" == "" && "$vdcT" == "" ]]; then
       vda_=''; vdb_=''; vdc_='';
       echo $msg_3;
       sleep 5;
       return;
     fi;
  fi;



  # -  - #
  # - Capture sdv or vdb - #
  if [[ "$sdbT" != "" || "$sdcT" != "" ]]; then
     hdd_1=$(echo $(if [ "$sdbT" != "" ]; then echo "$sdb_"; else echo ""; fi;))
     hdd_2=$(echo $(if [ "$sdcT" != "" ]; then echo "$sdc_"; else echo ""; fi;))
  elif [[ "$vdbT" != "" || "$vdcT" != "" ]]; then
     hdd_1=$(echo $(if [ "$vdbT" != "" ]; then echo "$vdb_"; else echo ""; fi;))
     hdd_2=$(echo $(if [ "$vdcT" != "" ]; then echo "$vdc_"; else echo ""; fi;))
  fi;

  #echo $sda_ ' ' $sdb_ ' ' $sdc_  ' ' $vda_ ' ' $vdb_ ' ' $vdc_;
  #echo $hdd_1 ' ' $hdd_2;
  #exit

  # -  - #
  # - No sdv or vdb to create ZFS zDataPool - #
  if [[ "$hdd_1" == "" && "$hdd_2" == "" ]]; then echo $msg_3' empty'; sleep 5; return; fi;
  

  # -  - #
  # - Check for USB's disks - #
  usb_=$(devDiskById_ $hdd_1 $hdd_2);
  if [[ "$usb_" == "0"  ]]; then echo $msg_3" usb's"; sleep 5; return; fi;


  # -  - #
  # - Check if zDataPool exists - #
  sudo modprobe zfs;
  searchZfs=$(zpool list | grep "$zD_");
  if [ "$searchZfs" != "" ]; then echo $msg_1; sleep 5; return; fi;



  # -  - #
  # - Create ZFS zDataPool - #
  echo 'Creating Zfs '$zD_' partition...';
  sudo rm -rf /$zD_;



<<'comment'

# -  - #
# - Create ZFS DataPool - #

# -  - #
# - Create ZFS DataPool mirror - #
sudo zpool create -f DataPool mirror \
                              /dev/vdb /dev/vdc;
/dev/sdb        10Tb
/dev/sdc        10Tb
Available Hdd = 10Tb

# -  - #
# - Create ZFS DataPool strips pools - #
sudo zpool create -f uServerPool /dev/sdb /dev/sdc;
/dev/sdb        10Tb
/dev/sdc        10Tb
Available Hdd = 20Tb

comment



  if [[ "$hdd_1" != "" && "$hdd_2" == "" ]]; then
     sudo zpool create -f $zD_ /dev/$hdd_1;
  elif [[ "$hdd_1" == "" && "$hdd_2" != "" ]]; then
     sudo zpool create -f $zD_ /dev/$hdd_2;
  elif [[ "$hdd_1" != "" && "$hdd_2" != "" ]]; then
     if [ "$zMirror_" == "Yes" ]; then
        sudo zpool create -f $zD_ mirror \
                                  /dev/$hdd_1 /dev/$hdd_2;
     else
        sudo zpool create -f $zD_ /dev/$hdd_1 /dev/$hdd_2;
     fi;
  fi;



  echo 'Enabling compression...';  
  sudo zfs set compression=on $zD_;

  # -  - #
  echo '';
  echo 'Creating Images DataSets...';
  sudo zfs create $zD_/Images;
  sudo zfs create $zD_/Images/Backup;
  sudo zfs create $zD_/Images/Programs;
  sudo zfs create $zD_/Images/VManager;

  sudo chown -R $aUser_:$aUser_ /$zD_;
  sudo chmod -R 775 /$zD_;

  echo "";
  echo $zD_" zpool status...";
  zpool status -v $zD_;
  read -t 3 -p '';
  echo "";

  echo ""
  echo "Zfs Images DataSets...";
  zfs list;
  read -t 3 -p '';
  echo "";

  echo ""
  echo "Zpool list...";
  zpool list;
  read -t 3 -p '';

  echo "";
  echo 'Zfs '$zD_" partition has been configured...";
  echo "";
  sleep 10;
}



# -  - #
# - DataBtrfs_ - #
function DataBtrfs_(){
  local svD_='Data' \
        searchBtrfs='';
  local msg_0='Configuring Btrfs '$svD_' subvolume...' \
        msg_1='Btrfs '$svD_' subvolume already configured...' \
        aUser_=$masterUser_ dl='' \
        svDoc_='Documents' \
        svI_='Images';
  echo "";

  echo 'Creating Btrfs '$svD_' subvolume...';

  # - Check if Data subvolume exists - #
  searchBtrfs=$(echo $(sudo btrfs subvolume list /$svD_ | grep "@$svD_" ) | awk '{print $9;}');
  if [ "$searchBtrfs" == "" ]; then echo "Subvolume " $svD_" doesn't exist..."; return; fi;

  # - Check if subvolume Documents exists - #
  searchBtrfs=$(echo $(sudo btrfs subvolume show "$svDoc_" | grep "$svDoc_" ) | awk '{print $3;}');
  if [ "$searchBtrfs" == "" ]; then
     echo "Creating Btrfs "$svDoc_" subvolumes...";
     # -  - #
     # - Create btrfs Documents subvolumes - #
     sudo btrfs subvolume create /$svD_/$svDoc_;
     sudo btrfs subvolume create /$svD_/$svDoc_/Downloads;
     sudo btrfs subvolume create /$svD_/$svDoc_/Music;
     sudo btrfs subvolume create /$svD_/$svDoc_/Pictures;
     sudo btrfs subvolume create /$svD_/$svDoc_/Videos;

     echo "Creating Btrfs "$svI_" subvolumes...";
     # -  - #
     # - Create btrfs Images subvolumes - #
     sudo btrfs subvolume create /$svD_/$svI_;
     sudo btrfs subvolume create /$svD_/$svI_/Backup;
     sudo btrfs subvolume create /$svD_/$svI_/Programs;
     sudo btrfs subvolume create /$svD_/$svI_/VManager;
     
     sudo chown -R $aUser_:$aUser_ /$svD_;
     sudo chmod -R 775 /$svD_;

     echo ""
     echo "Btrfs Documents subvolumes...";
     sudo btrfs subvolume list /$svD_;
     echo "";
     read -t 3 -p '';

     echo "";
     echo 'Btrfs '$svD_" has been configured...";
     sleep 10;
     return;
  fi;
  echo "";
  echo 'Btrfs '$svD_" volumes already configured...";
  sleep 10;
}



# -  - #
# - SwapInstall_ - #
function SwapInstall_(){
  local Dir_=($PWD) sFIns_='Swap file';
  local msg_0='Creating '$sFIns_'...' \
        msg_1=$sFIns_' already configured...' \
        fS_=/etc/fstab tFs_=~/Documents/fstab.txt \
        sS1_='# - '$sFIns_' configured - #' sS2_='' \
        sDev_='';
  local swapf_=/swap.img \
        swapG_='2G';
  echo '';

  sS2_=$(echo $(cat $fS_ | grep swap ));
  if [ "$sS2_" != "" ]; then echo $msg_1; sleep 5; return; fi;

  echo $msg_0;
  sudo fallocate -l $swapG_ $swapf_;
  sudo chmod 600 $swapf_;
  sudo mkswap -L Swap $swapf_;
  sudo swapon $swapf_;

  # - Show swap - #
  free -h;

  sS2_="$swapf_""                                  none   swap    defaults           0       0";
  sudo sed -i '2 i '"$sS2_" $fS_;

  # -  - #
  # - Load fstab - #
  sudo mount -a;
  sudo systemctl daemon-reload;

  cd $Dir_;
  echo '';
  echo $sFIns_" has been configured...";
  sleep 10;
}



# -  - #
# - LinuxPartitionLabel_ - #
function LinuxPartitionLabel_(){
  local sLpl_='Linux partition label';
  local msg_0='Updating '$sLpl_'...' \
        msg_1=$sLpl_' already configured...' \
        sS1_='# - '$sLpl_' configured - #' sS2_='' \
        sDev_='' sLabel='Linux' \
        sVfat_='';
  echo "";

  sS2_=$(echo $(cat $aDesktopConf_ | grep "$sS1_" ));
  if [ "$sS1_" == "$sS2_" ]; then echo $msg_1; sleep 5; return; fi;

  echo $msg_0;

  # -  - #
  # - GetDevSda_ 1 1 (sda1 vda1) - #
  # - GetDevSda_ 2 1 (sdb1 vdb1) - #
  # - GetDevSda_ 3 1 (sdc1 vdc1) - #
  
  # - GetDevSda_ 1 2 (sda2 vda2) - #
  # - GetDevSda_ 2 2 (sdb2 vdb2) - #
  # - GetDevSda_ 3 2 (sdc2 vdc2) - #

  sVfat_=$(echo $(lsblk -f | grep "vfat") | awk '{print $2}');

  if [ "$sVfat_" == "" ]; then
     sDev_=$(GetDevSda_ 1 1);
  else
     sDev_=$(GetDevSda_ 1 2);
  fi;
  echo $sDev_;

  # - Trim spaces - #
  sDev_=$(echo $sDev_ | sed 's/ *$//g');
  sDev_=/dev/$sDev_;
  echo $sDev_;

  sS2_=$(echo $(lsblk -f | grep "$sLabel") | awk '{print $4}');
  echo $sS2_;

  if [ "$sS2_" != "" ]; then echo $msg_1; sleep 5; return; fi;

  sudo e2label $sDev_ $sLabel;
  sudo sed -i '4 i '"$sS1_" $aDesktopConf_;

  echo "";
  echo $sLpl_" has been configured...";
  sleep 10;
}



# -  - #
# - GetDevSda_ 1 1 (sda1 vda1) - #
# - GetDevSda_ 2 1 (sdb1 vdb1) - #
# - GetDevSda_ 3 1 (sdc1 vdc1) - #

# - GetDevSda_ 1 2 (sda2 vda2) - #
# - GetDevSda_ 2 2 (sdb2 vdb2) - #
# - GetDevSda_ 3 2 (sdc2 vdc2) - #
function GetDevSda_(){
  local sda_='sda' sdb_='sdb' sdc_='sdc' \
        vda_='vda' vdb_='vdb' vdc_='vdc' \
        sDev_='' sS1_=$1 sS2_=$2;
  echo "";

  if [ "$sS1_" == "" ]; then sS1_="1"; fi;
  if [ "$sS2_" == "" ]; then sS2_="1"; fi;

  sdaT='sda'; sdbT='sdb'; sdcT='sdc' ;
  vdaT='vda'; vdbT='vdb'; vdcT='vdc' ;

  sdaT=$(lsblk | grep -oF $sda_' ');   # sda_
  sdbT=$(lsblk | grep -oF $sdb_' ');   # sdb_
  sdcT=$(lsblk | grep -oF $sdc_' ');   # sdc_

  vdaT=$(lsblk | grep -oF $vda_' ');   # vda_
  vdbT=$(lsblk | grep -oF $vdb_' ');   # vdb_
  vdcT=$(lsblk | grep -oF $vdc_' ');   # vdc_

<<'comment'
  if [ "$sS1_" == "1" ] && [ "$sdaT" != "" ]; then
     sDev_=$sdaT;
  elif [ "$sS1_" == "2" ] && [ "$sdbT" != "" ]; then
     sDev_=$sdbT;
  elif [ "$sS1_" == "3" ] && [ "$sdcT" != "" ]; then
     sDev_=$sdcT;
  elif [ "$sS1_" == "1" ] && [ "$vdaT" != "" ]; then
     sDev_=$vdaT;
  elif [ "$sS1_" == "2" ] && [ "$vdbT" != "" ]; then
     sDev_=$vdbT;
  elif [ "$sS1_" == "3" ] && [ "$vdcT" != "" ]; then
     sDev_=$vdcT;
  fi;
comment


  case $sS1_ in
    ''|*[!0-9]*)
      echo '';
      echo 'Its not a number...';
      ;;
    1)
      if [ "$sdaT" != "" ]; then sDev_=$sdaT; fi;
      if [ "$vdaT" != "" ]; then sDev_=$vdaT; fi;
      ;;
    2)
      if [ "$sdbT" != "" ]; then sDev_=$sdbT; fi;
      if [ "$vdbT" != "" ]; then sDev_=$vdbT; fi;
      ;;
    3)
      if [ "$sdcT" != "" ]; then sDev_=$sdcT; fi;
      if [ "$vdcT" != "" ]; then sDev_=$vdcT; fi;
      ;;
    *)
      echo "Option no valid: " $sS1_;
      ;;
  esac


  # - Trim spaces in sDev_ - #
  sDev_=$(echo $sDev_ | sed 's/ *$//g');
  echo $sDev_"$sS2_";
}



# -  - #
# - devDiskById_ $hdd_1 $hdd_2 - #
function devDiskById_(){
  local D1_=$1 D2_=$2 \
        devDiskById='' tmpF_=~/tmp.txt \
        USBL1_='' USBL2_='' uU_='USB' lU_='usb' \
        usbL_='' usb1_='' usb2_='' USB1_='' USB2_='';
  
  # D1_='sdb' D2_='sdc';
  ls -lah /dev/disk/by-id > $tmpF_;
  USBL1_=$(echo $(cat $tmpF_ | grep $D1_));
  USBL2_=$(echo $(cat $tmpF_ | grep $D2_));
  rm -r $tmpF_;

  USB1_=$(echo $USBL1_ | grep -oF $uU_);
  usb1_=$(echo $USBL1_ | grep -oF $lU_);
  USB2_=$(echo $USBL2_ | grep -oF $uU_);
  usb2_=$(echo $USBL2_ | grep -oF $lU_);
  
  if [[ "$USB1_" == "$uU_" || "$USB2_" == "$uU_" || \
        "$usb1_" == "$lU_" || "$usb2_" == "$lU_" ]]; then
       echo 0;
  else echo 1; fi
}



# -  - #
# - DataDirectories_ - #
function DataDirectories_(){
  local DDir_='Data directories' \
        configF_=~/.config/user-dirs.dirs \
        conf_='# - Configured - #';
  local msg_0='Configuring '$DDir_' ...' \
        msg_1=$DDir_' already configured...';
  local h_='home' \
        d_='Data' \
        doc_='Documents' \
        dow_='Downloads' \
        mus_='Music' \
        pic_='Pictures' \
        vid_='Videos' \
        aUser_=$masterUser_ \
        sS1_='' sS2_='' searchZfs='';
  local zD_=$d_ \
        zDp_='DataPool';
  echo '';

  # cat /etc/fstab | grep "Data" | grep -v "DataPool"

  mkdir -p ~/.config;
  if [ -f "$configF_" ]; then
     sS1_=$(echo $(cat $configF_ | grep -oF "$conf_" ));
     if [ "$sS1_" == "$conf_" ]; then echo $msg_1; sleep 5; return; fi;
  fi;

  sS1_='/'$d_;    # /Data
  if [ ! -d "$sS1_" ]; then \
     echo '/Data directoty does not exist in the system...'; sleep 5; return; fi;



  if [ "$zPool_" == "Yes" ]; then
     sudo modprobe zfs;
     searchZfs=$(echo $(zpool list | grep "$zD_" | grep -v "$zDp_") | grep -oF "$zD_");
     if [ "$searchZfs" == "" ]; then \
        echo 'Zfs '$zD_' pool is not mounted in the system...'; sleep 5; return; fi;
  else
     echo $msg_0;
     sudo mkdir -p /$d_;
     sudo chown -R $aUser_:$aUser_ /$d_;
     chmod -R 775 /$d_;
   
     echo "";
     echo "Creating Documents directories...";
     mkdir -p /$d_/$doc_;
     mkdir -p /$d_/$doc_/$dow_;
     mkdir -p /$d_/$doc_/$mus_;
     mkdir -p /$d_/$doc_/$pic_;
     mkdir -p /$d_/$doc_/$vid_;
  fi;

  sudo rm -rf /$h_/$aUser_/$doc_;
  sudo rm -rf /$h_/$aUser_/$dow_;
  sudo rm -rf /$h_/$aUser_/$mus_;
  sudo rm -rf /$h_/$aUser_/$pic_;
  sudo rm -rf /$h_/$aUser_/$vid_;

  ln -s /$d_/$doc_ /$h_/$aUser_/$doc_;
  ln -s /$d_/$doc_/$dow_ /$h_/$aUser_/$dow_;
  ln -s /$d_/$doc_/$mus_ /$h_/$aUser_/$mus_;
  ln -s /$d_/$doc_/$pic_ /$h_/$aUser_/$pic_;
  ln -s /$d_/$doc_/$vid_ /$h_/$aUser_/$vid_;

  mkdir -p /$d_/$doc_/ToShare-FullAccess;
  mkdir -p /$d_/$doc_/ToShare-JustRead;

  chmod 777 /$d_/$doc_/ToShare-FullAccess;
  chmod 777 /$d_/$doc_/ToShare-JustRead;

  echo "Deleting $configF_ configuration file...";
  rm -rf $configF_;

  echo "Creating new $configF_ configuration file...";

cat <<EOT>> $configF_;

# -  - #
# - Configured - #
# - vim ~/.config/user-dirs.dirs - #
# -  - #

XDG_DOCUMENTS_DIR="/$d_/$doc_"
XDG_DOWNLOAD_DIR="/$d_/$doc_/$dow_"
XDG_MUSIC_DIR="/$d_/$doc_/$mus_"
XDG_PICTURES_DIR="/$d_/$doc_/$pic_"
XDG_VIDEOS_DIR="/$d_/$doc_/$vid_"

EOT

  sed -i '7 i XDG_DESKTOP_DIR="$HOME/Desktop"' $configF_;
  sed -i '8 i XDG_TEMPLATES_DIR="$HOME/Templates"' $configF_;
  sed -i '9 i XDG_PUBLICSHARE_DIR="$HOME/Public"' $configF_;

  echo "";
  echo $DDir_" have been configured...";
  sleep 10;
}



# -  - #
# - samba - #
function samba_(){
  local sambaF_=/etc/samba/smb.conf \
        samba_='samba' \
        smbGuest_='smbguest'
        groupF_=/etc/group \
        passwdF_=/etc/passwd;
  local msg_0='Configuring '$samba_' ...' \
        msg_1=$samba_' already configured...' \
        sS1_='' sS2_='' sS3_='' sS4_='';
  echo "";

  sS1_=$smbGuest_                                     # smbguest
  sS2_=$(echo $(cat $groupF_ | grep -oF "$sS1_" ));   # find smbguest
  sS3_=$(echo "$sS2_" | awk '{print $1;}');           # get first occurrency
 #sS4_=$( echo "$(echo $(cat $groupF_ | grep -oF "$sS1_" ))" | awk '{print $1;}' );  # same result from above 

  if [ "$sS1_" == "$sS3_" ]; then echo $msg_1; sleep 5; return; fi;

  echo $msg_0;
  echo "Create sambashare group...";
  sudo groupadd -r sambashare;

  echo "Create samba user...";
  sudo useradd -r -s /usr/bin/nologin $smbGuest_;

  echo "Samba user password...";
  (echo $smbGuest_; sleep 1; echo $smbGuest_ ) | sudo passwd $smbGuest_;

  echo "Add smbguest user to sambashare group...";
  sudo usermod -aG sambashare $smbGuest_;

  echo "Add administrator user to sambashare group...";
  sudo usermod -aG sambashare $masterUser_;

  echo "Enable smbguest user in samba...";
  sudo gpasswd sambashare -a $smbGuest_;

  echo "Enable administrator user in samba...";
  sudo gpasswd sambashare -a $masterUser_;

  echo "Create samba user password on samba...";
  #sudo pdbedit -a -u smbguest;
  (echo $smbGuest_; sleep 1; echo $smbGuest_ ) | sudo pdbedit -a -u $smbGuest_;

  echo "Create administrator user password on samba...";
  #sudo pdbedit -a -u is_derayo;
  (echo $adminPasswd_; sleep 1; echo $adminPasswd_ ) | sudo pdbedit -a -u $masterUser_;

  cat $groupF_ | grep $smbGuest_;
  cat $groupF_ | grep $masterUser_;

  cat $passwdF_ | grep $smbGuest_;
  cat $passwdF_ | grep $masterUser_;

  echo "Generating smb.conf..."
  rm -rf ~/smb.conf;

sudo cat <<EOT>> ~/smb.conf;


# -  - #
# - Samba configuration file location - #
# - sudo vim /etc/samba/smb.conf - #
# -  - #

[global]
   workgroup = L_IS
   wins support = yes
   security = user
   server string = Samba Server
   server role = standalone server
   log file = /var/log/samba/log.%m
   max log size = 50
   guest account = nobody
   map to guest = Bad Password

[ToShare-FullAccess]
    comment = ToShare-FullAccess to everybody in the net
    path = /Data/Documents/ToShare-FullAccess
    writeable = yes
    browseable = yes
    guest ok = no
    create mask = 0777
    valid users = $masterUser_, $smbGuest_

[ToShare-JustRead]
    comment = ToShare-JustRead to everybody in the net
    path = /Data/Documents/ToShare-JustRead
    writeable = no
    browseable = yes
    guest ok = no
    create mask = 0755
    valid users = $masterUser_, $smbGuest_

EOT

  sudo cp ~/smb.conf $sambaF_;
  rm -rf ~/smb.conf;

  echo "Restart samba service...";
  sudo systemctl enable --now smb nmb;
  sudo systemctl start smb.service nmb.service

  echo "";
  echo $samba_" has been configured...";
  sleep 10;
}



function session_(){
  local sF_=~/t_session.txt \
        sS1_=$1 sS2_='' \
        sS3_='' sS4_='';
  ls /usr/bin/*-session > $sF_;
  sS2_=$( echo $(cat $sF_));

  # -  - #
  # - Lowercase - #
  sS3_=${sS1_,,};

  sS4_=$(echo "$sS2_" | grep -oF "$sS3_" );
  sS5_=$(echo $sS4_ | awk '{print $1;}');
  rm -rf $sF_;
  if [ "$sS3_" == "$sS5_" ]; then echo $sS1_; else echo ""; fi;
}



# -  - #
# - xfce_ - #
function xfce_(){
  local sS1_='xfce4';
  local sS2_=$(echo $(session_ $sS1_)) \
        msg_0='Configuring '$sS1_'...' \
        msg_1=$sS1_' already installed...';
  echo '';

  if [ "$sS1_" == "$sS2_" ]; then echo $msg_1; return; fi;

  echo $msg_0;
  lightdm_;
  echo '';
  echo 'Installing Xfce desktop enviroment...';
  sudo pacman -S xfce4 xfce4-goodies xfce4-terminal --noconfirm --needed;
  echo "exec startxfce4" > ~/.xinitrc;
  sleep 10;
}



# -  - #
# - cinnamon_ - #
function cinnamon_(){
  local sS1_='cinnamon';
  local sS2_=$(echo $(session_ $sS1_)) \
        msg_0='Configuring '$sS1_'...' \
        msg_1=$sS1_' already installed...';
  echo "";

  if [ "$sS1_" == "$sS2_" ]; then echo $msg_1; return; fi;

  echo $msg_0;
  lightdm_;
  echo "";
  echo 'Installing Cinnamon desktop enviroment...';
  sudo pacman -S cinnamon nemo-fileroller --noconfirm --needed;
  sleep 10;
}



# -  - #
# - kde_ - #
function kde_(){
  local sS1_='kde';
  local sS2_=$(echo $(session_ $sS1_)) \
        msg_0='Configuring '$sS1_'...' \
        msg_1=$sS1_' already installed...';
  echo '';

  if [ "$sS1_" == "$sS2_" ]; then echo $msg_1; return; fi;

  echo $msg_0;
  sddm_;
  echo '';
  echo 'Installing Kde desktop enviroment...';
  sudo pacman -S plasma kde-applications konsole --noconfirm --needed;
  sleep 10;
}



# -  - #
# - gnome_ - #
function gnome_(){
  local sS1_='gnome';
  local sS2_=$(echo $(session_ $sS1_)) \
        msg_0='Configuring '$sS1_' desktop...' \
        msg_1=$sS1_' desktop already installed...';
  echo "";

  if [ "$sS1_" == "$sS2_" ]; then echo $msg_1; return; fi;

  echo $msg_0;
  gdm_;
  echo "";
  echo "Installing Gnome desktop enviroment...";
  sudo pacman -S gnome gnome-shell gnome-backgrounds gnome-control-center gnome-extra \
                 gnome-terminal gnome-tweaks nautilus adwaita-icon-theme --noconfirm --needed;
  sudo pacman -S gnome-browser-connector gnome-menus --noconfirm --needed;
  sleep 10;

<<'comment'
  # - Extensions - #
  User Themes
  blur myshell
  vytals
  arcmenu  
  # - Install - #
  gnome-browser-connector
  gnome-menus
comment

}



# -  - #
# - deepin_ - #
function deepin_(){
  local sS1_='deepin';
  local sS2_=$(echo $(session_ $sS1_)) \
        msg_0='Configuring '$sS1_'...' \
        msg_1=$sS1_' already installed...' \
        lightdmF_=/etc/lightdm/lightdm.conf;
  echo '';

  if [ "$sS1_" == "$sS2_" ]; then echo $msg_1; return; fi;

  echo $msg_0;
  lightdm_;
  echo '';
  echo 'Installing Deepin desktop enviroment...';
  sudo pacman -S deepin deepin-kwin --noconfirm  --needed;
  sudo pacman -S deepin-extra --noconfirm --needed;

  sudo sed -i 's/# greeter-session = Session to load for greeter/greeter-session=lightdm-deepin-greeter/' $lightdmF_;

  # sudo sed -i 's/#ParallelDownloads = 5/'"$sSed_"'/' $lightdmF_;
  # sudo vim /etc/lightdm/lightdm.conf;
  # greeter-session=lightdm-deepin-greeter
  sleep 10;
}



# -  - #
# - budgie_ - #
function budgie_(){
  local sS1_='budgie';
  local sS2_=$(echo $(session_ $sS1_)) \
        msg_0='Configuring '$sS1_'...' \
        msg_1=$sS1_' already installed...';
  echo '';

  if [ "$sS1_" == "$sS2_" ]; then echo $msg_1; return; fi;

  echo $msg_0;
  lightdm_;
  echo '';
  echo 'Installing Budgie desktop enviroment...';
  sudo pacman -S budgie-desktop gnome gnome-control-center i3lock --noconfirm --needed;
  sleep 10;
}



# -  - #
# - OpenBox_ - #
function OpenBox_(){
  local sS1_='OpenBox' \
        launchSh_=~/.config/launch.sh;
  local sS2_=$(echo $(session_ $sS1_)) \
        msg_0='Configuring '$sS1_'...' \
        msg_1=$sS1_' already installed...' \
        autostartF_=~/.config/openbox/autostart \
        menuXmlHome_=~/menu.xml \
        menuXml_=~/.config/openbox/menu.xml \
        menuXml_WServer_='/Images/Programs/Linux.Img/Linux_Arch.Img/Arch_Install/TilingWindowManager/OpenBoxInstall/dot.config/openbox/menu.xml' \
        rcXmlHome_=~/rc.xml \
        rcXml_=~/.config/openbox/rc.xml \
        rcXml_WServer_='/Images/Programs/Linux.Img/Linux_Arch.Img/Arch_Install/TilingWindowManager/OpenBoxInstall/dot.config/openbox/rc.xml' \
        Dir_=($PWD);
  local bgSavedCfgHome_=~/bg-saved.cfg \
        bgSavedCfg_=~/.config/nitrogen/bg-saved.cfg \
        bgSavedCfg_WServer_='/Images/Programs/Linux.Img/Linux_Arch.Img/Arch_Install/TilingWindowManager/OpenBoxInstall/dot.config/nitrogen/bg-saved.cfg' \
        nitrogenCfgHome_=~/nitrogen.cfg \
        nitrogenCfg_=~/.config/nitrogen/nitrogen.cfg \
        nitrogenCfg_WServer_='/Images/Programs/Linux.Img/Linux_Arch.Img/Arch_Install/TilingWindowManager/OpenBoxInstall/dot.config/nitrogen/nitrogen.cfg' \
        tint2rcCfgHome_=~/tint2rc \
        tint2rcCfg_=~/.config/tint2/tint2rc \
        tint2rcCfg_WServer_='/Images/Programs/Linux.Img/Linux_Arch.Img/Arch_Install/TilingWindowManager/OpenBoxInstall/dot.config/tint2/tint2rc';



  echo '';
  if [ "$sS1_" == "$sS2_" ]; then echo $msg_1; return; fi;

  echo $msg_0;
  lightdm_;
  echo '';
  echo "Installing $sS1_ desktop enviroment...";
  sudo pacman -S lxappearance-obconf menumaker nitrogen obconf openbox pcmanfm rofi tint2 \
                 ttf-font-awesome ttf-dejavu ttf-liberation volumeicon xautolock xterm --noconfirm --needed;

  # pamixer

  yay -S i3lock-color --noconfirm --needed;
  sudo pacman -S polkit-gnome --noconfirm --needed;



  mkdir -p ~/.config/nitrogen;
  mkdir -p ~/.config/openbox;
  mkdir -p ~/.config/tint2;



  echo "" >> $autostartF_;
  echo "# -  - #" >> $autostartF_;
  echo "# - Screen resolution - #" >> $autostartF_;

  if [ "$cHost_" == "iMac" ]; then
    #echo "xrandr --output Virtual-1 --mode 1920x1080 &" >> $autostartF_;
     echo "xrandr --output Virtual-1 --mode 2560x1440 &" >> $autostartF_;
  else
     echo "xrandr --output Virtual-1 --mode 2048x1152 &" >> $autostartF_;
  fi;

  echo "" >> $autostartF_;
  echo "# -  - #" >> $autostartF_;
  echo "# - Menu bar configuration - #" >> $autostartF_;
  echo "tint2 &" >> $autostartF_;
  
  echo "" >> $autostartF_;
  echo "# -  - #" >> $autostartF_;
  echo "# - Wallpaper - #" >> $autostartF_;
  echo "nitrogen --restore &" >> $autostartF_;

  echo "" >> $autostartF_;
  echo "# -  - #" >> $autostartF_;
  echo "# - Windows configuration - #" >> $autostartF_;
  echo "picom -f &" >> $autostartF_;

  echo "" >> $autostartF_;
  echo "# -  - #" >> $autostartF_;
  echo "# - Volume icon on menu bar - #" >> $autostartF_;
  echo "volumeicon &" >> $autostartF_;

  echo "" >> $autostartF_;
  echo "# -  - #" >> $autostartF_;
  echo "# - i3Lock-color configuration - #" >> $autostartF_;
  echo "xautolock -time 1 -locker "sh ~/.config/launch.sh" &" >> $autostartF_;

  echo "" >> $autostartF_;
  echo "# -  - #" >> $autostartF_;
  echo "# - Start polkit-gnome (sudo authentication) - #" >> $autostartF_;
  echo "exec /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &" >> $autostartF_;

  echo "" >> $autostartF_;
  echo "# -  - #" >> $autostartF_;
  echo "# - Start pamac-tray - #" >> $autostartF_;
  echo "pamac-tray &" >> $autostartF_;

  echo "" >> $autostartF_;
  echo "# -  - #" >> $autostartF_;
  echo "# - Start network applet - #" >> $autostartF_;
  echo "nm-applet &" >> $autostartF_;

  mmaker openbox -ft xterm;
  
  cd ~/;

  # -  - #
  # - Processing OpenBox configuration files - #

  # - ~/.config/openbox/menu.xml - #
  curl -O http://$uServerIP_$menuXml_WServer_;
  rm -r $menuXml_;
  mv $menuXmlHome_ $menuXml_;

  # - ~/.config/openbox/rc.xml - #
  curl -O http://$uServerIP_$rcXml_WServer_;
  rm -r $rcXml_;
  mv $rcXmlHome_ $rcXml_;

  # - ~/.config/nitrogen/bg-saved.cfg - #
  curl -O http://$uServerIP_$bgSavedCfg_WServer_;
  rm -r $bgSavedCfg_;
  mv $bgSavedCfgHome_ $bgSavedCfg_;

  # - ~/.config/nitrogen/nitrogen.cfg - #
  curl -O http://$uServerIP_$nitrogenCfg_WServer_;
  rm -r $nitrogenCfg_;
  mv $nitrogenCfgHome_ $nitrogenCfg_;

  # - ~/.config/tint2/tint2rc - #
  curl -O http://$uServerIP_$tint2rcCfg_WServer_;
  rm -r $tint2rcCfg_;
  mv $tint2rcCfgHome_ $tint2rcCfg_;

  cd $Dir_;
  echo "$sS1_ configuration is done...";



  # -  - #
  # - i3lock configure - #
  
  cat <<EOT>> $launchSh_;
#!/bin/sh

# -  - #
# - i3lock configuration - #
# - vim ~/.config/launch.sh - #
# -  - #

BLANK='#00000000'
CLEAR='#ffffff22'
DEFAULT='#ff00ffcc'
TEXT='#ee00eeee'
WRONG='#880000bb'
VERIFYING='#bb00bbbb'

/usr/bin/i3lock \
--insidever-color=$CLEAR     \
--ringver-color=$VERIFYING   \
\
--insidewrong-color=$CLEAR   \
--ringwrong-color=$WRONG     \
\
--inside-color=$BLANK        \
--ring-color=$DEFAULT        \
--line-color=$BLANK          \
--separator-color=$DEFAULT   \
\
--verif-color=$TEXT          \
--wrong-color=$TEXT          \
--time-color=$TEXT           \
--date-color=$TEXT           \
--layout-color=$TEXT         \
--keyhl-color=$WRONG         \
--bshl-color=$WRONG          \
\
--screen 1                   \
--blur 5                     \
--clock                      \
--indicator                  \
--time-str="%H:%M:%S"        \
--date-str="%A, %m %Y"       \
--keylayout 1                \


EOT

  chmod +x $launchSh_;

  echo '';
  echo 'OpenBox has been configured successfuly...';
  sleep 10;
}



# -  - #
# - ttf-ms-fonts_ - #
function ttf-ms-fonts_(){
  local Dir_=($PWD) \
        TtfMsFonts_WServer_='/Images/Programs/Linux.Img/Linux_Arch.Img/Arch_Configuration/ttf-ms-fonts.tar.bz2' \
        TtfMsFonts_Download_=~/Downloads/ttf-ms-fonts.tar.bz2 \
        TtfMsFonts_Build_=~/Downloads/ttf-ms-fonts;

  echo '';
  echo "Installing ttf-ms-fonts...";

  cd ~/Downloads;

  # -  - #
  # - ~/Downloads/ttf-ms-fonts.tar.bz2 - #
  curl -O http://$uServerIP_$TtfMsFonts_WServer_;
  
  # -  - #
  # - Untar ~/Downloads/ttf-ms-fonts.tar.bz2 - #
  tar -xvf $TtfMsFonts_Download_;

  cd $TtfMsFonts_Build_;
  echo 'Y' | makepkg -si PKGBUILD;

  rm -rf $TtfMsFonts_Build_;
  rm -rf $TtfMsFonts_Download_;
  cd $Dir_;
  sleep 10;
}



# -  - #
# - Install-Brave_ - #
function Install-Brave_(){
  local Dir_=($PWD) \
        BraveDesktop_=~/.local/share/applications/Brave.desktop \
        BraveWServer_='/Images/Programs/Linux.Img/LinuxApplications.app/Brave.Ins/Brave.tar.bz2' \
        BraveTarDownload_=~/Downloads/Brave.tar.bz2 \
        BraveAppDownload_=~/Downloads/Brave.Ins/Brave-stable-v1.71.121-x86_64.AppImage \
        BraveIconDownload_=~/Downloads/Brave.Ins/Brave.png \
        BraveAppHome_=~/.AppImages/Brave/Brave-stable-v1.71.121-x86_64.AppImage \
        BraveIconHome_=~/.AppImages/Brave/Brave.png \
        BraveDelete_=~/Downloads/Brave*;

  echo '';
  echo "Installing Brave...";
  
  mkdir -p ~/.local/share/applications;
  mkdir -p ~/.AppImages/Brave;

  cat <<EOT>> $BraveDesktop_;
[Desktop Entry]
Type=Application
Name=Brave
Comment=Internet browser
Exec=/home/$USER/.AppImages/Brave/Brave-stable-v1.71.121-x86_64.AppImage
Icon=/home/$USER/.AppImages/Brave/Brave.png
Terminal=false
StartupWMClass=Brave
StartupNotify=false
Categories=Network;
EOT

  cd ~/Downloads;
  
  # -  - #
  # - ~/Downloads/Brave.tar.bz2 - #
  curl -O http://$uServerIP_$BraveWServer_;
  
  # -  - #
  # - Untar ~/Downloads/Brave.tar.bz2 - #
  tar -xvf $BraveTarDownload_;
  
  mv $BraveAppDownload_ $BraveAppHome_;
  mv $BraveIconDownload_ $BraveIconHome_;
  
  chmod +x $BraveAppHome_;
  rm -rf $BraveDelete_;

  cd $Dir_;
  sleep 10;
}



# -  - #
# - ClipGrab_ - #
function ClipGrab_(){
  local Dir_=($PWD) \
        ClipGrabDesktop_=~/.local/share/applications/ClipGrab.desktop \
        ClipGrabTarBz2_WServer_='/Images/Programs/Linux.Img/LinuxApplications.app/ClipGrab.Ins/ClipGrab.tar.bz2' \
        ClipGrabTarBz2_Download_=~/Downloads/ClipGrab.tar.bz2 \
        ClipGrabAppDownload_=~/Downloads/ClipGrab.Ins/ClipGrab-3.9.10-x86_64.AppImage \
        ClipGrabIconDownload_=~/Downloads/ClipGrab.Ins/ClipGrabIcon1.png \
        ClipGrabAppHome_=~/.AppImages/ClipGrab/ClipGrab-3.9.10-x86_64.AppImage \
        ClipGrabIconHome_=~/.AppImages/ClipGrab/ClipGrabIcon1.png \
        ClipGrabDelete_=~/Downloads/ClipGrab*;

  echo '';
  echo "Installing clipgrab...";
  
  mkdir -p ~/.local/share/applications;
  mkdir -p ~/.AppImages/ClipGrab;

  cat <<EOT>> $ClipGrabDesktop_;
[Desktop Entry]
Type=Application
Name=ClipGrab
Comment=Download YouTube, Dailymotion, etc. Video Clips
Exec=/home/is_derayo/.AppImages/ClipGrab/ClipGrab-3.9.10-x86_64.AppImage
Icon=/home/is_derayo/.AppImages/ClipGrab/ClipGrabIcon1.png
Terminal=false
StartupWMClass=ClipGrab
Categories=Network;
StartupNotify=false
EOT


  cd ~/Downloads;
  
  # -  - #
  # - ~/Downloads/ClipGrab.tar.bz2 - #
  curl -O http://$uServerIP_$ClipGrabTarBz2_WServer_;
  
  # -  - #
  # - Untar ~/Downloads/ClipGrab.tar.bz2 - #
  tar -xvf $ClipGrabTarBz2_Download_;
  
  mv $ClipGrabAppDownload_ $ClipGrabAppHome_;
  mv $ClipGrabIconDownload_ $ClipGrabIconHome_;
  
  chmod +x $ClipGrabAppHome_;
  rm -rf $ClipGrabDelete_;

  cd $Dir_;
  sleep 10;
}



# -  - #
# - BalenaEtcher_ - #
function BalenaEtcher_(){
  local Dir_=($PWD) \
        bEtcherDesktop_=~/.local/share/applications/BalenaEtcher.desktop \
        bEtcherWServer_='/Images/Programs/Linux.Img/LinuxApplications.app/BalenaEtcher.Ins/BalenaEtcher.tar.bz2' \
        bEtcherTarDownload_=~/Downloads/BalenaEtcher.tar.bz2 \
        bEtcherAppDownload_=~/Downloads/BalenaEtcher.Ins/balenaEtcher-1.18.4-x64.AppImage \
        bEtcherIconDownload_=~/Downloads/BalenaEtcher.Ins/BalenaEtcher2.png \
        bEtcherAppHome_=~/.AppImages/BalenaEtcher/balenaEtcher-1.18.4-x64.AppImage \
        bEtcherIconHome_=~/.AppImages/BalenaEtcher/BalenaEtcher2.png \
        bEtcherDelete_=~/Downloads/BalenaEtcher*;

  echo '';
  echo "Installing BalenaEtcher...";

  mkdir -p ~/.local/share/applications;
  mkdir -p ~/.AppImages/BalenaEtcher;

  cat <<EOT>> $bEtcherDesktop_;
[Desktop Entry]
Type=Application
Name=BalenaEtcher
Comment=From ISO file to USB stick
Exec=/home/is_derayo/.AppImages/BalenaEtcher/balenaEtcher-1.18.4-x64.AppImage
Icon=/home/is_derayo/.AppImages/BalenaEtcher/BalenaEtcher2.png
Terminal=false
StartupWMClass=BalenaEtcher
Categories=System;
StartupNotify=false
EOT

  cd ~/Downloads;
  
  # -  - #
  # - ~/Downloads/BalenaEtcher.tar.bz2 - #
  curl -O http://$uServerIP_$bEtcherWServer_;
  
  # -  - #
  # - Untar ~/Downloads/BalenaEtcher.tar.bz2 - #
  tar -xvf $bEtcherTarDownload_;
  
  mv $bEtcherAppDownload_ $bEtcherAppHome_;
  mv $bEtcherIconDownload_ $bEtcherIconHome_;
  
  chmod +x $bEtcherAppHome_;
  # rm -rf $bEtcherTarDownload_;
  rm -rf $bEtcherDelete_;

  cd $Dir_;
  sleep 10;
}



# -  - #
# - XMonad_ - #
function XMonad_(){
  local sS1_='XMonad';
  local sS2_=$(echo $(session_ $sS1_)) \
        msg_0='Configuring '$sS1_'...' \
        msg_1=$sS1_' already installed...' \
        bash_profileF_=~/.bash_profile \
        xprofileF_=~/.xprofile \
        bashrcF_=~/.bashrc \
        picomConfF_=/etc/xdg/picom.conf \
        xMonadD_=~/.xmonad \
        xinitrcF_=~/.xinitrc;
  local xMonadF_=$xMonadD_/xmonad.sh;
  echo '';

  if [ "$sS1_" == "$sS2_" ]; then echo $msg_1; return; fi;

  echo $msg_0;
  lightdm_;
  echo '';
  
  echo "Installing $sS1_ desktop enviroment...";
  
  yay -S i3lock-color --noconfirm --needed;
  sudo pacman -S alsa-utils cronie dmenu lxappearance nitrogen pamixer picom rofi ttf-dejavu \
                 ttf-font-awesome ttf-liberation xmobar xmonad xmonad-contrib xterm --noconfirm --needed;

  #cd ~/Downloads;
  # git clone https://github.com/Axarva/dotfiles-2.0.git;
  # cd ~/Downloads/dotfiles-2.0;

  # chmod +x install-on-arch.sh;
  # ./install-on-arch.sh;

  # sed -i '12 i export PATH="$PATH:$HOME/bin"' $bashrcF_;
  # sed -i '13 i \ ' $bashrcF_;

  # sed -i '5 i startx' $bash_profileF_;
  # sed -i '6 i \ ' $bash_profileF_;
  
  touch $xprofileF_;
  echo "# Wallpaper" >> $xprofileF_;
  echo "nitrogen --restore &" >> $xprofileF_;
  echo "" >> $xprofileF_;
  echo "# Compositor" >> $xprofileF_;
  echo "picom -f &" >> $xprofileF_;

  sudo sed -i 's/vsync = true;/# vsync = true;/' $picomConfF_;

  mkdir -p $xMonadD_;
  touch $xMonadF_;
  echo "import XMonad" >> $xMonadF_;
  echo '' >> $xMonadF_;
  echo 'main = xmonad def' >> $xMonadF_;
  echo '     { terminal = "tilix"' >> $xMonadF_;
  echo '     , modMask = mod4Mask' >> $xMonadF_;
  echo '     }' >> $xMonadF_;
  
  # - After install Ermano configuration - #
  
  
  # cd ~/;
  xmonad --recompile;
  
  sudo reboot now;

  # touch $xinitrcF_;
  # echo "exec xmonad" >> $xinitrcF_;

  sleep 10;
}



# -  - #
# - NoDesktop_ - #
function NoDesktop_(){
  local sS1_='NoDesktop';
  local sS2_=$(echo $(session_ $sS1_)) \
        msg_0='Configuring '$sS1_'...' \
        msg_1=$sS1_' already installed...' \
        autostartF_=~/.config/openbox/autostart;
  echo '';

  if [ "$sS1_" == "$sS2_" ]; then echo $msg_1; return; fi;

  echo $msg_0;
  # lightdm_;
  echo '';

  echo 'Installing '$sS1_' enviroment...';
  #sudo pacman -S obconf lxappearance-obconf openbox tint2 ttf-dejavu ttf-liberation xterm --noconfirm;
  #sudo pacman -S menumaker nitrogen volumeicon --noconfirm;

  # yay -S i3lock-color --noconfirm --needed;


  sleep 10;
}



# -  - #
# - lightdm_ - #
function lightdm_(){
  local sS1_='lightdm' sS2_='';
  
  echo "";
  # - lightdm (Budgie, Cinnamon, Deepin, Mate, OpenBox, Xfce & XMonad) - #

  sS2_=$( echo $(pacman -Qqe | grep "$sS1_" ) | awk '{print $1;}');
  if [ "$sS1_" == "$sS2_" ]; then echo "lightdm already installed..."; sleep 5; return; fi;

  echo 'Installing lightdm desktop manager...';
  sudo pacman -S lightdm --noconfirm --needed;
  sudo systemctl enable lightdm;

  echo 'Installing lightdm-gtk-greeter...';
  sudo pacman -S lightdm-gtk-greeter --noconfirm --needed;

  echo 'Installing lightdm-gtk-greeter-settings...';
  sudo pacman -S lightdm-gtk-greeter-settings --noconfirm --needed;

  echo "";
  sleep 10;
}



# -  - #
# - sddm_ - #
function sddm_(){
  echo '';
  echo 'Installing sddm desktop manager...';
  # - sddm (KDE Plasma) - #
  sudo pacman -S sddm --noconfirm --needed;
  sudo systemctl enable sddm;
  sleep 10;
}



# -  - #
# - gdm_ - #
function gdm_(){
  echo '';
  echo 'Installing gdm desktop manager...';
  # - gdm (Gnome) - #
  sudo pacman -S gdm --noconfirm --needed;
  sudo systemctl enable gdm;
  sleep 10;
}



# -  - #
# - cleaning_ - #
function cleaning_(){
  echo '';

  echo 'Cleaning system cache...';
  sudo pacman -Scc --noconfirm;

  echo 'Removing orphan packages...';
  sudo pacman -R $(pacman -Qtdq) --noconfirm;

  echo 'Cleaning user cache...';
  sudo du -sh ~/.cache/;
  rm -rf ~/.cache/*;
  sudo rm -rf ~/.cache/*;

  echo 'Cleaning done...';
}



# -  - #
# - checkComputer_ - #
function checkComputer_(){
  clear;
  echo "";
  echo 'Checking computer...';
  if [ "$cHost_" == "HPLaptopArch" ] || [ "$cHost_" == "HPDesktopArch" ]; then
     echo "";
     echo "This process cannot be executed on $cHost_...";
     spd-say -w "This process cannot be executed on $cHost_";
     rm -rf ~/Arch_PostInstallation.sh;
     echo "";
     exit;
  fi;
  echo "";
}



checkComputer_;
AdditionalSoftware_;
sshPublicKey_;
if [ "$_bashrc_" == "Yes" ]; then bashrc_; fi;



if [ "$Btrfs_" == "Yes" ]; then
   DataBtrfs_;
else
   LinuxPartitionLabel_;
   SwapInstall_;
   if [ "$zPool_" == "Yes" ]; then
      zData_;
      zDataPool_;
   elif [ "$zPool_" == "No" ]; then
      Data_;
   fi;
fi;

DataDirectories_;
samba_;



<<'comment'
if [ "$Desktop_" == 1 ]; then
    xfce_;
elif [ "$Desktop_" == 2 ]; then
    cinnamon_;
else
  echo 'neither';
fi;
comment



case $Desktop_ in
  ''|*[!0-9]*)
    echo '';
    echo 'Its not a number...';
    ;;
  1)
    xfce_;
    ;;
  2)
    cinnamon_;
    ;;
  3)
    kde_;
    ;;
  4)
    gnome_;
    ;;
  5)
    deepin_;
    ;;
  6)
    budgie_;
    ;;
  7)
    OpenBox_;
    ;;
  8)
    XMonad_;
    ;;
  9)
    NoDesktop_;
    ;;
  *)
    echo "Option no valid: " $Desktop_;
    ;;
esac



rm -rf ~/Arch_PostInstallation.sh;
cleaning_;



echo '';
echo '';
echo "Post installation is done...";
read -t 10 -p 'System will reboot now so changes will reflect.';
echo '';

sudo reboot now;



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

ssh-keygen -R 10.0.0.1
ssh-keygen -R 192.168.1.1
cd ~/; curl -O http://192.168.122.101/Images/Programs/Linux.Img/Linux_Arch.Img/Arch_Install/KarlaS_Arch.Ins/Arch_PostInstallation.sh;
~/./Arch_PostInstallation.sh;
comment



# - eof - #