#!/bin/bash

# old-kernel-remover by pavroo <pavroo@onet.eu>
# Last update 2025/07/23

# get default's locale file
DEFLOCDIR="/usr/share/sparky/sparky-aptus-appcenter"
if [ "`cat /etc/default/locale | grep LANG= | grep de`" != "" ]; then
. $DEFLOCDIR/de
elif [ "`cat /etc/default/locale | grep LANG= | grep el`" != "" ]; then
. $DEFLOCDIR/el
elif [ "`cat /etc/default/locale | grep LANG= | grep es`" != "" ]; then
	if [ "`cat /etc/default/locale | grep LANG= | grep es_AR`" != "" ]; then
. $DEFLOCDIR/es_AR
	else
. $DEFLOCDIR/es_ES
	fi
elif [ "`cat /etc/default/locale | grep LANG= | grep fi`" != "" ]; then
. $DEFLOCDIR/fi
elif [ "`cat /etc/default/locale | grep LANG= | grep fr`" != "" ]; then
. $DEFLOCDIR/fr
elif [ "`cat /etc/default/locale | grep LANG= | grep hu`" != "" ]; then
. $DEFLOCDIR/hu
elif [ "`cat /etc/default/locale | grep LANG= | grep id_ID`" != "" ]; then
. $DEFLOCDIR/id_ID
elif [ "`cat /etc/default/locale | grep LANG= | grep it`" != "" ]; then
. $DEFLOCDIR/it
elif [ "`cat /etc/default/locale | grep LANG= | grep pl`" != "" ]; then
. $DEFLOCDIR/pl
elif [ "`cat /etc/default/locale | grep LANG= | grep pt_BR`" != "" ]; then
. $DEFLOCDIR/pt_BR
elif [ "`cat /etc/default/locale | grep LANG= | grep pt_PT`" != "" ]; then
. $DEFLOCDIR/pt_PT
elif [ "`cat /etc/default/locale | grep LANG= | grep ru`" != "" ]; then
. $DEFLOCDIR/ru
elif [ "`cat /etc/default/locale | grep LANG= | grep uk`" != "" ]; then
. $DEFLOCDIR/uk
elif [ "`cat /etc/default/locale | grep LANG= | grep zh_CN`" != "" ]; then
. $DEFLOCDIR/zh_CN
else
. $DEFLOCDIR/en
fi

testroot="`whoami`"
if [ "$testroot" != "root" ]; then
	echo "Must be root... Exiting now..."
	exit 1
fi

DIALOG="yad --window-icon=sparky-aptus-appcenter --width=500 --center"
DIALOGMENU="yad --window-icon=sparky-aptus-appcenter --width=500 --height=350 --center"
TITLE="--always-print-result --dialog-sep --image=sparky-aptus-appcenter --title="
TEXT="--text="
OKEXIT="--button=Ok:0 --button=$LOCAL001:1"
MSGBOX="--button=Ok:0"
TITLETEXT="APTus AppCenter"
MENU="--list --column=No --column=Kernel"
if [ -f /usr/bin/sparky-xterm ];then
	SPARKYXTERM="/usr/bin/sparky-xterm"
else
	echo "sparky-xterm is missing... Exiting..."
	exit 1
fi

if [ -d /tmp/old-kernel-remover ]; then
	rm -rf /tmp/old-kernel-remover
fi
mkdir -p /tmp/old-kernel-remover
touch /tmp/old-kernel-remover/kernellist0
touch /tmp/old-kernel-remover/kernellist
dpkg-query -l | grep linux-image | grep -v meta | grep -v template | cut -d ' ' -f 3 > /tmp/old-kernel-remover/kernellist0
KERNELACTIVE=`uname -r`
KERNELNUMBER=`cat /tmp/old-kernel-remover/kernellist0 | wc -l`
if [ "$KERNELNUMBER" = "1" ]; then
	$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"\n$LOCAL070 $KERNELACTIVE \n$LOCAL071\n\n$LOCAL001"
	exit 1
fi

