#!/bin/bash
# Sync default GTK config files with current Gconf settings
GTKtheme=$(gsettings get org.gnome.desktop.interface gtk-theme | tr -d "'")
[ -z "$GTKtheme" ] && GTKtheme=Adwaita
ACTIVE_THEME=$GTKtheme

GTKicontheme=$(gsettings get org.gnome.desktop.interface icon-theme | tr -d "'")
[ -z "$GTKicontheme" ] && GTKicontheme=PMaterial-blue
ACTIVE_ICON_THEME=$GTKicontheme

GTKfontname=$(gsettings get org.gnome.desktop.interface font-name | tr -d "'")
[ -z "$GTKfontname" ] && GTKfontname="Sans 10"
ACTIVE_FONT=$GTKfontname

Cursortheme=$(gsettings get org.gnome.desktop.interface cursor-theme | tr -d "'")
[ -z "$Cursortheme" ] && Cursortheme="$(readlink $HOME/.icons/default | rev | cut -d '/' -f1 | rev)"
[ -z "$Cursortheme" ] && Cursortheme="Breeze_Light"
CURSOR_THEME=$Cursortheme

if [  ! -f $HOME/.config/labwc/environment ]; then
	echo "XCURSOR_THEME=$CURSOR_THEME
XCURSOR_SIZE=24" > $HOME/.config/labwc/environment
fi

if [ ! "`grep XKB_DEFAULT_OPTIONS $HOME/.config/labwc/environment 2>/dev/null`" ]; then
	echo "XKB_DEFAULT_OPTIONS=grp:alt_shift_toggle" >> $HOME/.config/labwc/environment
fi

OPENBOXtheme=$ACTIVE_THEME

# Background
 CURRENT_WALLPAPER=$(cat $HOME/.config/wallpaper/bg_img 2>/dev/null | awk -F'/' '{print $NF}')
 [ ! "$CURRENT_WALLPAPER" ] && CURRENT_WALLPAPER="NA"

# Desk icon theme
 CURRENT_DESKICONS=$(cat /etc/desktop_icon_theme 2>/dev/null)
 [ ! "$CURRENT_DESKICONS" ] && CURRENT_DESKICONS="NA"

export ACTIVE_THEME ACTIVE_ICON_THEME ACTIVE_FONT CURSOR_THEME
export REAL_XDG_CONFIG_HOME="$HOME/.config"

# functions
set_gtk4_theme() {
	if ls /usr/share/icons | grep -q "$1" ; then
		if [ "$GTKicontheme" = "$1" -a -e $REAL_XDG_CONFIG_HOME/gtk-4.0/settings.ini ]; then
			if grep -q "^gtk-icon-theme-name" $REAL_XDG_CONFIG_HOME/gtk-4.0/settings.ini ;then
				! grep -q "$1" $REAL_XDG_CONFIG_HOME/gtk-4.0/settings.ini &&  \
					sed -i "s/^gtk-icon-theme-name.*/gtk-icon-theme-name = $1/" $REAL_XDG_CONFIG_HOME/gtk-4.0/settings.ini
			else
				echo "gtk-icon-theme-name = $ICON_THEME" >> $REAL_XDG_CONFIG_HOME/gtk-4.0/settings.ini
			fi
		else
			cat << _EOF > $REAL_XDG_CONFIG_HOME/gtk-4.0/settings.ini
[Settings]
gtk-icon-theme-name = $ICON_THEME
_EOF
		fi
	fi
	if [ "$GTKtheme" = "$1" ]; then
		PTHEME_GTK4="$1"
		if [[ $(ls -1A /usr/share/themes/"${PTHEME_GTK4}"/gtk-4* 2>/dev/null) ]]; then
			mkdir -p $REAL_XDG_CONFIG_HOME/gtk-4.0
			cat > $REAL_XDG_CONFIG_HOME/gtk-4.0/settings.ini << _EOF
[Settings]
gtk-theme-name = ${PTHEME_GTK4}
_EOF
		else
			mkdir -p $REAL_XDG_CONFIG_HOME/gtk-4.0
			cat > $REAL_XDG_CONFIG_HOME/gtk-4.0/settings.ini << _EOF
[Settings]
_EOF
		fi
	fi
	if ! grep -qE "gtk-enable-animations" $REAL_XDG_CONFIG_HOME/gtk-4.0/settings.ini ; then
		mkdir -p $REAL_XDG_CONFIG_HOME/gtk-4.0
		cat >> $REAL_XDG_CONFIG_HOME/gtk-4.0/settings.ini << _EOF
gtk-enable-animations = 0
gtk-hint-font-metrics = 1
_EOF
	fi
	if [ $(which install 2>/dev/null) ]; then
		install -D -m 644 $REAL_XDG_CONFIG_HOME/gtk-4.0/settings.ini /etc/gtk-4.0/settings.ini
		install -D -m 600 -o spot -g spot $REAL_XDG_CONFIG_HOME/gtk-4.0/settings.ini /home/spot/.config/gtk-4.0/settings.ini
	fi
}

