{ description = "nixos-config"; inputs = { nixpkgs = { url = "github:nixos/nixpkgs/nixos-unstable"; }; stable = { url = "github:nixos/nixpkgs/nixos-20.09"; }; hardware = { url = "github:nixos/nixos-hardware"; }; home-manager = { url = "github:nix-community/home-manager"; }; nixpkgs-wayland = { url = "github:colemickens/nixpkgs-wayland"; }; nur = { url = "github:nix-community/NUR"; }; }; outputs = inputs: let nixFilesIn = dir: builtins.mapAttrs (name: _: name) (builtins.readDir dir); hostFiles = dir: builtins.attrValues (nixFilesIn (./. + (dir))); mkSystem = { sys ? "x86_64-linux", pkgs ? inputs.nixpkgs, modules, hostname }: pkgs.lib.nixosSystem { system = sys; modules = modules; specialArgs = { inherit inputs; }; }; mkHost = name: let hostDir = "/hosts/${name}"; mod = (builtins.map (file: (./. + "${hostDir}/${file}")) (builtins.attrValues (nixFilesIn (./. + "${hostDir}")))) ++ [{ nixpkgs.overlays = [ inputs.nur.overlay (import ./pkgs/pkgs.nix) ]; }]; in mkSystem { hostname = name; modules = mod; }; in { nixosConfigurations = builtins.mapAttrs (name: _: mkHost name) (builtins.readDir ./hosts); }; }