#!/bin/sh

# Maintenance variables

# DNS servers
# dns checking page: https://dnscheck.tools/
# leaky: adguarddns,gcore,quad9
ADGUARDDNS="servers=94.140.14.14,94.140.15.15"
CLOUDFLARE="servers=1.1.1.1#cloudflare-dns.com,1.0.0.1#cloudflare-dns.com"
CONTROLD="servers=76.76.2.0,76.76.10.0"
GCORE="servers=95.85.95.85,2.56.220.2"
GOOGLE="servers=8.8.8.8,8.8.4.4"
NEXTDNS="servers=45.90.28.0,45.90.28.255"
OPENDNS="servers=208.67.222.222,208.67.220.220,208.67.222.220"
OPENNIC="servers=216.87.84.211,23.90.4.6,216.87.84.211"
QUAD9="servers=9.9.9.9#dns.quad9.net,9.9.9.11#dns.quad9.net"
VERISIGN="servers=64.6.64.6,64.6.65.6"
YANDEX="servers=77.88.8.8#common.dot.dns.yandex.net,77.88.8.1#common.dot.dns.yandex.net"

_run0nobg="run0 --background="

# labnag colors
LABNAGTHEME=' -x \
--details-border-size 0 \
--message-padding 6 \
--button-padding 3 \
--button-gap 3 \
--button-margin-right 3 \
--button-dismiss-gap 0 \
--button-border-size 1 \
--background-color 035b00 \
--button-background-color 012900 \
--button-border-color 06ac00 \
--border-bottom-color 011d00 \
--details-background-color 011d00'

# CPU section
cpu_gov() {
echo "$(cpupower frequency-info |grep governor |sed /available/d |sed s/.*governor// |sed s/may.*//)" \
 | labnag -f Mono -t 0 \
-l -L " Current Governor " \
-k on-demand -y top \
-m " Choose CPU Governor: " \
-Z " Performance " "run0 cpupower  frequency-set -g performance  ; zeuspanel cpu_menu" \
-Z " Powersave " "run0 cpupower  frequency-set -g powersave  ; zeuspanel cpu_menu" \
-Z " Schedutil " "run0 cpupower  frequency-set -g schedutil  ; zeuspanel cpu_menu" \
-Z " X " "zeuspanel cpu_menu" \
$LABNAGTHEME
}

cpu_amdpstate() {
labnag -f Mono -t 0 \
-k on-demand \
-m " Choose Pstate Driver: " \
-Z " Active " "run0 cpupower set -m active ; zeuspanel cpu_epp" \
-Z " Guided " "run0 cpupower set -m guided ; zeuspanel cpu_menu" \
-Z " Passive " "run0 cpupower set -m passive ; zeuspanel cpu_menu" \
-Z " X " "zeuspanel cpu_menu" \
$LABNAGTHEME
}

cpu_epp() {
labnag -f Mono -t 0 \
-k on-demand \
-m " Choose EPP Hint: " \
-Z " Performance " "run0 cpupower set -e performance ; zeuspanel cpu_menu" \
-Z " Balance Perf " "run0 cpupower set -e balance_performance ; zeuspanel cpu_menu" \
-Z " Balance Power " "run0 cpupower set -e balance_power ; zeuspanel cpu_menu" \
-Z " Powersave " "run0 cpupower set -e power ; zeuspanel cpu_menu" \
-Z " X " "zeuspanel cpu_menu"  \
$LABNAGTHEME
}

cpu_turbo() {
echo "$(cpupower frequency-info |grep Active:)" \
 | labnag -f Mono -t 0 \
-l -L " Current Status " \
-k on-demand -y top \
-m " Turbo Boost: " \
-Z " On " "run0 cpupower set -t 1  ; zeuspanel cpu_menu" \
-Z " Off " "run0 cpupower set -t 0  ; zeuspanel cpu_menu" \
-Z " X " "zeuspanel cpu_menu" \
$LABNAGTHEME
}

cpu_menu() {
echo "$(cpupower frequency-info)" \
| labnag -f Mono -t 0 \
-l -L " CPU Info " \
-k on-demand \
-m " Choose: " \
-Z " AMD Pstate " "zeuspanel cpu_amdpstate" \
-Z " Governor " "zeuspanel cpu_gov" \
-Z " Turbo " "zeuspanel cpu_turbo" \
-Z " X " "zeuspanel main" \
$LABNAGTHEME
}

