{ sources ? import ../npins , pkgs ? import sources.nixpkgs {} }: let inherit (pkgs) lib; eval = configuration: let self = lib.evalModules { modules = [ configuration { options = { machines = lib.mkOption { type = lib.types.attrsOf lib.types.raw; default = {}; }; outputs = lib.mkOption { type = lib.types.attrsOf lib.types.raw; default = {}; }; }; config = { outputs.machines = lib.mapAttrs (name: configuration: nixos configuration ) self.config.machines; }; } ]; specialArgs.self = self; }; # nixos = config: lib.evalModules { # modules = [ # config # { # # XXX Otherwise building manual fails # documentation.enable = false; # boot.loader.grub.device = "nodev"; # fileSystems."/".device = "tmpfs"; # nixpkgs.localSystem = "x86_64-linux"; # } # ]; # specialArgs.self = self; # }; nixos = config: import (sources.nixpkgs + "/nixos/lib/eval-config.nix") { modules = [ config { # XXX Otherwise building manual fails documentation.enable = false; boot.loader.grub.device = "nodev"; fileSystems."/".device = "tmpfs"; nixpkgs.localSystem = { system = "x86_64-linux"; }; } ]; specialArgs.self = self; # The system is inherited from the current pkgs above. # Set it to null, to remove the "legacy" entrypoint's non-hermetic default. system = null; }; in self; in { inherit eval; }