#!/bin/bash

# remastersys-installer has been created by Tony "Fragadelic" Brijeski
# Copyright 2008-2012 Under the GNU GPL2 License
# Originally Created September 12th,2008
# Updated to replace zenity with yad July 2012
#
# sparky-installer has been forked
# for SparkyLinux by pavroo <pavroo@onet.eu> 2013/08/04
# Copyright 2013-2026 Under the GNU GPL2 License
# Last update 2026/01/21 by pavroo

# auto menu path: main disk autopart fixset user rootpass host grub set fix swappart rootpart efipart log copy postinstall desktop autologin finish
# manual menu path: main disk manualpart partition fixset user rootpass host grub set fix swappart rootpart homepart bootpart efipart log copy postinstall desktop autologin finish

# checking to make sure script is running with root privileges
testroot="`whoami`"
if [ "$testroot" != "root" ]; then
	echo "Must be run as root... Exiting now..."
	exit 1
fi

# set options of text mode
DIALOG="`which dialog`"
HEIGHT="20"
WIDTH="80"
MENUHEIGHT="12"
TITLE="--title "
TEXT=""
ENTRY="--inputbox "
MENU="--menu"
YESNO="--yesno "
MSGBOX="--msgbox "
PASSWORD="--passwordbox "
PARTITIONPROG="cfdisk"
TITLETEXT="Sparky (Advanced) Installer"
# AUTO_DISK_SIZE="16106127360"   #kb: 1024x1024x1024x15 = 15GB (minimum)

# check iso image version
if [ -f /lib/live/mount/rootfs/filesystem.squashfs/etc/sparkybackup/sparkybackup.conf ]; then
CHECKMINI=`cat /lib/live/mount/rootfs/filesystem.squashfs/etc/sparkybackup/sparkybackup.conf | grep minimal`
CHECKMINICLI=`cat /lib/live/mount/rootfs/filesystem.squashfs/etc/sparkybackup/sparkybackup.conf | grep cli`
CHECKISOVER=`cat /lib/live/mount/rootfs/filesystem.squashfs/etc/sparkybackup/sparkybackup.conf | grep CUSTOMISO`
CHECKRESCUE=`cat /lib/live/mount/rootfs/filesystem.squashfs/etc/sparkybackup/sparkybackup.conf | grep rescue`
else
CHECKMINI=`cat /run/live/rootfs/filesystem.squashfs/etc/sparkybackup/sparkybackup.conf | grep minimal`
CHECKMINICLI=`cat /run/live/rootfs/filesystem.squashfs/etc/sparkybackup/sparkybackup.conf | grep cli`
CHECKISOVER=`cat /run/live/rootfs/filesystem.squashfs/etc/sparkybackup/sparkybackup.conf | grep CUSTOMISO`
CHECKRESCUE=`cat /run/live/rootfs/filesystem.squashfs/etc/sparkybackup/sparkybackup.conf | grep rescue`
fi

# check efi
if [ -d /sys/firmware/efi/efivars ]; then
	TESTEFI="EFI detected"
else
	TESTEFI=""
fi

# if NOT Live system just quit, do nothing
testmode=`grep "1000" /etc/passwd | grep -v "Live"`
if [ "$testmode" != "" ]; then
	echo "It is NOT Live system! The Live Installer has to be launched in Live environment only. Exiting now..."
	exit 1
fi

# if no dialog installed just quit
if [ "$DIALOG" = "" ]; then
	echo "Cannot find dialog. Exiting now..."
	exit 1
fi

# make /TARGET dir
mkdir -p /TARGET

# get default's locale file (english only)
DEFLOCDIR="/usr/share/sparky/sparky-advanced-installer"
. $DEFLOCDIR/en

# inform about missing efi debs in offline dir on the live iso, so internet connection is required, unless you CAN NOT boot Sparky after installation
if [ "$TESTEFI" != "" ]; then
	if [ ! -d /run/live/medium/offline ]; then
		$DIALOG $TITLE"$TITLETEXT" $YESNO $TEXT"$LOCAL139\n\n$LOCAL140" $HEIGHT $WIDTH
		if [ $? != 0 ]; then
			exit 0
		fi
	fi
fi

# the first dialog window text
if [ "$CHECKMINI" != "" ] || [ -f /run/live/medium/live/minimal ]; then
	INSTALLTEXT1="$LOCAL1 $LOCAL3 $LOCAL4 $LOCAL5\n$LOCAL6\nsudo apt update\nsudo apt install sparky-backup-core\n\n$LOCAL7\n$LOCAL8"
else
	INSTALLTEXT1="$LOCAL2\n$LOCAL6\nsudo apt update\nsudo apt install sparky-backup-core\n$LOCAL7\n$LOCAL8"
fi

# inform about partitioning text
if [ "$TESTEFI" != "" ]; then
	PARTITIONTEXT="$LOCAL9\n\n$PARTITIONPROG $LOCAL10\n$LOCAL11\n$LOCAL12\n$LOCAL133\n$LOCAL13 $PARTITIONPROG $LOCAL14\n$LOCAL15"
else
	PARTITIONTEXT="$LOCAL9\n\n$PARTITIONPROG $LOCAL10\n$LOCAL11\n$LOCAL133\n$LOCAL13 $PARTITIONPROG $LOCAL14\n$LOCAL15"
fi

. /etc/live/config.conf
. /etc/sparkybackup/sparkybackup.conf
. /etc/sparkybackup/sparkylinux-installer.conf

########## SETTINGS ##########

mainmenu () {

# the first window, inform users what this is and ask if they want to continue
$DIALOG $TITLE"$TITLETEXT" $MENU $TEXT"$INSTALLTEXT1" $HEIGHT $WIDTH $MENUHEIGHT Exit "$LOCAL21" Manual "$LOCAL142" Auto "$LOCAL141" 2>/tmp/choice.$$
#if [ $? != 0 ]; then $YESNO
#	exit 0
#fi
if [ "$?" = "0" ]; then
	PARTWAY=`cat /tmp/choice.$$`
else
	PARTWAY="Exit"
fi
rm /tmp/choice.$$

if [ "$PARTWAY" = "Exit" ]; then
	$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL22" $HEIGHT $WIDTH
	exit 1
fi
	
$DIALOG $TITLE"$TITLETEXT" $YESNO $TEXT"$LOCAL16\n\n$LOCAL17\n\n$LOCAL18" $HEIGHT $WIDTH
if [ $? = 0 ]; then
	dpkg-reconfigure locales
	dpkg-reconfigure console-data
	dpkg-reconfigure console-setup
	dpkg-reconfigure keyboard-configuration
fi

diskmenu

}

diskmenu () {

if [ "$PARTWAY" = "Auto" ]; then
	$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL9\n\n$LOCAL144\n\n$LOCAL15" $HEIGHT $WIDTH
else
	$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$PARTITIONTEXT" $HEIGHT $WIDTH
fi

# choose the drive to partition
DRIVES=`lsblk -l | grep 'disk' | awk '{print $1, $4}'`
#for i in $DRIVES; do
#	partdrive="$i"
#	partdrivesize=`grep -m 1 "$i" /proc/partitions | awk '{print $3}'`
#	partdrivemenu="$partdrivemenu $partdrive $partdrivesize"
#done
partdrivemenu="$partdrivemenu $DRIVES"

$DIALOG $TITLE"$TITLETEXT" $MENU $TEXT"$LOCAL19\n$LOCAL20" $HEIGHT $WIDTH $MENUHEIGHT Exit "$LOCAL21" $partdrivemenu 2>/tmp/choice.$$
if [ "$?" = "0" ]; then
	PARTDRIVE=`cat /tmp/choice.$$`
else
	PARTDRIVE="Exit"
fi
rm /tmp/choice.$$

if [ "$PARTDRIVE" = "Exit" ]; then
	$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL22" $HEIGHT $WIDTH
	exit 1
fi

if [ "$PARTWAY" = "Auto" ]; then
	autopartitionmenu
else
	manualpartitionmenu
fi

}

