#! /bin/bash
#
Encoding=UTF-8

#############################################################################
#																			#
# Author D.M-Wilhelm aka Leiche <kellerleicheorig@aol.com> at Oct 29 2017	#
# Website <kellerleiche.bplaced.net> 										#
# Designed for PCLinuxOS'17 												#
# Release 2017-20213  														#
# License GPL2																#
# Co Writer Ken <lxgator at gmail.com>	at Mar 25 2020						#
# - add using polkit instead of gksu										#
#############################################################################
				

# i18n - Internationalization - Internationalisierung
export TEXTDOMAIN=defaultGRUBeditor
export TEXTDOMAINDIR="/usr/share/locale"

# run as root 
script_dir="$( cd "$( dirname "$0" )" && pwd )"
script="`basename $0`"
script_path_n_name="${script_dir}/${script}"
GUI_SU="pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY"
if [ "$UID" != "0" ]; then
$GUI_SU bash $script_path_n_name; exit;
fi

if ! test -d /tmp/defaultGRUBeditor ; then
mkdir -p /tmp/defaultGRUBeditor
fi
# to get the default grub file
cp /etc/default/grub /tmp/defaultGRUBeditor/grub.cfg

# some variables
TITLE=$"Configure grub"
OLDTITLE=defaultGRUBeditor
TMP_DIR="/tmp/defaultGRUBeditor"

#
GRUB_CMDLINE_LINUX_DEFAULT=`cat /etc/default/grub | grep "GRUB_CMDLINE_LINUX_DEFAULT" | cut -d = -f2-10`
#
GRUB_DISABLE_OS_PROBER=`cat /etc/default/grub | grep "GRUB_DISABLE_OS_PROBER" | cut -d = -f2`
#
GRUB_DISABLE_RECOVERY=`cat /etc/default/grub | grep "GRUB_DISABLE_RECOVERY" | cut -d = -f2`
#
GRUB_TERMINAL_OUTPUT=`cat /etc/default/grub | grep "GRUB_TERMINAL_OUTPUT" | cut -d = -f2`
#
GRUB_DISABLE_SUBMENU=`cat /etc/default/grub | grep "GRUB_DISABLE_SUBMENU" | cut -d = -f2`
#
GRUB_DISTRIBUTOR=`cat /etc/default/grub | grep "GRUB_DISTRIBUTOR" | cut -d = -f2`
#
GRUB_GFXMODE=`cat /etc/default/grub | grep "GRUB_GFXMODE" | cut -d = -f2`
#
GRUB_GFXPAYLOAD_LINUX=`cat /etc/default/grub | grep "GRUB_GFXPAYLOAD_LINUX" | cut -d = -f2`
#
GRUB_TIMEOUT=`cat /etc/default/grub | grep "GRUB_TIMEOUT" | cut -d = -f2`
#
GRUB_THEME=`cat /etc/default/grub | grep "GRUB_THEME" | cut -d = -f2`
#
#GRUB_DEFAULT=`cat /etc/default/grub | grep "GRUB_DEFAULT" | cut -d = -f2`
#
GRUB_SAVEDEFAULT=`cat /etc/default/grub | grep "GRUB_SAVEDEFAULT" | cut -d = -f2`
###############################################################################


# about/help
export ABOUT='
<window window_position="1" icon-name="info" width-request="600" allow-shrink="true" title="'$"About"'">
	<vbox>
		<vbox scrollable="true"  width="600" >
			<frame>
				<text use-markup="true">
					<input file>/usr/share/doc/'$OLDTITLE'/grub2_read.txt</input>
				</text>
			</frame>	
		</vbox>
		<hbox><vbox>	 
			<button>
				<label>OK</label>
				<variable>ABOUT</variable>
				<action type="closewindow">ABOUT</action>
			</button>
		</vbox></hbox>
	</vbox>			