set_gtk3_theme() {
	# gtk-icon-theme-name
	if ls /usr/share/icons | grep -q "$1" ; then
		if [ "$GTKicontheme" = "$1" -a -e $REAL_XDG_CONFIG_HOME/gtk-3.0/settings.ini ]; then
			if grep -q "^gtk-icon-theme-name" $REAL_XDG_CONFIG_HOME/gtk-3.0/settings.ini ;then
				! grep -q "$1" $REAL_XDG_CONFIG_HOME/gtk-3.0/settings.ini &&  \
					sed -i "s/^gtk-icon-theme-name.*/gtk-icon-theme-name = $1/" $REAL_XDG_CONFIG_HOME/gtk-3.0/settings.ini
			else
				echo "gtk-icon-theme-name = $ICON_THEME" >> $REAL_XDG_CONFIG_HOME/gtk-3.0/settings.ini
			fi
		else
			cat << _EOF > $REAL_XDG_CONFIG_HOME/gtk-3.0/settings.ini
[Settings]
gtk-icon-theme-name = $ICON_THEME
_EOF
		fi
	# gtk-theme-name and optional settings
	fi
	if [ "$GTKtheme" = "$1" ]; then
		PTHEME_GTK3="$1"
		if [[ $(ls -1A /usr/share/themes/"${PTHEME_GTK3}"/gtk-3* 2>/dev/null) ]]; then
			mkdir -p $REAL_XDG_CONFIG_HOME/gtk-3.0
			# gtk-theme-name
			cat > $REAL_XDG_CONFIG_HOME/gtk-3.0/settings.ini << _EOF
[Settings]
gtk-theme-name = ${PTHEME_GTK3}
_EOF
			# optional gtk3 settings (user may add/delete/edit: Enable=1 Disable=0)
			cat >> $REAL_XDG_CONFIG_HOME/gtk-3.0/settings.ini << EOF
gtk-application-prefer-dark-theme = 0
gtk-cursor-theme-size = 0
gtk-button-images = 1
gtk-menu-images = 1
gtk-toolbar-style = GTK_TOOLBAR_BOTH
gtk-toolbar-icon-size = GTK_ICON_SIZE_LARGE_TOOLBAR
gtk-overlay-scrolling = 0
gtk-primary-button-warps-slider = false
gtk-enable-animations = 0
gtk-enable-event-sounds = 1
gtk-enable-input-feedback-sounds = 1
EOF
		else
			mkdir -p $REAL_XDG_CONFIG_HOME/gtk-3.0
			cat > $REAL_XDG_CONFIG_HOME/gtk-3.0/settings.ini << _EOF
[Settings]
gtk-toolbar-style = GTK_TOOLBAR_BOTH
gtk-toolbar-icon-size = GTK_ICON_SIZE_LARGE_TOOLBAR
_EOF
		fi
	fi
	if ! grep -qE "gtk-menu-images|gtk-button-images|gtk-enable-animations" $REAL_XDG_CONFIG_HOME/gtk-3.0/settings.ini ; then
		mkdir -p $REAL_XDG_CONFIG_HOME/gtk-3.0
		cat >> $REAL_XDG_CONFIG_HOME/gtk-3.0/settings.ini << _EOF
gtk-menu-images = 1
gtk-button-images = 1
gtk-enable-animations = 0
_EOF
	fi
	# font configuration (antialiasing, hinting, sub-pixel geometry)
	# gtk-font-name
	if grep -q "^gtk-font-name" $REAL_XDG_CONFIG_HOME/gtk-3.0/settings.ini ;then
		! grep -q "$FONT" $REAL_XDG_CONFIG_HOME/gtk-3.0/settings.ini &&  \
			sed -i "s/^gtk-font-name.*/gtk-font-name = $FONT/" $REAL_XDG_CONFIG_HOME/gtk-3.0/settings.ini
	else
		echo "gtk-font-name = $FONT" >> $REAL_XDG_CONFIG_HOME/gtk-3.0/settings.ini
	fi
	if [ $(which install 2>/dev/null) ]; then
		install -D -m 644 $REAL_XDG_CONFIG_HOME/gtk-3.0/settings.ini /etc/gtk-3.0/settings.ini
		install -D -m 600 -o spot -g spot $REAL_XDG_CONFIG_HOME/gtk-3.0/settings.ini /home/spot/.config/gtk-3.0/settings.ini
	fi
}

export -f set_gtk3_theme set_gtk4_theme