autopartitionmenu () {

#DISKSIZE=`grep -m 1 $PARTDRIVE /proc/partitions | awk '{print $3}'`
#if [ "$DISKSIZE" -lt "$AUTO_DISK_SIZE" ]; then 
#	$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL143" $HEIGHT $WIDTH
#	exit 1
#fi

# wipe target disk
wipefs -a /dev/$PARTDRIVE
# create new part table on targer disk
parted /dev/$PARTDRIVE mklabel gpt
# create partitions on efi machines
if [ "$TESTEFI" != "" ]; then
	# efi part 300MB
	parted /dev/$PARTDRIVE mkpart P1 fat32 1MB 316MB
	PARTEFINUM="P1"
	# swap part 1GB
	parted /dev/$PARTDRIVE mkpart P2 linux-swap 317MB 1341MB
	PARTSWAPNUM="P2"
	# root part all the rest
	parted /dev/$PARTDRIVE mkpart P3 ext4 1342MB 100%
	PARTROOTNUM="P3"
	# set boot on part 1
	parted /dev/$PARTDRIVE set 1 esp on
else
# create partitions on non-efi machines
	# swap part 1GB
	parted /dev/$PARTDRIVE mkpart P1 linux-swap 1MB 1030MB
	PARTSWAPNUM="P1"
	# root part all the rest
	parted /dev/$PARTDRIVE mkpart P2 ext4 1031MB 100%
	PARTROOTNUM="P2"
	# set boot on part 2
	#parted /dev/$PARTDRIVE set 2 boot on
fi

# set efi part
if [ "$TESTEFI" != "" ]; then
	TARGETEFI=`blkid | grep $PARTDRIVE | grep -v "loop" | grep -v "sr0" | grep $PARTEFINUM | awk '{print $1}' | cut -f3 -d"/" | grep "[0-9]" | cut -f1 -d":"`
	TARGETEFI="$TARGETEFI:"
	FORMATEFIPART="formatefi"
fi

# set swap part
TARGETSWAP=`blkid | grep $PARTDRIVE | grep -v "loop" | grep -v "sr0" | grep $PARTSWAPNUM | awk '{print $1}' | cut -f3 -d"/" | grep "[0-9]" | cut -f1 -d":"`
SWAP="$TARGETSWAP:"

# set root part
TARGETPART=`blkid | grep $PARTDRIVE | grep -v "loop" | grep -v "sr0" | grep $PARTROOTNUM | awk '{print $1}' | cut -f3 -d"/" | grep "[0-9]" | cut -f1 -d":"`
TARGETPART="$TARGETPART:"
FSTYPE="ext4"
HOMEPART="root"
BOOTPART="NoBoot"

fixsetmenu

}

manualpartitionmenu () {

$PARTITIONPROG /dev/$PARTDRIVE

efipartitionmenu

}

efipartitionmenu () {

# find a partiton for efi image

if [ "$TESTEFI" = "" ]; then
swappartitionmenu
fi

if [ "$TESTEFI" != "" ]; then
	PARTEFI=`blkid | grep -v "loop" | grep -v "sr0" | awk '{print $1}' | cut -f3 -d"/" | grep "[0-9]" | cut -f1 -d":"`
	for i in $PARTEFI; do
		efipart="$i"
		efipartsize=`grep -m 1 "$i" /proc/partitions | awk '{print $3}'`
		efipartmenu="$efipartmenu $efipart $efipartsize"
	done
	
	$DIALOG $TITLE"$TITLETEXT" $MENU $TEXT"$LOCAL23\n$LOCAL24" $HEIGHT $WIDTH $MENUHEIGHT Exit "$LOCAL21" $efipartmenu 2>/tmp/choice.$$

	if [ "$?" = "0" ]; then
		TARGETEFI=`cat /tmp/choice.$$`
		TARGETEFI="$TARGETEFI:"
	else
		TARGETEFI="Exit"
	fi

	rm /tmp/choice.$$

	if [ "$TARGETEFI" = "Exit" ]; then
		$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL22" $HEIGHT $WIDTH
		exit 1
	fi

	#format the efi partition?
	$DIALOG $TITLE"$TITLETEXT" $MENU $TEXT"$LOCAL25" $HEIGHT $WIDTH $MENUHEIGHT noformatefi "$LOCAL26" formatefi "$LOCAL27" 2>/tmp/choice.$$

	if [ "$?" = "0" ]; then
		FORMATEFIPART=`cat /tmp/choice.$$`
	else
		FORMATEFIPART="formatefi"
	fi

	rm /tmp/choice.$$
fi

swappartitionmenu

}

swappartitionmenu () {

# find the swap partition
if [ "$TARGETEFI" != "" ]; then
	TARGETSWAP=`blkid | grep -v "loop" | grep -v "sr0" | awk '{print $1}' | cut -f3 -d"/" | grep "[0-9]" | grep -v "$TARGETEFI" | cut -f1 -d":"`
else
	TARGETSWAP=`blkid | grep -v "loop" | grep -v "sr0" | awk '{print $1}' | cut -f3 -d"/" | grep "[0-9]" | cut -f1 -d":"`
fi
for i in $TARGETSWAP; do
	swappart="$i"
	swappartsize=`grep -m 1 "$i" /proc/partitions | awk '{print $3}'`
	swappartmenu="$swappartmenu $swappart $swappartsize"
done

$DIALOG $TITLE"$TITLETEXT" $MENU $TEXT"$LOCAL28\n$LOCAL29" $HEIGHT $WIDTH $MENUHEIGHT Exit "$LOCAL21" $swappartmenu NoSwap "$LOCAL131" 2>/tmp/choice.$$
if [ "$?" = "0" ]; then
	SWAP=`cat /tmp/choice.$$`
	SWAP="$SWAP:"
else
	SWAP="Exit"
fi

rm /tmp/choice.$$

if [ "$SWAP" = "Exit" ]; then
	$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL22" $HEIGHT $WIDTH
	exit 1
fi

rootpartitionmenu

}

rootpartitionmenu () {

# choose the root partition to install to
if [ "$TARGETEFI" != "" ]; then
	PARTITIONS=`blkid | grep -v "loop" | grep -v "sr0" | awk '{print $1}' | cut -f3 -d"/" | grep "[0-9]" | grep -v "$TARGETEFI" | grep -v "$SWAP" | cut -f1 -d":"`
else
	PARTITIONS=`blkid | grep -v "loop" | grep -v "sr0" | awk '{print $1}' | cut -f3 -d"/" | grep "[0-9]" | grep -v "$SWAP" | cut -f1 -d":"`
fi
PARTINST=`echo $PARTITIONS`

for i in $PARTITIONS; do
	part="$i"
	partsize=`grep -m 1 "$i" /proc/partitions | awk '{print $3}'`
	partmenu="$partmenu $part $partsize"
done

$DIALOG $TITLE"$TITLETEXT" $MENU $TEXT"$LOCAL30\n$LOCAL31" $HEIGHT $WIDTH $MENUHEIGHT Exit "$LOCAL21" $partmenu 2>/tmp/choice.$$

if [ "$?" = "0" ]; then
	TARGETPART=`cat /tmp/choice.$$`
	TARGETPART="$TARGETPART:"
else
	TARGETPART="Exit"
fi

rm /tmp/choice.$$

if [ "$TARGETPART" = "Exit" ]; then
	$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL22" $HEIGHT $WIDTH
	exit 1
fi

# choose filesystem type to root partition
$DIALOG $TITLE"$TITLETEXT" $MENU $TEXT"$LOCAL32" $HEIGHT $WIDTH $MENUHEIGHT btrfs "Btrfs $LOCAL33" ext4 "Ext4 $LOCAL33" xfs "Xfs $LOCAL33" 2>/tmp/choice.$$

if [ "$?" = "0" ]; then
	FSTYPE=`cat /tmp/choice.$$`
else
	FSTYPE="ext4"
fi

rm /tmp/choice.$$

homepartitionmenu

}

homepartitionmenu () {

# choose home partition
if [ "$TARGETEFI" != "" ]; then
	HOMEINST=`blkid | grep -v "loop" | grep -v "sr0" | awk '{print $1}' | cut -f3 -d"/" | grep "[0-9]" | grep -v "$TARGETEFI" | grep -v "$SWAP" | grep -v "$TARGETPART" | cut -f1 -d":"`
else
	HOMEINST=`blkid | grep -v "loop" | grep -v "sr0" | awk '{print $1}' | cut -f3 -d"/" | grep "[0-9]" | grep -v "$SWAP" | grep -v "$TARGETPART" | cut -f1 -d":"`
fi

for i in $HOMEINST; do
	homepart="$i"
	homepartsize=`grep -m 1 "$i" /proc/partitions | awk '{print $3}'`
	homepartmenu="$homepartmenu $homepart $homepartsize"
done

$DIALOG $TITLE"$TITLETEXT" $MENU $TEXT"$LOCAL34\n$LOCAL35" $HEIGHT $WIDTH $MENUHEIGHT root "$LOCAL36" $homepartmenu 2>/tmp/choice.$$

if [ "$?" = "0" ]; then
	HOMEPART=`cat /tmp/choice.$$`
else
	HOMEPART="root"
fi

rm /tmp/choice.$$

askencryptmenu 

}