# remove active kernel from the list
cat /tmp/old-kernel-remover/kernellist0 | grep -v "$KERNELACTIVE" > /tmp/old-kernel-remover/kernellist
# get kernels numbers
GETWC01=`wc -l /tmp/old-kernel-remover/kernellist | grep 1`
GETWC02=`wc -l /tmp/old-kernel-remover/kernellist | grep 2`
GETWC03=`wc -l /tmp/old-kernel-remover/kernellist | grep 3`
GETWC04=`wc -l /tmp/old-kernel-remover/kernellist | grep 4`
GETWC05=`wc -l /tmp/old-kernel-remover/kernellist | grep 5`
GETWC06=`wc -l /tmp/old-kernel-remover/kernellist | grep 6`
GETWC07=`wc -l /tmp/old-kernel-remover/kernellist | grep 7`
GETWC08=`wc -l /tmp/old-kernel-remover/kernellist | grep 8`
# preper kernel list depends of amount
if [ "$GETWC01" != "" ]; then
	OLDKERNEL01=`cat /tmp/old-kernel-remover/kernellist | head -n1`
elif [ "$GETWC02" != "" ]; then
	OLDKERNEL01=`cat /tmp/old-kernel-remover/kernellist | head -n1`
	OLDKERNEL02=`cat /tmp/old-kernel-remover/kernellist | head -n2 | tail -n1`
elif [ "$GETWC03" != "" ]; then
	OLDKERNEL01=`cat /tmp/old-kernel-remover/kernellist | head -n1`
	OLDKERNEL02=`cat /tmp/old-kernel-remover/kernellist | head -n2 | tail -n1`
	OLDKERNEL03=`cat /tmp/old-kernel-remover/kernellist | head -n3 | tail -n1`
elif [ "$GETWC04" != "" ]; then
	OLDKERNEL01=`cat /tmp/old-kernel-remover/kernellist | head -n1`
	OLDKERNEL02=`cat /tmp/old-kernel-remover/kernellist | head -n2 | tail -n1`
	OLDKERNEL03=`cat /tmp/old-kernel-remover/kernellist | head -n3 | tail -n1`
	OLDKERNEL04=`cat /tmp/old-kernel-remover/kernellist | head -n4 | tail -n1`
elif [ "$GETWC05" != "" ]; then
	OLDKERNEL01=`cat /tmp/old-kernel-remover/kernellist | head -n1`
	OLDKERNEL02=`cat /tmp/old-kernel-remover/kernellist | head -n2 | tail -n1`
	OLDKERNEL03=`cat /tmp/old-kernel-remover/kernellist | head -n3 | tail -n1`
	OLDKERNEL04=`cat /tmp/old-kernel-remover/kernellist | head -n4 | tail -n1`
	OLDKERNEL05=`cat /tmp/old-kernel-remover/kernellist | head -n5 | tail -n1`
elif [ "$GETWC06" != "" ]; then
	OLDKERNEL01=`cat /tmp/old-kernel-remover/kernellist | head -n1`
	OLDKERNEL02=`cat /tmp/old-kernel-remover/kernellist | head -n2 | tail -n1`
	OLDKERNEL03=`cat /tmp/old-kernel-remover/kernellist | head -n3 | tail -n1`
	OLDKERNEL04=`cat /tmp/old-kernel-remover/kernellist | head -n4 | tail -n1`
	OLDKERNEL05=`cat /tmp/old-kernel-remover/kernellist | head -n5 | tail -n1`
	OLDKERNEL06=`cat /tmp/old-kernel-remover/kernellist | head -n6 | tail -n1`
elif [ "$GETWC07" != "" ]; then
	OLDKERNEL01=`cat /tmp/old-kernel-remover/kernellist | head -n1`
	OLDKERNEL02=`cat /tmp/old-kernel-remover/kernellist | head -n2 | tail -n1`
	OLDKERNEL03=`cat /tmp/old-kernel-remover/kernellist | head -n3 | tail -n1`
	OLDKERNEL04=`cat /tmp/old-kernel-remover/kernellist | head -n4 | tail -n1`
	OLDKERNEL05=`cat /tmp/old-kernel-remover/kernellist | head -n5 | tail -n1`
	OLDKERNEL06=`cat /tmp/old-kernel-remover/kernellist | head -n6 | tail -n1`
	OLDKERNEL07=`cat /tmp/old-kernel-remover/kernellist | head -n7 | tail -n1`
