{ lib, config, pkgs, flakeRoot, import-tree, home-manager, ... }: let hostname = "traveldroid"; modulesPath = "${flakeRoot}/generated/modules/${hostname}"; usersPath = "${flakeRoot}/generated/users"; hostModules = import-tree modulesPath; globalUsers = import-tree usersPath; allModules = hostModules.imports ++ globalUsers.imports; ######################################################### # Merge all _module.args.hmUsers from your modules ######################################################### mergedHmUsers = lib.mkMerge (map (m: if builtins.hasAttr "args" m && builtins.hasAttr "hmUsers" m.args then m.args.hmUsers else {}) allModules); ######################################################### # Add single activation to ensure all parent dirs exist ######################################################### mergedHmUsersWithDirs = lib.mapAttrs (_: userCfg: userCfg // { home.activation.ensureDirs = lib.hm.dag.entryAfter ["writeBoundary"] (let ensureDirs = files: lib.mapAttrs (_: path: '' mkdir -p $(dirname $HOME/${path}) '') files; in ensureDirs (builtins.attrNames (userCfg.home.file or {})) ); }) mergedHmUsers; in { ################################# # Core system config ################################# networking.hostName = hostname; system.stateVersion = "26.05"; ################################# # Imports ################################# imports = [ ../../../generated/users/henrov.nix ./boot.nix ./hardware-configuration.nix ] ++ allModules ++ [ home-manager.nixosModules.home-manager ]; # import HM last ################################# # Home Manager integration ################################# home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; # Pass the merged user definitions with automatic dir creation home-manager.users = mergedHmUsersWithDirs; ################################# # System packages & programs ################################# environment.systemPackages = [ pkgs.dconf ]; programs.dconf.enable = true; }