askencryptmenu () {

# ask for home part encrypting
if [ "$HOMEPART" != "root" ]; then
	$DIALOG $TITLE"$TITLETEXT" $YESNO $TEXT"$LOCAL145" $HEIGHT $WIDTH
	if [ $? != 0 ]; then
		ENCRYPTASK="NO"
		echo "ENCRYPT ASK = NO"
		#mkdir -p /tmp
		touch /tmp/sparky-noencrypt
		filehomepartitionmenu
	else
		ENCRYPTASK="YES"
		echo "ENCRYPT ASK = YES"
		encryptpassmenu
	fi
fi

encryptpassmenu

}

encryptpassmenu () {
if [ "$HOMEPART" != "root" ]; then
# encrypt password entry section
ENCRYPTPASS="1"
ENCRYPTPASS2="2"

while [ "$ENCRYPTPASS" != "$ENCRYPTPASS2" ]; do

	$DIALOG $TITLE"$TITLETEXT" $PASSWORD $TEXT"$LOCAL146." $HEIGHT $WIDTH 2>/tmp/choice.$$
	if [ "$?" = "0" ]; then
		ENCRYPTPASS=`cat /tmp/choice.$$`
		#ENCRYPTKEYFILE="$ENCRYPTPASS"
	else
		exit 1
	fi

	rm /tmp/choice.$$

	$DIALOG $TITLE"$TITLETEXT" $PASSWORD $TEXT"$LOCAL146 $LOCAL46" $HEIGHT $WIDTH 2>/tmp/choice.$$
	if [ "$?" = "0" ]; then
		ENCRYPTPASS2=`cat /tmp/choice.$$`
	else
		exit 1
	fi

	rm /tmp/choice.$$
	if [ "$ENCRYPTPASS" != "$ENCRYPTPASS2" ]; then
		$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL47" $HEIGHT $WIDTH
	fi

done

rm /tmp/choice.$$
fi
nofilehomepartitionmenu

}

nofilehomepartitionmenu () {

# choose file system to home partition
if [ "$HOMEPART" != "root" ]; then
	$DIALOG $TITLE"$TITLETEXT" $MENU $TEXT"$LOCAL37" $HEIGHT $WIDTH $MENUHEIGHT btrfs "Btrfs $LOCAL33" ext4 "Ext4 $LOCAL33" xfs "Xfs $LOCAL33" 2>/tmp/choice.$$

	if [ "$?" = "0" ]; then
		HFSTYPE=`cat /tmp/choice.$$`
	else
		HFSTYPE="ext4"
	fi

	rm /tmp/choice.$$

fi

bootpartitionmenu

}

filehomepartitionmenu () {

# choose file system to home partition
if [ "$HOMEPART" != "root" ]; then
	$DIALOG $TITLE"$TITLETEXT" $MENU $TEXT"$LOCAL37" $HEIGHT $WIDTH $MENUHEIGHT noformat "$LOCAL38" btrfs "Btrfs $LOCAL33" ext4 "Ext4 $LOCAL33" xfs "Xfs $LOCAL33" 2>/tmp/choice.$$

	if [ "$?" = "0" ]; then
		HFSTYPE=`cat /tmp/choice.$$`
	else
		HFSTYPE="ext4"
	fi

	rm /tmp/choice.$$

fi

bootpartitionmenu

}

bootpartitionmenu () {

# choose boot partition
if [ "$TARGETEFI" != "" ]; then
	BOOTINST=`blkid | grep -v "loop" | grep -v "sr0" | awk '{print $1}' | cut -f3 -d"/" | grep "[0-9]" | grep -v "$TARGETEFI" | grep -v "$SWAP" | grep -v "$TARGETPART" | grep -v "$HOMEPART" | cut -f1 -d":"`
else
	BOOTINST=`blkid | grep -v "loop" | grep -v "sr0" | awk '{print $1}' | cut -f3 -d"/" | grep "[0-9]" | grep -v "$SWAP" | grep -v "$TARGETPART" | grep -v "$HOMEPART" | cut -f1 -d":"`
fi

for i in $BOOTINST; do
	bootpart="$i"
	bootpartsize=`grep -m 1 "$i" /proc/partitions | awk '{print $3}'`
	bootpartmenu="$bootpartmenu $bootpart $bootpartsize"
done

$DIALOG $TITLE"$TITLETEXT" $MENU $TEXT"$LOCAL132" $HEIGHT $WIDTH $MENUHEIGHT NoBoot "$LOCAL134" $bootpartmenu 2>/tmp/choice.$$

if [ "$?" = "0" ]; then
	BOOTPART=`cat /tmp/choice.$$`
	BOOTFSTYPE="ext4"
else
	BOOTPART="NoBoot"
fi

rm /tmp/choice.$$

fixsetmenu

}

fixsetmenu () {

# set partitions with no ":"
if [ "$TESTEFI" != "" ]; then
	TARGETEFI=`echo $TARGETEFI | cut -f1 -d":"`
fi

if [ "$SWAP" != "NoSwap" ]; then
	SWAP=`echo $SWAP | cut -f1 -d":"`
	TARGETPART=`echo $TARGETPART | cut -f1 -d":"`
fi

usermenu

}

usermenu () {

# username input secton
$DIALOG $TITLE"$TITLETEXT" $ENTRY $TEXT"$LOCAL42" $HEIGHT $WIDTH 2>/tmp/choice.$$
if [ "$?" = "0" ]; then
	TARGETUSERFULLNAME=`cat /tmp/choice.$$`
else
	exit 1
fi

rm /tmp/choice.$$

$DIALOG $TITLE"$TITLETEXT" $ENTRY $TEXT"$LOCAL43\n$LOCAL44" $HEIGHT $WIDTH 2>/tmp/choice.$$
if [ "$?" = "0" ]; then
	TARGETUSER=`cat /tmp/choice.$$`
else
	exit 1
fi

rm /tmp/choice.$$

# make sure its all lowercase just in case
TARGETUSER="`echo $TARGETUSER | awk '{print tolower ($0)}'`"

# user password entry section
TARGETPASS="1"
TARGETPASS2="2"

while [ "$TARGETPASS" != "$TARGETPASS2" ]; do

	$DIALOG $TITLE"$TITLETEXT" $PASSWORD $TEXT"$LOCAL45 $TARGETUSER." $HEIGHT $WIDTH 2>/tmp/choice.$$
	if [ "$?" = "0" ]; then
		TARGETPASS=`cat /tmp/choice.$$`
	else
		exit 1
	fi

	rm /tmp/choice.$$

	$DIALOG $TITLE"$TITLETEXT" $PASSWORD $TEXT"$LOCAL45 $TARGETUSER $LOCAL46" $HEIGHT $WIDTH 2>/tmp/choice.$$
	if [ "$?" = "0" ]; then
		TARGETPASS2=`cat /tmp/choice.$$`
	else
		exit 1
	fi

	rm /tmp/choice.$$
	if [ "$TARGETPASS" != "$TARGETPASS2" ]; then
		$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL47" $HEIGHT $WIDTH
	fi

done

rm /tmp/choice.$$

rootpassmenu

}

rootpassmenu () {

if [ "$PARTWAY" = "Auto" ]; then
	TARGETROOTPASS=$TARGETPASS
	hostmenu
fi

# ask for root password: separated or use the user one
$DIALOG $TITLE"$TITLETEXT" $MENU $TEXT"$LOCAL136" $HEIGHT $WIDTH $MENUHEIGHT YesRoot "$LOCAL137" NoRoot "$LOCAL138" 2>/tmp/choice.$$
if [ "$?" = "0" ]; then
	NEWROOTPASS=`cat /tmp/choice.$$`
else
	exit 1
fi
rm /tmp/choice.$$
	
if [ "$NEWROOTPASS" = "NoRoot" ]; then
	TARGETROOTPASS=$TARGETPASS
	hostmenu
fi

# root password entry section
TARGETROOTPASS="1"
TARGETROOTPASS2="2"

while [ "$TARGETROOTPASS" != "$TARGETROOTPASS2" ]; do
	
$DIALOG $TITLE"$TITLETEXT" $PASSWORD $TEXT"$LOCAL39" $HEIGHT $WIDTH 2>/tmp/choice.$$
if [ "$?" = "0" ]; then
	TARGETROOTPASS=`cat /tmp/choice.$$`
else
	exit 1
fi

rm /tmp/choice.$$
	
$DIALOG $TITLE"$TITLETEXT" $PASSWORD $TEXT"$LOCAL40" $HEIGHT $WIDTH 2>/tmp/choice.$$
if [ "$?" = "0" ]; then
	TARGETROOTPASS2=`cat /tmp/choice.$$`
else
	exit 1
fi

rm /tmp/choice.$$

if [ "$TARGETROOTPASS" != "$TARGETROOTPASS2" ]; then
	$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL41" $HEIGHT $WIDTH
fi

done

rm /tmp/choice.$$
	
hostmenu

}

