- setup_new: asks for Tier 2 config repo URL (personal/private)
- Automatically sets up git remote with provided URL
- Simplified join flow - no grapho URL prompt needed
- Copy config URL + age key to clipboard (not nix run commands)
The grapho flake URL is already known (user ran nix run from it).
The config repo is where personal secrets/config get stored.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Prompt for grapho flake URL and branch (defaults to master)
- Substitute into nix run commands in output
- Auto-copy instructions to clipboard (xclip/wl-copy/pbcopy)
- Apply same changes to both setup_new and setup_join
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Users running via nix run don't have ./setup locally,
so show the full nix run command in output messages.
Uses generic placeholder for repo URL.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The setup script runs without a TTY in nix run, so GPG
pinentry fails. Use --no-gpg-sign for the initial commit.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Extract public key from generated file instead of parsing
stderr through a pipe, which could cause blocking.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
age-keygen outputs "Public key:" but grep was searching for
lowercase "public key", causing silent exit with pipefail.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update Quick Start to use HTTPS (no SSH key needed)
- Keep SSH instructions for push access
- Use actual git.qrty.ink URLs in examples
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use ssh://git@server:2222/user/repo.git format for non-standard
SSH ports in README and flake.nix examples.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Rename app binary from unsbs-setup to usync-setup
- Update README to use git+ssh:// URLs for custom git servers
- Remove GitHub-specific references
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add flake app so setup can be run with: nix run .
- Update README with comprehensive setup guide for:
- First computer (initial setup)
- Additional computers (joining)
- Mobile device pairing
- NixOS module usage
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The cleanup_camera trap handler couldn't access local variables
(ffmpeg_pid, tmpdir) when triggered, causing "unbound variable"
errors with set -u. Fixed by using global paths with $$ suffix
that the trap can reference directly.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add ./setup script for single-command device initialization
- Interactive menu: new setup, join existing, or pair mobile
- Bootstrap from git repo + age key: ./setup <url> <key>
- Mobile pairing with live camera QR scanning
- Enhance usync with device management commands
- usync init: bootstrap from config repo
- usync invite: show QR for mobile
- usync add-device: add device by ID
- usync join: join existing setup
- Mobile/GrapheneOS optimizations
- Live camera preview with targeting box (ffmpeg + SDL)
- Auto-detect QR codes without manual capture
- Syncthing pending device detection
- Simplify nix develop shell message
- Add ffmpeg, zbar, qrencode, age, sops to devShell
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Evaluates commercial potential of personal data infrastructure:
- Market opportunity analysis
- Four business model options
- Financial projections
- Go-to-market strategy
- Competitive landscape
- Team and funding requirements
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
A NixOS-based system for managing personal data across three tiers:
- Tier 1: Configuration (shareable via git)
- Tier 2: Syncable data (nb + Syncthing)
- Tier 3: Large data (self-hosted services + backup)
Includes:
- NixOS modules for nb, Syncthing, backup (restic)
- Server modules for Forgejo, Immich, Jellyfin
- Helper scripts (usync, ustatus)
- Comprehensive documentation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>