8 files changed,
+190,
-403
M
hive.nix
+11,
-0
1@@ -1,2 +1,13 @@
2 result
3 result-*
4+
5+# Devenv
6+.devenv*
7+devenv.local.nix
8+devenv.local.yaml
9+
10+# direnv
11+.direnv
12+
13+# pre-commit
14+.pre-commit-config.yaml
+0,
-21
1@@ -1,21 +0,0 @@
2-{
3- "$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.17.1/.schema/devbox.schema.json",
4- "packages": [
5- "yarn@latest",
6- "bash@latest",
7- "ripgrep@latest",
8- "coreutils@latest",
9- "git@latest",
10- "git+https://git.kilimanjaro.io/vibe"
11- ],
12- "shell": {
13- "init_hook": [
14- "echo 'Welcome to devbox!' > /dev/null"
15- ],
16- "scripts": {
17- "test": [
18- "echo \"Error: no test specified\" && exit 1"
19- ]
20- }
21- }
22-}
+0,
-377
1@@ -1,377 +0,0 @@
2-{
3- "lockfile_version": "1",
4- "packages": {
5- "bash@latest": {
6- "last_modified": "2026-04-07T16:32:49Z",
7- "resolved": "github:NixOS/nixpkgs/dfd9566f82a6e1d55c30f861879186440614696e#bash",
8- "source": "devbox-search",
9- "version": "5.3p9",
10- "systems": {
11- "aarch64-darwin": {
12- "outputs": [
13- {
14- "name": "out",
15- "path": "/nix/store/my9bsdsfxcaxkb400i4xvvh1ahb8pybs-bash-interactive-5.3p9",
16- "default": true
17- },
18- {
19- "name": "man",
20- "path": "/nix/store/5nwbrxj440mxkv8sqzy3d9xsfpswhkkx-bash-interactive-5.3p9-man",
21- "default": true
22- },
23- {
24- "name": "dev",
25- "path": "/nix/store/047i8vx61kv70j0xahh65x1p0gs4bzp5-bash-interactive-5.3p9-dev"
26- },
27- {
28- "name": "doc",
29- "path": "/nix/store/p8v2kq7q82l8cz5axc9lvyj2klib1799-bash-interactive-5.3p9-doc"
30- },
31- {
32- "name": "info",
33- "path": "/nix/store/bqh3ll20jibzdrc42lclk29k144fanak-bash-interactive-5.3p9-info"
34- }
35- ],
36- "store_path": "/nix/store/my9bsdsfxcaxkb400i4xvvh1ahb8pybs-bash-interactive-5.3p9"
37- },
38- "aarch64-linux": {
39- "outputs": [
40- {
41- "name": "out",
42- "path": "/nix/store/f6lsdzsgbh5mxaaa91gykyi8mqmlzpr2-bash-interactive-5.3p9",
43- "default": true
44- },
45- {
46- "name": "man",
47- "path": "/nix/store/87ljrnbjn8w6iqf3bzirh6wd7lpmhvzp-bash-interactive-5.3p9-man",
48- "default": true
49- },
50- {
51- "name": "debug",
52- "path": "/nix/store/zyi5m4r7wma9vvvfzg7r99avh8sxg9m1-bash-interactive-5.3p9-debug"
53- },
54- {
55- "name": "dev",
56- "path": "/nix/store/hkmlf3zy6brfn3xr3magif6c54ln3z4c-bash-interactive-5.3p9-dev"
57- },
58- {
59- "name": "doc",
60- "path": "/nix/store/l7bcjyprsmzdnrimjg8al47wsr4vsy6q-bash-interactive-5.3p9-doc"
61- },
62- {
63- "name": "info",
64- "path": "/nix/store/cad8ahawmbf12gvh0bq7sf9rjjwbfzg9-bash-interactive-5.3p9-info"
65- }
66- ],
67- "store_path": "/nix/store/f6lsdzsgbh5mxaaa91gykyi8mqmlzpr2-bash-interactive-5.3p9"
68- },
69- "x86_64-darwin": {
70- "outputs": [
71- {
72- "name": "out",
73- "path": "/nix/store/hzc40jxl7zhc1cikxri178a4w6f4fzd6-bash-interactive-5.3p9",
74- "default": true
75- },
76- {
77- "name": "man",
78- "path": "/nix/store/8lp42ghh8l89v5kj6q5asbfdskssgcxn-bash-interactive-5.3p9-man",
79- "default": true
80- },
81- {
82- "name": "dev",
83- "path": "/nix/store/jfiwg11dqs0vzg45s58kkabjm0rm8d0c-bash-interactive-5.3p9-dev"
84- },
85- {
86- "name": "doc",
87- "path": "/nix/store/rlz86kfy3jxfi7ap587rhrm9ynbw2kvc-bash-interactive-5.3p9-doc"
88- },
89- {
90- "name": "info",
91- "path": "/nix/store/d9y32zx4cxwm3h20c0zrzsabjmws3z0m-bash-interactive-5.3p9-info"
92- }
93- ],
94- "store_path": "/nix/store/hzc40jxl7zhc1cikxri178a4w6f4fzd6-bash-interactive-5.3p9"
95- },
96- "x86_64-linux": {
97- "outputs": [
98- {
99- "name": "out",
100- "path": "/nix/store/sfvyavxai6qvzmv9p9x6mp4wwdz4v41m-bash-interactive-5.3p9",
101- "default": true
102- },
103- {
104- "name": "man",
105- "path": "/nix/store/lw0v8hggdjsqs9zpwwrxajcc4rbsmlfq-bash-interactive-5.3p9-man",
106- "default": true
107- },
108- {
109- "name": "debug",
110- "path": "/nix/store/h979dcfkxhswbsdqcwqbzynaqnz1n5a0-bash-interactive-5.3p9-debug"
111- },
112- {
113- "name": "dev",
114- "path": "/nix/store/832yrsfhq3z41zn9rqsvv0cv22mblv4c-bash-interactive-5.3p9-dev"
115- },
116- {
117- "name": "doc",
118- "path": "/nix/store/fy5pa2zv8g7l3v0nn6rpwib8nl4whdx1-bash-interactive-5.3p9-doc"
119- },
120- {
121- "name": "info",
122- "path": "/nix/store/p9lkzmrvl0wqjs4mjv87h5lqcypgrzbp-bash-interactive-5.3p9-info"
123- }
124- ],
125- "store_path": "/nix/store/sfvyavxai6qvzmv9p9x6mp4wwdz4v41m-bash-interactive-5.3p9"
126- }
127- }
128- },
129- "coreutils@latest": {
130- "last_modified": "2026-04-06T17:08:15Z",
131- "resolved": "github:NixOS/nixpkgs/ff048610a1b698607a66f4671821716c2272dc9f#coreutils",
132- "source": "devbox-search",
133- "version": "9.10",
134- "systems": {
135- "aarch64-darwin": {
136- "outputs": [
137- {
138- "name": "out",
139- "path": "/nix/store/akih5l2yxpzqyh63xvyc6zsxl7kl2x4v-coreutils-9.10",
140- "default": true
141- },
142- {
143- "name": "info",
144- "path": "/nix/store/rqr62g2a1dl14qg090lixy4kyalamxnc-coreutils-9.10-info"
145- }
146- ],
147- "store_path": "/nix/store/akih5l2yxpzqyh63xvyc6zsxl7kl2x4v-coreutils-9.10"
148- },
149- "aarch64-linux": {
150- "outputs": [
151- {
152- "name": "out",
153- "path": "/nix/store/f03gf7yy36rlr9n1wkblvikq12a3hg6c-coreutils-9.10",
154- "default": true
155- },
156- {
157- "name": "debug",
158- "path": "/nix/store/l7pb1mavzin4hmwpp87f6xisfprrgnr2-coreutils-9.10-debug"
159- },
160- {
161- "name": "info",
162- "path": "/nix/store/802yhcvnd2kp712af4v48klcxqzjgdkp-coreutils-9.10-info"
163- }
164- ],
165- "store_path": "/nix/store/f03gf7yy36rlr9n1wkblvikq12a3hg6c-coreutils-9.10"
166- },
167- "x86_64-darwin": {
168- "outputs": [
169- {
170- "name": "out",
171- "path": "/nix/store/33dari5qaqpza7z0yhyzrjg85xmclg8c-coreutils-9.10",
172- "default": true
173- },
174- {
175- "name": "info",
176- "path": "/nix/store/mybh7m3jhp3hzp83hsz8aj6w7wr49hxv-coreutils-9.10-info"
177- }
178- ],
179- "store_path": "/nix/store/33dari5qaqpza7z0yhyzrjg85xmclg8c-coreutils-9.10"
180- },
181- "x86_64-linux": {
182- "outputs": [
183- {
184- "name": "out",
185- "path": "/nix/store/74sind1d6vf2bfwd7yklg8chsvzqxmmq-coreutils-9.10",
186- "default": true
187- },
188- {
189- "name": "debug",
190- "path": "/nix/store/hm1z5hlgc4p99s3vng7g69cqgdn1j93h-coreutils-9.10-debug"
191- },
192- {
193- "name": "info",
194- "path": "/nix/store/c5dpvsjmin1cx3ma6jizdzb26bx2avdl-coreutils-9.10-info"
195- }
196- ],
197- "store_path": "/nix/store/74sind1d6vf2bfwd7yklg8chsvzqxmmq-coreutils-9.10"
198- }
199- }
200- },
201- "git+https://git.kilimanjaro.io/vibe": {
202- "last_modified": "2026-05-03T10:22:37Z",
203- "resolved": "git+https://git.kilimanjaro.io/vibe?ref=refs%2Fheads%2Fmain&rev=9dc3da3eebc815756178020554870fbfc3b1b26c"
204- },
205- "git@latest": {
206- "last_modified": "2026-04-02T01:59:51Z",
207- "resolved": "github:NixOS/nixpkgs/106eb93cbb9d4e4726bf6bc367a3114f7ed6b32f#git",
208- "source": "devbox-search",
209- "version": "2.53.0",
210- "systems": {
211- "aarch64-darwin": {
212- "outputs": [
213- {
214- "name": "out",
215- "path": "/nix/store/6qbj40r0s289k5slmy8yna5x2hfz01wg-git-2.53.0",
216- "default": true
217- },
218- {
219- "name": "doc",
220- "path": "/nix/store/xp9w7bcl4c78268kn82qdayqglj0zdxa-git-2.53.0-doc"
221- }
222- ],
223- "store_path": "/nix/store/6qbj40r0s289k5slmy8yna5x2hfz01wg-git-2.53.0"
224- },
225- "aarch64-linux": {
226- "outputs": [
227- {
228- "name": "out",
229- "path": "/nix/store/0vbb6j0ppx1w8cw28h7w8s2dzla9j3m6-git-2.53.0",
230- "default": true
231- },
232- {
233- "name": "debug",
234- "path": "/nix/store/gaj4q67pid2pcy9nvh2ysv4728wxj5m4-git-2.53.0-debug"
235- },
236- {
237- "name": "doc",
238- "path": "/nix/store/9mrg9g0w2b4cfdppq3n4zvhkvyixvqpx-git-2.53.0-doc"
239- }
240- ],
241- "store_path": "/nix/store/0vbb6j0ppx1w8cw28h7w8s2dzla9j3m6-git-2.53.0"
242- },
243- "x86_64-darwin": {
244- "outputs": [
245- {
246- "name": "out",
247- "path": "/nix/store/2q2hzaclp1rsj65h21lng7wa26vawhnq-git-2.53.0",
248- "default": true
249- },
250- {
251- "name": "doc",
252- "path": "/nix/store/yi2mi426la2x7rggv0a0ah11s2dangz4-git-2.53.0-doc"
253- }
254- ],
255- "store_path": "/nix/store/2q2hzaclp1rsj65h21lng7wa26vawhnq-git-2.53.0"
256- },
257- "x86_64-linux": {
258- "outputs": [
259- {
260- "name": "out",
261- "path": "/nix/store/7yvcckar1lzhqnr0xx2n19nsdjd4qa4d-git-2.53.0",
262- "default": true
263- },
264- {
265- "name": "debug",
266- "path": "/nix/store/9xs1n97fsdbgnk8cxbdx3hqlz6fdaynb-git-2.53.0-debug"
267- },
268- {
269- "name": "doc",
270- "path": "/nix/store/rv7cz5lz1qmbdnh3zrpv0j0wa5ivaacq-git-2.53.0-doc"
271- }
272- ],
273- "store_path": "/nix/store/7yvcckar1lzhqnr0xx2n19nsdjd4qa4d-git-2.53.0"
274- }
275- }
276- },
277- "github:NixOS/nixpkgs/nixpkgs-unstable": {
278- "last_modified": "2026-03-16T02:27:38Z",
279- "resolved": "github:NixOS/nixpkgs/f8573b9c935cfaa162dd62cc9e75ae2db86f85df?lastModified=1773628058&narHash=sha256-hpXH0z3K9xv0fHaje136KY872VT2T5uwxtezlAskQgY%3D"
280- },
281- "ripgrep@latest": {
282- "last_modified": "2026-03-21T07:29:51Z",
283- "resolved": "github:NixOS/nixpkgs/09061f748ee21f68a089cd5d91ec1859cd93d0be#ripgrep",
284- "source": "devbox-search",
285- "version": "15.1.0",
286- "systems": {
287- "aarch64-darwin": {
288- "outputs": [
289- {
290- "name": "out",
291- "path": "/nix/store/qx2i265ck9hi773q0hhg96bjchkghpgm-ripgrep-15.1.0",
292- "default": true
293- }
294- ],
295- "store_path": "/nix/store/qx2i265ck9hi773q0hhg96bjchkghpgm-ripgrep-15.1.0"
296- },
297- "aarch64-linux": {
298- "outputs": [
299- {
300- "name": "out",
301- "path": "/nix/store/p16w1972rd9hj2kdczmdlwv0wa8c0drf-ripgrep-15.1.0",
302- "default": true
303- }
304- ],
305- "store_path": "/nix/store/p16w1972rd9hj2kdczmdlwv0wa8c0drf-ripgrep-15.1.0"
306- },
307- "x86_64-darwin": {
308- "outputs": [
309- {
310- "name": "out",
311- "path": "/nix/store/hm6mgwzrdznpadk6nxzmlls1p534m2d3-ripgrep-15.1.0",
312- "default": true
313- }
314- ],
315- "store_path": "/nix/store/hm6mgwzrdznpadk6nxzmlls1p534m2d3-ripgrep-15.1.0"
316- },
317- "x86_64-linux": {
318- "outputs": [
319- {
320- "name": "out",
321- "path": "/nix/store/922crn2k3v8yaqk7anps80hba919lnds-ripgrep-15.1.0",
322- "default": true
323- }
324- ],
325- "store_path": "/nix/store/922crn2k3v8yaqk7anps80hba919lnds-ripgrep-15.1.0"
326- }
327- }
328- },
329- "yarn@latest": {
330- "last_modified": "2026-03-21T07:29:51Z",
331- "resolved": "github:NixOS/nixpkgs/09061f748ee21f68a089cd5d91ec1859cd93d0be#yarn",
332- "source": "devbox-search",
333- "version": "1.22.22",
334- "systems": {
335- "aarch64-darwin": {
336- "outputs": [
337- {
338- "name": "out",
339- "path": "/nix/store/59yqhmvbl7bsyv5qc30nmrpaf4iqj79h-yarn-1.22.22",
340- "default": true
341- }
342- ],
343- "store_path": "/nix/store/59yqhmvbl7bsyv5qc30nmrpaf4iqj79h-yarn-1.22.22"
344- },
345- "aarch64-linux": {
346- "outputs": [
347- {
348- "name": "out",
349- "path": "/nix/store/ybspc2b9q9j9drfpa5d1bmw2qgrkx4qc-yarn-1.22.22",
350- "default": true
351- }
352- ],
353- "store_path": "/nix/store/ybspc2b9q9j9drfpa5d1bmw2qgrkx4qc-yarn-1.22.22"
354- },
355- "x86_64-darwin": {
356- "outputs": [
357- {
358- "name": "out",
359- "path": "/nix/store/8j2xmk7ijy7nijpy2yc3mcjf7hxpnpyl-yarn-1.22.22",
360- "default": true
361- }
362- ],
363- "store_path": "/nix/store/8j2xmk7ijy7nijpy2yc3mcjf7hxpnpyl-yarn-1.22.22"
364- },
365- "x86_64-linux": {
366- "outputs": [
367- {
368- "name": "out",
369- "path": "/nix/store/g1ksanljq7v16gj8yb7zs6wkv7ikycy3-yarn-1.22.22",
370- "default": true
371- }
372- ],
373- "store_path": "/nix/store/g1ksanljq7v16gj8yb7zs6wkv7ikycy3-yarn-1.22.22"
374- }
375- }
376- }
377- }
378-}
+65,
-0
1@@ -0,0 +1,65 @@
2+{
3+ "nodes": {
4+ "devenv": {
5+ "locked": {
6+ "dir": "src/modules",
7+ "lastModified": 1791471428,
8+ "narHash": "sha256-Iva5vlTiCPCHx3k3X7VFMn/TRJxcThJAUuOGjOAsHhQ=",
9+ "owner": "cachix",
10+ "repo": "devenv",
11+ "rev": "c69190c2702bad99474200b6b7a80be86146ae71",
12+ "type": "github"
13+ },
14+ "original": {
15+ "dir": "src/modules",
16+ "owner": "cachix",
17+ "repo": "devenv",
18+ "type": "github"
19+ }
20+ },
21+ "nixpkgs": {
22+ "inputs": {
23+ "nixpkgs-src": "nixpkgs-src"
24+ },
25+ "locked": {
26+ "lastModified": 1789506231,
27+ "narHash": "sha256-vNkJbtmqyBfFhn/HnzQo4ROuoyYWuy/allqTfJb4kMY=",
28+ "owner": "cachix",
29+ "repo": "devenv-nixpkgs",
30+ "rev": "c2f38fe7f9e04d9aadd354d380f2bd40531d9737",
31+ "type": "github"
32+ },
33+ "original": {
34+ "owner": "cachix",
35+ "ref": "rolling",
36+ "repo": "devenv-nixpkgs",
37+ "type": "github"
38+ }
39+ },
40+ "nixpkgs-src": {
41+ "flake": false,
42+ "locked": {
43+ "lastModified": 1789370336,
44+ "narHash": "sha256-6RSEDHIWQtesQKWSu5qRai8L2h4KgCgMEfJHstW99G4=",
45+ "owner": "NixOS",
46+ "repo": "nixpkgs",
47+ "rev": "c7def046b9a883d46974757852106483d741586f",
48+ "type": "github"
49+ },
50+ "original": {
51+ "owner": "NixOS",
52+ "ref": "nixpkgs-unstable",
53+ "repo": "nixpkgs",
54+ "type": "github"
55+ }
56+ },
57+ "root": {
58+ "inputs": {
59+ "devenv": "devenv",
60+ "nixpkgs": "nixpkgs"
61+ }
62+ }
63+ },
64+ "root": "root",
65+ "version": 7
66+}
+83,
-0
1@@ -0,0 +1,83 @@
2+{
3+ pkgs,
4+ lib,
5+ config,
6+ inputs,
7+ ...
8+}:
9+
10+{
11+ # https://devenv.sh/basics/
12+ env.GREET = "devenv";
13+
14+ # https://devenv.sh/packages/
15+ packages = [
16+ pkgs.git
17+ pkgs.bash
18+ pkgs.bash-completion
19+ pkgs.bashInteractive
20+ pkgs.just
21+ pkgs.curl
22+ pkgs.jq
23+
24+ # go toolchain
25+ pkgs.go
26+ pkgs.golangci-lint
27+
28+ # atproto
29+ pkgs.atproto-goat
30+ ];
31+
32+ # https://devenv.sh/languages/
33+ # languages.rust.enable = true;
34+
35+ # https://devenv.sh/processes/
36+ # processes.dev.exec = "${lib.getExe pkgs.watchexec} -n -- ls -la";
37+
38+ # https://devenv.sh/services/
39+ # services.postgres.enable = true;
40+
41+
42+ enterShell = ''
43+ export SOVRN_DATA_DIR="${config.devenv.root}/data/dev"
44+
45+ # Configure bash with fish-like features
46+ bind 'set completion-ignore-case on' # Case-insensitive completion
47+ bind 'set show-all-if-ambiguous on' # Show all completions on first tab
48+ bind 'set menu-complete-display-prefix on'
49+ bind 'TAB:menu-complete' # Tab cycles through completions
50+ bind '\e[A:history-search-backward' # Up arrow searches history
51+ bind '\e[B:history-search-forward' # Down arrow searches history
52+ bind 'set colored-completion-prefix on' # Color the completion prefix
53+ bind 'set colored-stats on' # Color the completion stats
54+
55+ # Enable bash-completion if available
56+ if [ -f ${pkgs.bash-completion}/etc/profile.d/bash_completion.sh ]; then
57+ source ${pkgs.bash-completion}/etc/profile.d/bash_completion.sh
58+ fi
59+
60+ # Better directory navigation
61+ shopt -s autocd 2>/dev/null # Type directory name to cd
62+ shopt -s dirspell 2>/dev/null # Correct spelling of dir names
63+ shopt -s cdspell 2>/dev/null # Correct spelling of cd args
64+
65+ # Enable ** globbing for recursive directory matching
66+ shopt -s globstar 2>/dev/null
67+
68+ # Use correct hcloud context
69+ '';
70+ # https://devenv.sh/tasks/
71+ # tasks = {
72+ # "myproj:setup".exec = "mytool build";
73+ # "devenv:enterShell".after = [ "myproj:setup" ];
74+ # };
75+
76+ # https://devenv.sh/tests/
77+ enterTest = ''
78+ '';
79+
80+ # https://devenv.sh/git-hooks/
81+ # git-hooks.hooks.shellcheck.enable = true;
82+
83+ # See full reference at https://devenv.sh/reference/options/
84+}
+18,
-0
1@@ -0,0 +1,18 @@
2+# yaml-language-server: $schema=https://devenv.sh/devenv.schema.json
3+inputs:
4+ nixpkgs:
5+ url: github:cachix/devenv-nixpkgs/rolling
6+
7+# If you're using non-OSS software, you can set allow_unfree to true.
8+# allow_unfree: true
9+
10+# If you're not willing to allow unsupported packages:
11+# allow_unsupported_system: false
12+
13+# If you're willing to use a package that's vulnerable
14+# permitted_insecure_packages:
15+# - "openssl-1.1.1w"
16+
17+# If you have more than one devenv you can merge them
18+#imports:
19+# - ./backend
+4,
-4
1@@ -290,11 +290,11 @@
2 "nixpkgs": "nixpkgs_4"
3 },
4 "locked": {
5- "lastModified": 1791461335,
6- "narHash": "sha256-7db4M6L087F1c/HljOvZXSIm0+mU7E5XDdb56+4AiF4=",
7+ "lastModified": 1791543971,
8+ "narHash": "sha256-/Xo38EKhaSqPwFlvQ7xp1I06CxXC40AJNpz4G6Ynf5I=",
9 "ref": "HEAD",
10- "rev": "9834ad9fcf708a85f24489b74a6452db90f10ee5",
11- "revCount": 200,
12+ "rev": "23fc06deee16b9008a375bfcfda7def213cffbe1",
13+ "revCount": 201,
14 "type": "git",
15 "url": "file:///home/btburke/projects/sovrn"
16 },
M
hive.nix
+9,
-1
1@@ -68,7 +68,15 @@ let
2 ];
3 sovrn-metrics = [
4 inputs.sovrn.nixosModules.metrics
5- { sovrn.fleet = (host.settings or { }).sovrn or { }; }
6+ {
7+ sovrn.fleet = (host.settings or { }).sovrn or { };
8+ # The DANE watch: every cell's TLSA must match its certificate; the
9+ # relays must have none (the backup MX fails open, bug 209274a).
10+ sovrn.daneCheck = {
11+ hosts = map (h: h.name) (hostsWithRole "sovrn-cell");
12+ failOpenHosts = map (h: h.settings.sovrnRelay.hostname) (hostsWithRole "sovrn-relay");
13+ };
14+ }
15 ];
16 sovrn-cell = [
17 inputs.sovrn.nixosModules.cell