# network section
net_dns() {
NMDNSPATH="/etc/NetworkManager/conf.d/dns.conf"
DNSHEADER="[global-dns-domain-*]"
NMRELOAD="nmcli general reload"
ZPNM="zeuspanel net_menu"
# mothball for now
#-Z " AdGuard " "run0 sh -c 'echo $DNSHEADER > $NMDNSPATH && echo $ADGUARDDNS >> $NMDNSPATH && $NMRELOAD' ; $ZPNM" \
#-Z " G-Core " "run0 sh -c  'echo $DNSHEADER > $NMDNSPATH && echo $GCORE >> $NMDNSPATH && $NMRELOAD' ; $ZPNM" \
#-Z " Quad9 " "run0 sh -c  'echo $DNSHEADER > $NMDNSPATH && echo $QUAD9 >> $NMDNSPATH && $NMRELOAD' ; $ZPNM" \

echo "$(fastfetch --logo none -s dns)" \
|labnag -f Mono -t 0 \
-k on-demand \
-l -L " Current DNS " \
-m "Select DNS" \
-Z " Cloudflare " "run0 sh -c 'echo $DNSHEADER > $NMDNSPATH && echo $CLOUDFLARE >> $NMDNSPATH && $NMRELOAD' ; $ZPNM" \
-Z " Control D " "run0 sh -c  'echo $DNSHEADER > $NMDNSPATH && echo $CONTROLD >> $NMDNSPATH && $NMRELOAD' ; $ZPNM" \
-Z " Google " "run0 sh -c  'echo $DNSHEADER > $NMDNSPATH && echo $GOOGLE  >> $NMDNSPATH && $NMRELOAD' ; $ZPNM" \
-Z " NextDNS " "run0 sh -c  'echo $DNSHEADER > $NMDNSPATH && echo $NEXTDNS >> $NMDNSPATH && $NMRELOAD' ; $ZPNM" \
-Z " OpenDNS " "run0 sh -c  'echo $DNSHEADER > $NMDNSPATH && echo $OPENDNS >> $NMDNSPATH && $NMRELOAD' ; $ZPNM" \
-Z " OpenNIC " "run0 sh -c  'echo $DNSHEADER > $NMDNSPATH && echo $OPENNIC >> $NMDNSPATH && $NMRELOAD' ; $ZPNM" \
-Z " Verisign " "run0 sh -c  'echo $DNSHEADER > $NMDNSPATH && echo $VERISIGN >> $NMDNSPATH && $NMRELOAD' ; $ZPNM" \
-Z " Yandex " "run0 sh -c  'echo $DNSHEADER > $NMDNSPATH && echo $YANDEX >> $NMDNSPATH && $NMRELOAD' ; $ZPNM" \
-Z " None " "run0 sh -c 'rm -f $NMDNSPATH && $NMRELOAD' ; $ZPNM" \
-Z " X " "$ZPNM" \
$LABNAGTHEME
}

net_ipv6() {
echo "Disabled = $(cat /proc/sys/net/ipv6/conf/all/disable_ipv6)" \
| labnag -f Mono -t 0 \
-k on-demand \
-l -L " Status " \
-m "Enable / Disable ipv6 : Enabled by Default" \
-Z " Enable " " run0 sh -c 'sysctl -w net.ipv6.conf.all.disable_ipv6=0 && sysctl -w net.ipv6.conf.default.disable_ipv6=0 && sysctl -w net.ipv6.conf.lo.disable_ipv6=0' ; zeuspanel net_menu" \
-Z " Disable " " run0 sh -c 'sysctl -w net.ipv6.conf.all.disable_ipv6=1 && sysctl -w net.ipv6.conf.default.disable_ipv6=1 && sysctl -w net.ipv6.conf.lo.disable_ipv6=1' ; zeuspanel net_menu" \
-Z " X " "zeuspanel net_menu" \
$LABNAGTHEME
}

net_menu() {
labnag -f Mono -t 0 \
-k on-demand \
-m "Networking" \
-Z " DNS " "zeuspanel net_dns " \
-Z " ipv6 " "zeuspanel net_ipv6 " \
-Z " NetworkManager TUI " " foot -a labicon -e run0 --background= nmtui ; zeuspanel net_menu" \
-Z " X " "zeuspanel main" \
$LABNAGTHEME
}

