mirror of
https://github.com/saphid/frame-control.git
synced 2026-10-06 01:00:18 +02:00
Package the Frame Control web UI as an installable Electron Mac app and bring in the tooling built alongside it. - app/: Electron wrapper that starts ui/server.py on a free loopback port, hardened window (sandbox, no navigation, runAsNode fuse off), login-shell PATH so Homebrew tools work from Finder, first-run offer to run connect.sh, ad-hoc signed DMG/zip via electron-builder. - ui/: headset view (OpenVR screenshots), device status, library, Steam "Get games" (owned games, install, store search), Android apps as persistent Lepton instances with a rated F-Droid catalogue and a private compatibility database, Android display controls over ADB, file and clipboard transfer, Flatpaks, remote and power actions. - apk-catalog/, compat-db/, frame/: catalogue build pipeline, Lakebed capsule for compatibility reports, Frame-side launchers. - tests/ and CI: server guard and validation tests plus Steam helper tests, run on Python 3.9 with script and app syntax checks. - Docs: README leads with the Mac app; new Android, panels, Steam games and field-notes docs; security notes on LAN-exposed ADB ports. Screenshot values for the headset's IP and Wi-Fi name are placeholders. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
33 lines
1.7 KiB
Bash
33 lines
1.7 KiB
Bash
#!/bin/bash
|
|
# Frame-side: run one Android app in its own persistent Lepton instance.
|
|
# Copied into ~/Applications/Android/<package>/launch.sh by the Mac-side
|
|
# installer, next to app.apk, instance.id and (for 2D apps) the empty
|
|
# lepton-show-flatscreen marker. A non-Steam shortcut points at this file.
|
|
#
|
|
# Why not Lepton Development: it wipes every app it installed when it exits.
|
|
# A "steamlaunch" context (SteamAppId set) keeps app data in
|
|
# compatdata/<id>/internal across restarts and APK updates. Pattern from
|
|
# frame/t3code/launch.sh; see docs/apks.md.
|
|
set -euo pipefail
|
|
|
|
DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
LEPTON="$HOME/.local/share/Steam/steamapps/common/Lepton/lepton"
|
|
[[ -x "$LEPTON" ]] || { echo "Lepton isn't installed (Steam app 3056000)" >&2; exit 1; }
|
|
for need in "$DIR/app.apk" "$DIR/instance.id"; do
|
|
[[ -f "$need" ]] || { echo "launch.sh: missing $need" >&2; exit 1; }
|
|
done
|
|
|
|
# A number that isn't a real Steam app; it names this app's Lepton context.
|
|
export SteamAppId="$(cat "$DIR/instance.id")"
|
|
export STEAM_COMPAT_INSTALL_PATH="$DIR"
|
|
# Must be under ~/.local/share/Steam: only that tree is mounted in the container.
|
|
export STEAM_COMPAT_DATA_PATH="$HOME/.local/share/Steam/steamapps/compatdata/$SteamAppId"
|
|
export STEAM_COMPAT_SHADER_PATH="$HOME/.local/share/Steam/steamapps/shadercache/$SteamAppId"
|
|
export STEAM_FOSSILIZE_DUMP_PATH="$STEAM_COMPAT_SHADER_PATH/fozpipelinesv6/steamapp_pipeline_cache"
|
|
mkdir -p "$STEAM_COMPAT_DATA_PATH" "$STEAM_FOSSILIZE_DUMP_PATH"
|
|
|
|
# Lepton's setpgid --foreground re-exec needs a terminal that Steam shortcuts
|
|
# and SSH don't have; give it its own session instead.
|
|
export IS_PARENT=true
|
|
exec setsid --wait "$LEPTON" waitforexitandrun -- "$DIR/app.apk"
|