#!/bin/sh

set -xe

for terminal in x-terminal-emulator xdg-terminal weston-terminal gnome-terminal
do
  if terminal_command=$(command -v $terminal); then break; fi
done

case $(realpath "$terminal_command") in
  *gnome-terminal*)
    # gnome-terminal tries to run a single `gnome-terminal-server` process and any attempt
    # to launch a second instance appears on the desktop that owns the first terminal.
    #
    # What we do is launch the gnome-terminal-server with a distinct --app-id and,
    # after waiting for it to start, launch gnome-terminal with the same --app-id.

    # On Ubuntu 16.04 and 18.04 gnome-terminal-server is in /usr/lib/gnome-terminal
    # On Fedora and Ubuntu 20.04 gnome-terminal-server is in /usr/libexec/
    # On Arch gnome-terminal-server is in /usr/lib/
    for terminal_server in /usr/libexec/gnome-terminal-server /usr/lib/gnome-terminal/gnome-terminal-server /usr/lib/gnome-terminal-server
    do
      if [ -x "$terminal_server" ];  then break; fi
    done

    if ! gdbus introspect --session --dest io.mirserver.miriwayTerminal --object-path /io/mirserver/Terminal > /dev/null 2>&1
    then
      $terminal_server --app-id  io.mirserver.miriwayTerminal&
      gdbus wait       --session io.mirserver.miriwayTerminal
    fi

    if command -v gnome-terminal.real > /dev/null 2>&1
    then terminal=gnome-terminal.real
    else terminal=gnome-terminal
    fi

    exec $terminal --app-id io.mirserver.miriwayTerminal "$@";;

  *)
    # Other terminals default to running as a separate process, which suits us.
    exec $terminal "$@"
esac
