Monorepo for Tangled

flake: add local-dev app, DID-based label defaults in devshell

Add nix run .#local-dev app that wraps contrib/local-dev.sh for the tmux
orchestrator. Update the devshell hook to read the owner DID from
nix/vm-data/atproto/owner-did (if present from a previous session) and
construct TANGLED_LABEL_DEFAULTS and TANGLED_LABEL_GFI env vars.

Also add tmux to devshell nativeBuildInputs and ensure the VM launcher
creates the atproto data directory when in local-dev mode.

Set TANGLED_DEV=true in local-dev mode so the appview uses DevDirectory
for .test TLD handle resolution via the local PDS.

Signed-off-by: Alessio Caiazza <code.git@caiazza.info>

+26
+26
flake.nix
··· 185 185 pkgs.tailwindcss 186 186 pkgs.nixos-shell 187 187 pkgs.redis 188 + pkgs.tmux 188 189 pkgs.coreutils # for those of us who are on systems that use busybox (alpine) 189 190 packages'.lexgen 190 191 packages'.treefmt-wrapper ··· 198 199 199 200 # When TANGLED_VM_LOCAL_DEV=1, point the appview at local AT Protocol services 200 201 if [[ "''${TANGLED_VM_LOCAL_DEV:-0}" != "0" ]]; then 202 + export TANGLED_DEV=true 201 203 export TANGLED_PLC_URL="http://localhost:2582" 202 204 export TANGLED_PDS_HOST="http://localhost:2583" 203 205 export TANGLED_PDS_ADMIN_SECRET="tangled-local-dev" 204 206 export TANGLED_JETSTREAM_ENDPOINT="ws://localhost:6008/subscribe" 207 + 208 + # If a DID file exists from a previous session, set up label defaults 209 + _did_file="$PWD/nix/vm-data/atproto/owner-did" 210 + if [[ -s "$_did_file" ]]; then 211 + _did=$(cat "$_did_file") 212 + _base="at://$_did/sh.tangled.label.definition" 213 + export TANGLED_LABEL_DEFAULTS="$_base/wontfix,$_base/good-first-issue,$_base/duplicate,$_base/documentation,$_base/assignee" 214 + export TANGLED_LABEL_GFI="$_base/good-first-issue" 215 + echo "local-dev: label defaults loaded from $_did" 216 + fi 205 217 echo "local-dev: appview configured for local AT Protocol stack" 206 218 fi 207 219 ''; ··· 264 276 cd "$rootDir" 265 277 266 278 mkdir -p nix/vm-data/{knot,repos,spindle,spindle-logs} 279 + if [[ "''${TANGLED_VM_LOCAL_DEV:-0}" != "0" ]]; then 280 + mkdir -p nix/vm-data/atproto 281 + fi 267 282 268 283 export TANGLED_VM_DATA_DIR="$rootDir/nix/vm-data" 269 284 exec ${pkgs.lib.getExe ··· 275 290 ''; 276 291 }) 277 292 + /bin/launch-vm; 293 + }; 294 + local-dev = { 295 + type = "app"; 296 + program = toString (pkgs.writeShellScript "local-dev" '' 297 + export PATH="${pkgs.tmux}/bin:$PATH" 298 + rootDir=$(jj --ignore-working-copy root 2>/dev/null || git rev-parse --show-toplevel 2>/dev/null) || { 299 + echo "error: can't find repo root" 300 + exit 1 301 + } 302 + exec bash "$rootDir/contrib/local-dev.sh" "$@" 303 + ''); 278 304 }; 279 305 gomod2nix = { 280 306 type = "app";