Tangled infrastructure definitions in Nix
at master 151 lines 4.8 kB view raw
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"; 7 tangled-mirror.url = "git+https://tangled.org/tangled.org/core?ref=sl/knotmirror"; 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 }; 20 21 outputs = { nixpkgs, disko, colmena, nixery-flake, tangled, tangled-mirror, ... }: 22 let 23 system = "x86_64-linux"; 24 commonArgs = import ./common/ssh.nix; 25 26 # Helper function to create nixosConfiguration 27 mkHost = hostname: extraModules: 28 nixpkgs.lib.nixosSystem { 29 inherit system; 30 specialArgs = { inherit commonArgs; }; 31 modules = [ 32 disko.nixosModules.disko 33 ./hosts/${hostname}/configuration.nix 34 ] ++ extraModules; 35 }; 36 37 # Helper function to create colmena host 38 mkColmenaHost = hostname: targetHost: targetPort: extraModules: 39 { 40 deployment = { 41 inherit targetHost; 42 inherit targetPort; 43 targetUser = "tangler"; 44 buildOnTarget = true; 45 }; 46 nixpkgs.system = system; 47 time.timeZone = "Europe/Helsinki"; 48 imports = [ 49 disko.nixosModules.disko 50 ./hosts/${hostname}/configuration.nix 51 ] ++ extraModules; 52 }; 53 54 # Host configurations 55 hosts = { 56 appview = { 57 modules = [ 58 tangled.nixosModules.appview 59 ./hosts/appview/services/appview.nix 60 ./hosts/appview/services/nginx.nix 61 ./hosts/appview/services/litestream.nix 62 ]; 63 target = "95.111.205.38"; 64 }; 65 66 pds = { 67 modules = [ 68 ./hosts/pds/services/nginx.nix 69 ./hosts/pds/services/pds.nix 70 ]; 71 target = "tngl.sh"; 72 }; 73 74 nixery = { 75 modules = [ 76 tangled.nixosModules.spindle 77 ./hosts/nixery/services/nginx.nix 78 ./hosts/nixery/services/openbao/openbao.nix 79 ./hosts/nixery/services/openbao/proxy.nix 80 ./hosts/nixery/services/nixery.nix 81 ]; 82 target = "nixery.tangled.sh"; 83 }; 84 85 spindle = { 86 modules = [ 87 tangled.nixosModules.spindle 88 ./hosts/spindle/services/openbao/openbao.nix 89 ./hosts/spindle/services/openbao/proxy.nix 90 ./hosts/spindle/services/spindle.nix 91 ./hosts/spindle/services/nginx.nix 92 ]; 93 target = "spindle.alpha.tangled.sh"; 94 }; 95 96 knot1 = { 97 modules = [ 98 tangled.nixosModules.knot 99 ./hosts/knot1/services/knot.nix 100 ./hosts/knot1/services/nginx.nix 101 ]; 102 target = "knot1.alpha.tangled.sh"; 103 }; 104 105 mirror = { 106 modules = [ 107 tangled-mirror.nixosModules.knotmirror 108 { nixpkgs.overlays = [ tangled-mirror.overlays.default ]; } 109 ./hosts/mirror/services/knotmirror.nix 110 ]; 111 target = "81.27.110.122"; 112 }; 113 }; 114 in 115 { 116 # nixos-anywhere and nixos-rebuild use these 117 nixosConfigurations = { 118 appview = mkHost "appview" hosts.appview.modules; 119 pds = mkHost "pds" hosts.pds.modules; 120 nixery = mkHost "nixery" hosts.nixery.modules; 121 spindle = mkHost "spindle" hosts.spindle.modules; 122 knot1 = mkHost "knot1" hosts.knot1.modules; 123 mirror = mkHost "mirror" hosts.mirror.modules; 124 }; 125 126 # colmena uses this 127 colmenaHive = colmena.lib.makeHive { 128 meta = { 129 nixpkgs = nixpkgs.legacyPackages.${system}; 130 specialArgs = { 131 inherit commonArgs; 132 nixery-pkgs = import nixery-flake.outPath { 133 pkgs = import nixpkgs { inherit system; }; 134 }; 135 tangled-pkgs = tangled.packages.x86_64-linux; 136 }; 137 }; 138 139 defaults = { pkgs, ... }: { 140 environment.systemPackages = [ pkgs.curl ]; 141 }; 142 143 appview = mkColmenaHost "appview" hosts.appview.target 2222 hosts.appview.modules; 144 pds = mkColmenaHost "pds" hosts.pds.target 22 hosts.pds.modules; 145 nixery = mkColmenaHost "nixery" hosts.nixery.target 22 hosts.nixery.modules; 146 spindle = mkColmenaHost "spindle" hosts.spindle.target 22 hosts.spindle.modules; 147 knot1 = mkColmenaHost "knot1" hosts.knot1.target 22 hosts.knot1.modules; 148 mirror = mkColmenaHost "mirror" hosts.mirror.target 22 hosts.mirror.modules; 149 }; 150 }; 151}