#!/usr/bin/env bash # Launch NexusOS services and open the UI as a standalone Edge app window. # Closing the app window shuts the services back down (matches the launcher's # "closing the window shuts it down" promise). NEXUS_ROOT="$(cd "$(dirname "$(realpath "$0")")/.." && pwd)" EDGE_PROFILE="$HOME/.config/nexus-edge" # If the app is already open, just raise another window in the existing # instance and leave the services alone — this launch doesn't own them. if pgrep -f "user-data-dir=$EDGE_PROFILE" >/dev/null 2>&1; then exec microsoft-edge-stable --user-data-dir="$EDGE_PROFILE" \ --app=http://localhost:5173 fi # Own the services (and stop them on exit) only if WE start them. If the stack # is already up — started elsewhere (ncp start, the control panel) — this launch # is just a viewer and must not tear down someone else's services on close. # Backend on :8000 is the sentinel for "stack already running". if curl -s --max-time 1 http://localhost:8000/ >/dev/null 2>&1; then OWN_SERVICES=0 else OWN_SERVICES=1 fi "$NEXUS_ROOT/management/nexus-cli.sh" start # Shut the services back down whenever this script ends — whether Edge exits # normally (window closed) or the script is itself terminated (SIGTERM/SIGHUP # from the session/WM). A plain trailing line only covers the clean exit; an # EXIT trap covers every path out. Only armed when we started the stack. [ "$OWN_SERVICES" = 1 ] && trap '"$NEXUS_ROOT/management/nexus-cli.sh" stop' EXIT # Run the app in its OWN Edge profile (--user-data-dir). Without this, the # --class=NexusOS window becomes the Chromium "singleton owner" of the # default profile, so every later browser window — a clicked link, or even # normal browsing — attaches to it and inherits WM_CLASS=NexusOS. A separate # profile makes this a distinct instance: only the app window is NexusOS-class; # regular browsing (default profile) stays its own class, and external links # clicked in the app open in the default browser. # # This invocation owns the dedicated profile's Chromium instance and runs in # the FOREGROUND, blocking here until the app window is closed. --disable-background-mode # is essential: without it Edge keeps a background process alive after the last # window closes, so this call never returns and the services are never stopped. microsoft-edge-stable \ --user-data-dir="$EDGE_PROFILE" \ --no-first-run \ --no-default-browser-check \ --disable-background-mode \ --class=NexusOS \ --app=http://localhost:5173