hostmenu () {

if [ "$PARTWAY" = "Auto" ]; then
	TARGETHOSTNAME="sparky"
	grubmenu
fi

# hostname setup
$DIALOG $TITLE"$TITLETEXT" $ENTRY $TEXT"$LOCAL65\n$LOCAL66" $HEIGHT $WIDTH 2>/tmp/choice.$$
if [ "$?" = "0" ]; then
	TARGETHOSTNAME=`cat /tmp/choice.$$`
else
	exit 1
fi

rm /tmp/choice.$$

grubmenu

}

grubmenu () {

if [ "$PARTWAY" = "Auto" ]; then
	GRUBLOCTEXT="$LOCAL74 $TARGETPART"
	GRUBLOC="/dev/$PARTDRIVE"
	setmenu
fi

# Blank the array in case this function is being rerun
GrubMenu=()
Drives=$(lsblk -l | egrep -v "NAME|loop|rom|live" | awk '{print $1}')

for i in $Drives; do
	PartDrive="$i"

	if [ "$(echo "$PartDrive" | grep [0-9] )" = "" ]; then
		GrubMenu=("${GrubMenu[@]}" "$PartDrive" "$LOCAL67")
	fi
done

GrubMenu=( "${GrubMenu[@]}" "root" "$LOCAL68" "rootmbr" "$LOCAL69" "nogrub" "$LOCAL70")

# grub location
$DIALOG $TITLE"$TITLETEXT" $MENU $TEXT"$LOCAL71\n" $HEIGHT $WIDTH $MENUHEIGHT "${GrubMenu[@]}" 2>/tmp/choice.$$

if [ "$?" = "0" ]; then
	GRUBLOCTEST=`cat /tmp/choice.$$`
fi

rm /tmp/choice.$$

if [ "$GRUBLOCTEST" = "nogrub" ]; then
	GRUBLOCTEXT="$LOCAL72"
elif [ "$GRUBLOCTEST" = "root" ]; then
	GRUBLOCTEXT="$LOCAL73 $TARGETPART"
	GRUBLOC="/dev/$TARGETPART"
elif [ "$GRUBLOCTEST" = "rootmbr" ]; then
	GRUBLOCTEXT="$LOCAL74 $TARGETPART"
	GRUBLOC="/dev/$PARTDRIVE"
elif [ "$GRUBLOCTEST" = "" ]; then
	grubmenu
	exit 0
else
	GRUBLOCTEXT="$LOCAL75 $GRUBLOCTEST"
	GRUBLOC="/dev/$GRUBLOCTEST"
fi

# set grub delay
if [ "$GRUBLOCTEST" != "nogrub" ]; then
	$DIALOG $TITLE"$TITLETEXT" $MENU $TEXT"$LOCAL123\n" $HEIGHT $WIDTH $MENUHEIGHT 5 "5 sec $LOCAL124" 10 "10 sec" 20 "20 sec" 30 "30 sec" No "0 sec $LOCAL125" 2>/tmp/choice.$$

	if [ "$?" = "0" ]; then
		SETDELAY=`cat /tmp/choice.$$`
	else
		SETDELAY="5"
	fi
	rm /tmp/choice.$$
fi

setmenu

}
	
setmenu () {

# Timezone setting
$DIALOG $TITLE"$TITLETEXT" $YESNO $TEXT"$LOCAL76\n\n$LOCAL77" $HEIGHT $WIDTH
if [ $? = 0 ]; then
	if [ "$(grep "UTC" /etc/adjtime)" != "" ]; then
		sed -i -e "s|UTC|LOCALTIME|g" /etc/adjtime
	fi
else
	if [ "$(grep "LOCALTIME" /etc/adjtime)" != "" ]; then
		sed -i -e "s|LOCALTIME|UTC|g" /etc/adjtime
	fi
fi

cat /usr/share/zoneinfo/zone.tab | awk '{print $3}' | grep "/" | sort > /tmp/sparkylinux-installer.zoneinfo
for i in `cat /tmp/sparkylinux-installer.zoneinfo`; do
	ZONES="$ZONES $i Timezone"
done

rm /tmp/sparkylinux-installer.zoneinfo

$DIALOG $TITLE"$TITLETEXT" $MENU $TEXT"$LOCAL78" $HEIGHT $WIDTH $MENUHEIGHT Exit "$LOCAL21" $ZONES 2>/tmp/choice.$$
if [ "$?" = "0" ]; then
	ZONESINFO=`cat /tmp/choice.$$`
else
	ZONESINFO="Exit"
fi

rm /tmp/choice.$$

if [ "$ZONESINFO" = "Exit" ]; then
	$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL22" $HEIGHT $WIDTH
	exit 1
fi
echo "$ZONESINFO" > /etc/timezone
cp /usr/share/zoneinfo/$ZONESINFO /etc/localtime

fixmenu

}

fixmenu () {

if [ "$HOMEPART" != "root" ]; then
	HOMETEXT=", $HOMEPART $LOCAL79 $HFSTYPE $LOCAL80 /home "
fi

if [ "$HFSTYPE" = "noformat" ]; then
	HOMETEXT=", $HOMEPART $LOCAL81 \n/home "
fi

$DIALOG $TITLE"$TITLETEXT" $YESNO $TEXT"$LOCAL82\n\n$LOCAL83 $TARGETUSER $LOCAL84 $FSTYPE $LOCAL85 $TARGETPART $LOCAL86 $HOMETEXT $LOCAL87 $GRUBLOCTEXT.\n\n$LOCAL89" $HEIGHT $WIDTH
if [ $? != 0 ]; then
	exit 0
fi

swappartmenu

}

########## END SETTINGS ##########

########## install to hd section ##########

swappartmenu () {

# preper swap
if [ "$PARTWAY" = "Auto" ]; then
	mkswap /dev/$SWAP
	swapon /dev/$SWAP
	rootpartmenu
fi

if [ "$SWAP" = "NoSwap" ]; then
	echo "No SWAP choosen"
	rootpartmenu
elif [ "$SWAP" != "NoSwap" ]; then
	sleep 1
	echo "$LOCAL90 $LOCAL91 ... $LOCAL92 ..."
	CHECKSWAP=`blkid | grep $SWAP: | awk '{print $3}' | cut -f2 -d"=" | sed -e 's/"//g'`
	
	# do not format swap if exist, use it only
	if [ "$CHECKSWAP" = "swap" ]; then
		swapon /dev/$SWAP

	# format swap if the chosen partition is not swap
	else
		mkswap /dev/$SWAP
		swapon /dev/$SWAP
	fi
	rootpartmenu
fi

}

rootpartmenu () {

# preper root partition
echo "$LOCAL93 $TARGETPART $LOCAL86 $LOCAL91 ... $LOCAL92 ..."

# make the filesystem and mount the partition on /TARGET
if [ "`mount | grep $TARGETPART`" ]; then
	echo "$LOCAL94"
	umount /dev/$TARGETPART
fi

# root auto partitioning
if [ "$PARTWAY" = "Auto" ]; then
	#mke2fs -t $FSTYPE -F /dev/$TARGETPART
	mkfs.ext4 -m 0 -F /dev/$TARGETPART
	#mkdir -p /TARGET
	sleep 2
	echo "$LOCAL95"
	mount /dev/$TARGETPART /TARGET -o rw
	sleep 2
	echo "$LOCAL96"
	tune2fs -c 0 -i 0 /dev/$TARGETPART 
	rm -rf "/TARGET/lost+found"
	efipartmenu
fi

# root manual partitioning
if [ "$FSTYPE" = "ext4" ]; then
	#mke2fs -t $FSTYPE -F /dev/$TARGETPART
	mkfs.ext4 -m 0 -F /dev/$TARGETPART
	#mkdir -p /TARGET
	sleep 2
	echo "$LOCAL95"
	mount /dev/$TARGETPART /TARGET -o rw
	sleep 2
	echo "$LOCAL96"
	tune2fs -c 0 -i 0 /dev/$TARGETPART 
	rm -rf "/TARGET/lost+found"
	homepartmenu
elif [ "$FSTYPE" = "btrfs" ]; then
	mkfs.btrfs -f /dev/$TARGETPART
	sleep 2
	mount -o rw /dev/$TARGETPART /mnt
	# Create subvolume
	btrfs subvolume create /mnt/@
	# Mount the subvolume
	sleep 2
	echo "$LOCAL95"
	#mkdir -p /TARGET
	mount -t btrfs -o subvol=@,defaults,nodatacow /dev/$TARGETPART /TARGET
	if [ "$HOMEPART" = "root" ]; then
		btrfs subvolume create /mnt/@home
		mkdir -p /TARGET/home
		mount -t btrfs -o subvol=@home,defaults,nodatacow /dev/$TARGETPART /TARGET/home
	fi
	rm -rf "/TARGET/lost+found"
	homepartmenu
elif [ "$FSTYPE" = "xfs" ]; then
	mkfs.xfs -f /dev/$TARGETPART
	#mkdir -p /TARGET
	sleep 2
	echo "$LOCAL95"
	mount /dev/$TARGETPART /TARGET -o rw
	rm -rf "/TARGET/lost+found"
	homepartmenu
fi

}