</window>
'	
# changelog
export CHANGELOG='
<window window_position="1" icon-name="info" width-request="600" allow-shrink="true" title="'$"Changelog"'">
	<vbox>
		<vbox scrollable="true"  width="600" >
			<text use-markup="false">
				<input file>/usr/share/doc/'$OLDTITLE'/Changelog</input>
			</text>
		</vbox>			
		<hbox><vbox>	 
			<button>
				<label>OK</label>
					<variable>CHANGELOG</variable>
					<action type="closewindow">CHANGELOG</action>
			</button>
		</vbox></hbox>		
	</vbox>
</window>
'	

# grub file from /etc/default
export CONF='
<window window_position="1" icon-name="defaultGRUBeditor" width-request="600"  title="'$"/etc/default/grub"'">
	<vbox wrap-mode="1">
		<frame>
			<text use-markup="true" xalign="0" wrap-mode="0">
				<input file>/etc/default/grub</input>
			</text>
		</frame>	
		<vbox><hbox>  
			<button>
				<label>OK</label>
				<variable>CONF</variable>
				<action type="closewindow">CONF</action>
			</button>
		</hbox></vbox>
	</vbox>		
</window>
'

# info display
export INFO='
<window window_position="1" icon-name="defaultGRUBeditor" width-request="600"  title="'$"Info"'">
	<vbox wrap-mode="1">
		<frame>
			<text use-markup="true" xalign="0" wrap-mode="0"><label>'$"All settings are done... Program will now closed."'</label></text>
			<text use-markup="true" xalign="0" wrap-mode="0"><label>'$"If you want to check the settings, restart the application."'</label></text>
		</frame>	
		<vbox><hbox>  
			<button>
				<label>OK</label>
				<variable>INFO</variable>
				<action type="closewindow">INFO</action>
				<action type="closewindow">CHANGE</action>
			</button>
		</hbox></vbox>
	</vbox>		
</window>
'
function do_settings () {
	export CHANGE='
<window title=" '$TITLE' " window_position="1" resizable="false" icon-name="defaultGRUBeditor">
	<vbox>
		<frame '$"Log"'>
			<vbox scrollable="true" width="600" height="300">
				<text><input file>'$TMP_DIR'/grub.log</input></text> 
				<variable>CHANGE</variable>
			</vbox>
		</frame>
		<hbox>
			<button>
				<label>'$"Run"'</label>
				##<action>if [ ! -f /etc/sddm.conf.bak ]; then mv /etc/sddm.conf /etc/sddm.conf.bak ; fi ; cp '$TMP_DIR'/sddm.conf /etc/sddm.conf ; chown -R root:root /etc/sddm.conf</action>
				<action>bash -c echo ''mv /etc/default/grub /etc/default/grub.bak ; mv '$TMP_DIR'/grub.cfg /etc/default/grub; chown -R root:root /etc/default/grub ; xterm -e update-grub''</action>
				<action type="launch">INFO</action>
			</button>
			<button>
				<label>'$"Exit"'</label>
				<action type="closewindow">CHANGE</action>
			</button>
		</hbox>
	</vbox>
</window>
'
export GUI="`echo "$CHANGE" | sed -e 's/##.*//'`" 
gtkdialog -p GUI
}

