This repository has no description
0

Configure Feed

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

superconfig / tools / worldview / flake-module.nix
3.8 kB 112 lines
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}