homepartmenu () {

if [ "$ENCRYPTASK" = "YES" ]; then
encrypthomepartmenu
else
nonencrypthomepartmenu
fi

}

encrypthomepartmenu () {

# home part encrypt luks2 formating
if [ "`mount | grep $HOMEPART`" ]; then
	echo "$LOCAL94"
	umount /dev/$HOMEPART
fi
echo "formatting encrypted partition..."
echo $ENCRYPTPASS | cryptsetup luksFormat --type luks2 -l ${#ENCRYPTPASS} -q -d - /dev/$HOMEPART
# create keyfile
# echo $ENCRYPTPASS | cryptsetup luksAddKey /dev/$HOMEPART /etc/keys/$ENCRYPTKEYFILE -l ${#ENCRYPTPASS} -q -d -
# open it
echo "opening encrypted partition..."
echo $ENCRYPTPASS | cryptsetup luksOpen /dev/$HOMEPART sparky_home -l ${#ENCRYPTPASS} -d -
# format it
if [ "$HFSTYPE" = "ext4" ]; then
	#mke2fs -t $HFSTYPE -F /dev/mapper/sparky_home
	echo "formatting encrypted partition as ext4 file system..."
	mkfs.ext4 -m 0 /dev/mapper/sparky_home
elif [ "$HFSTYPE" = "btrfs" ]; then
echo "formatting encrypted partition as btrfs file system..."
	mkfs.btrfs -f /dev/mapper/sparky_home		
elif [ "$HFSTYPE" = "xfs" ]; then
	echo "formatting encrypted partition as xfs file system..."
	mkfs.xfs -f /dev/mapper/sparky_home
else
	# if choosen noformat -> use ext4, can not be noformatted
	HFSTYPE="ext4"
	echo "formatting encrypted partition as ext4 file system..."
	mkfs.ext4 -m 0 /dev/mapper/sparky_home
fi
# mount
echo "$LOCAL97"
mkdir -p /TARGET/home
if [ "$HFSTYPE" = "ext4" ]; then
	echo "mounting encrypted partition with ext4 file system..."
	mount /dev/mapper/sparky_home /TARGET/home -o rw
	#tune2fs -c 0 -i 0 /dev/mapper/sparky_home
elif [ "$HFSTYPE" = "btrfs" ]; then
	echo "mounting encrypted partition with btrfs file system..."
	mount /dev/mapper/sparky_home /TARGET/home -o rw
elif [ "$HFSTYPE" = "xfs" ]; then
	echo "mounting encrypted partition with xfs file system..."
	mount /dev/mapper/sparky_home /TARGET/home -o rw
else
	# if choosen noformat -> use ext4, can not be noformatted
	echo "mounting encrypted partition with ext4 file system..."
	mount /dev/mapper/sparky_home /TARGET/home -o rw
	#tune2fs -c 0 -i 0 /dev/mapper/sparky_home
fi
rm -rf "/TARGET/home/lost+found"
sleep 1
		
bootpartmenu

}

nonencrypthomepartmenu () {

# make /home partition
if [ "$HOMEPART" != "root" ]; then
	# home part mount and format
	if [ "$HFSTYPE" != "noformat" ]; then
		echo "$LOCAL93 $HOMEPART $LOCAL86 $LOCAL91 ... $LOCAL92 ..."

		if [ "`mount | grep $HOMEPART`" ]; then
			echo "$LOCAL94"
			umount /dev/$HOMEPART
		fi

		if [ "$HFSTYPE" = "ext4" ]; then
			mke2fs -t $HFSTYPE -F /dev/$HOMEPART
		elif [ "$HFSTYPE" = "btrfs" ]; then
			mkfs.btrfs -f /dev/$HOMEPART			
		elif [ "$HFSTYPE" = "xfs" ]; then
			mkfs.xfs -f /dev/$HOMEPART
		fi
	elif [ "$HFSTYPE" = "noformat" ]; then
		HFSTYPE=`blkid | grep $HOMEPART: | awk '{print $3}' | cut -f2 -d"=" | sed -e 's/"//g'`
	fi

	echo "$LOCAL97"
	mkdir -p /TARGET/home
	if [ "$HFSTYPE" = "ext4" ]; then
		mount /dev/$HOMEPART /TARGET/home -o rw
		tune2fs -c 0 -i 0 /dev/$HOMEPART
	elif [ "$HFSTYPE" = "btrfs" ]; then
		mount /dev/$HOMEPART /TARGET/home -o rw
	elif [ "$HFSTYPE" = "xfs" ]; then
		mount /dev/$HOMEPART /TARGET/home -o rw
	fi
	rm -rf "/TARGET/home/lost+found"
	sleep 1

	# Get fs type for home partition in case the user chose not to format
	if [ "$HFSTYPE" = "noformat" ]; then
		HFSTYPE=`mount | grep "/dev/$HOMEPART" | awk '{print $5}'`
	fi
fi

bootpartmenu

}

bootpartmenu () {

# make /boot partition if separated
if [ "$BOOTPART" != "NoBoot" ]; then
	if [ "`mount | grep $BOOTPART`" ]; then
		echo "$LOCAL94"
		umount /dev/$BOOTPART
	fi
	mke2fs -t ext4 -F /dev/$BOOTPART
	echo "$LOCAL135"
	mkdir -p /TARGET/boot
	mount /dev/$BOOTPART /TARGET/boot -o rw
	rm -rf "/TARGET/boot/lost+found"
	sleep 1
fi

efipartmenu

}

efipartmenu () {

if [ "$TESTEFI" != "" ]; then
	if [ "$FORMATEFIPART" = "formatefi" ]; then
		if [ "`mount | grep $TARGETEFI`" ]; then
			echo "$LOCAL98 ..."
			umount /dev/$TARGETEFI
		fi
		
		mkfs.fat -F32 -v /dev/$TARGETEFI
	fi

	echo "$LOCAL99 /dev/$TARGETEFI $LOCAL100 /TARGET/boot/efi $LOCAL91 ..."

	if [ ! -d /TARGET/boot/efi ]; then
		mkdir -p /TARGET/boot/efi
	fi

	mount -t vfat /dev/$TARGETEFI /TARGET/boot/efi

fi

logmenu

}

# get the cdrom device for fstab, I dont think its required any more???
TARGETCDROM="/dev/cdrom"
sleep 1

logmenu () {

cat > /var/log/sparkylinux-installer.log <<FOO
==============================================================
Sparky Advanced Installer log
==============================================================
DATE=`date '+%F'`
KERNEL=`uname -r`
RAMTOTAL=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'`
SWAPTOTAL=`cat /proc/meminfo | grep SwapTotal | awk '{print $2}'`
AUTODISKSIZE=$DISKSIZE
TESTEFI=$TESTEFI
LIVELOCALE=`locale | grep 'LANG=' | cut -d= -f2`
TARGETLOCALE=en
SCRIPTVERSION=`cat /etc/sparkybackup/sparkybackup.version`
LIVEISOIMAGE=$CHECKISOVER
TARGETUSERGROUPS=`cat /etc/sparkybackup/sparkylinux-installer.conf | grep DEFAULTGROUPS`
TARGETGRUBOPT=`cat /etc/sparkybackup/sparkylinux-installer.conf | grep NewGrubDefLine`
LIVEMODE=DIST
TARGETUSER=$TARGETUSER
TARGETHOSTNAME=$TARGETHOSTNAME
SWAP=$SWAP
TARGETPART=$TARGETPART
FSTYPE=$FSTYPE
HOMEPART=$HOMEPART
TARGETEFI=$TARGETEFI
FORMATEFIPART=$FORMATEFIPART
HFSTYPE=$HFSTYPE
GRUBLOC=$GRUBLOC
BOOTPART=$BOOTPART
BOOTFSTYOE=$BOOTFSTYPE
ENCRYPTASK=$ENCRYPTASK
FOO

echo "==============================================================" >> /var/log/sparkylinux-installer.log
echo "MOUNTS" >> /var/log/sparkylinux-installer.log
echo "==============================================================" >> /var/log/sparkylinux-installer.log
mount >> /var/log/sparkylinux-installer.log
echo "==============================================================" >> /var/log/sparkylinux-installer.log
echo "FDISK listing" >> /var/log/sparkylinux-installer.log
echo "==============================================================" >> /var/log/sparkylinux-installer.log
fdisk -l >> /var/log/sparkylinux-installer.log
echo "==============================================================" >> /var/log/sparkylinux-installer.log
echo "live config listing" >> /var/log/sparkylinux-installer.log
echo "==============================================================" >> /var/log/sparkylinux-installer.log
cat /etc/live/config.conf >> /var/log/sparkylinux-installer.log
echo "==============================================================" >> /var/log/sparkylinux-installer.log

copymenu

}

copymenu () {

# copy the live system to the hd
echo "$LOCAL101 ... $LOCAL92 ..."

if [ "$HFSTYPE" = "noformat" ]; then
	rsync -a -h --info=progress2 --no-inc-recursive / /TARGET --ignore-existing --exclude=/{TARGET,home,live,cdrom,mnt,proc,run,sys,media,lib/live/mount}
else
	rsync -a -h --info=progress2 --no-inc-recursive / /TARGET --ignore-existing --exclude=/{TARGET,live,cdrom,mnt,proc,run,sys,media,lib/live/mount}
fi

mkdir -p /TARGET/{proc,mnt,run,sys,media/cdrom}

echo "$LOCAL102"

postinstallmenu

}

postinstallmenu () {

echo "$LOCAL103 ... $LOCAL92 ..."

# prepare the chroot environment for some post install changes
mount -o bind /proc /TARGET/proc
mount -o bind /dev /TARGET/dev
mount -o bind /dev/shm /TARGET/dev/shm
mount -o bind /dev/pts /TARGET/dev/pts
mount -o bind /sys /TARGET/sys
mount -o bind /run /TARGET/run
if [ -d /sys/firmware/efi/efivars ]; then
	mount -B /sys/firmware/efi/efivars /TARGET/sys/firmware/efi/efivars
fi
rm -f /TARGET/etc/fstab
rm -f /TARGET/etc/profile.d/zz-live.sh
mv /TARGET/etc/resolv.conf /TARGET/etc/resolv.conf.bak
cp -f /etc/resolv.conf /TARGET/etc/resolv.conf

# install grub-efi if needed
if [ "$TESTEFI" != "" ]; then
	mv /TARGET/usr/sbin/grub-probe /TARGET/usr/sbin/grub-probe.bak
	echo "exit 0" > /TARGET/usr/sbin/grub-probe
	chmod +x /TARGET/usr/sbin/grub-probe
	mkdir -p /TARGET/debs
	mkdir -p /TARGET/boot/efi/EFI/sparky
	#if [ -d /lib/live/mount/medium/offline ]; then
	#	cp /lib/live/mount/medium/offline/* /TARGET/debs/
	if [ -d /run/live/medium/offline ]; then
		cp /run/live/medium/offline/* /TARGET/debs/
	fi
	
cat > /TARGET/tmp/efi-install << FOO
#!/bin/bash
CHECKDEBSEFI=`ls /debs | grep .deb`
if [ -f "$CHECKDEBSEFI" != "" ]; then
dpkg -i /debs/*.deb
else
# try to install efi debs from debian server
apt update && apt install -y efibootmgr grub-efi grub-efi-amd64 grub-efi-amd64-bin libefivar1t64 libefiboot1t64
fi
apt autoremove -y
FOO
	chmod +x /TARGET/tmp/efi-install
	echo "Installing grub-efi"
	chroot /TARGET /tmp/efi-install
	rm -f /TARGET/tmp/efi-install
	rm -rf /TARGET/debs
	rm -f /TARGET/usr/sbin/grub-probe
	mv /TARGET/usr/sbin/grub-probe.bak /TARGET/usr/sbin/grub-probe
	if [ ! -d /TARGET/usr/share/doc/grub-efi ]; then
		echo "Installation grub-efi failed"
		echo "Installation grub-efi failed" >> /var/log/sparkylinux-installer.log
	else
		echo "Installation grub-efi ok"
		echo "Installation grub-efi ok" >> /var/log/sparkylinux-installer.log
	fi

	# install secure boot support if needed
	if [ -f /sys/firmware/efi/efivars/SecureBoot-* ]; then
		mkdir -p /TARGET/debs
		#if [ -d /lib/live/mount/medium/offlinesigned ]; then
		#	cp /lib/live/mount/medium/offlinesigned/* /TARGET/debs/
		if [ -d /run/live/medium/offlinesigned ]; then
			cp /run/live/medium/offlinesigned/* /TARGET/debs/
		fi
		
		#if [ -d /TARGET/debs ]; then
cat > /TARGET/tmp/signed-install << FOO
#!/bin/bash
CHECKDEBSEFI=`ls /debs | grep .deb`
if [ -f "$CHECKDEBSEFI" != "" ]; then
dpkg -i /debs/*.deb
else
# try to install secure boot efi debs from debian server
apt install -y fwupd fwupd-amd64-signed grub-efi-amd64-signed grub-efi-amd64-signed-template libjcat1 linux-image-amd64-signed-template mokutil shim-helpers-amd64-signed shim-helpers-amd64-signed-template shim-signed shim-signed-common shim-unsigned
fi
# try to fix missing deps
apt install -f -y
FOO

			echo "Installing secure boot support"
			echo "Installing secure boot support" >> /var/log/sparkylinux-installer.log
			chmod +x /TARGET/tmp/signed-install
			chroot /TARGET /tmp/signed-install
			rm -f /TARGET/tmp/signed-install
			rm -rf /TARGET/debs
			mkdir -p /TARGET/boot/efi/EFI/debian
			cp /TARGET/boot/efi/EFI/sparky/* /TARGET/boot/efi/EFI/debian/
			if [ ! -d /TARGET/usr/share/doc/grub-efi-amd64-signed ]; then
				echo "Installation grub-efi-amd64-signed failed"
				echo "Installation grub-efi-amd64-signed failed" >> /var/log/sparkylinux-installer.log
			else
				echo "Installation grub-efi-amd64-signed ok"
				echo "Installation grub-efi-amd64-signed ok" >> /var/log/sparkylinux-installer.log
			fi
			if [ ! -d /TARGET/usr/share/doc/mokutil ]; then
				echo "Installation mokutil failed"
				echo "Installation mokutil failed" >> /var/log/sparkylinux-installer.log
			else
				echo "Installation mokutil ok"
				echo "Installation mokutil ok" >> /var/log/sparkylinux-installer.log
			fi
			if [ ! -d /TARGET/usr/share/doc/shim-signed ]; then
				echo "Installation shim-signed failed"
				echo "Installation shim-signed failed" >> /var/log/sparkylinux-installer.log
			else
				echo "Installation shim-signed ok"
				echo "Installation shim-signed ok" >> /var/log/sparkylinux-installer.log
			fi
		#fi
	fi
fi

# create a new fstab by uuid
UUIDTARGETPART=`blkid | grep $TARGETPART: | awk '{print $2}' | cut -f2 -d"=" | sed -e 's/"//g'`
UUIDHOMEPART=`blkid | grep $HOMEPART: | awk '{print $2}' | cut -f2 -d"=" | sed -e 's/"//g'`
if [ "$SWAP" != "NoSwap" ]; then
	UUIDSWAP=`blkid | grep $SWAP: | awk '{print $2}' | cut -f2 -d"=" | sed -e 's/"//g'`
fi
UUIDTARGETEFI=`blkid | grep $TARGETEFI: | awk '{print $2}' | cut -f2 -d"=" | sed -e 's/"//g'`

# removed btrfs opts: noatime,space_cache=v2,autodefrag,
if [ "$FSTYPE" = "ext4" ]; then
	FSTABOPT="errors=remount-ro,defaults"
elif [ "$FSTYPE" = "btrfs" ]; then
	FSTABOPT="subvol=/@,defaults,compress=zstd:1"
	HFSTABOPT="subvol=/@home,defaults,compress=zstd:1"
elif [ "$FSTYPE" = "xfs" ]; then
	FSTABOPT="noatime,defaults"
fi

if [ "$HFSTYPE" = "ext4" ]; then
	HFSTABOPT="defaults"
elif [ "$HFSTYPE" = "btrfs" ]; then
	HFSTABOPT="defaults,compress=zstd:1"
elif [ "$HFSTYPE" = "xfs" ]; then
	HFSTABOPT="defaults,noatime"
fi

cat > /TARGET/etc/fstab <<FOO
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>

# root /dev/$TARGETPART
UUID=$UUIDTARGETPART	/	$FSTYPE	$FSTABOPT	0	1
# cdrom
# $TARGETCDROM	/media/cdrom0	udf,iso9660	user,noauto,exec,utf8	0	0
FOO

# add swap part
if [ "$SWAP" != "NoSwap" ]; then
	echo "# swap /dev/$SWAP" >> /TARGET/etc/fstab
	echo "UUID=$UUIDSWAP	none	swap	sw	0	0" >> /TARGET/etc/fstab
fi

# add efi part
if [ "$TESTEFI" != "" ]; then
	echo "# efi /dev/$TARGETEFI" >> /TARGET/etc/fstab
	echo "UUID=$UUIDTARGETEFI	/boot/efi	vfat	defaults	0	0" >> /TARGET/etc/fstab
fi

# add home part on root
if [ "$HOMEPART" = "root" ]; then
	if [ "$FSTYPE" = "btrfs" ]; then
		echo "# home /dev/$TARGETPART" >> /TARGET/etc/fstab
		echo "UUID=$UUIDTARGETPART	/home	$FSTYPE	$HFSTABOPT	0	2" >> /TARGET/etc/fstab
	fi
fi

# add home part on separated partition
if [ "$HOMEPART" != "root" ]; then
	echo "# home /dev/$HOMEPART" >> /TARGET/etc/fstab
	if [ "$ENCRYPTASK" = "YES" ]; then
		echo "/dev/mapper/sparky_home	/home	$HFSTYPE	$HFSTABOPT	0	2" >> /TARGET/etc/fstab
		# add entry to crypttab too
		echo "sparky_home	/dev/$HOMEPART	none	luks,timeout=30" >> /TARGET/etc/crypttab
	else
		echo "UUID=$UUIDHOMEPART	/home	$HFSTYPE	$HFSTABOPT	0	2" >> /TARGET/etc/fstab
	fi
fi

# add boot part
if [ "$BOOTPART" != "NoBoot" ]; then
	UUIDBOOTPART=`blkid | grep $BOOTPART: | awk '{print $2}' | cut -f2 -d"=" | sed -e 's/"//g'`
	echo "# boot /dev/$BOOTPART" >> /TARGET/etc/fstab
	echo "UUID=$UUIDBOOTPART	/boot	ext4	defaults	0	2" >> /TARGET/etc/fstab
fi

echo "UUIDs & FSTAB" >> /var/log/sparkylinux-installer.log
echo "==============================================================" >> /var/log/sparkylinux-installer.log
echo "GENERATED FSTAB:" >> /var/log/sparkylinux-installer.log
cat /TARGET/etc/fstab >> /var/log/sparkylinux-installer.log
echo "" >> /var/log/sparkylinux-installer.log

# remove the calamares installer desktop file 
if [ -f /TARGET/etc/skel/Desktop/calamares.desktop ]; then
	rm -f /TARGET/etc/skel/Desktop/calamares.desktop
fi

# remove diverted update-initramfs as live-initramfs makes it a dummy file when booting the livecd
if [ -f /TARGET/usr/sbin/update-initramfs.debian ]; then
	rm -f /TARGET/usr/sbin/update-initramfs
fi

# remove diverted update-notifier as it is disabled by live-config
if [ -f /TARGET/usr/lib/update-notifier/apt-check.debian ]; then
	rm -f /TARGET/usr/lib/update-notifier/apt-check
fi

# remove diverted anacron as it is disabled by live-config
if [ -f /TARGET/usr/sbin/anacron.debian ]; then
	rm -f /TARGET/usr/sbin/anacron
fi

# copy trackerd stuff as live-initramfs disables it
if [ -f /TARGET/etc/sparkybackup/tracker-applet.desktop ]; then
	mv /TARGET/etc/sparkybackup/tracker-applet.desktop /TARGET/etc/xdg/autostart/tracker-applet.desktop
fi

if [ -f /TARGET/etc/sparkybackup/trackerd.desktop.xdg ]; then
	mv /TARGET/etc/sparkybackup/trackerd.desktop.xdg /TARGET/etc/xdg/autostart/trackerd.desktop
fi

if [ -f /TARGET/etc/sparkybackup/trackerd.desktop.share ]; then
	mv /TARGET/etc/sparkybackup/trackerd.desktop.share /TARGET/usr/share/autostart/trackerd.desktop
fi

# set hostname & hosts
if [ -f /TARGET/etc/hostname ]; then
	rm -f /TARGET/etc/hostname
fi
echo "$TARGETHOSTNAME" > /TARGET/etc/hostname
echo "127.0.0.1 localhost" > /TARGET/etc/hosts
echo "127.0.0.1 $TARGETHOSTNAME" >> /TARGET/etc/hosts

# remove autologin from livecd on installed system

# gdm3 section
if [ -f /TARGET/etc/gdm3/daemon.conf ]; then
	sed -i -e 's/AutomaticLogin/#AutomaticLogin/g' /TARGET/etc/gdm3/daemon.conf
	sed -i -e 's/TimedLogin/#TimedLogin/g' /TARGET/etc/gdm3/daemon.conf
fi

# slim section
if [ -f /TARGET/etc/slim.conf ]; then
	sed -i -e 's/auto_login/#auto_login/g' /TARGET/etc/slim.conf
	sed -i -e 's/default_user/#default_user/g' /TARGET/etc/slim.conf
fi

# lxdm section
if [ -f /TARGET/etc/lxdm/lxdm.conf ]; then
	sed -i -e 's/autologin/#autologin/g' /TARGET/etc/lxdm/lxdm.conf
	sed -i -e 's/session/#session/g' /TARGET/etc/lxdm/lxdm.conf
fi

# lightdm section
if [ -f /TARGET/etc/lightdm/lightdm.conf ]; then
	sed -i -e 's/autologin-user=live/#autologin-user=/g' /TARGET/etc/lightdm/lightdm.conf
	sed -i -e 's/autologin-user-timeout=0/#autologin-user-timeout=0/g' /TARGET/etc/lightdm/lightdm.conf
fi

# sddm section
if [ -f /TARGET/etc/sddm.conf ]; then
	if [ -f /usr/share/sparky-desktop-data/kde/etc/sddm.conf ]; then
		rm -f /TARGET/etc/sddm.conf
		cp /usr/share/sparky-desktop-data/kde/etc/sddm.conf /TARGET/etc/
	else
		sed -i -e 's/User=live/User=/g' /TARGET/etc/sddm.conf
		sed -i -e 's/Session=plasma.desktop/Session=/g' /TARGET/etc/sddm.conf
	fi

	#cleanup live polkit file from new install
	rm -f /TARGET/var/lib/polkit-1/localauthority/10-vendor.d/10-live-cd.pkla

	if [ "$DEFAULTGROUPS" = "" ]; then
		DEFAULTGROUPS="audio,cdrom,dialout,floppy,video,plugdev,netdev,sudo"
	fi
fi

echo "$LOCAL117 ... $LOCAL92 ..."

cat > /TARGET/bin/newuserscript <<FOO
#!/bin/bash
echo -e "$TARGETROOTPASS\n$TARGETROOTPASS\n" | passwd root
userdel -f -r $LIVE_USERNAME
sed -i '/$LIVE_USERNAME/d' /etc/sudoers
groupadd -g 1000 $TARGETUSER
useradd -u 1000 -g 1000 -c "$TARGETUSERFULLNAME,,," -G $DEFAULTGROUPS -s /bin/bash -m $TARGETUSER
echo -e "$TARGETPASS\n$TARGETPASS\n" | passwd $TARGETUSER
FOO

chmod 755 /TARGET/bin/newuserscript
chroot /TARGET /bin/newuserscript
rm /TARGET/bin/newuserscript

desktopmenu

}

desktopmenu () {

# install your favorite desktop of your choice
if [ -f /run/live/medium/live/minimal ] || [ "$CHECKMINI" != "" ]; then
	$DIALOG $TITLE"$TITLETEXT" $YESNO $TEXT"$LOCAL104\n\n$LOCAL105\nsparky-backup-desktop $LOCAL106 sparky-desktop-data \n$LOCAL107\n\n$LOCAL108" $HEIGHT $WIDTH
	if [ $? = 0 ]; then
		DESKTOPCHOOSE="yes"
		apt-get update 
		apt-get install sparky-backup-desktop sparky-desktop-data -y
		/usr/bin/sparkylinux-desktop-installer
	else
		autologinmenu
	fi
fi

autologinmenu

}

autologinmenu () {

# autologin section; check is any sparky desktop installed
CHECKDES=`ls /TARGET/usr/share/doc | grep sparky-desktop | grep -v sparky-desktop-data`
if [ "$CHECKDES" != "" ]; then
	if [ "$PARTWAY" = "Auto" ]; then
		AUTOLOGIN="TRUE"
		finishmenu
	fi
	$DIALOG $TITLE"$TITLETEXT" $MENU $TEXT"$LOCAL126" $HEIGHT $WIDTH $MENUHEIGHT FALSE "$LOCAL128" TRUE "$LOCAL127" 2>/tmp/choice.$$
	if [ "$?" = "0" ]; then
		AUTOLOGIN=`cat /tmp/choice.$$`
		rm /tmp/choice.$$
		finishmenu
	fi
else
	AUTOLOGIN="FALSE"
	finishmenu	
fi

}

finishmenu () {

if [ "$DESKTOPCHOOSE" = "yes" ]; then
	echo "NEW DESKTOP INSTALLATION CHOSEN=yes" >> /var/log/sparkylinux-installer.log
	echo "==============================================================" >> /var/log/sparkylinux-installer.log
else
	echo "NEW DESKTOP INSTALLATION CHOSEN=no" >> /var/log/sparkylinux-installer.log
	echo "==============================================================" >> /var/log/sparkylinux-installer.log
fi

# enable autologin if required
if [ "$AUTOLOGIN" = "TRUE" ]; then
	if [ -f /TARGET/etc/lightdm/lightdm.conf ]; then
		sed -i -e 's/#autologin-user=/autologin-user='"$TARGETUSER"'/g' /TARGET/etc/lightdm/lightdm.conf
		sed -i -e 's/#autologin-user-timeout=0/autologin-user-timeout=0/g' /TARGET/etc/lightdm/lightdm.conf
		echo "Lightdm AUTOLOGIN=yes" >> /var/log/sparkylinux-installer.log
		echo "==============================================================" >> /var/log/sparkylinux-installer.log
	else
		echo "Lightdm AUTOLOGIN=no" >> /var/log/sparkylinux-installer.log
		echo "==============================================================" >> /var/log/sparkylinux-installer.log
	fi

	if [ -f /TARGET/usr/bin/sddm ]; then
		if [ -f /TARGET/etc/sddm.conf ]; then
			sed -i -e 's/Session=/Session=plasma.desktop/g' /TARGET/etc/sddm.conf
			sed -i -e 's/User=/User='"$TARGETUSER"'/g' /TARGET/etc/sddm.conf
			echo "SDDM AUTOLOGIN=yes" >> /var/log/sparkylinux-installer.log
			echo "==============================================================" >> /var/log/sparkylinux-installer.log
		#else
		#	echo "[Autologin]" >> /TARGET/etc/sddm.conf
		#	echo "Session=plasma.desktop" /TARGET/etc/sddm.conf
		#	echo "User=$TARGETUSER" /TARGET/etc/sddm.conf
		#	echo "SDDM AUTOLOGIN=yes" >> /var/log/sparkylinux-installer.log
		#	echo "==============================================================" >> /var/log/sparkylinux-installer.log
		fi
		echo "SDDM AUTOLOGIN=no" >> /var/log/sparkylinux-installer.log
		echo "==============================================================" >> /var/log/sparkylinux-installer.log
	fi
fi

echo "End of Sparky Advanced Installer Log" >> /var/log/sparkylinux-installer.log
echo "==============================================================" >> /var/log/sparkylinux-installer.log

# synchronize log files
if [ -f /var/log/sparkylinux-installer.log ] && [ -f /TARGET/var/log/sparkylinux-installer.log ]; then
	rm -f /TARGET/var/log/sparkylinux-installer.log
	cp /var/log/sparkylinux-installer.log /TARGET/var/log/sparkylinux-installer.log
fi

## Preserve kernel options in the new grub system
#NewGrubDefLine="$(cat /proc/cmdline | awk -F 'config ' '{print $2}' | awk -F ' BOOT' '{print $1}')"
if [ ! -d /TARGET/etc/plymouth ]; then
	NewGrubDefLine=""
fi
if [ -d /TARGET/etc/plymouth ]; then
	if [ "$ENCRYPTASK" = "YES" ]; then
		 NewGrubDefLine="quiet"
	else
		NewGrubDefLine="$NewGrubDefLine"
	fi
fi

OldGrubDefLine=$(grep -B 0  "GRUB_CMDLINE_LINUX_DEFAULT=" /TARGET/etc/default/grub)
OldGrubLine=$(grep -B 0  "GRUB_CMDLINE_LINUX=" /TARGET/etc/default/grub)
sed -i -e "s/$OldGrubDefLine/GRUB_CMDLINE_LINUX_DEFAULT=\"$NewGrubDefLine\"/g" /TARGET/etc/default/grub
sed -i -e "s/$OldGrubLine/GRUB_CMDLINE_LINUX=\"\"/g" /TARGET/etc/default/grub
if [ "$SETDELAY" != "" ]; then
	if [ "$SETDELAY" = "No" ]; then
		sed -i -e "s/GRUB_TIMEOUT=5/GRUB_TIMEOUT=0/g" /TARGET/etc/default/grub
		echo "GRUB_HIDDEN_TIMEOUT=10" >> /TARGET/etc/default/grub
		echo "GRUB_HIDDEN_TIMEOUT_QUIET=true" >> /TARGET/etc/default/grub
	elif [ "$SETDELAY" = "5" ]; then
		echo "Grub delay with no changes..."
	else
		sed -i -e "s/GRUB_TIMEOUT=5/GRUB_TIMEOUT=$SETDELAY/g" /TARGET/etc/default/grub
	fi
fi

# remove encrypt related debs if no needed
if [ -f /tmp/sparky-noencrypt ]; then
echo "removing encrypt related debs..."
sleep 1
cat > /TARGET/bin/removeencrypt <<FOO
#!/bin/bash
apt-get purge --yes lvm2
apt-get purge --yes cryptsetup cryptsetup-*
apt-get purge --yes systemd-cryptsetup
FOO

chmod 755 /TARGET/bin/removeencrypt
chroot /TARGET /bin/removeencrypt
rm /TARGET/bin/removeencrypt

fi

# remove live packages
echo "$LOCAL109 ... $LOCAL92 ..."
sleep 1
cat > /TARGET/bin/tempinstallerscript <<FOO
#!/bin/bash
if [ -d /etc/skel ]; then
	cd /etc/skel
	if [ ! -d /home/$TARGETUSER ]; then
		mkdir -p /home/$TARGETUSER
	fi
	rsync -ar . /home/$TARGETUSER
	chown -R $TARGETUSER:$TARGETUSER /home/$TARGETUSER
fi
apt-get purge --yes sparky-backup-*
apt-get purge --yes live-*
apt-get purge --yes calamares
apt-get purge --yes sparky-firstrun-fix
apt-get autoremove --yes
#update-initramfs -t -c -k $(/bin/uname -r)
update-initramfs -t -c -k all
shadowconfig on
FOO

chmod 755 /TARGET/bin/tempinstallerscript
chroot /TARGET /bin/tempinstallerscript
rm /TARGET/bin/tempinstallerscript

# restore resolveconf
rm -f /TARGET/etc/resolv.conf
mv /TARGET/etc/resolv.conf.bak /TARGET/etc/resolv.conf

# make sure mounted media is removed from the TARGET system
if [ -d /TARGET/lib/live/mount ]; then
	rm -rf /TARGET/lib/live/mount
fi

# setup grub
if [ "$GRUBLOCTEST" = "nogrub" ]; then
cat > /tmp/Grub-Update << FOO
#!/bin/bash
chroot /TARGET update-grub
exit 0
FOO

	chmod +x /tmp/Grub-Update

	echo "$LOCAL110 ... $LOCAL92 ..."
	/tmp/Grub-Update
	sleep 1
	rm -rf /tmp/Grub-Update
	
	echo "$LOCAL111"
	echo "$LOCAL112"
	sleep 1
	if [ "$ENCRYPTASK" = "YES" ]; then
		umount /dev/mapper/sparky_home
		cryptsetup close sparky_home
	fi
	umount -R /TARGET
	sleep 1

else

cat > /tmp/Grub-Install << FOO
#!/bin/bash
chroot /TARGET grub-install --force --no-floppy "$GRUBLOC"
chroot /TARGET update-grub
exit 0
FOO

	chmod +x /tmp/Grub-Install

	echo "$LOCAL110 ... $LOCAL92 ..."
	/tmp/Grub-Install
	sleep 1
	rm -rf /tmp/Grub-Install

	echo "$LOCAL111"
	echo "$LOCAL112"
	sleep 1
	if [ "$ENCRYPTASK" = "YES" ]; then
		umount /dev/mapper/sparky_home
		cryptsetup close sparky_home
	fi
	umount -R /TARGET
	if [ "$FSTYPE" = "btrfs" ]; then
		umount -R /mnt/@home
		umount -R /mnt/@
		umount -R /mnt
	fi
	if [ "$HFSTYPE" = "btrfs" ]; then
		umount -R /src/@home
		umount -R /src
	fi
	sleep 1

fi

if [ "$GRUBLOCTEST" = "nogrub" ]; then
	PASTEGRUB="\n$LOCAL115\n"
else
	PASTEGRUB=""
fi

$DIALOG $TITLE"$TITLETEXT" $YESNO $TEXT"$LOCAL113\n$PASTEGRUB\n$LOCAL114\n$LOCAL116" $HEIGHT $WIDTH
if [ $? != 0 ]; then
	exit 0
else
	reboot
fi

}

mainmenu
