···
nixpkgs.lib.nixosSystem {
+
self.nixosModules.did-method-plc
+
self.nixosModules.jetstream
self.nixosModules.spindle
···
···
# as SQLite is incompatible with them. So instead we
# mount the shared directories to a different location
# and copy the contents around on service start/stop.
+
source = "$TANGLED_VM_DATA_DIR/caddy";
+
target = config.services.caddy.dataDir;
source = "$TANGLED_VM_DATA_DIR/knot";
target = "/mnt/knot-data";
···
target = "/var/log/spindle";
# This is fine because any and all ports that are forwarded to host are explicitly marked above, we don't need a separate guest firewall
networking.firewall.enable = false;
+
# resolve `*.tngl.boltless.dev` to host
+
services.dnsmasq.enable = true;
+
services.dnsmasq.settings.address = "/tngl.boltless.dev/10.0.2.2";
time.timeZone = "Europe/London";
+
services.timesyncd.enable = lib.mkVMOverride true;
services.getty.autologinUser = "root";
environment.systemPackages = with pkgs; [curl vim git sqlite litecli];
services.tangled.knot = {
···
+
# overriding package version to support emails
+
package = pkgs.pds.overrideAttrs (old: rec {
+
src = pkgs.fetchFromGitHub {
+
owner = "bluesky-social";
+
hash = "sha256-t8KdyEygXdbj/5Rhj8W40e1o8mXprELpjsKddHExmo0=";
+
pnpmDeps = pkgs.pnpm_9.fetchDeps {
+
sourceRoot = old.sourceRoot;
+
hash = "sha256-lQie7f8JbWKSpoavnMjHegBzH3GB9teXsn+S2SLJHHU=";
+
PDS_JWT_SECRET = "8cae8bffcc73d9932819650791e4e89a";
+
PDS_ADMIN_PASSWORD = "d6a902588cd93bee1af83f924f60cfd3";
+
PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX = "2e92e336a50a618458e1097d94a1db86ec3fd8829d7735020cbae80625c761d7";
+
PDS_EMAIL_SMTP_URL = envVarOr "TANGLED_VM_PDS_EMAIL_SMTP_URL" null;
+
PDS_EMAIL_FROM_ADDRESS = envVarOr "TANGLED_VM_PDS_EMAIL_FROM_ADDRESS" null;
+
PDS_DID_PLC_URL = "http://localhost:8080";
+
PDS_HOSTNAME = "pds.tngl.boltless.dev";
+
services.plc.enable = true;
+
websocketUrl = "ws://localhost:3000/xrpc/com.atproto.sync.subscribeRepos";
+
configFile = pkgs.writeText "Caddyfile" ''
+
intermediate_lifetime 3599d
+
plc.tngl.boltless.dev {
+
reverse_proxy http://localhost:8080
+
*.pds.tngl.boltless.dev, pds.tngl.boltless.dev {
+
reverse_proxy http://localhost:3000
+
jetstream.tngl.boltless.dev {
+
reverse_proxy http://localhost:6008
+
knot.tngl.boltless.dev {
+
reverse_proxy http://localhost:6444
+
spindle.tngl.boltless.dev {
+
reverse_proxy http://localhost:6555
# So we don't have to deal with permission clashing between
# blank disk VMs and existing state