elif [ "$GETWC08" != "" ]; then
	OLDKERNEL01=`cat /tmp/old-kernel-remover/kernellist | head -n1`
	OLDKERNEL02=`cat /tmp/old-kernel-remover/kernellist | head -n2 | tail -n1`
	OLDKERNEL03=`cat /tmp/old-kernel-remover/kernellist | head -n3 | tail -n1`
	OLDKERNEL04=`cat /tmp/old-kernel-remover/kernellist | head -n4 | tail -n1`
	OLDKERNEL05=`cat /tmp/old-kernel-remover/kernellist | head -n5 | tail -n1`
	OLDKERNEL06=`cat /tmp/old-kernel-remover/kernellist | head -n6 | tail -n1`
	OLDKERNEL07=`cat /tmp/old-kernel-remover/kernellist | head -n7 | tail -n1`
	OLDKERNEL08=`cat /tmp/old-kernel-remover/kernellist | head -n8 | tail -n1`
fi

# get header version
OLDHEADERS01=`cat /tmp/old-kernel-remover/kernellist | head -n1 | sed -e 's/image/headers/g'`
OLDHEADERS02=`cat /tmp/old-kernel-remover/kernellist | head -n2 | tail -n1 | sed -e 's/image/headers/g'`
OLDHEADERS03=`cat /tmp/old-kernel-remover/kernellist | head -n3 | tail -n1 | sed -e 's/image/headers/g'`
OLDHEADERS04=`cat /tmp/old-kernel-remover/kernellist | head -n4 | tail -n1 | sed -e 's/image/headers/g'`
OLDHEADERS05=`cat /tmp/old-kernel-remover/kernellist | head -n5 | tail -n1 | sed -e 's/image/headers/g'`
OLDHEADERS06=`cat /tmp/old-kernel-remover/kernellist | head -n6 | tail -n1 | sed -e 's/image/headers/g'`
OLDHEADERS07=`cat /tmp/old-kernel-remover/kernellist | head -n7 | tail -n1 | sed -e 's/image/headers/g'`
OLDHEADERS08=`cat /tmp/old-kernel-remover/kernellist | head -n8 | tail -n1 | sed -e 's/image/headers/g'`

# build menu window
if [ "$GETWC01" != "" ]; then
CHOICES=`$DIALOGMENU $TITLE"$TITLETEXT" $OKEXIT $MENU $TEXT"$LOCAL072: $KERNELACTIVE \n\n$LOCAL073:" \
01 "$OLDKERNEL01"`

elif [ "$GETWC02" != "" ]; then
CHOICES=`$DIALOGMENU $TITLE"$TITLETEXT" $OKEXIT $MENU $TEXT"$LOCAL072: $KERNELACTIVE \n\n$LOCAL073:" \
01 "$OLDKERNEL01" \
02 "$OLDKERNEL02"`

elif [ "$GETWC03" != "" ]; then
CHOICES=`$DIALOGMENU $TITLE"$TITLETEXT" $OKEXIT $MENU $TEXT"$LOCAL072: $KERNELACTIVE \n\n$LOCAL073:" \
01 "$OLDKERNEL01" \
02 "$OLDKERNEL02" \
03 "$OLDKERNEL03"`

elif [ "$GETWC04" != "" ]; then
CHOICES=`$DIALOGMENU $TITLE"$TITLETEXT" $OKEXIT $MENU $TEXT"$LOCAL072: $KERNELACTIVE \n\n$LOCAL073:" \
01 "$OLDKERNEL01" \
02 "$OLDKERNEL02" \
03 "$OLDKERNEL03" \
04 "$OLDKERNEL04"`

elif [ "$GETWC05" != "" ]; then
CHOICES=`$DIALOGMENU $TITLE"$TITLETEXT" $OKEXIT $MENU $TEXT"$LOCAL072: $KERNELACTIVE \n\n$LOCAL073:" \
01 "$OLDKERNEL01" \
02 "$OLDKERNEL02" \
03 "$OLDKERNEL03" \
04 "$OLDKERNEL04" \
05 "$OLDKERNEL05"`

