Artifact 2b4989e21f32e4267efc61bff968efc3007335086f766f12dda3b415000cc96f:
- File
.env.example
— part of check-in
[6be29eb1b4]
at
2026-08-25 22:08:06
on branch trunk
— Name the per-machine config .env.local, and ship an example
dev.local.mk said nothing about what it held, so the only way to learn what `make dev` needed was to read someone's copy — and there was no copy to read, because it is not committed.
.env.local now holds one named key per setting instead of a single 1,697-character DEV_ARGS line, and the Makefile composes the flags. A key left empty is omitted from the command line rather than passed as an empty string, which the server would read as a deliberate value. Corpus repositories are named once each and their paths derived, rather than --repo name=path repeated twenty-three times.
.env.example is committed and documents every key, including which two are secrets and which of --data and --oltp survives a rebuild.
dev.local.mk is still included, so an existing checkout keeps working, and both names are ignored. Verified equivalent: the old file and the new one produce the same 8 flags and the same 23 repositories.
`make dev-args` prints the composed flags without starting anything. (user: dmestas, size: 2232) [annotate] [blame] [check-ins using]
# Per-machine settings for `make dev`. Copy to .env.local and edit: # # cp .env.example .env.local # # .env.local is ignored and must stay that way — QUARRY_NOTIFY_KEY is a # secret. Read by Make's `-include`, so this is Make syntax: KEY=value, # and NO quotes. Make keeps quotes literally rather than stripping them # the way a shell does, so "foo" would pass the quotes through as part of # the value. # # Every key is optional. An empty one is left off the command line # entirely rather than passed as an empty string, which the server would # read as a deliberate value. # # `make dev-args` prints what these amount to without starting anything. # Where the server listens. A LAN or tailnet address makes the forge # reachable from other machines; 127.0.0.1 keeps it to this one. QUARRY_ADDR=127.0.0.1:8950 # Derived state: per-repository indexes, built archives, the event store. # Disposable — it rebuilds from the stores — and private to one node. QUARRY_DATA=/path/to/quarry-data # Forge truth: accounts, capability grants, webhooks, praise, mirrors, # saved views, CI runs. Derivable from nothing, so it is the one thing a # rebuild cannot recover. Defaults to $(QUARRY_DATA)/oltp.db; set it only # when several nodes must share one forge's accounts. QUARRY_OLTP= # A directory of repositories to serve, discovered by name. QUARRY_REPOS_ROOT= # Repositories under one root, named once each; the path is derived as # $(QUARRY_CORPUS)/<name>, which beats repeating --repo name=path. QUARRY_CORPUS=/path/to/corpus QUARRY_CORPUS_REPOS= \ example-one example-two # Repositories outside that root, as name=path pairs. QUARRY_EXTRA_REPOS=quarry=/path/to/quarry # Which repository is the forge's own issue tracker — where the "file a # ticket" links across the fleet lead. Empty means no such repository is # designated and the links are not drawn. QUARRY_TRACKER= # dagnats control plane for CI. Empty disables CI entirely. QUARRY_DAGNATS= # Notification sink, and its signing key. QUARRY_NOTIFY= # SECRET. Never commit, never copy to a shared host or into an image. QUARRY_NOTIFY_KEY= # Server errors, appended. The in-process journal restarts with the # server; this file survives it. QUARRY_ERRORLOG=