{ description = "nix infra for tangled"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; tangled.url = "git+https://tangled.org/tangled.org/core"; colmena.url = "github:zhaofengli/colmena/release-0.4.x"; disko = { url = "github:nix-community/disko"; inputs.nixpkgs.follows = "nixpkgs"; }; nixery-flake = { type = "github"; owner = "tazjin"; repo = "nixery"; flake = false; }; }; outputs = { nixpkgs, disko, colmena, nixery-flake, tangled, ... }: let system = "x86_64-linux"; commonArgs = import ./common/ssh.nix; # Helper function to create nixosConfiguration mkHost = hostname: extraModules: nixpkgs.lib.nixosSystem { inherit system; specialArgs = { inherit commonArgs; }; modules = [ disko.nixosModules.disko ./hosts/${hostname}/configuration.nix ] ++ extraModules; }; # Helper function to create colmena host mkColmenaHost = hostname: targetHost: targetPort: extraModules: { deployment = { inherit targetHost; inherit targetPort; targetUser = "tangler"; buildOnTarget = true; }; nixpkgs.system = system; time.timeZone = "Europe/Helsinki"; imports = [ disko.nixosModules.disko ./hosts/${hostname}/configuration.nix ] ++ extraModules; }; # Host configurations hosts = { appview = { modules = [ tangled.nixosModules.appview ./hosts/appview/services/appview.nix ./hosts/appview/services/nginx.nix ]; target = "95.111.205.38"; }; pds = { modules = [ ./hosts/pds/services/nginx.nix ./hosts/pds/services/pds.nix ]; target = "tngl.sh"; }; nixery = { modules = [ tangled.nixosModules.spindle ./hosts/nixery/services/nginx.nix ./hosts/nixery/services/openbao/openbao.nix ./hosts/nixery/services/openbao/proxy.nix ./hosts/nixery/services/nixery.nix ]; target = "nixery.tangled.sh"; }; spindle = { modules = [ tangled.nixosModules.spindle ./hosts/spindle/services/openbao/openbao.nix ./hosts/spindle/services/openbao/proxy.nix ./hosts/spindle/services/spindle.nix ./hosts/spindle/services/nginx.nix ]; target = "spindle.alpha.tangled.sh"; }; knot1 = { modules = [ tangled.nixosModules.knot ./hosts/knot1/services/knot.nix ./hosts/knot1/services/nginx.nix ]; target = "knot1.alpha.tangled.sh"; }; }; in { # nixos-anywhere and nixos-rebuild use these nixosConfigurations = { appview = mkHost "appview" hosts.appview.modules; pds = mkHost "pds" hosts.pds.modules; nixery = mkHost "nixery" hosts.nixery.modules; spindle = mkHost "spindle" hosts.spindle.modules; knot1 = mkHost "knot1" hosts.knot1.modules; }; # colmena uses this colmenaHive = colmena.lib.makeHive { meta = { nixpkgs = nixpkgs.legacyPackages.${system}; specialArgs = { inherit commonArgs; nixery-pkgs = import nixery-flake.outPath { pkgs = import nixpkgs { inherit system; }; }; }; }; defaults = { pkgs, ... }: { environment.systemPackages = [ pkgs.curl ]; }; appview = mkColmenaHost "appview" hosts.appview.target 2222 hosts.appview.modules; pds = mkColmenaHost "pds" hosts.pds.target 22 hosts.pds.modules; nixery = mkColmenaHost "nixery" hosts.nixery.target 22 hosts.nixery.modules; spindle = mkColmenaHost "spindle" hosts.spindle.target 22 hosts.spindle.modules; knot1 = mkColmenaHost "knot1" hosts.knot1.target 22 hosts.knot1.modules; }; }; }