# install software section
insoft_menu() {
_run0nobg="run0 --background="
labnag -f Mono -t 0 \
-k on-demand \
-m " Install: " \
-Z " Bash-completions " "foot -a labicon -T 'Installing Bash-completion' --override locked-title=yes \
-e $_run0nobg zypper in -f --recommends bash-completion mpv-bash-completion pacman-bash-completion ; zeuspanel insoft_menu " \
-Z " Codecs " "foot -a labicon -T 'Installing Codecs' --override locked-title=yes \
-e $_run0nobg sh -c 'zypper dup --from openh264 --from vlc && zypper in mozilla-openh264 x265 x264 libdvdcss yt-dlp yt-dlp-youtube-dl \
&& ln -sf /usr/lib64/firefox/defaults/pref/gmpopenh264.js /usr/lib64/darkmoon/defaults/pref/gmpopenh264.js' ; zeuspanel insoft_menu" \
-Z " Fish " "foot -a labicon -T 'Installing Fish Shell' --override locked-title=yes \
-e $_run0nobg zypper in --recommends fish && sed -i 's/#shell=foot-shell/shell=foot-shell/g' ~/.config/foot/foot*.ini ; zeuspanel insoft_menu" \
-Z " Myrlyn " "foot -a labicon -T 'Installing Myrlyn' --override locked-title=yes \
-e $_run0nobg zypper in myrlyn qt6-platformtheme-gtk3 ; zeuspanel insoft_menu" \
-Z " Openbox " "foot -a labicon -T 'Installing Openbox' --override locked-title=yes \
-e $_run0nobg zypper in openbox xinit xorg-x11-server xorg-x11-driver-input xorg-x11-driver-video alacritty libxkbcommon-x11-0 && echo '#!/bin/sh' > ~/.xinitrc && echo 'exec openbox-session' >> ~/.xinitrc && chmod +x ~/.xinitrc ; zeuspanel insoft_menu" \
-Z " TLDR " "foot -a labicon -T 'Installing TLDR' --override locked-title=yes \
-e $_run0nobg sh -c 'zypper in tealdeer && mkdir -p /root/.cache && ln -sf ~/.cache/tealdeer /root/.cache/' \
&& foot -a labicon -T 'Updating TLDR' tldr -u ; zeuspanel insoft_menu " \
-Z " X " "zeuspanel main" \
$LABNAGTHEME
}

# change passwords
zchpasswd() {
labnag -f Mono -t 0 \
-k on-demand \
-m " Change password: " \
-Z " root " "foot --override locked-title=yes -a labicon -T 'Enter root password' -W 60x10 $_run0nobg sh -c 'passwd root' ; zeuspanel main" \
-Z " user " "foot --override locked-title=yes -a labicon -T 'Enter user password' -W 60x10 $_run0nobg sh -c 'passwd linux' ; zeuspanel main" \
-Z " X " "zeuspanel main" \
$LABNAGTHEME
}

# theme
zchtheme() {
DARKMOONPROFILE=$(cd ~/.darkmoon && find * -maxdepth 0 -type d -print)
COLORPREF='"browser.display.prefers_color_scheme"'
labnag -f Mono -t 0 \
-k on-demand \
-m " Choose: " \
-Z " Dark " "gsettings set org.gnome.desktop.interface gtk-theme 'Dragon' && \
gsettings set org.gnome.desktop.wm.preferences theme 'Dragon' && \
gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' && \
sed -i 's/Ghost/Dragon/g' ~/.config/labwc/rc.xml && \
sed -i 's/Ghost/Dragon/g' ~/.config/gtk-3.0/settings.ini && \
sed -i 's/initial-color-theme=.*/initial-color-theme=dark/g' ~/.config/foot/foot.ini && \
labwc -r && pkill -SIGHUP sfwbar ; \
echo 'user_pref("$COLORPREF", 2);' >> ~/.darkmoon/${DARKMOONPROFILE}/prefs.js ; zeuspanel main" \
-Z " Light " "gsettings set org.gnome.desktop.interface gtk-theme 'Ghost' && \
gsettings set org.gnome.desktop.wm.preferences theme 'Ghost' && \
gsettings set org.gnome.desktop.interface color-scheme 'prefer-light' && \
sed -i 's/Dragon/Ghost/g' ~/.config/labwc/rc.xml && \
sed -i 's/Dragon/Ghost/g' ~/.config/gtk-3.0/settings.ini && \
sed -i 's/initial-color-theme=.*/initial-color-theme=light/g' ~/.config/foot/foot.ini && \
labwc -r && pkill -SIGHUP sfwbar ; \
echo 'user_pref("$COLORPREF", 1);' >> ~/.darkmoon/${DARKMOONPROFILE}/prefs.js ; zeuspanel main" \
-Z " X " "zeuspanel main" \
$LABNAGTHEME
}

