{ lib, config, pkgs, flakeRoot, import-tree, home-manager, ... }: let hostname = "traveldroid"; # Paths to your host modules and user modules modulesPath = "${flakeRoot}/generated/modules/${hostname}"; usersPath = "${flakeRoot}/generated/users"; # Import all modules using import-tree hostModules = import-tree modulesPath; globalUsers = import-tree usersPath; allModules = hostModules.imports ++ globalUsers.imports; in { ################################# # Core system config ################################# networking.hostName = hostname; system.stateVersion = "26.05"; ################################# # Imports ################################# imports = [ ./boot.nix ./hardware-configuration.nix # Home Manager module home-manager.nixosModules.home-manager ] ++ allModules; ################################# # Home Manager integration ################################# home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; # Evaluate all modules from import-tree allModulesEval = lib.mapAttrsToList (_: mod: mod { lib = lib; pkgs = pkgs; config = config; flakeRoot = flakeRoot; home-manager = home-manager; }) hostModules; # Then fold home-manager.users = 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 ) {} allModulesEval; ################################# # System packages & helpers ################################# environment.systemPackages = [ pkgs.dconf ]; programs.dconf.enable = true; }