#!/bin/bash

dmrc="$HOME/.dmrc"
user_session="$HOME/.xinit.d/session"
user_xim="$HOME/.xinit.d/xim"
user_lang="$HOME/.xinit.d/lang"
##site_session=/etc/sysconfig/xinit-session
##site_xim=/etc/sysconfig/xinit-xim
##site_lang=/etc/sysconfig/xinit-lang
custom_env="$HOME/.xinit.d/custom"

session_dir=/etc/X11/xinit/session.d
xim_dir=/etc/X11/xinit/xim.d
lang_dir=/etc/X11/xinit/lang.d

if [ ! -d "$HOME/.xinit.d" ]; then
    rm -rf "$HOME/.xinit.d"
    mkdir "$HOME/.xinit.d"
fi

# file timestamp comps
if [ -f $dmrc -a -f $user_session ]; then
    if [ $dmrc -nt $user_session ]; then
        cnd_session="new"
    elif [ $dmrc -ot $user_session ]; then
        cnd_session="old"
    else
        cnd_session="eq"
    fi
fi

if [ -f $dmrc -a -f $user_lang ]; then
    if [ $dmrc -nt $user_lang ]; then
        cnd_lang="new"
    elif [ $dmrc -ot $user_lang ]; then
        cnd_lang="old"
    else
        cnd_lang="eq"
    fi
fi

# set session
if [ -f $user_session ]; then
    if [ $cnd_session = "new" ]; then       # [ $dmrc -nt $user_session ]
        sed -n -e 's/^Session=//p' $dmrc > $user_session
    fi
else
    echo $GDMSESSION > $user_session
fi

if [ $GDMSESSION = "default" ]; then
    if [ -f "$session_dir/kde" ]; then
        GDMSESSION="kde"
    elif [ -f "$session_dir/xfce4" ]; then
        GDMSESSION="xfce4"
    fi
    echo $GDMSESSION > $user_session
    sed -e "s/default/${GDMSESSION}/" $dmrc > /tmp/dmrc.wk
    cat /tmp/dmrc.wk > $dmrc
    rm -f /tmp/dmrc.wk > /dev/null 2>&1
fi

# set XIM
if [ ! -f $user_xim ]; then
    echo "SCIM" > $user_xim
fi

# set lang
if [ -f $user_lang ]; then
    if [ $cnd_lang = "new" ]; then       # [ $dmrc -nt $user_lang ]
        sed -n -e 's/^Language=//p' $dmrc > $user_lang
    fi
else
    echo $LANG > $user_lang
fi

touch -c $dmrc $user_session $user_xim $user_lang

now_session=`cat $user_session`
now_xim=`cat $user_xim`
now_lang=`cat $user_lang`
echo "SESSION = <$now_session>"
echo "XIM     = <$now_xim>"
echo "LANG    = <$now_lang>"

# check session settings
SESSION_TYPE=$GDMSESSION
if [ -f $session_dir/$SESSION_TYPE ]; then
    echo "Reading $session_dir/$SESSION_TYPE"
    . $session_dir/$SESSION_TYPE
else
    echo "Wrong session name is specified in $user_session"
    SESSION_EXEC="rxvt"
fi

# language dependent settings
LANG_TYPE=`cat "$user_lang" 2> /dev/null`
if [ -f "$lang_dir/$LANG_TYPE" ]; then
    unset LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME
    unset LC_ALL LANG LANGUAGE
    echo "Reading $lang_dir/$LANG_TYPE"
    . "$lang_dir/$LANG_TYPE"
fi

# check im setting
unset IM
if [ -f "$user_xim" ]; then
    IM=`cat "$user_xim" 2> /dev/null`
    if [ -f "$xim_dir/$IM" ]; then
        echo "Reading $xim_dir/$IM"
        . $xim_dir/$IM
    else
        echo "Wrong IM is specified in $user_xim"
    fi
fi

# custom language environment
if [ -f "$custom_env" ]; then
    echo "Reading $custom_env"
    . "$custom_env"
fi
