{ lib, config, inputs, ... }: let username = config.defaultUser or "henrov"; modulesPath = ./generated/parked; importedModules = inputs.import-tree modulesPath; moduleSwitches = import ./assets/system/modules.conf; enabledModules = lib.filterAttrs (name: _: moduleSwitches.${name} or false) importedModules.imports; moduleList = builtins.attrValues enabledModules; # Functie om fragment veilig te evalueren en debug info te verzamelen debugFragment = module: let frag = if builtins.hasAttr "homeManagerExtraUserFragment" module then module.homeManagerExtraUserFragment else {}; evaluated = if builtins.isFunction frag then frag {} else frag; isAttrs = builtins.isAttrs evaluated; isList = builtins.isList evaluated; isThunk = builtins.isFunction frag; in { fragment = if isAttrs then evaluated else {}; debug = { name = if builtins.hasAttr "name" module then module.name else "unknown"; isAttrs = isAttrs; isList = isList; isThunk = isThunk; }; }; # Alle fragments met debug info fragmentsWithDebug = map debugFragment moduleList; # Lijst van problematische modules problematicModules = builtins.filter (x: !(x.debug.isAttrs)) fragmentsWithDebug; # Merge alleen veilige fragments safeFragments = map (x: x.fragment) fragmentsWithDebug; mergedForUser = lib.foldl' lib.mkMerge {} safeFragments; in { networking.hostName = "traveldroid"; system.stateVersion = "26.05"; # Top-level key is username → value is attrset home-manager.users = { "${username}" = mergedForUser; }; # Extra debug output, alleen zichtbaar als je `nix eval` gebruikt debug.problematicModules = problematicModules; }