set_theme_gtk (){
	# GTK theme
	[ -z "$THEME" ] && THEME="$ACTIVE_THEME" && export THEME
	[ -z "$FONT" ] && FONT="$ACTIVE_FONT" && export FONT
	if [ "$WAYLAND_DISPLAY" ]; then
		if [ "$(which gtk-theme-switch2)" ] ; then
			gtk-theme-switch2 -f "$FONT" "/usr/share/themes/$THEME"
			set_gtk3_theme "$THEME"
			set_gtk4_theme "$THEME"
		elif [ "$(which switch2)" ] ; then
			switch2 -f "$FONT" "/usr/share/themes/$THEME"
			set_gtk3_theme "$THEME"
			set_gtk4_theme "$THEME"
		else
			# from upgrade_ptheme_fix
			export PTHEME_GTK="$THEME"
			cat > $HOME/.gtkrc-2.0 << _EOF
# -- THEME AUTO-WRITTEN BY gtk-theme-switch2 DO NOT EDIT
include "/usr/share/themes/${PTHEME_GTK}/gtk-2.0/gtkrc"

style "user-font"
{
  font_name="${FONT}"
}
widget_class "*" style "user-font"

include "/root/.gtkrc-2.0.mine"

# -- THEME AUTO-WRITTEN BY gtk-theme-switch2 DO NOT EDIT
gtk-theme-name = "${PTHEME_GTK}"
gtk-toolbar-style = GTK_TOOLBAR_BOTH
gtk-toolbar-icon-size = GTK_ICON_SIZE_LARGE_TOOLBAR
_EOF

			set_gtk3_theme "$THEME"
			set_gtk4_theme "$THEME"
		fi
	fi
	# GTK icons
	[ -z "$ICON_THEME" ] && ICON_THEME="$ACTIVE_ICON_THEME" && export ICON_THEME
	if [ "$ICON_THEME" ]; then
		# update GTK icon theme
		sed -i '/gtk-icon-theme-name/d' $HOME/.gtkrc-2.0
		echo "gtk-icon-theme-name = \"$ICON_THEME\"" >> $HOME/.gtkrc-2.0
		set_gtk3_theme "$ICON_THEME"
		set_gtk4_theme "$ICON_THEME"
	fi
	# make Qt4 apps theme match gtk2...
	# see also /etc/profile.d/pup_gtk and /root/.config/Trolltech.conf
	THEREBEFORE="$(grep '^gtk-theme-name' /root/.gtkrc-2.0)"
	if [ "$THEREBEFORE" = "" ]; then
		echo "gtk-theme-name=\"${THEME}\"" >> /root/.gtkrc-2.0
	fi
	[ $(which install 2>/dev/null) ] && install -D -m 644 $HOME/.gtkrc-2.0 /etc/gtk-2.0/gtkrc
}

# GTK themes
if [ -d $HOME/.themes ]; then # alternate theme directory
	find -L /usr/share/themes -type l -delete 2>/dev/null #remove broken symlinks
	XTRA_GTK_THEMES=$(ls -1A $HOME/.themes/ 2>/dev/null)
	if [ "$XTRA_GTK_THEMES" ]; then
		for t in $XTRA_GTK_THEMES; do
			[ ! -d /usr/share/themes/"$t" ] && ln -snf $HOME/.themes/"$t" /usr/share/themes/
		done
	fi
fi

# Set gtk themes
set_theme_gtk

# Sync Labwc Keyboard layout with Quicksetup/Quickcountry
XKB_LAYOUT="`grep 'XKB_DEFAULT_LAYOUT' $HOME/.config/labwc/environment 2>/dev/null | cut -f2 -d'='`"
if [ -n "$XKB_LAYOUT" ]; then
	if [ -f $HOME/.xkbrc ]; then
		XKBRC_XKB_LAYOUT="`grep 'XKB_DEFAULT_LAYOUT' $HOME/.xkbrc | cut -f2 -d'='`"
		if [ "$XKBRC_XKB_LAYOUT" != "$XKB_LAYOUT" ]; then
			RESTART=yes
			sed -i "s%^XKB_DEFAULT_LAYOUT=.*%XKB_DEFAULT_LAYOUT=$XKB_LAYOUT%" $HOME/.xkbrc
			xkbconfigmanager apply
		fi
	fi
fi

# Set cursor theme
[ -e $HOME/.icons/default ] && PREVTHEME="`readlink $HOME/.icons/default | rev | cut -f 1 -d '/' | rev`"
[ "$PREVTHEME" != $CURSOR_THEME ] && pcur -t $CURSOR_THEME

if [ "$RESTART" = "yes" ]; then
	/usr/lib/gtkdialog/box_yesno --yes-first "$(gettext 'Keyboard Layout')" "$(gettext 'The graphical server must restart... Would you like to restart now?') "
	[ $? -eq 0 ] && restartwm
fi