# livecd ramdisk resizer
zchramsize() {
echo "$(fastfetch -s disk --logo none |grep overlay |sed s/.*://)" \
|labnag -f Mono -t 0 \
-k on-demand \
-l -L " Show Usage " \
-m "Resize RAM Disk" \
-Z " 2G " "run0 mount -o remount,size=2G /run ; zeuspanel main" \
-Z " 3G " "run0 mount -o remount,size=3G /run ; zeuspanel main" \
-Z " 4G " "run0 mount -o remount,size=4G /run ; zeuspanel main" \
-Z " 5G " "run0 mount -o remount,size=5G /run ; zeuspanel main" \
-Z " 6G " "run0 mount -o remount,size=6G /run ; zeuspanel main" \
-Z " 8G " "run0 mount -o remount,size=8G /run ; zeuspanel main" \
-Z " 33% " "run0 mount -o remount,size=33% /run ; zeuspanel main" \
-Z " 50% " "run0 mount -o remount,size=50% /run ; zeuspanel main" \
-Z " X " "zeuspanel main" \
$LABNAGTHEME
}

# agama!
agama_in() {
labnag -f Mono -t 0 \
-k on-demand \
-m " Agama Setup: Requires 2G RAMdisk" \
-Z " Install Agama " "foot -a labicon -T 'Installing Agama' --override locked-title=yes \
-e $_run0nobg zypper in agama agama-web-ui agama-products-opensuse MozillaFirefox ; zeuspanel agama_in" \
-Z " Start Agama Server " "foot --override locked-title=yes -a labicon -T 'Agama Server' \
-e run0 --background= sh -c 'systemctl enable --now agama && agama-web-server serve' & sleep 1;  zeuspanel agama_in" \
-Z " Begin OS Installation " "zeuspanel agama_browser" \
-Z " X " "zeuspanel main" \
$LABNAGTHEME
}

agama_browser() {
labnag -f Mono -t 0 \
-k on-demand \
-m " Choose which web browser to use: " \
-Z " Dark Moon " "darkmoon http://localhost" \
-Z " Firefox " "firefox http://localhost" \
-Z " X " "zeuspanel agama_in" \
$LABNAGTHEME
}

exp() {
echo "
Agama:           setup openSUSE installation via webui
Archinstall:     install archinstall
" \
 | labnag -f Mono -t 0 \
-k on-demand \
-l -L " Details " \
-m " WARN: Unstable/WIP ! " \
-Z " Agama " " zeuspanel agama_in " \
-Z " Archinstall " "foot -a labicon -T 'Installing Archinstall' --override locked-title=yes \
-e $_run0nobg zypper in archinstall ; zeuspanel main" \
-Z " X " "zeuspanel main" \
$LABNAGTHEME
}

main() {
echo "
System Info:     fastfetch
Install:         install software
Experimental:    unstable/WIP
CPU:             cpupower options
Keyboard:        select keymap with localectl
Network:         DNS & ipv6 & NetworkManager TUI
Password:        change password for root or user
RAMdisk:         resize RAM disk
Theme:           choose light or dark theme
Timezone:        tzselect piped to timedatectl
" \
 | labnag -f Mono -t 0 \
-k on-demand \
-l -L " Details " \
-m " ZEUS Panel " \
-Z " System Info " " foot -a labicon -H -T 'System Information' -e fastfetch --logo none -s os:host:chassis:kernel:initsystem:uptime:packages:display:DE:WM:cpu:gpu:vulkan:memory:swap:disk:dns:locale:sound:mouse:keyboard:datetime & sleep .1; zeuspanel main" \
-Z " Install " " zeuspanel insoft_menu " \
-Z " Experimental " " zeuspanel exp " \
-Z " CPU " " zeuspanel cpu_menu " \
-Z " Keyboard " " foot -a labicon -o locked-title=yes -T 'Select Keymap' -e selectkeymap.sh ; zeuspanel main " \
-Z " Network " " zeuspanel net_menu " \
-Z " Passwords " " zeuspanel zchpasswd " \
-Z " RAMdisk " " zeuspanel zchramsize " \
-Z " Theme " " zeuspanel zchtheme " \
-Z " Timezone " " foot -a labicon -o locked-title=yes -T 'Select Timezone' -e tzselect.sh ; zeuspanel main" \
-Z " X " \
$LABNAGTHEME
}

case $1 in
  main|cpu_menu|cpu_gov|cpu_amdpstate|cpu_turbo|cpu_epp|net_menu|net_dns|net_ipv6|insoft_menu|zchpasswd|zchtheme|zchramsize|agama_in|agama_browser|exp) "$1" ;;
esac
