{ lib, config, pkgs, inputs, ... }: let username = config.defaultUser or "henrov"; modulesPath = ./generated/modules; imported = inputs.import-tree modulesPath; moduleSwitches = import ../../../assets/system/conf/modules.conf; # STEP 1: evaluate all modules evaluatedModules = map (m: if builtins.isFunction m then m { inherit lib config pkgs; } else m ) imported.imports; # STEP 2: attach normalized names modulesWithNames = map (m: { name = if m ? _file then lib.removeSuffix ".nix" (builtins.baseNameOf m._file) else "unknown"; value = m; }) evaluatedModules; # STEP 3: filter enabled modules enabledModules = builtins.filter (m: moduleSwitches.${m.name} or false ) modulesWithNames; # STEP 4: extract ONLY Home Manager user attrsets hmUserSets = map (m: m.value._module.args.hmUsers or {}) enabledModules; # STEP 5: debug string debugContents = builtins.concatStringsSep "\n" (map (m: let attrCount = if builtins.isAttrs m.value then builtins.length (builtins.attrNames m.value) else 0; in "${m.name} (${builtins.toString attrCount} attrs)" ) enabledModules); # STEP 6: FORCE trace (important!) tracedModules = builtins.trace ("==== Enabled modules (" + builtins.toString (builtins.length enabledModules) + ") ====\n" + debugContents) enabledModules; # STEP 7: proper debug file in store debugFile = pkgs.writeText "traveldroid-modules-debug.txt" debugContents; in { networking.hostName = "traveldroid"; system.stateVersion = "26.05"; imports = [ ./boot.nix ./hardware-configuration.nix ]; # ✅ Correct merge: ONLY HM user attrsets home-manager.users = lib.mkMerge hmUserSets; # Optional: also inside VM environment.etc."traveldroid-modules-debug.txt".text = debugContents; # Expose debug file as build output system.build.modulesDebug = debugFile; }