Tangled infrastructure definitions in Nix
at master 4.2 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 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}