{ lib, config, pkgs, flakeRoot, import-tree, home-manager, ... }: let hostname = "traveldroid"; modulesPath = "${flakeRoot}/generated/modules/${hostname}"; usersPath = "${flakeRoot}/generated/users"; hostModulesRaw = import-tree modulesPath; globalUsersRaw = import-tree usersPath; # Evaluate functions from import-tree evalModule = m: if lib.isFunction m then m { lib = lib; pkgs = pkgs; config = config; flakeRoot = flakeRoot; home-manager = home-manager; } else m; hostModules = lib.mapAttrs (_: mod: evalModule mod) hostModulesRaw; globalUsers = lib.mapAttrs (_: mod: evalModule mod) globalUsersRaw; allModules = hostModules ++ globalUsers; # Flatten modules for imports flattenModules = lib.flatten (lib.map (m: [ m ]) allModules); # Merge all _module.args.hmUsers safely allHmUsers = lib.foldl' (acc: m: let hmUsers = if (builtins.hasAttr "_module" m) && (builtins.hasAttr "args" m._module) && (builtins.hasAttr "hmUsers" m._module.args) then m._module.args.hmUsers else {}; in acc // hmUsers ) {} allModules; in { networking.hostName = hostname; system.stateVersion = "26.05"; # Use flattened module list in imports imports = flattenModules ++ [ ./boot.nix ./hardware-configuration.nix home-manager.nixosModules.home-manager ]; home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.users = allHmUsers; environment.systemPackages = [ pkgs.dconf ]; programs.dconf.enable = true; }