inputs: { system, hostname, users, systemModules, }: let pkgs = import inputs.nixpkgs { inherit system; config.allowUnfree = true; }; in { nixos = inputs.nixpkgs.lib.nixosSystem { modules = systemModules ++ (map (u: { pkgs, ... }: { users.users.${u.username} = import u.userNixos { inherit pkgs; }; }) (builtins.filter (u: u ? userNixos) users)) ++ [ { users.users = builtins.listToAttrs (map (u: { name = u.username; value = { isNormalUser = true; description = ""; extraGroups = [ "networkmanager" "wheel" ]; }; }) users); } ]; inherit system; specialArgs = { inherit inputs hostname; users = map (u: u.username) users; }; }; home-manager = builtins.listToAttrs (map (u: { name = "${u.username}@${hostname}"; value = inputs.home-manager.lib.homeManagerConfiguration { inherit pkgs; extraSpecialArgs = { inherit inputs hostname; username = u.username; }; modules = [ { home = { username = u.username; homeDirectory = "/home/${u.username}"; }; programs.home-manager.enable = true; } (import ../system/home-manager) ] ++ u.homeModule; }; }) users); }