#!/bin/sh
#
# fluxbox startup-script:
#
# Lines starting with a '#' are ignored.

# Change your keymap:
xmodmap "/root/.Xmodmap"

# merge xresource settings
xrdb -merge ~/.Xresources

# set keyboard layout
fbsetkb $(cat ~/.fluxbox/kblayout)

# setup bookmarks for file manager
gtk-bookmarks-update

# start connection manager daemon if it is not running already
# it is needed for connman-gtk to work properly
connmand &

# Share common directories with guest user. This is necessary
# because some apps like chromium must be running under guest
for dir in Desktop Documents Downloads Music Pictures Public Templates Videos; do
   if ! mountpoint /root/$dir; then
      mount --bind /home/guest/$dir /root/$dir
   fi
done

# set background color and big wait mouse cursor
xsetroot -solid '#111111'
xsetroot -xcf /usr/share/icons/breeze_cursors/cursors/watch 37

# disable screen blanking
xset s off
xset -dpms

# preload compton and fluxbox to cache
(compton --help; fluxbox --help; xfce4-panel --help) >/dev/null 2>&1

# unmute and set sound volume
pamixer -u --set-volume 70

# Keep black screen for first second while the sound plays.
# This slows startup a little, but it is nicer effect.
SND=/usr/share/sounds/startup.wav
if [ -r $SND ]; then
   cat $SND > /dev/null # preload
   aplay $SND &
   sleep 1 &
   SOUNDPID=$!
fi

# Debian-local change:
#   - fbautostart has been added with a quick hack to check to see if it
#     exists. If it does, we'll start it up by default.
which fbautostart > /dev/null
if [ $? -eq 0 ]; then
    fbautostart &
fi

# We need to postpone compton after fluxbox starts, else it won't set
# the transparency of toolbar properly... So we check the fehbg file,
# which is created by fluxbox at the phase when it sets background.
# Once the file exist, fluxbox-toolbar is already started

SIGNAL1=~/.fehbg
SIGNAL2=~/.fehbg2

rm -f $SIGNAL1 2>/dev/null
rm -f $SIGNAL2 2>/dev/null

(
   while [ ! -e $SIGNAL1 ]; do
      sleep 0.1
   done
   touch $SIGNAL2

   exec compton --sw-opti -e 0.9 --shadow-exclude 'class_g="xlunch-windowed"' --fade-exclude 'role*="fluxbox-toolbar"' --opacity-rule '70:role*="fluxbox-toolbar"' --no-fading-destroyed-argb -D 5 -c -f -l -2 -t -2 -r 0 -o 1 -z --shadow-exclude 'bounding_shaped'
) &

# We wait after background is set and compton is started
(
   while [ ! -e $SIGNAL2 ]; do
      sleep 0.1
   done

   rm -f $SIGNAL2

   exec volumeicon
) &

# gen screen resolutions to fluxbox menu
xrandr 2>/dev/null | fgrep x | fgrep . | sort -n | tr -s " " | cut -d " " -f 2 \
| sed -r "s:(.*):[exec] (\\1) {fbscreensize \\1}:" > ~/.fluxbox/menu_resolution

# In all cases, wait for the sound sleeper.
# If startup took longer (sound completed already), no extra wait
wait $SOUNDPID

# If we are running inside VirtualBox or vmware,
# switch to bigger screen size right away
if [ "$(virt-what | egrep -i "virtualbox|vmware")" != "" ]; then
   # this is here to fix some strange virtualbox bug
   # to adjust window size properly
   fbscreensize 1440x900 -n
   fbscreensize 1280x800 -n
fi

# start xfce4 panel in background
xfce4-panel --disable-wm-check --sm-client-disable &

(
   while [ "$(wmctrl -l | grep xfce4-panel)" = "" ]; do
      sleep 0.1
   done
   xprop -id $(wmctrl -l | grep xfce4-panel | cut -d " " -f 1) -format _NET_WM_STRUT 32c -set _NET_WM_STRUT "0,0,0,52"
) &

# And last but not least we start fluxbox.
# Because it is the last app you have to run it with ''exec'' before it.
exec fluxbox