elif [ "$GETWC06" != "" ]; then
CHOICES=`$DIALOGMENU $TITLE"$TITLETEXT" $OKEXIT $MENU $TEXT"$LOCAL072: $KERNELACTIVE \n\n$LOCAL073:" \
01 "$OLDKERNEL01" \
02 "$OLDKERNEL02" \
03 "$OLDKERNEL03" \
04 "$OLDKERNEL04" \
05 "$OLDKERNEL05" \
06 "$OLDKERNEL06"`

elif [ "$GETWC07" != "" ]; then
CHOICES=`$DIALOGMENU $TITLE"$TITLETEXT" $OKEXIT $MENU $TEXT"$LOCAL072: $KERNELACTIVE \n\n$LOCAL073:" \
01 "$OLDKERNEL01" \
02 "$OLDKERNEL02" \
03 "$OLDKERNEL03" \
04 "$OLDKERNEL04" \
05 "$OLDKERNEL05" \
06 "$OLDKERNEL06" \
07 "$OLDKERNEL07"`

elif [ "$GETWC08" != "" ]; then
CHOICES=`$DIALOGMENU $TITLE"$TITLETEXT" $OKEXIT $MENU $TEXT"$LOCAL072: $KERNELACTIVE \n\n$LOCAL073:" \
01 "$OLDKERNEL01" \
02 "$OLDKERNEL02" \
03 "$OLDKERNEL03" \
04 "$OLDKERNEL04" \
05 "$OLDKERNEL05" \
06 "$OLDKERNEL06" \
07 "$OLDKERNEL07" \
08 "$OLDKERNEL08"`

fi

if [ "$?" = "0" ]; then
	CHOICE=`echo $CHOICES | cut -d "|" -f 1`
else
	exit 0
fi

if [ "$CHOICE" = "01" ]; then
	REMOVEKERNEL="$OLDKERNEL01"
	REMOVEHEADERS="$OLDHEADERS01"

elif [ "$CHOICE" = "02" ]; then
	REMOVEKERNEL="$OLDKERNEL02"
	REMOVEHEADERS="$OLDHEADERS02"

elif [ "$CHOICE" = "03" ]; then
	REMOVEKERNEL="$OLDKERNEL03"
	REMOVEHEADERS="$OLDHEADERS03"

elif [ "$CHOICE" = "04" ]; then
	REMOVEKERNEL="$OLDKERNEL04"
	REMOVEHEADERS="$OLDHEADERS04"

elif [ "$CHOICE" = "05" ]; then
	REMOVEKERNEL="$OLDKERNEL05"
	REMOVEHEADERS="$OLDHEADERS05"

elif [ "$CHOICE" = "06" ]; then
	REMOVEKERNEL="$OLDKERNEL06"
	REMOVEHEADERS="$OLDHEADERS06"

elif [ "$CHOICE" = "07" ]; then
	REMOVEKERNEL="$OLDKERNEL07"
	REMOVEHEADERS="$OLDHEADERS07"

elif [ "$CHOICE" = "08" ]; then
	REMOVEKERNEL="$OLDKERNEL08"
	REMOVEHEADERS="$OLDHEADERS08"

else
	exit 0
fi

echo "$REMOVEKERNEL" > /tmp/old-kernel-remover/kernelversion
KERNELVERSHORT=`cat /tmp/old-kernel-remover/kernelversion | cut -d '-' -f 3,4,5,6`
#cd /boot
#REMOVEINITRD=`ls initrd.img* | grep $KERNELVERSHORT`

if [ "$REMOVEKERNEL" != "" ]; then
	$DIALOG $TITLE"$TITLETEXT" $OKEXIT $TEXT"\n$LOCAL074: $REMOVEKERNEL ?"
	if [ "$?" != "0" ]; then
		exit 0
	else
		# remove kernel and headers now
		$SPARKYXTERM "apt-get purge $REMOVEKERNEL"
		$SPARKYXTERM "apt-get purge $REMOVEHEADERS"
		$SPARKYXTERM "apt-get autoremove"
		
		$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"\n$LOCAL031"
		exit 0
	fi
fi

exit 0
