@cryptotaxi247 / infra-1 / commits / bde1ee0f

hydra-proxy: switch to iocaine

This gets out of the legitimate users way and supports ai-robots.txt for matching bots and allows ASN wide bans all in one.

Martin Weinelt committed Jun 18, 2026 at 01:58 UTC bde1ee0f11f4ff5a3f80c0fbac7ac55098cfd100
8 files changed +392 -142
build/hydra-proxy.nix
+86 -22
@@ -1,30 +1,83 @@
1 {
2 config,
3 + lib,
4 pkgs,
5 + inputs,
6 ...
7 }:
8
9 {
10 + imports = [
11 + inputs.nixocaine.nixosModules.default
12 + ];
13 +
14 networking.firewall.allowedTCPPorts = [
15 80
16 443
17 ];
18
13 - services.anubis.instances."hydra-server" = {
14 - settings = {
15 - TARGET = "http://127.0.0.1:3000";
16 - BIND = ":3001";
17 - BIND_NETWORK = "tcp";
18 - METRICS_BIND = ":9001";
19 - METRICS_BIND_NETWORK = "tcp";
19 + services.iocaine = {
20 + enable = true;
21 + config = {
22 + handler.default.config = {
23 + "ai-robots-txt-path" = inputs.ai-robots-txt;
24 + sources = {
25 + "training-corpus" = [
26 + (pkgs.fetchurl {
27 + name = "1984_djvu.txt";
28 + url = "https://archive.org/download/GeorgeOrwells1984/1984_djvu.txt";
29 + hash = "sha256-9R1PTa8yDtkfH+4rU5BF62ee73irhd3VYX1QB5KU+ZU=";
30 + })
31 + (pkgs.fetchurl {
32 + name = "brave-new-world.txt";
33 + url = "https://archive.org/download/ost-english-brave_new_world_aldous_huxley/Brave_New_World_Aldous_Huxley_djvu.txt";
34 + hash = "sha256-6WkaO/3zQIezGzJDp4QjglikiTZTxgo0P4MEff2mdcY=";
35 + })
36 + ];
37 + "wordlists" = [
38 + (pkgs.fetchurl {
39 + name = "words.txt";
40 + url = "https://git.savannah.gnu.org/cgit/miscfiles.git/plain/web2";
41 + hash = "sha256-KSmJWrP+x4xpY+vly7NJP+T8nhHroJWlInh7ivxTqGM=";
42 + })
43 + ];
44 + };
45 + unwanted-asns = {
46 + db-path = inputs.geolite2-asn-mmdb;
47 + list = map toString [
48 + 45102 # ALIBABA-CN-NET
49 + 45899 # VNPT-AS-VN
50 + 132203 # TENCENT-NET-AP-CN
51 + ];
52 + };
53 + };
54 + server.default = {
55 + bind = "/run/iocaine/default.sock";
56 + unix-socket-access = "group";
57 + mode = "http";
58 + use = {
59 + handler-from = "default";
60 + metrics = "metrics";
61 + };
62 + };
63 + server.metrics = {
64 + bind = "[::]:42042";
65 + mode = "prometheus";
66 + };
67 };
68 };
69
70 networking.firewall.extraInputRules = ''
24 - ip6 saddr $prometheus_inet6 tcp dport 9001 accept
25 - ip saddr $prometheus_inet4 tcp dport 9001 accept
71 + ip6 saddr $prometheus_inet6 tcp dport { 9001, 42042 } accept
72 + ip saddr $prometheus_inet4 tcp dport { 9001, 42042 } accept
73 '';
74
75 + # Kill the hard dependency on iocaine
76 + systemd.services.nginx = {
77 + requires = lib.mkForce [ ];
78 + after = lib.mkForce [ "network.target" ];
79 + };
80 +
81 services.nginx = {
82 enable = true;
83 enableReload = true;
@@ -42,16 +95,6 @@
95 '';
96
97 appendHttpConfig = ''
45 - map $request_uri $backend {
46 - default anubis;
47 -
48 - # downloads (e.g. distrobuilder for lxc/incus images)
49 - ~^/build/\d+/download/ hydra-server;
50 - ~^/build/\d+/download-by-type/ hydra-server;
51 - ~^/job/[^/]+/[^/]+/[^/]+/latest/download/ hydra-server;
52 - ~^/job/[^/]+/[^/]+/[^/]+/latest/download-by-type/file/ hydra-server;
53 - }
54 -
98 limit_req_zone $binary_remote_addr zone=hydra-server:8m rate=2r/s;
99 limit_req_status 429;
100 '';
@@ -61,7 +104,7 @@
104 '';
105
106 upstreams = {
64 - anubis.servers."127.0.0.1:3001" = { };
107 + iocaine.servers."unix:${config.services.iocaine.config.server.default.bind}" = { };
108 hydra-server.servers."127.0.0.1:3000" = { };
109 };
110
@@ -86,12 +129,33 @@
129 Allow: /$
130 '';
131
132 + locations."/" = {
133 + proxyPass = "http://iocaine";
134 + extraConfig = ''
135 + # allow nginx to intercept non-200 responses
136 + proxy_intercept_errors on;
137 +
138 + # optionally retry upstream on certain failures
139 + proxy_next_upstream error timeout;
140 +
141 + # treat 421 as a special fallback condition
142 + # treat 502 when iocaine is down
143 + error_page 421 502 = @hydra;
144 +
145 + # discard the noise
146 + access_log off;
147 +
148 + # don't spend time compressing garbage
149 + gzip off;
150 + '';
151 + };
152 +
153 locations."~ ^/job/[^/]+/[^/]+/metrics/metric/" = {
154 proxyPass = "http://hydra-server";
155 };
156
93 - locations."/" = {
94 - proxyPass = "http://$backend";
157 + locations."@hydra" = {
158 + proxyPass = "http://hydra-server";
159 extraConfig = ''
160 limit_req zone=hydra-server burst=7;
161 '';
build/mimas/default.nix
-1
@@ -5,7 +5,6 @@
5 ../hydra-proxy.nix
6 ../hydra-queue-runner.nix
7 ./boot.nix
8 - ./firewall.nix
8 ./network.nix
9 ];
10
build/mimas/firewall.nix deleted
-82
@@ -1,82 +0,0 @@
1 -{
2 - pkgs,
3 - lib,
4 - inputs,
5 - ...
6 -}:
7 -
8 -let
9 - blockedAutNums = [
10 - 45102 # ALIBABA-CN-NET
11 - 45899 # VNPT-AS-VN
12 - 132203 # TENCENT-NET-AP-CN
13 - ];
14 -in
15 -
16 -{
17 - networking.nftables = {
18 - tables."abuse" = {
19 - family = "inet";
20 - content = ''
21 - set ipv4blocks {
22 - type ipv4_addr;
23 - flags interval;
24 - auto-merge;
25 - }
26 - set ipv6blocks {
27 - type ipv6_addr;
28 - auto-merge;
29 - flags interval;
30 - }
31 - chain input-abuse {
32 - type filter hook input priority filter - 5;
33 -
34 - ip saddr @ipv4blocks tcp dport 443 counter drop;
35 - ip6 saddr @ipv6blocks tcp dport 443 counter drop;
36 - }
37 - '';
38 - };
39 - };
40 -
41 - systemd.services.nft-prefix-import = {
42 - wants = [ "network-online.target" ];
43 - after = [ "network-online.target" ];
44 - wantedBy = [ "multi-user.target" ];
45 - path = with pkgs; [ nftables ];
46 - environment.USER_AGENT = "NixOS.org Infrastructure - infra@nixos.org";
47 - serviceConfig = {
48 - Type = "oneshot";
49 - AmbientCapabilities = [ "CAP_NET_ADMIN" ];
50 - DynamicUser = true;
51 - User = "nft-asblock";
52 - Group = "nft-asblock";
53 - ExecStart = toString (
54 - [
55 - (lib.getExe inputs.nft-prefix-import.packages.${pkgs.stdenv.hostPlatform.system}.default)
56 - "--table"
57 - "abuse"
58 - "--ipv4set"
59 - "ipv4blocks"
60 - "--ipv6set"
61 - "ipv6blocks"
62 - ]
63 - ++ blockedAutNums
64 - );
65 - RestrictAddressFamilies = [
66 - "AF_NETLINK"
67 - "AF_INET"
68 - "AF_INET6"
69 - ];
70 - StateDirectory = "nft-prefix-import";
71 - WorkingDirectory = "/var/lib/nft-prefix-import";
72 - };
73 - };
74 -
75 - systemd.timers.nft-prefix-import = {
76 - wantedBy = [ "timers.target" ];
77 - timerConfig = {
78 - OnCalendar = "0/6:00";
79 - RandomizedDelaySec = 3600;
80 - };
81 - };
82 -}
build/pluto/prometheus/default.nix
+1 -1
@@ -3,13 +3,13 @@
3 {
4 imports = [
5 ./alertmanager.nix
6 - ./exporters/anubis.nix
6 ./exporters/blackbox.nix
7 ./exporters/channel.nix
8 ./exporters/domain.nix
9 ./exporters/fastly.nix
10 ./exporters/github.nix
11 ./exporters/hydra.nix
12 + ./exporters/iocaine.nix
13 ./exporters/json.nix
14 ./exporters/matrix-synapse.nix
15 ./exporters/nixos.nix
build/pluto/prometheus/exporters/anubis.nix deleted
-16
@@ -1,16 +0,0 @@
1 -{
2 - services.prometheus = {
3 - scrapeConfigs = [
4 - {
5 - job_name = "anubis";
6 - static_configs = [
7 - {
8 - targets = [
9 - "hydra.nixos.org:9001"
10 - ];
11 - }
12 - ];
13 - }
14 - ];
15 - };
16 -}
build/pluto/prometheus/exporters/iocaine.nix new
+8
@@ -0,0 +1,8 @@
1 +{
2 + services.prometheus.scrapeConfigs = [
3 + {
4 + job_name = "iocaine";
5 + static_configs = [ { targets = [ "mimas.nixos.org:42042" ]; } ];
6 + }
7 + ];
8 +}
flake.lock
+286 -15
@@ -23,6 +23,52 @@
23 "type": "github"
24 }
25 },
26 + "ai-robots-txt": {
27 + "flake": false,
28 + "locked": {
29 + "narHash": "sha256-GbIph7PtJYtDMNewcAO372/lVKFrtS6Mr89vRmuBe0Y=",
30 + "type": "file",
31 + "url": "https://github.com/ai-robots-txt/ai.robots.txt/raw/refs/heads/main/robots.json"
32 + },
33 + "original": {
34 + "type": "file",
35 + "url": "https://github.com/ai-robots-txt/ai.robots.txt/raw/refs/heads/main/robots.json"
36 + }
37 + },
38 + "avalanche": {
39 + "inputs": {
40 + "nixpkgs": [
41 + "nixocaine",
42 + "nam-shub-of-enki",
43 + "nixpkgs"
44 + ],
45 + "nixpkgs-2505": "nixpkgs-2505",
46 + "pre-commit-hooks": [
47 + "nixocaine",
48 + "nam-shub-of-enki",
49 + "pre-commit-hooks"
50 + ],
51 + "systems": "systems_4",
52 + "treefmt-nix": [
53 + "nixocaine",
54 + "nam-shub-of-enki",
55 + "treefmt-nix"
56 + ]
57 + },
58 + "locked": {
59 + "lastModified": 1765198317,
60 + "narHash": "sha256-IQoB7lK8cJzWG3hEZrPe0Zoa8/1LRwcgTSoX9mpr20E=",
61 + "ref": "refs/heads/main",
62 + "rev": "01af515b690125cb0b636a86ab95cace3c0cc8c6",
63 + "revCount": 160,
64 + "type": "git",
65 + "url": "https://git.madhouse-project.org/algernon/avalanche.git"
66 + },
67 + "original": {
68 + "type": "git",
69 + "url": "https://git.madhouse-project.org/algernon/avalanche.git"
70 + }
71 + },
72 "blobs": {
73 "flake": false,
74 "locked": {
@@ -147,6 +193,22 @@
193 }
194 },
195 "flake-compat_2": {
196 + "flake": false,
197 + "locked": {
198 + "lastModified": 1761588595,
199 + "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
200 + "owner": "edolstra",
201 + "repo": "flake-compat",
202 + "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
203 + "type": "github"
204 + },
205 + "original": {
206 + "owner": "edolstra",
207 + "repo": "flake-compat",
208 + "type": "github"
209 + }
210 + },
211 + "flake-compat_3": {
212 "flake": false,
213 "locked": {
214 "lastModified": 1767039857,
@@ -240,13 +302,25 @@
302 "url": "https://cyberchaos.dev/e1mo/freescout-nix-flake.git"
303 }
304 },
305 + "geolite2-asn-mmdb": {
306 + "flake": false,
307 + "locked": {
308 + "narHash": "sha256-xT8tiSfo4dBFmm3hybo9WtN6U7cI7IDs3kMy1wVcLi4=",
309 + "type": "file",
310 + "url": "https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-ASN.mmdb"
311 + },
312 + "original": {
313 + "type": "file",
314 + "url": "https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-ASN.mmdb"
315 + }
316 + },
317 "git-hooks": {
318 "inputs": {
319 "flake-compat": [
320 "simple-nixos-mailserver",
321 "flake-compat"
322 ],
249 - "gitignore": "gitignore",
323 + "gitignore": "gitignore_2",
324 "nixpkgs": [
325 "simple-nixos-mailserver",
326 "nixpkgs"
@@ -267,6 +341,28 @@
341 }
342 },
343 "gitignore": {
344 + "inputs": {
345 + "nixpkgs": [
346 + "nixocaine",
347 + "pre-commit-hooks",
348 + "nixpkgs"
349 + ]
350 + },
351 + "locked": {
352 + "lastModified": 1709087332,
353 + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
354 + "owner": "hercules-ci",
355 + "repo": "gitignore.nix",
356 + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
357 + "type": "github"
358 + },
359 + "original": {
360 + "owner": "hercules-ci",
361 + "repo": "gitignore.nix",
362 + "type": "github"
363 + }
364 + },
365 + "gitignore_2": {
366 "inputs": {
367 "nixpkgs": [
368 "simple-nixos-mailserver",
@@ -338,24 +434,70 @@
434 "type": "github"
435 }
436 },
341 - "nft-prefix-import": {
437 + "iocaine-unstable": {
438 "inputs": {
439 "nixpkgs": [
344 - "nixpkgs-unstable"
440 + "nixocaine",
441 + "nixpkgs"
442 + ],
443 + "pre-commit-hooks": [
444 + "nixocaine",
445 + "pre-commit-hooks"
446 + ],
447 + "systems": "systems_3",
448 + "treefmt-nix": [
449 + "nixocaine",
450 + "treefmt-nix"
451 ]
452 },
453 "locked": {
348 - "lastModified": 1776724431,
349 - "narHash": "sha256-DeYqrWkCV2gf9oTowzylf0ucCPHnqFUOVSj/mVILno0=",
350 - "owner": "mweinelt",
351 - "repo": "nft-prefix-import",
352 - "rev": "8ec33fedf8f5e020e85a2d36dc1768be6819cfc4",
353 - "type": "github"
454 + "lastModified": 1779742069,
455 + "narHash": "sha256-adsQuSL4F1mfSsUtLwdgUtHVYessBM31tlBU8Rbbst4=",
456 + "ref": "iocaine-3.x",
457 + "rev": "5521356167c61e6119777535fd92c8ee23be3483",
458 + "revCount": 771,
459 + "type": "git",
460 + "url": "https://git.madhouse-project.org/iocaine/iocaine"
461 },
462 "original": {
356 - "owner": "mweinelt",
357 - "repo": "nft-prefix-import",
358 - "type": "github"
463 + "ref": "iocaine-3.x",
464 + "type": "git",
465 + "url": "https://git.madhouse-project.org/iocaine/iocaine"
466 + }
467 + },
468 + "nam-shub-of-enki": {
469 + "inputs": {
470 + "avalanche": "avalanche",
471 + "iocaine": [
472 + "nixocaine",
473 + "iocaine-unstable"
474 + ],
475 + "nixpkgs": [
476 + "nixocaine",
477 + "nixpkgs"
478 + ],
479 + "pre-commit-hooks": [
480 + "nixocaine",
481 + "pre-commit-hooks"
482 + ],
483 + "treefmt-nix": [
484 + "nixocaine",
485 + "treefmt-nix"
486 + ]
487 + },
488 + "locked": {
489 + "lastModified": 1780092888,
490 + "narHash": "sha256-B27esenlgT5jjh3kjCEn+xxsTDiiTRhu9ZXUxQZ7mZw=",
491 + "ref": "main",
492 + "rev": "a67cce7cef81d95d35b0f58f2848dfec9f5e20c7",
493 + "revCount": 331,
494 + "type": "git",
495 + "url": "https://git.madhouse-project.org/iocaine/nam-shub-of-enki"
496 + },
497 + "original": {
498 + "ref": "main",
499 + "type": "git",
500 + "url": "https://git.madhouse-project.org/iocaine/nam-shub-of-enki"
501 }
502 },
503 "nix": {
@@ -413,6 +555,31 @@
555 "type": "github"
556 }
557 },
558 + "nixocaine": {
559 + "inputs": {
560 + "iocaine-unstable": "iocaine-unstable",
561 + "nam-shub-of-enki": "nam-shub-of-enki",
562 + "nixpkgs": [
563 + "nixpkgs"
564 + ],
565 + "pre-commit-hooks": "pre-commit-hooks",
566 + "systems": "systems_5",
567 + "treefmt-nix": "treefmt-nix"
568 + },
569 + "locked": {
570 + "lastModified": 1780214096,
571 + "narHash": "sha256-x+TVoQeuSbl2URUoACzuopGBeHyc8V5ckD6BMeiJAZk=",
572 + "ref": "refs/heads/main",
573 + "rev": "6f27e771479281986b303e64515b07238a3694b6",
574 + "revCount": 152,
575 + "type": "git",
576 + "url": "https://git.madhouse-project.org/iocaine/nixocaine"
577 + },
578 + "original": {
579 + "type": "git",
580 + "url": "https://git.madhouse-project.org/iocaine/nixocaine"
581 + }
582 + },
583 "nixos-channel-scripts": {
584 "inputs": {
585 "nixpkgs": [
@@ -449,6 +616,22 @@
616 "type": "github"
617 }
618 },
619 + "nixpkgs-2505": {
620 + "locked": {
621 + "lastModified": 1764939437,
622 + "narHash": "sha256-4TLFHUwXraw9Df5mXC/vCrJgb50CRr3CzUzF0Mn3CII=",
623 + "owner": "NixOS",
624 + "repo": "nixpkgs",
625 + "rev": "00d2457e2f608b4be6fe8b470b0a36816324b0ae",
626 + "type": "github"
627 + },
628 + "original": {
629 + "owner": "NixOS",
630 + "ref": "nixos-25.05",
631 + "repo": "nixpkgs",
632 + "type": "github"
633 + }
634 + },
635 "nixpkgs-swh": {
636 "inputs": {
637 "nixpkgs": [
@@ -522,6 +705,29 @@
705 "type": "github"
706 }
707 },
708 + "pre-commit-hooks": {
709 + "inputs": {
710 + "flake-compat": "flake-compat_2",
711 + "gitignore": "gitignore",
712 + "nixpkgs": [
713 + "nixocaine",
714 + "nixpkgs"
715 + ]
716 + },
717 + "locked": {
718 + "lastModified": 1765911976,
719 + "narHash": "sha256-t3T/xm8zstHRLx+pIHxVpQTiySbKqcQbK+r+01XVKc0=",
720 + "owner": "cachix",
721 + "repo": "pre-commit-hooks.nix",
722 + "rev": "b68b780b69702a090c8bb1b973bab13756cc7a27",
723 + "type": "github"
724 + },
725 + "original": {
726 + "owner": "cachix",
727 + "repo": "pre-commit-hooks.nix",
728 + "type": "github"
729 + }
730 + },
731 "rfc39": {
732 "inputs": {
733 "nixpkgs": [
@@ -545,15 +751,17 @@
751 "root": {
752 "inputs": {
753 "agenix": "agenix",
754 + "ai-robots-txt": "ai-robots-txt",
755 "colmena": "colmena",
756 "darwin": "darwin_2",
757 "disko": "disko",
758 "flake-parts": "flake-parts",
759 "flake-utils": "flake-utils",
760 "freescout": "freescout",
761 + "geolite2-asn-mmdb": "geolite2-asn-mmdb",
762 "hydra": "hydra",
555 - "nft-prefix-import": "nft-prefix-import",
763 "nix": "nix",
764 + "nixocaine": "nixocaine",
765 "nixos-channel-scripts": "nixos-channel-scripts",
766 "nixpkgs": "nixpkgs",
767 "nixpkgs-swh": "nixpkgs-swh",
@@ -564,13 +772,13 @@
772 "simple-nixos-mailserver": "simple-nixos-mailserver",
773 "sops-nix": "sops-nix",
774 "srvos": "srvos",
567 - "treefmt-nix": "treefmt-nix"
775 + "treefmt-nix": "treefmt-nix_2"
776 }
777 },
778 "simple-nixos-mailserver": {
779 "inputs": {
780 "blobs": "blobs",
573 - "flake-compat": "flake-compat_2",
781 + "flake-compat": "flake-compat_3",
782 "git-hooks": "git-hooks",
783 "nixpkgs": [
784 "nixpkgs"
@@ -661,7 +869,70 @@
869 "type": "github"
870 }
871 },
872 + "systems_3": {
873 + "locked": {
874 + "lastModified": 1681028828,
875 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
876 + "owner": "nix-systems",
877 + "repo": "default",
878 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
879 + "type": "github"
880 + },
881 + "original": {
882 + "id": "systems",
883 + "type": "indirect"
884 + }
885 + },
886 + "systems_4": {
887 + "locked": {
888 + "lastModified": 1681028828,
889 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
890 + "owner": "nix-systems",
891 + "repo": "default",
892 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
893 + "type": "github"
894 + },
895 + "original": {
896 + "id": "systems",
897 + "type": "indirect"
898 + }
899 + },
900 + "systems_5": {
901 + "locked": {
902 + "lastModified": 1681028828,
903 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
904 + "owner": "nix-systems",
905 + "repo": "default",
906 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
907 + "type": "github"
908 + },
909 + "original": {
910 + "id": "systems",
911 + "type": "indirect"
912 + }
913 + },
914 "treefmt-nix": {
915 + "inputs": {
916 + "nixpkgs": [
917 + "nixocaine",
918 + "nixpkgs"
919 + ]
920 + },
921 + "locked": {
922 + "lastModified": 1766000401,
923 + "narHash": "sha256-+cqN4PJz9y0JQXfAK5J1drd0U05D5fcAGhzhfVrDlsI=",
924 + "owner": "numtide",
925 + "repo": "treefmt-nix",
926 + "rev": "42d96e75aa56a3f70cab7e7dc4a32868db28e8fd",
927 + "type": "github"
928 + },
929 + "original": {
930 + "owner": "numtide",
931 + "repo": "treefmt-nix",
932 + "type": "github"
933 + }
934 + },
935 + "treefmt-nix_2": {
936 "inputs": {
937 "nixpkgs": [
938 "nixpkgs-unstable"
flake.nix
+11 -5
@@ -12,6 +12,14 @@
12 inputs.nixpkgs.follows = "nixpkgs";
13 };
14
15 + ai-robots-txt.url = "https://github.com/ai-robots-txt/ai.robots.txt/raw/refs/heads/main/robots.json";
16 + ai-robots-txt.flake = false;
17 +
18 + # This is https://github.com/P3TERX/GeoLite.mmdb
19 + # Atlernative https://github.com/sapics/ip-location-db
20 + geolite2-asn-mmdb.url = "https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-ASN.mmdb";
21 + geolite2-asn-mmdb.flake = false;
22 +
23 nix = {
24 #url = "github:NixOS/nix/2.34-maintenance";
25 # TMP S3 upload abortions: https://github.com/NixOS/nix/pull/15949
@@ -31,6 +39,9 @@
39 inputs.nixpkgs.follows = "nixpkgs";
40 };
41
42 + nixocaine.url = "git+https://git.madhouse-project.org/iocaine/nixocaine";
43 + nixocaine.inputs.nixpkgs.follows = "nixpkgs";
44 +
45 rfc39 = {
46 url = "github:NixOS/rfc39";
47 inputs.nixpkgs.follows = "nixpkgs";
@@ -78,11 +89,6 @@
89 inputs.nixpkgs.follows = "nixpkgs";
90 };
91
81 - nft-prefix-import = {
82 - url = "github:mweinelt/nft-prefix-import";
83 - inputs.nixpkgs.follows = "nixpkgs-unstable";
84 - };
85 -
92 srvos = {
93 url = "github:numtide/srvos";
94 inputs.nixpkgs.follows = "nixpkgs";