{ description = "Fudo Host Configuration"; inputs = { nixpkgs.url = "nixpkgs/nixos-21.05"; fudo-home = { url = "path:/state/nixops/fudo-home"; inputs.nixpkgs.follows = "nixpkgs"; }; fudo-entities = { url = "path:/state/fudo-entities"; inputs.nixpkgs.follows = "nixpkgs"; }; fudo-lib = { url = "path:/state/fudo-lib"; inputs.nixpkgs.follows = "nixpkgs"; }; fudo-pkgs.url = "path:/state/nixops/fudo-pkgs"; fudo-secrets.url = "path:/state/secrets"; deploy-rs = { url = "github:serokell/deploy-rs"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, deploy-rs, fudo-home, fudo-lib, fudo-entities, fudo-pkgs, fudo-secrets, ... }: with nixpkgs.lib; let sys-lib = import ./lib/system.nix { lib = nixpkgs.lib; }; fudo-nix-hosts = filterAttrs (hostname: hostOpts: hostOpts.nixos-system) (fudo-entities.entities.hosts); fudo-networks = fudo-entities.entities.networks; pkgs-for = arch: import nixpkgs { system = arch; config = { allowUnfree = true; permittedInsecurePackages = [ "openssh-with-gssapi-8.4p1" ]; }; overlays = [ fudo-lib.overlay fudo-pkgs.overlay deploy-rs.overlay ]; }; in { nixosConfigurations = let in mapAttrs (hostname: hostOpts: let system = hostOpts.arch; site = hostOpts.site; domain = hostOpts.domain; profile = hostOpts.profile; in nixosSystem { inherit system; modules = let config-path = ./config; in [ fudo-home.nixosModule fudo-secrets.nixosModule fudo-lib.nixosModule ({ config, ... }: let network-hosts = config.fudo.networks.${domain}.hosts; in { imports = [ ./config fudo-entities.nixosModule (config-path + /hardware/${hostname}.nix) ] ++ (filter pathExists [ (config-path + /host-config/${hostname}.nix) (config-path + /profile-config/${profile}.nix) (config-path + /domain-config/${domain}.nix) (config-path + /site-config/${site}.nix) ] ); instance = { inherit hostname; build-seed = builtins.readFile config.fudo.secrets.files.build-seed; # build-timestamp = # self.sourceInfo.lastModified; }; nixpkgs.pkgs = pkgs-for system; }) ]; }) fudo-nix-hosts; }; }