{ nixpkgs, self, ... }@inputs: let makePkgs = system: (import nixpkgs { inherit system; config.allowUnfree = true; overlays = [ self.overlays.default ]; }); lib = nixpkgs.lib; libExt = import ./. lib; inherit (inputs.home-manager.lib) homeManagerConfiguration; inherit (lib) nixosSystem; inherit (lib.strings) optionalString; inherit (lib.attrsets) nameValuePair; inherit (libExt) right; in rec { toPartialNixosConfig = { hostname, system }: nameValuePair hostname (nixosSystem { pkgs = makePkgs system; specialArgs = { inherit inputs self; }; modules = [ ../hosts/${hostname}/hardware-configuration.nix ../hosts/${hostname}/configuration.nix inputs.home-manager.nixosModules.default ]; }); compileSystems = systems: right builtins.listToAttrs (map toPartialNixosConfig) systems; toPartialHomeManagerConfig = { user, system, hostname ? "", configHostname ? "" }: let configHost = if builtins.stringLength configHostname > 0 then configHostname else hostname; hostStr = optionalString (builtins.stringLength hostname > 0) "@${hostname}"; in assert lib.assertMsg (builtins.stringLength configHost > 0) "either configHostname or hostname need to exist"; nameValuePair "${user}${hostStr}" (homeManagerConfiguration { pkgs = makePkgs system; extraSpecialArgs = { inherit inputs self; }; modules = [ ../hosts/${configHost}/home.nix ]; }); compileHomes = systems: right builtins.listToAttrs (map toPartialHomeManagerConfig) systems; }