export MAIN='
<window window_position="1" title="'$TITLE'" resizable="false"  width-request="700"  icon-name="defaultGRUBeditor">
	<vbox>
		<menubar>
			<menu use-underline="true">
				<menuitem stock-id="gtk-quit" accel-key="0x51" accel-mods="4">
					<action>exit:Quit</action>
				</menuitem>
				<label>"_File"</label>
			</menu>
			<menu>
				<menuitem icon-name="gtk-preferences"> 
					<label>'$"Grubfile"'</label>
					<action type="launch">CONF</action>
				</menuitem> 
				<label>'$"Edit"'</label>
			</menu>
			<menu>
				<menuitem>
					<label>'$"About"'</label>
					<action type="launch">ABOUT</action>
				</menuitem>
				<menuitem>
					<label>'$"Changelog"'</label>
					<action type="launch">CHANGELOG</action>
				</menuitem>
					<label>'$"Help"'</label>
			</menu>
		</menubar>	
		<frame Editor>
			<vbox>
				<entry has-frame="false" editable="false" text="GRUB_CMDLINE_LINUX_DEFAULT:">
				</entry>
			</vbox>
			<vbox>
				<entry editable="true">
					<variable>GRUB_CMDLINE_LINUX_DEFAULT1</variable>
					<default>'$GRUB_CMDLINE_LINUX_DEFAULT'</default>
				</entry>
			</vbox>
			<hbox>
			<text><label>GRUB_DISABLE_OS_PROBER:</label></text>
				<entry>
					<variable>GRUB_DISABLE_OS_PROBER1</variable>
					<default>'$GRUB_DISABLE_OS_PROBER'</default>
				</entry>	
			</hbox>
			<hbox>
			<text><label>GRUB_DISABLE_RECOVERY:</label></text>
				<entry>
					<variable>GRUB_DISABLE_RECOVERY1</variable>
					<default>'$GRUB_DISABLE_RECOVERY'</default>
				</entry>
			</hbox>
			<hbox>
			<text><label>GRUB_TERMINAL_OUTPUT:</label></text>
				<entry>
					<variable>GRUB_TERMINAL_OUTPUT1</variable>
					<default>'$GRUB_TERMINAL_OUTPUT'</default>
				</entry>
			</hbox>	
			<hbox>
			<text><label>GRUB_DISABLE_SUBMENU:</label></text>
				<entry>
					<variable>GRUB_DISABLE_SUBMENU1</variable>
					<default>'$GRUB_DISABLE_SUBMENU'</default>
				</entry>
			</hbox>	
			<hbox>
			<text><label>GRUB_DISTRIBUTOR:</label></text>
				<entry>
					<variable>GRUB_DISTRIBUTOR1</variable>
					<default>'$GRUB_DISTRIBUTOR'</default>
				</entry>
			</hbox>	
			<hbox>
			<text><label>GRUB_GFXMODE:</label></text>
				<entry>
					<variable>GRUB_GFXMODE1</variable>
					<default>'$GRUB_GFXMODE'</default>
				</entry>
			</hbox>	
			<hbox>
			<text><label>GRUB_GFXPAYLOAD_LINUX:</label></text>
				<entry>
					<variable>GRUB_GFXPAYLOAD_LINUX1</variable>
					<default>'$GRUB_GFXPAYLOAD_LINUX'</default>
				</entry>
			</hbox>	
			<hbox>
			<text><label>GRUB_TIMEOUT:</label></text>
				<entry>
					<variable>GRUB_TIMEOUT1</variable>
					<default>'$GRUB_TIMEOUT'</default>
				</entry>
			</hbox>	
			<hbox>
			<text><label>GRUB_THEME:</label></text>
				<entry>
					<variable>GRUB_THEME1</variable>
					<default>'$GRUB_THEME'</default>
				</entry>
			</hbox>
			<hbox>
			<text><label>GRUB_SAVEDEFAULT:</label></text>
				<entry>
					<variable>GRUB_SAVEDEFAULT1</variable>
					<default>'$GRUB_SAVEDEFAULT'</default>	
				</entry>
			</hbox>		
		</frame>		
		<hbox>
			<button>
				<label>'$"Save"'</label>
				<action type="exit">save</action>
			</button>
			<button>
				<label>'$"Exit"'</label>
				<action type="exit">cancel</action>
			</button>
		</hbox>
	</vbox>
</window>
'
#

