Tangled infrastructure definitions in Nix
1{
2 description = "nix infra for tangled";
3
4 inputs = {
5 nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
6 tangled.url = "git+https://tangled.org/@tangled.org/core";
7 colmena.url = "github:zhaofengli/colmena/release-0.4.x";
8 disko = {
9 url = "github:nix-community/disko";
10 inputs.nixpkgs.follows = "nixpkgs";
11 };
12 nixery-flake = {
13 type = "github";
14 owner = "tazjin";
15 repo = "nixery";
16 flake = false;
17 };
18 };
19
20 outputs = { nixpkgs, disko, colmena, nixery-flake, tangled, ... }:
21 let
22 system = "x86_64-linux";
23 commonArgs = import ./common/ssh.nix;
24
25 # Helper function to create nixosConfiguration
26 mkHost = hostname: extraModules:
27 nixpkgs.lib.nixosSystem {
28 inherit system;
29 specialArgs = { inherit commonArgs; };
30 modules = [
31 disko.nixosModules.disko
32 ./hosts/${hostname}/configuration.nix
33 ] ++ extraModules;
34 };
35
36 # Helper function to create colmena host
37 mkColmenaHost = hostname: targetHost: targetPort: extraModules:
38 {
39 deployment = {
40 inherit targetHost;
41 inherit targetPort;
42 targetUser = "tangler";
43 buildOnTarget = true;
44 };
45 nixpkgs.system = system;
46 time.timeZone = "Europe/Helsinki";
47 imports = [
48 disko.nixosModules.disko
49 ./hosts/${hostname}/configuration.nix
50 ] ++ extraModules;
51 };
52
53 # Host configurations
54 hosts = {
55 appview = {
56 modules = [
57 tangled.nixosModules.appview
58 ./hosts/appview/services/appview.nix
59 ./hosts/appview/services/nginx.nix
60 ];
61 target = "95.111.205.38";
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 knot1 = {
95 modules = [
96 tangled.nixosModules.knot
97 ./hosts/knot1/services/knot.nix
98 ./hosts/knot1/services/nginx.nix
99 ];
100 target = "knot1.alpha.tangled.sh";
101 };
102 };
103 in
104 {
105 # nixos-anywhere and nixos-rebuild use these
106 nixosConfigurations = {
107 appview = mkHost "appview" hosts.appview.modules;
108 pds = mkHost "pds" hosts.pds.modules;
109 nixery = mkHost "nixery" hosts.nixery.modules;
110 spindle = mkHost "spindle" hosts.spindle.modules;
111 knot1 = mkHost "knot1" hosts.knot1.modules;
112 };
113
114 # colmena uses this
115 colmenaHive = colmena.lib.makeHive {
116 meta = {
117 nixpkgs = nixpkgs.legacyPackages.${system};
118 specialArgs = {
119 inherit commonArgs;
120 nixery-pkgs = import nixery-flake.outPath {
121 pkgs = import nixpkgs { inherit system; };
122 };
123 };
124 };
125
126 defaults = { pkgs, ... }: {
127 environment.systemPackages = [ pkgs.curl ];
128 };
129
130 appview = mkColmenaHost "appview" hosts.appview.target 2222 hosts.appview.modules;
131 pds = mkColmenaHost "pds" hosts.pds.target 22 hosts.pds.modules;
132 nixery = mkColmenaHost "nixery" hosts.nixery.target 22 hosts.nixery.modules;
133 spindle = mkColmenaHost "spindle" hosts.spindle.target 22 hosts.spindle.modules;
134 knot1 = mkColmenaHost "knot1" hosts.knot1.target 22 hosts.knot1.modules;
135 };
136 };
137}