#!/bin/sh

# crude and rudimentary script to use xdebconfigurator
# to configure X and XF86Config

debconf_cache=/var/cache/debconf

dirs="$debconf_cache"

. /etc/lessdisks/server.config

# debconf get and set commands
d_get () {
  echo "GET $1" | debconf-communicate | awk '{print $2}'
}

d_set () {
  echo "SET $@" | debconf-communicate
}

if [ -z "$rw" ]; then
  rw=/var/state/lessdisks
fi

cd $rw

# TODO only populate the new debconf database with values relevent to dexconf,
#   which would save a lot of ram
tar cpf - $dirs | tar xpf - 

for a in $dirs ; do
  mount --bind $rw/$a $a
done

# TODO only use certain xdebconfigurator options...
xdebconfigurator > /tmp/somelogfile 2>&1

# TODO test for existance of debconf-communicate
keyboard_model="$(d_get xserver-xfree86/config/inputdevice/keyboard/model)"
if [ -z "$keyboard_model" ]; then
  echo "WARNING: keyboard not detected, setting keyboard model to pc104"
  d_set xserver-xfree86/config/inputdevice/keyboard/model pc104
fi

test -r $rw/etc/XF86Config && mv -f $rw/etc/XF86Config $rw/etc/XF86Config.old
test -r $rw/etc/XF86Config-4 && mv -f $rw/etc/XF86Config-4 $rw/etc/XF86Config-4.old
dexconf -o $rw/etc/XF86Config

cd $rw/etc

xserver_package=$(d_get shared/default-x-server)

case $xserver_package in
  xserver-xfree86) x_link=XFree86 ;;
  *) x=$(echo $xserver_package | cut -d "-" -f 2 | tr [A-Z] [a-z]) 
  XF86_$x ;;
esac

test -e X && mv -f X X.old
if [ -x /usr/bin/X11/$x_link ]; then
  ln -sf /usr/bin/X11/$x_link X
elif [ -x /usr/X11R6/bin/$x_link ]; then
  ln -sf /usr/X11R6/bin/$x_link X
elif [ -x /usr/bin/$x_link ]; then
  ln -sf /usr/bin/$x_link X
else
  echo "WARNING: X server $x_link not installed"
  echo "you may need to:"
  echo "apt-get install $xserver_package"
  # package can be installed later, so make a best guess...
  ln -sf /usr/bin/X11/$x_link X
  sleep 10
fi

# clear these out, since they take up so much ram...
for d in $dirs; do
  rm -rf $rw/$d
done

umount $dirs
