#!/bin/sh
#/usr/bin/sdm-wm

# selects window manager using Xdialog and debian alternatives 
# system

# TODO support window managers not in the debian alternatives 
# system

if [ -r ~/.sdmrc ]; then
  . ~/.sdmrc
fi

# check the debian alternatives system for available window managers
availablewm=$(/usr/sbin/update-alternatives --display \
  x-window-manager | awk '{print $1}' | egrep bin)

if [ -r /etc/sdm/windowmanagers ]; then
  availablewm="$availablewm $(egrep -v ^# /etc/sdm/windowmanagers | awk -F "=" '{print $2}')"
fi

wmlist=
for wm in $availablewm; do
  if [ -x "$wm" ]; then
    wmlist="$(basename $wm) $wm off $wmlist"
  fi
done

if [ -n "$(which wmanager)" ]; then
  wmanager="wmanager $(which wmanager) off"
fi

if [ -n "$(which selectwm)" ]; then
  selectwm="selectwm $(which selectwm) off"
fi

windowmanager=$(Xdialog --stdout --radiolist \
  "which window manager would you like to try?" 0 0 0 \
  default "default window manager" on \
  $wmlist \
  $wmanager \
  $selectwm \
  sdm-wm "sdm window manager selection" off \
  browse "browse for window manager" off)

if [ "0" != "$?" ]; then
  xmessage -center "cancel pressed, exiting..."
  exit 1
fi

if [ "browse" = "$windowmanager" ]; then
  windowmanager=$(Xdialog --stdout --fselect "/usr/bin" 0 0)
  if [ ! -x "$windowmanager" ]; then
    windowmanager=
  fi
fi

Xdialog --yesno "Would you like to set $windowmanager as your \
  default window manager?" 0 0

if [ "0" = "$?" ]; then
  echo "windowmanager=$windowmanager" > ~/.sdmrc
fi

if [ "sdm-wm" = "$windowmanager" ]; then
  exec sdm-wm
fi
