# 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** (Git forge) - `knot.commonscomputer.com:5555` - **Tangled Spindle** (CI runner) - `spindle.commonscomputer.com:6555` All services are proxied through Caddy with automatic HTTPS. ## 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 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 <