localsmesh raw
1 #!/bin/bash
2 # Launch a clean local smesh stack: relay + LibreWolf with signer extension.
3 set -euo pipefail
4
5 SMESH_ROOT="$(cd "$(dirname "$0")" && pwd)"
6 XPI="$SMESH_ROOT/dist/smesh-signer.xpi"
7 PROFILE="$HOME/.librewolf/smesh-dev"
8 URL="${1:-http://127.0.0.1:3334}"
9 RELAY="$SMESH_ROOT/smesh"
10 RELAY_PID=""
11
12 cleanup() {
13 [ -n "$RELAY_PID" ] && kill "$RELAY_PID" 2>/dev/null || true
14 }
15 trap cleanup EXIT
16
17 # Always rebuild XPI (extension code may have changed).
18 mkdir -p "$SMESH_ROOT/dist"
19 (cd "$SMESH_ROOT/web/ext" && zip -r "$XPI" .)
20
21 # Kill existing LibreWolf and relay.
22 pkill -f librewolf 2>/dev/null && sleep 1 || true
23 pkill -f "$RELAY" 2>/dev/null && sleep 1 || true
24
25 # Start the relay (from project root so relative paths work).
26 cd "$SMESH_ROOT"
27 if [ -x "$RELAY" ]; then
28 echo "starting relay..."
29 "$RELAY" &
30 RELAY_PID=$!
31 sleep 2
32 if ! kill -0 "$RELAY_PID" 2>/dev/null; then
33 echo "relay failed to start"
34 exit 1
35 fi
36 echo "relay running (pid $RELAY_PID)"
37 else
38 echo "warning: relay binary not found at $RELAY, skipping"
39 fi
40
41 # Wipe and recreate the dev profile.
42 rm -rf "$PROFILE"
43 mkdir -p "$PROFILE/extensions"
44
45 # Prefs: unsigned extensions, no whitelist gate, console logging.
46 cat > "$PROFILE/user.js" <<'PREFS'
47 user_pref("xpinstall.signatures.required", false);
48 user_pref("extensions.autoDisableScopes", 0);
49 user_pref("xpinstall.whitelist.required", false);
50 user_pref("devtools.console.stdout.content", true);
51 user_pref("privacy.resistFingerprinting", false);
52 user_pref("ui.systemUsesDarkTheme", 1);
53 user_pref("layout.css.prefers-color-scheme.content-override", 0);
54 PREFS
55
56 # Install the signer extension.
57 cp "$XPI" "$PROFILE/extensions/signer@smesh.lol.xpi"
58
59 echo "profile: $PROFILE"
60 librewolf -profile "$PROFILE" "$URL"
61
62 # When browser exits, cleanup kills the relay via trap.
63