#!/bin/sh

set -e
set -u

echo "Generate GNOME sessions files"

ORIG_SHELL_DESKTOP_FILE="/usr/share/applications/org.gnome.Shell.desktop"
TAILS_SHELL_DESKTOP_FILE="/usr/share/gdm/greeter/applications/gdm-shell-tails.desktop"

ORIG_SESSION_FILE="/usr/share/gnome-session/sessions/gnome.session"
TAILS_SESSION_FILE="/usr/share/gnome-session/sessions/gdm-tails.session"

create_gdm_shell_tails_desktop_file() {
    if ! grep -q --fixed-strings --line-regexp "Exec=/usr/bin/gnome-shell" \
            "${ORIG_SHELL_DESKTOP_FILE}"; then
        echo "Couldn't find expected exec line in GNOME Shell's .desktop file:" >&2
        echo "(${ORIG_SHELL_DESKTOP_FILE})" >&2
        exit 1
    fi
    sed -E "s,^Exec=/usr/bin/gnome-shell$,Exec=/usr/bin/gnome-shell --mode=gdm-tails," \
        "${ORIG_SHELL_DESKTOP_FILE}" \
        > "${TAILS_SHELL_DESKTOP_FILE}"
}

create_tails_session_file() {
    if ! grep -q -E \
            "^RequiredComponents=org\.gnome\.Shell;" "${ORIG_SESSION_FILE}" || \
       ! grep -q --fixed-strings --line-regexp \
            "Name=GNOME" "${ORIG_SESSION_FILE}"; then
        echo "Couldn't find expected Name and RequiredComponents lines in GNOME's session file:" >&2
        echo "(${ORIG_SESSION_FILE})" >&2
        exit 1
    fi
    sed -E \
        -e "s,^RequiredComponents=org\.gnome\.Shell;,RequiredComponents=gdm-shell-tails;tails-greeter;," \
        -e "s,^Name=GNOME$,Name=Display Manager," \
        -e "/^Name\[/d" \
        "${ORIG_SESSION_FILE}" \
        > "${TAILS_SESSION_FILE}"
}

create_gdm_shell_tails_desktop_file
create_tails_session_file
