#!/usr/bin/env bash
#
# Initial script for Live operating system
# This script are launching before starting init from linux-live script.
# Current dir allways must be set to root (/)
# All system path must be relative, except initrd dirs

ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
DEBUGMODE=no
PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin

unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=.
SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0
SOURCE=${ROOTFS}/usr/lib/ublinux/os-config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0
debug_mode "$0" "$@"

SYSCONF="${ROOTFS}${SYSCONF}"
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/system; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/desktop; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null

[[ -f ${ROOTFS}/etc/inittab ]] && sed -i 's/id:.:initdefault:/id:5:initdefault:/' ${ROOTFS}/etc/inittab

switch3don(){
    echo "COMPOSITING_SERVER_START=no" >${SYSCONF}/compositing-server
    #Gnome-shell does not supports compiz, so turn on it only in classic mode and only after desktop started
    if [ -x usr/bin/gnome-shell ] ;then
	echo -e "COMPOSITING_WM_START=no\nCOMPOSITING_WM=compiz-fusion" >${SYSCONF}/compositing-wm
	sed -i /COMPOSITING_WM_START/d ${SYSCONF}/config
        echo COMPOSITING_WM_START=yes >> ${SYSCONF}/config
    else
        echo -e "COMPOSITING_WM_START=yes\nCOMPOSITING_WM=compiz-fusion" >${SYSCONF}/compositing-wm
    fi
#   [ -f usr/lib/libDrakX/harddrake/autoconf.pm ] && sed -i 's/^ *Xconfig::glx::write({});$/#    Xconfig::glx::write({});/' usr/lib/libDrakX/harddrake/autoconf.pm
    [ -f etc/xdg/kwinrc ] && sed -i s/^Enabled=.*/Enabled=false/ etc/xdg/kwinrc
}

switch3doff(){
    echo "COMPOSITING_SERVER_START=no" >${SYSCONF}/compositing-server
    echo -e "COMPOSITING_WM_START=no\nCOMPOSITING_WM=compiz-fusion" >${SYSCONF}/compositing-wm
    sed -i /COMPOSITING_WM_START/d ${SYSCONF}/config
#   [ -f usr/lib/libDrakX/harddrake/autoconf.pm ] && sed -i 's/^#    Xconfig::glx::write({});$/    Xconfig::glx::write({});/' usr/lib/libDrakX/harddrake/autoconf.pm
    [ -f etc/xdg/kwinrc ] && sed -i s/^Enabled=.*/Enabled=true/ etc/xdg/kwinrc
}

setupdm(){
    if [ -f lib/systemd/system/$1.service ] ;then
	ln -sf /lib/systemd/system/$1.service etc/systemd/system/display-manager.service
	ln -sf /lib/systemd/system/graphical.target etc/systemd/system/default.target
	[[ -f ${SYSCONF}/desktop ]] && sed -i /DISPLAYMANAGER=/d ${SYSCONF}/desktop
	echo "DISPLAYMANAGER=${1%%-plymouth*}" >> ${SYSCONF}/desktop
	case ${1%%-plymouth*} in
	    lightdm)
		# FIX lightdm-greater
		mkdir -p usr/libexec
		ln -sf /usr/lib/at-spi-bus-launcher usr/libexec/at-spi-bus-launcher
		ln -sf init usr/bin/systemd
	    ;;
	esac
    fi    
}

setupde(){
    if [[ -f usr/share/xsessions/$1.desktop ]] ;then
	sed -i /DESKTOP=/d ${SYSCONF}/desktop
	echo "DESKTOP=$1" >> ${SYSCONF}/desktop
#	ln -sf $1.desktop usr/share/xsessions/default.desktop
#	cat > usr/share/xsessions/default.desktop <<EOF
#[Desktop Entry]
#Encoding=UTF-8
#Name=DEFAULT
#Name[ru]=Сеанс по умолчанию (${1})
#Comment=Default UBLinux Session
#Comment[ru]=Предопределённая рабочая среда пользователя
#Exec=gtk-launch /usr/share/xsessions/${1}.desktop
#Icon=
#Type=Application
#EOF
	cp -a usr/share/xsessions/$1.desktop usr/share/xsessions/default.desktop
	sed -i "s/Name=.*/Name=Default Session \(${1}\)/" usr/share/xsessions/default.desktop
	sed -i "s/Name\[ru\]=.*/Name\[ru\]=Сеанс по умолчанию \(${1}\)/" usr/share/xsessions/default.desktop
	[[ -d etc/X11/wmsession.d ]] && ln -sf /usr/share/xsessions/default.desktop etc/X11/wmsession.d/00DEFAULT
	[[ -d etc/X11/dm/Sessions ]] && ln -sf /usr/share/xsessions/default.desktop etc/X11/dm/Sessions/00DEFAULT.desktop
       #[ -d etc/X11/wmsession.d ] && cp -pf /usr/share/xsessions/default.desktop etc/X11/wmsession.d/00DEFAULT
       #[ -d etc/X11/dm/Sessions ] && cp -pf /usr/share/xsessions/default.desktop etc/X11/dm/Sessions/00DEFAULT.desktop
	case $1 in
	    xfce)
		# FIX xfce.screensaver add button 
		[[ -f usr/share/dbus-1/services/org.xfce.ScreenSaver.service ]] && rm -f usr/share/dbus-1/services/org.xfce.ScreenSaver.service
		[[ -f etc/xdg/autostart/xscreensaver.desktop ]] && rm -f etc/xdg/autostart/xscreensaver.desktop
	    ;;
	esac
    fi
}

