# Commons Computing NixOS Configuration Infrastructure-as-code for Commons Computing's ATProto services. ## Services This flake manages the following services on `asusmini`: - **PDS** (Personal Data Server) - `pds.commonscomputer.com:5556` - **Tangled Knot** (Rust Git forge) - HTTP `5555`, Git SSH `2223` - **Tangled Spindle** (CI runner) - `spindle.commonscomputer.com:6555` All services are proxied through Caddy with automatic HTTPS. The supervised Go-to-Rust cutover is documented in [TANGLED-MIGRATION.md](TANGLED-MIGRATION.md). Do not activate the new configuration before following its backup and migration steps. Administrative SSH stays on port 22; Git SSH on 2223 needs explicit client routing. ## Setup ### Prerequisites ```bash nix develop ``` Or install direnv to automatically get the devshell going. This provides `agenix` and `dnscontrol`. ### Managing Secrets Secrets are managed with [agenix](https://github.com/ryantm/agenix). If you're unfamiliar with agenix, [here](https://www.splitbrain.org/blog/2025-07/27-agenix) is a good introduction. #### Adding a New User's Key 1. Get their SSH public key (ed25519 or RSA) 2. Add it to `secrets/secrets.nix` in the appropriate key list 3. Re-encrypt all secrets: ```bash cd secrets agenix -e pds-env.age # repeat for each secret ``` #### Creating/Editing Secrets ```bash cd secrets agenix -e pds-env.age ``` This opens your `$EDITOR` with the decrypted content. Save and close to re-encrypt. #### Adding New Secrets 1. Add the secret to `secrets/secrets.nix`: ```nix "new-secret.age".publicKeys = allKeys; ``` 2. Create it: ```bash cd secrets agenix -e new-secret.age ``` 3. Reference it in your NixOS config: ```nix age.secrets.new-secret = { file = ../../secrets/new-secret.age; mode = "0400"; owner = "service-user"; }; ``` ### Deployment #### Manual Deployment From the server: ```bash cd /etc/nixos # or wherever this repo is cloned git pull sudo nixos-rebuild switch --flake .#asusmini ``` #### Auto-Update The timer is currently disabled for the Tangled migration. Tangled is pinned to v1.20.0 and uses its own locked dependencies so the tested binaries can be copied to the server without recompilation. Re-enable updates deliberately only after cutover and verification. A systemd timer runs weekly to: 1. Pull latest git changes 2. Run `nix flake update` 3. Commit and push flake.lock changes 4. Run `nixos-rebuild switch` with automatic rollback on failure **Setup required:** ```bash # On the server, generate SSH key for git push ssh-keygen -t ed25519 -f /root/.ssh/commons-nix-deploy -N "" cat /root/.ssh/commons-nix-deploy.pub # Add the public key as a deploy key with write access to the GitHub repo # Configure git to use the key cat >> /root/.ssh/config <