This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

tools.worldview: add spy satellite simulator

+112
+112
tools/worldview/flake-module.nix
··· 1 + { ... }: 2 + { 3 + perSystem = 4 + { pkgs, ... }: 5 + let 6 + src = pkgs.fetchFromGitHub { 7 + owner = "audibleblink"; 8 + repo = "worldview"; 9 + rev = "8fc39cf28d2334d4902bc552ec4a18f3c746af20"; 10 + hash = "sha256-effKF2cxG6r5Aw4DT6ZuJzbpRCBeFTQS3wxdh57AHEI="; 11 + }; 12 + in 13 + { 14 + packages.worldview = pkgs.writeShellApplication { 15 + name = "worldview"; 16 + runtimeInputs = [ 17 + pkgs.bun 18 + pkgs.ungoogled-chromium 19 + pkgs.python3 20 + pkgs.curl 21 + pkgs.gnused 22 + ]; 23 + text = '' 24 + # Required env vars 25 + if [ -z "''${GOOGLE_MAPS_TILE_API_KEY:-}" ]; then 26 + echo "ERROR: GOOGLE_MAPS_TILE_API_KEY is not set" >&2 27 + echo "Get one at: https://console.cloud.google.com/google/maps-apis/credentials" >&2 28 + echo "Export it: export GOOGLE_MAPS_TILE_API_KEY=your_key_here" >&2 29 + exit 1 30 + fi 31 + 32 + get_free_port() { 33 + python3 -c 'import socket; s=socket.socket(); s.bind(("",0)); print(s.getsockname()[1]); s.close()' 34 + } 35 + 36 + FRONTEND_PORT=$(get_free_port) 37 + BACKEND_PORT=$(get_free_port) 38 + 39 + WORKDIR="''${XDG_DATA_HOME:-$HOME/.local/share}/worldview" 40 + mkdir -p "$WORKDIR" 41 + 42 + # Copy source if not yet present or if version changed 43 + MARKER="$WORKDIR/.version" 44 + CURRENT_REV="8fc39cf28d2334d4902bc552ec4a18f3c746af20" 45 + if [ ! -f "$MARKER" ] || [ "$(cat "$MARKER")" != "$CURRENT_REV" ]; then 46 + echo "Setting up worldview source..." 47 + rm -rf "$WORKDIR/src" 48 + cp -r ${src} "$WORKDIR/src" 49 + chmod -R u+w "$WORKDIR/src" 50 + echo "$CURRENT_REV" > "$MARKER" 51 + rm -f "$WORKDIR/.installed" 52 + fi 53 + 54 + cd "$WORKDIR/src" 55 + 56 + # Install dependencies if needed 57 + if [ ! -f "$WORKDIR/.installed" ]; then 58 + echo "Installing dependencies..." 59 + bun install 60 + touch "$WORKDIR/.installed" 61 + fi 62 + 63 + # Patch hardcoded ports in source 64 + sed -i 's|const PORT = [0-9]*;|const PORT = '"$FRONTEND_PORT"';|' src/server.ts 65 + sed -i 's|http://localhost:[0-9]*"|http://localhost:'"$BACKEND_PORT"'"|g' src/config.ts 66 + 67 + cleanup() { 68 + echo "Shutting down..." 69 + # Kill entire process group to catch bun child processes 70 + kill -- -$$ 2>/dev/null || true 71 + } 72 + trap cleanup EXIT INT TERM 73 + 74 + export GOOGLE_MAPS_TILE_API_KEY 75 + export SERVER_PORT="$BACKEND_PORT" 76 + ''${AISSTREAM_API_KEY:+export AISSTREAM_API_KEY} 77 + 78 + # Start backend server 79 + bun run --hot src/server/index.ts & 80 + 81 + # Start frontend dev server 82 + bun run --hot src/server.ts & 83 + 84 + # Wait for frontend to be ready 85 + for _ in $(seq 1 30); do 86 + if curl -s "http://localhost:$FRONTEND_PORT" > /dev/null 2>&1; then 87 + break 88 + fi 89 + sleep 1 90 + done 91 + 92 + echo "WorldView is running at http://localhost:$FRONTEND_PORT" 93 + 94 + # Open in chromium app mode with a dedicated profile 95 + CHROME_DIR="$WORKDIR/chromium-profile" 96 + # Remove stale singleton locks from crashed sessions 97 + rm -f "$CHROME_DIR/SingletonLock" "$CHROME_DIR/SingletonCookie" "$CHROME_DIR/SingletonSocket" 98 + mkdir -p "$CHROME_DIR" 99 + chromium \ 100 + --user-data-dir="$CHROME_DIR" \ 101 + --no-first-run \ 102 + --no-default-browser-check \ 103 + --disable-gpu-compositing \ 104 + --app="http://localhost:$FRONTEND_PORT" & 105 + CHROME_PID=$! 106 + 107 + # Wait for chromium to exit (closing the window kills the process) 108 + wait "$CHROME_PID" 2>/dev/null || true 109 + ''; 110 + }; 111 + }; 112 + }