#------------------------------------------------------------------------
{
I=$IFS; IFS=""
for STATEMENT in  $(gtkdialog --center --program=MAIN); do
	eval $STATEMENT
done
IFS=$I
	
	
# Process variables if dialog exit status == save
if [ "$EXIT" == "save" ];then
#echo $GRUB_CMDLINE_LINUX_DEFAULT
#echo $GRUB_CMDLINE_LINUX_DEFAULT1 | sed 's/^/"/;s/$/"/'
#echo $GRUB_CMDLINE_LINUX_DEFAULT1 | sed 's/^/"/;s/$/"/' > $TMP_DIR/cmdline 
GRUB_CMDLINE_LINUX_DEFAULT2=`echo $GRUB_CMDLINE_LINUX_DEFAULT1 | sed 's/^/"/;s/$/"/'`
#echo $GRUB_CMDLINE_LINUX_DEFAULT2
if [ ! "$GRUB_CMDLINE_LINUX_DEFAULT" == "$GRUB_CMDLINE_LINUX_DEFAULT2" ]; then	
	#sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT=$GRUB_CMDLINE_LINUX_DEFAULT/GRUB_CMDLINE_LINUX_DEFAULT=$GRUB_CMDLINE_LINUX_DEFAULT2/' $TMP_DIR/grub.cfg
	sed -i '/GRUB_CMDLINE_LINUX_DEFAULT/d' $TMP_DIR/grub.cfg
	sed -i -e 1c"GRUB_CMDLINE_LINUX_DEFAULT=$GRUB_CMDLINE_LINUX_DEFAULT2" $TMP_DIR/grub.cfg
	echo $"changed GRUB_CMDLINE_LINUX_DEFAULT $GRUB_CMDLINE_LINUX_DEFAULT to $GRUB_CMDLINE_LINUX_DEFAULT2" > $TMP_DIR/grub.log
fi

if [ ! $GRUB_DISABLE_OS_PROBER == $GRUB_DISABLE_OS_PROBER1 ]; then	
	sed -i "s/GRUB_DISABLE_OS_PROBER=$GRUB_DISABLE_OS_PROBER/GRUB_DISABLE_OS_PROBER=$GRUB_DISABLE_OS_PROBER1/" $TMP_DIR/grub.cfg
	echo $"changed GRUB_DISABLE_OS_PROBER $GRUB_DISABLE_OS_PROBER to $GRUB_DISABLE_OS_PROBER1" >> $TMP_DIR/grub.log
fi

if [ ! $GRUB_DISABLE_RECOVERY == $GRUB_DISABLE_RECOVERY1 ]; then	
	sed -i "s/GRUB_DISABLE_RECOVERY=$GRUB_DISABLE_RECOVERY/GRUB_DISABLE_RECOVERY=$GRUB_DISABLE_RECOVERY1/" $TMP_DIR/grub.cfg
	echo $"GRUB_DISABLE_RECOVERY $GRUB_DISABLE_RECOVERY to $GRUB_DISABLE_RECOVERY1" >> $TMP_DIR/grub.log
fi
	
if [ ! $GRUB_TERMINAL_OUTPUT == $GRUB_TERMINAL_OUTPUT1 ]; then	
	sed -i "s/GRUB_TERMINAL_OUTPUT=$GRUB_TERMINAL_OUTPUT/GRUB_TERMINAL_OUTPUT=$GRUB_TERMINAL_OUTPUT1/" $TMP_DIR/grub.cfg
	echo $"changed GRUB_TERMINAL_OUTPUT $GRUB_TERMINAL_OUTPUT to $GRUB_TERMINAL_OUTPUT1" >> $TMP_DIR/grub.log
fi
	
if [ ! $GRUB_DISABLE_SUBMENU == $GRUB_DISABLE_SUBMENU1 ]; then	
	sed -i "s/GRUB_DISABLE_SUBMENU=$GRUB_DISABLE_SUBMENU/GRUB_DISABLE_SUBMENU=$GRUB_DISABLE_SUBMENU1/" $TMP_DIR/grub.cfg
	echo $"changed GRUB_DISABLE_SUBMENU $GRUB_DISABLE_SUBMENU to $GRUB_DISABLE_SUBMENU1" >> $TMP_DIR/grub.log
fi

if [ ! $GRUB_DISTRIBUTOR == $GRUB_DISTRIBUTOR1 ]; then	
	sed -i "s/GRUB_DISTRIBUTOR=$GRUB_DISTRIBUTOR/GRUB_DISTRIBUTOR=$GRUB_DISTRIBUTOR1/" $TMP_DIR/grub.cfg
	echo $"changed GRUB_DISTRIBUTOR $GRUB_DISTRIBUTOR to $GRUB_DISTRIBUTOR1" >> $TMP_DIR/grub.log
fi

if [ ! $GRUB_GFXMODE == $GRUB_GFXMODE1 ]; then	
	sed -i "s/GRUB_GFXMODE=$GRUB_GFXMODE/GRUB_GFXMODE=$GRUB_GFXMODE1/" $TMP_DIR/grub.cfg
	echo $"changed GRUB_GFXMODE $GRUB_GFXMODE to $GRUB_GFXMODE1" >> $TMP_DIR/grub.log
fi

if [ ! $GRUB_GFXPAYLOAD_LINUX == $GRUB_GFXPAYLOAD_LINUX1 ]; then	
	sed -i "s/GRUB_GFXPAYLOAD_LINUX=$GRUB_GFXPAYLOAD_LINUX/GRUB_GFXPAYLOAD_LINUX=$GRUB_GFXPAYLOAD_LINUX1/" $TMP_DIR/grub.cfg
	echo $"changed GRUB_GFXPAYLOAD_LINUX $GRUB_GFXPAYLOAD_LINUX to $GRUB_GFXPAYLOAD_LINUX1" >> $TMP_DIR/grub.log
fi

if [ ! $GRUB_TIMEOUT == $GRUB_TIMEOUT1 ]; then	
	sed -i "s/GRUB_TIMEOUT=$GRUB_TIMEOUT/GRUB_TIMEOUT=$GRUB_TIMEOUT1/" $TMP_DIR/grub.cfg
	echo $"changed GRUB_TIMEOUT $GRUB_TIMEOUT to $GRUB_TIMEOUT1" >> $TMP_DIR/grub.log
fi

if [ ! $GRUB_THEME == $GRUB_THEME1 ]; then	
	sed -i "s/GRUB_THEME=$GRUB_THEME/GRUB_THEME=$GRUB_THEME1/" $TMP_DIR/grub.cfg
	echo $"changed GRUB_THEME $GRUB_THEME to $GRUB_THEME1" >> $TMP_DIR/grub.log
fi

#if [ ! $GRUB_DEFAULT == $GRUB_DEFAULT1 ]; then	
#	sed -i "s/GRUB_DEFAULT=$GRUB_DEFAULT/GRUB_DEFAULT=$GRUB_DEFAULT1/" $TMP_DIR/grub.cfg
#	echo $"changed GRUB_DEFAULT $GRUB_DEFAULT to $GRUB_DEFAULT1" >> $TMP_DIR/grub.log
#fi

if [ ! $GRUB_SAVEDEFAULT == $GRUB_SAVEDEFAULT1 ]; then	
	sed -i "s/GRUB_SAVEDEFAULT=$GRUB_SAVEDEFAULT/GRUB_SAVEDEFAULT=$GRUB_SAVEDEFAULT1/" $TMP_DIR/grub.cfg
	echo $"changed GRUB_SAVEDEFAULT5 $GRUB_SAVEDEFAULT to $GRUB_SAVEDEFAULT1" >> $TMP_DIR/grub.log
fi

	do_settings
	else
#do nothing		
	echo $"Settings are not changed, exiting!"
fi

}
rm -r $TMP_DIR/grub.cfg > /dev/null 2>&1
rm -r $TMP_DIR/grub.log > /dev/null 2>&1
#rm -r $TMP_DIR/cmdline > /dev/null 2>&1
#------------------------------------------------------------------------------------------------------
#			<hbox>
#			<text><label>GRUB_DEFAULT:</label></text>
#				<entry>	
#					<variable>GRUB_DEFAULT1</variable>
#					<default>'$GRUB_DEFAULT'</default>
#				</entry>
#			</hbox>	
