#!/bin/bash -login
# (c) 1999, 2000 Red Hat, Inc.

# redirect errors to a file in user's home directory if we can
for errfile in "$HOME/.xsession-errors" "${TMPDIR-/tmp}/xses-$USER" "/tmp/xses-$USER"
do
    if ( cp /dev/null "$errfile" 2> /dev/null )
    then
	chmod 600 "$errfile"
	exec > "$errfile" 2>&1
	break
    fi
done

xsetroot -solid '#356390'

# clean up after xbanner
if [ -x /usr/X11R6/bin/freetemp ]; then
    /usr/X11R6/bin/freetemp
fi

userresources=$HOME/.Xresources 
usermodmap=$HOME/.Xmodmap 
sysresources=/etc/X11/xinit/Xresources 
sysmodmap=/etc/X11/xinit/Xmodmap 

# backward compatibility
oldsysresources=/etc/X11/xinit/.Xresources
oldsysmodmap=/etc/X11/xinit/.Xmodmap

# merge in defaults
if [ -f "$oldsysresources" ]; then
    xrdb -merge "$oldsysresources"
fi

if [ -f "$sysresources" ]; then
    xrdb -merge "$sysresources"
fi

if [ -f "$userresources" ]; then
    xrdb -merge "$userresources"
fi

# merge in keymaps
if [ -f "$sysxkbmap" ]; then
    setxkbmap `cat "$sysxkbmap"`
    XKB_IN_USE=yes
fi

if [ -f "$userxkbmap" ]; then
    setxkbmap `cat "$userxkbmap"`
    XKB_IN_USE=yes
fi

if [ -z $XKB_IN_USE -a ! -L /etc/X11/X ]; then
    if grep '^exec.*/Xsun' /etc/X11/X > /dev/null 2>&1 && [ -f /etc/X11/XF86Config ]; then
	xkbsymbols=`sed -n -e 's/^[ 	]*XkbSymbols[   ]*"\(.*\)".*$/\1/p' /etc/X11/XF86Config`
	if [ -n "$xkbsymbols" ]; then
	    setxkbmap -symbols "$xkbsymbols"
	    XKB_IN_USE=yes
	fi
    fi
fi

# xkb and xmodmap don't play nice together
if [ -z $XKB_IN_USE ]; then
    if [ -f "$oldsysmodmap" ]; then
	xmodmap "$oldsysmodmap"
    fi

    if [ -f "$sysmodmap" ]; then
	xmodmap "$sysmodmap"
    fi

    if [ -f "$usermodmap" ]; then
	xmodmap "$usermodmap"
    fi
fi

unset XKB_IN_USE

# run all system xinitrc shell scripts.
for i in /etc/X11/xinit/xinitrc.d/* ; do
    if [ -x "$i" ]; then
	. "$i"
    fi
done

# now, we see if xdm/gdm/kdm has asked for a specific environment
case $# in
1)
    case $1 in
    failsafe)
	exec xterm -geometry 80x24-0-0
	;;
    gnome)
	exec gnome-session
	;;
    kde)
	exec startkde
	;;
    anotherlevel)
        # we assume that switchdesk is installed.
	exec /usr/share/apps/switchdesk/Xclients.anotherlevel
	;;
    esac
esac

# otherwise, take default action
if [ -x "$HOME/.xsession" ]; then
    exec "$HOME/.xsession"
elif [ -x "$HOME/.Xclients" ]; then
    exec "$HOME/.Xclients"
elif [ -x /etc/X11/xinit/Xclients ]; then
    exec /etc/X11/xinit/Xclients
else
    # should never get here; failsafe fallback
    exec xsm
fi
