# gleamtk POC — Relm4 foreign node + Gleam controller cookie := "gleamtk" ui_node := "ui@127.0.0.1" gleam_node := "gleamtk@127.0.0.1" # Build the Relm4 foreign node build-ui: cd ui && cargo build # Build the Gleam controller build-gleam: cd gleam && gleam build # Start epmd if needed, then the UI foreign node ui: build-ui #!/usr/bin/env bash set -euo pipefail if ! pgrep -x epmd >/dev/null 2>&1; then echo "starting epmd…" epmd -daemon sleep 0.3 fi # Prefer nix-shell GTK schema paths when present if command -v pkg-config >/dev/null 2>&1; then _gtk="$(pkg-config --variable=prefix gtk4 2>/dev/null || true)" if [[ -n "${_gtk}" ]]; then export GSETTINGS_SCHEMAS_PATH="${_gtk}/share/gsettings-schemas/$(basename "$(echo ${_gtk}/share/gsettings-schemas/*gtk* 2>/dev/null | awk '{print $1}')"):${GSETTINGS_SCHEMAS_PATH:-}" export XDG_DATA_DIRS="${_gtk}/share:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}" fi fi exec ./ui/target/debug/gleamtk-ui \ --local {{ui_node}} \ --cookie {{cookie}} \ --register gui # Start the Gleam controller (connects to the UI node) gleam: build-gleam #!/usr/bin/env bash set -euo pipefail if ! pgrep -x epmd >/dev/null 2>&1; then epmd -daemon sleep 0.3 fi cd gleam export ERL_FLAGS="-name {{gleam_node}} -setcookie {{cookie}} -kernel inet_dist_use_interface {127,0,0,1}" exec gleam run -- {{ui_node}} # Full demo: UI in background, then controller in foreground run: #!/usr/bin/env bash set -euo pipefail if ! pgrep -x epmd >/dev/null 2>&1; then epmd -daemon sleep 0.3 fi just build-ui just build-gleam ./ui/target/debug/gleamtk-ui --local {{ui_node}} --cookie {{cookie}} & UI_PID=$! trap 'kill $UI_PID 2>/dev/null || true' EXIT sleep 1 cd gleam export ERL_FLAGS="-name {{gleam_node}} -setcookie {{cookie}} -kernel inet_dist_use_interface {127,0,0,1}" gleam run -- {{ui_node}} # Typecheck / compile only check: build-ui build-gleam # Headless distribution smoke (escript ↔ foreign node) smoke: build-ui #!/usr/bin/env bash set -euo pipefail if ! pgrep -x epmd >/dev/null 2>&1; then epmd -daemon sleep 0.3 fi if pidof gleamtk-ui >/dev/null 2>&1; then kill "$(pidof gleamtk-ui)" || true sleep 0.3 fi ./ui/target/debug/gleamtk-ui --local {{ui_node}} --cookie {{cookie}} >/tmp/gleamtk-ui.log 2>&1 & UI_PID=$! trap 'kill $UI_PID 2>/dev/null || true' EXIT sleep 1.5 escript scripts/smoke_dist.escript