{ description = "Metanix static flake: meta.nix → addressing, deploy-rs, disko, nixos-anywhere"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05"; deploy-rs.url = "github:serokell/deploy-rs"; disko.url = "github:nix-community/disko"; nixos-anywhere.url = "github:numtide/nixos-anywhere"; }; outputs = { self, nixpkgs, deploy-rs, disko, nixos-anywhere, ... }: let defaultSystem = "x86_64-linux"; pkgsFor = system: import nixpkgs { inherit system; }; lib = nixpkgs.lib; meta = import ./meta.nix; addressing = import ./lib/addressing { inherit lib; }; systemsFromMeta = meta.systems or { }; network = addressing.mkNetworkFromSpec meta; in { lib.metanix = { inherit meta addressing network; }; nixosConfigurations = lib.mapAttrs (name: sysCfg: let system = sysCfg.system or defaultSystem; in lib.nixosSystem { inherit system; specialArgs = { inherit lib meta addressing system network; modulesPath = "${nixpkgs}/nixos/modules"; }; modules = (sysCfg.modules or [ ]) ++ [ ./modules/metanix/core.nix ./modules/metanix/networkd.nix { networking.hostName = sysCfg.hostName or name; metanix.thisHost = sysCfg.metanixName or name; } (if sysCfg ? diskoConfig then { imports = [ disko.nixosModules.disko sysCfg.diskoConfig ]; } else { }) ]; }) systemsFromMeta; deploy = { nodes = lib.mapAttrs (name: sysCfg: let hasNetworkHost = builtins.hasAttr name network.hosts; hostInfo = if hasNetworkHost then network.hosts.${name} else null; defaultHostname = if hasNetworkHost && hostInfo ? fqdn then hostInfo.fqdn else name; in { hostname = sysCfg.deployHost or defaultHostname; profiles.system = { user = sysCfg.deployUser or "root"; path = deploy-rs.lib.${defaultSystem}.activate.nixos self.nixosConfigurations.${name}; }; }) systemsFromMeta; }; checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib; apps.${defaultSystem}.nixos-anywhere = { type = "app"; program = "${nixos-anywhere.packages.${defaultSystem}.nixos-anywhere}/bin/nixos-anywhere"; }; }; }