disabledmde(){
    [ -f etc/inittab ] && sed -i 's/id:.:initdefault:/id:3:initdefault:/' etc/inittab
    ln -sf /lib/systemd/system/multi-user.target etc/systemd/system/default.target
    DISPLAYMANAGER=none 
    sed -i /DISPLAYMANAGER=/d ${SYSCONF}/desktop
    echo "DISPLAYMANAGER=$DISPLAYMANAGER" >> ${SYSCONF}/desktop
    DESKTOP=none
    sed -i /DESKTOP=/d ${SYSCONF}/desktop
    echo "DESKTOP=$DESKTOP" >> ${SYSCONF}/desktop
}

[ "$(cmdline_parameter 3ddesktop)" ] && switch3don
[ "$(cmdline_parameter no3ddesktop)" ] && switch3doff

for i in $(cmdline_value desktop | tr , " " ) ;do
   case $i in
       3d)	switch3don ;;
       no3d)	switch3doff ;;
       xfce)	DESKTOP=xfce ;;
       kde)	DESKTOP=kde4 ;;
       gnome)	DESKTOP=gnome ;;
       gnome-shell|gnome3) DESKTOP=gnomeshell ;;
       lxde)	DESKTOP=lxde ;;
       lxqt)	DESKTOP=lxqt ;;
       i3)	DESKTOP=i3 ;;
       steam)	DESKTOP=steam ;;
       plasma)	DESKTOP=plasma ;;
       mate)	DESKTOP=mate ;;
       ukui)	DESKTOP=ukui ;;
       none)	DISPLAYMANAGER=none && DESKTOP=none ;;
       lightdm)	DISPLAYMANAGER=lightdm ;;
       kdm)	DISPLAYMANAGER=kdm  ;;
       gdm)	DISPLAYMANAGER=gdm ;;
       slim)	DISPLAYMANAGER=slim ;;
       xdm)	DISPLAYMANAGER=xdm ;;
       lxdm)	DISPLAYMANAGER=lxdm ;;
       sddm)	DISPLAYMANAGER=sddm ;;
       lan)	sed -i s/ONBOOT=.*/ONBOOT=yes/ ${SYSCONF}/network-scripts/ifcfg-eth0 2>/dev/null ;;
       nolan)	sed -i s/ONBOOT=.*/ONBOOT=no/ ${SYSCONF}/network-scripts/ifcfg-eth0 2>/dev/null ;;
       *)	DESKTOP=${i,,} ;;
   esac
done

# Disable Display Manager
    [[ "${DESKTOP}" == "none" || "${DISPLAYMANAGER}" == "none" ]] && DESKTOP="none" && DISPLAYMANAGER="none" && disabledmde

# Autodetect Display Manager
    [[ -z "${DISPLAYMANAGER}" ]] && for i in slim xdm lxdm kdm gdm sddm lightdm; do
	[[ -f lib/systemd/system/$i.service ]] && DISPLAYMANAGER=$i
    done
    [[ -f lib/systemd/system/${DISPLAYMANAGER}-plymouth.service ]] && setupdm ${DISPLAYMANAGER}-plymouth && rm -f lib/systemd/system/${DISPLAYMANAGER}.service || setupdm ${DISPLAYMANAGER}
    
# Autodetect Display Environment
# /usr/share/xsessions/*.desktop for X's sessions and /usr/share/wayland-sessions/*.desktop for Wayland's.
    [[ -z "${DESKTOP}" ]] && for i in i3 ukui steam lxde lxqt kde4 xfce mate gnome gnomeshell plasma; do
	[[ -f usr/share/wayland-sessions/$i.desktop ]] && DESKTOP=$i
	[[ -f usr/share/xsessions/$i.desktop ]] && DESKTOP=$i
    done
    setupde ${DESKTOP,,}

    [[ -z "${DISPLAYMANAGER}" && -z "${DESKTOP}" ]] && disabledmde

# Set default user to Display Manager
    if [[ "${DISPLAYMANAGER}" == "lightdm" && ${DISPLAYMANAGER_DEFAULTUSER} ]]; then
	sed -i /DISPLAYMANAGER_DEFAULTUSER=/d ${SYSCONF}/desktop
	echo "DISPLAYMANAGER_DEFAULTUSER=${DISPLAYMANAGER_DEFAULTUSER}" >> ${SYSCONF}/desktop
	mkdir -p var/lib/lightdm/.cache/lightdm-gtk-greeter/
	echo "[greeter]" >  var/lib/lightdm/.cache/lightdm-gtk-greeter/state
	echo "last-user=${DISPLAYMANAGER_DEFAULTUSER}" >> var/lib/lightdm/.cache/lightdm-gtk-greeter/state
	chown -Rf 41:41 var/lib/lightdm/
	chmod 1770 var/lib/lightdm/
	chmod 755 var/lib/lightdm/.cache/lightdm-gtk-greeter/
	chmod 644 var/lib/lightdm/.cache/lightdm-gtk-greeter/state
    fi