#!/bin/bash
#
# Calinix maintenance
# -- by Arghya Sarkar (https://github.com/arghyagod-coder)
# (GNU/General Public License version 3.0)
#
#
#
# ---------------------------------------
# Define Functions:
# ---------------------------------------
#
#
handlerror () {
  clear
  set -uo pipefail
  trap 's=$?; echo "$0: Error on line "$LINENO": $BASH_COMMAND"; exit $s' ERR
}
#
#
welcomer () {
  clear
  echo "==================================================="
  echo "=                                                 ="
  echo "=     Calinix Maintenance Script                 ="
  echo "=                                                 ="
  echo "=                                                 ="
  echo "=     Version 2.1  (Release)                      ="
  echo "=                                                 ="
  echo "=     Brought to you by Arghya Sarkar             ="
  echo "  https://github.com/Calinix-Team/Calinix-Arch    ="
  echo "=                                                 ="
  echo -e "=================================================== \n"
  sleep 4
}
#
failedsrvs () {
  clear
  systemctl --failed > /tmp/failedsrvs
  nano /tmp/failedsrvs
  clear
  echo -e "\n"
  rm /tmp/failedsrvs
  clear
}
#
journalchk () {
  clear
  journalctl -p 3 -xb > /tmp/journalchk
  nano /tmp/journalchk
  clear
  echo -e "\n"
  rm /tmp/journalchk
  clear
}
#
journalcln () {
  clear
  journalctl --vacuum-time=2weeks
  clear
  echo -e "\n"
  echo "Journal directory cleaned"
  sleep 2
  clear
}
#
sysupdate () {
  clear
  pacman -Syu
  clear
  echo -e "\n"
  echo "Full system upgrade finished"
  sleep 2
  clear
}
#
pkgsccache () {
  clear
  pacman -Scc
  clear
  echo -e "\n"
  echo "Package cache cleaned"
  sleep 2
  clear
}
#
keysreset () {
  clear
  rm /var/lib/pacman/sync/*
  rm -rf /etc/pacman.d/gnupg/*
  pacman-key --init
  pacman-key --populate
  pacman -S --noconfirm archlinux-keyring
  clear
  echo -e "\n"
  echo "All pacman keys are reset"
  sleep 2
  clear
}
#
usercachecln () {
  clear
  echo "[Unit]
Description=Clean primary user cache on boot.

[Service]
Type=simple
ExecStart=/bin/bash /usr/local/bin/clnusercache.sh

[Install]
WantedBy=multi-user.target" > /usr/lib/systemd/system/clnusercache.service
  echo "#!/bin/bash 
rm -r /home/*/.cache/*
rm /etc/systemd/system/multi-user.target.wants/clnusercache.service" > /usr/local/bin/clnusercache.sh
  chmod +x /usr/local/bin/clnusercache.sh
  ln -sf /usr/lib/systemd/system/clnusercache.service /etc/systemd/system/multi-user.target.wants/clnusercache.service
  clear
  echo -e "\n"
  echo "User's cache directory cleaned on next boot"
  sleep 3
  clear
}
#
runreflector () {
  clear
  reflector --latest 10 --sort rate --protocol https --save /etc/pacman.d/mirrorlist
  clear
  echo -e "\n"
  echo "Mirrorlist regenerated"
  sleep 2
  clear
}
#
mainmenu () { while true
do
  clear
  echo "-------------------------------------"
  echo " Calinix Maintenance Script"
  echo "-------------------------------------"
  echo ""
  echo "  1) Failed systemd services"
  echo "  2) Check journal logs"
  echo "  3) Cleanup journal space"
  echo "  4) Run system update"
  echo "  5) Clean package cache"
  echo "  6) Reset all pacman keys"
  echo "  7) Clean user cache on next boot"
  echo "  8) Regenerate mirrorlist"

  echo ""
  echo "  X) Exit"
  echo -e "\n"
  read -p "Enter your choice: " optionA
  case $optionA in
    1 ) failedsrvs ;;
    2 ) journalchk ;;
    3 ) journalcln ;;
    4 ) sysupdate ;;
    5 ) pkgsccache ;;
    6 ) keysreset ;;
    7 ) usercachecln ;;
    8 ) runreflector ;;
    x|X ) exit;;
    * ) invalid ;;
  esac
done
}
#
#
ROOTUSER () {
  if [[ "$EUID" = 0 ]]; then
    continue
  else
    echo "Please Run As Root"
    sleep 2
    exit
  fi
}
#
#
ROOTUSER
handlerror
welcomer
mainmenu
#
#
done
#
