#
# Standard actions for any xsession
#

# Read profile
test -f /etc/profile && . /etc/profile
test -f $HOME/.profile && . $HOME/.profile

# Poor people using bash set their locales in ~/.bash_profile
if [ ! -f $HOME/.profile ] && echo $SHELL |grep -q "bash"; then
	test -f $HOME/.bash_profile && . $HOME/.bash_profile
fi

# Redirect errors to a file in user's home directory if possible
errfn=xsession$DISPLAY
for errfile in "${TMPDIR-/tmp}/$errfn" "/tmp/$errfn" "$HOME/.$errfn"; do
	if cp /dev/null "$errfile" 2> /dev/null ; then
		chmod 600 "$errfile"
		exec > "$errfile" 2>&1
		break
	fi
done

# System wide settings
sysxkbmap=/etc/X11/xinit/Xkbmap
sysmodmap=/etc/X11/xinit/Xmodmap
sysresources=/etc/X11/xinit/Xresources

# User settings
userxkbmap=$HOME/.Xkbmap
usermodmap=$HOME/.Xmodmap
userresources=$HOME/.Xresources

# Merge in defaults
[ -f $sysresources ] && xrdb -merge $sysresources
[ -f $userresources ] && xrdb -merge $userresources

# 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
	[ -f $sysmodmap ] && xmodmap $sysmodmap
	[ -f $usermodmap ] && xmodmap $usermodmap
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
