#!/usr/bin/openrc-run
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License, v2

depend() {
    need localmount xdm-setup

    # this should start as early as possible
    after bootmisc consolefont modules netmount
    after readahead-list ypbind autofs openvpn gpm lircmd
    after quota keymaps
    before alsasound

    # Start before X
    use elogind dbus xfs
}

setup_dm() {
    local MY_XDM

    MY_XDM=$(echo "${DISPLAYMANAGER}" | tr '[:upper:]' '[:lower:]')

    NAME=
    case "${MY_XDM}" in
        entrance*)
            EXE=/usr/bin/entrance
            PIDFILE=/run/entrance.pid
            ;;
        gdm|gnome)
            EXE=/usr/bin/gdm
            PIDFILE=/run/gdm/gdm.pid
            START_STOP_ARGS="--background"
            AUTOCLEAN_CGROUP="yes"
            ;;
        wdm)
            EXE=/usr/bin/wdm
            PIDFILE=
            ;;
        gpe)
            EXE=/usr/bin/gpe-dm
            PIDFILE=/run/gpe-dm.pid
            ;;
        lxdm)
            EXE=/usr/bin/lxdm-binary
            PIDFILE=/run/lxdm.pid
            START_STOP_ARGS="--background"
            ;;
        lightdm)
            EXE=/usr/bin/lightdm
            PIDFILE=/run/lightdm.pid
            START_STOP_ARGS="--background"
            ;;
        sddm)
            EXE="/usr/bin/sddm"
            START_STOP_ARGS="-m --background"
            PIDFILE=/run/sddm.pid
            ;;
        *)
            # first find out if there is such executable
            EXE="$(command -v ${MY_XDM} 2>/dev/null)"
            PIDFILE="/run/${MY_XDM}.pid"

            # warn user that he is doing sick things if the exe was not found
            if [ -z "${EXE}" ]; then
                echo "ERROR: Your XDM value is invalid."
                echo "  No ${MY_XDM} executable could be found on your system."
            fi
            ;;
    esac

    if ! [ -x "${EXE}" ]; then
        EXE=/usr/bin/xdm
        PIDFILE=/run/xdm.pid
        if ! [ -x "/usr/bin/xdm" ]; then
            echo "ERROR: Please set your DISPLAYMANAGER variable in /etc/conf.d/xdm,"
            echo "	or install x11-apps/xdm package"
            eend 255
        fi
    fi
}

start() {
    local EXE NAME PIDFILE AUTOCLEAN_CGROUP
    setup_dm

    if [ -f /etc/.noxdm ]; then
        einfo "Skipping ${EXE##*/}, /etc/.noxdm found or \"nox\" bootparam passed."
        rm /etc/.noxdm
        return 0
    fi

    ebegin "Setting up ${EXE##*/}"

    # save the prefered DM
    save_options "service" "${EXE}"
    save_options "name"    "${NAME}"
    save_options "pidfile" "${PIDFILE}"
    save_options "start_stop_args" "${START_STOP_ARGS}"
    save_options "autoclean_cgroup" "${AUTOCLEAN_CGROUP:-no}"

    /etc/X11/startDM.sh
    eend 0
}

stop() {
    local retval

    retval=0

    local myexe myname mypidfile myservice
    myexe=$(get_options "service")
    myname=$(get_options "name")
    mypidfile=$(get_options "pidfile")
    myservice=${myexe##*/}
    yesno "${rc_cgroup_cleanup:-no}" || rc_cgroup_cleanup=$(get_options "autoclean_cgroup")

    [ -z "${myexe}" ] && return 0

    ebegin "Stopping ${myservice}"

    if start-stop-daemon --quiet --test --stop --exec "${myexe}"; then
        start-stop-daemon --stop --exec "${myexe}" --retry TERM/5/TERM/5 \
            ${mypidfile:+--pidfile} ${mypidfile} \
            ${myname:+--name} ${myname}
        retval=${?}
    fi

    eend ${retval} "Error stopping ${myservice}"
    return ${retval}
}

# vim: set ts=4 :
