this repo has no description
1{
2 description = "nix infra for tangled";
3
4 inputs = {
5 nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
6 tangled.url = "git+https://tangled.org/tangled.org/core?ref=master";
7 tangled-mirror.url = "git+https://tangled.org/tangled.org/core?ref=master";
8 colmena.url = "github:zhaofengli/colmena/release-0.4.x";
9 disko = {
10 url = "github:nix-community/disko";
11 inputs.nixpkgs.follows = "nixpkgs";
12 };
13 nixery-flake = {
14 type = "github";
15 owner = "tazjin";
16 repo = "nixery";
17 flake = false;
18 };
19 atlogin.url = "git+https://tangled.org/anirudh.fi/atlogin";
20 };
21
22 outputs = { nixpkgs, disko, colmena, nixery-flake, tangled, tangled-mirror, atlogin, ... }:
23 let
24 lib = nixpkgs.lib;
25 system = "x86_64-linux";
26 commonArgs = import ./common/ssh.nix;
27
28 baseModules = [
29 disko.nixosModules.disko
30 ./common/base.nix
31 ./common/tailscale.nix
32 ];
33
34 mkHost = hostname: extraModules:
35 lib.nixosSystem {
36 inherit system;
37 specialArgs = { inherit commonArgs; };
38 modules = baseModules ++ [ ./hosts/${hostname}/configuration.nix ] ++ extraModules;
39 };
40
41 mkColmenaHost = hostname: targetHost: targetPort: extraModules: {
42 deployment = {
43 inherit targetHost targetPort;
44 targetUser = "tangler";
45 buildOnTarget = true;
46 };
47 nixpkgs.system = system;
48 time.timeZone = "Europe/Helsinki";
49 imports = baseModules ++ [ ./hosts/${hostname}/configuration.nix ] ++ extraModules;
50 };
51
52 hosts = {
53 appview = {
54 modules = [
55 tangled.nixosModules.appview
56 ./hosts/appview/services/appview.nix
57 ./hosts/appview/services/nginx.nix
58 ./hosts/appview/services/litestream.nix
59 ];
60 target = "appview-arn";
61 port = 2222;
62 };
63
64 pds = {
65 modules = [
66 ./hosts/pds/services/nginx.nix
67 ./hosts/pds/services/pds.nix
68 ];
69 target = "tngl.sh";
70 };
71
72 nixery = {
73 modules = [
74 tangled.nixosModules.spindle
75 ./hosts/nixery/services/nginx.nix
76 ./hosts/nixery/services/openbao/openbao.nix
77 ./hosts/nixery/services/openbao/proxy.nix
78 ./hosts/nixery/services/nixery.nix
79 ];
80 target = "nixery.tangled.sh";
81 };
82
83 spindle = {
84 modules = [
85 tangled.nixosModules.spindle
86 ./hosts/spindle/services/openbao/openbao.nix
87 ./hosts/spindle/services/openbao/proxy.nix
88 ./hosts/spindle/services/spindle.nix
89 ./hosts/spindle/services/nginx.nix
90 ];
91 target = "spindle.alpha.tangled.sh";
92 };
93
94 spindle-hel = {
95 modules = [
96 tangled.nixosModules.spindle
97 ./hosts/spindle-hel/services/openbao/openbao.nix
98 ./hosts/spindle-hel/services/openbao/proxy.nix
99 ./hosts/spindle-hel/services/spindle.nix
100 ./hosts/spindle-hel/services/nginx.nix
101 ];
102 target = "135.181.240.228";
103 };
104
105 knot1 = {
106 modules = [
107 tangled.nixosModules.knot
108 ./hosts/knot1/services/knot.nix
109 ./hosts/knot1/services/nginx.nix
110 ];
111 target = "85.9.211.103";
112 };
113
114 mirror = {
115 modules = [
116 tangled-mirror.nixosModules.knotmirror
117 atlogin.nixosModules.default
118 ./hosts/mirror/services/knotmirror.nix
119 ./hosts/mirror/services/nginx.nix
120 ./hosts/mirror/services/atlogin.nix
121 ./hosts/mirror/services/prometheus.nix
122 ];
123 target = "81.27.110.122";
124 };
125 };
126 in
127 {
128 nixosConfigurations = lib.mapAttrs
129 (name: host: mkHost name host.modules)
130 hosts;
131
132 colmenaHive = colmena.lib.makeHive (
133 {
134 meta = {
135 nixpkgs = nixpkgs.legacyPackages.${system};
136 specialArgs = {
137 inherit commonArgs;
138 nixery-pkgs = import nixery-flake.outPath {
139 pkgs = import nixpkgs { inherit system; };
140 };
141 tangled-pkgs = tangled.packages.x86_64-linux;
142 };
143 };
144 } // lib.mapAttrs
145 (name: host: mkColmenaHost name host.target (host.port or 22) host.modules)
146 hosts
147 );
148 };
149}