{ lib, config, inputs, ... }: let username = config.defaultUser or "henrov"; # Import modules modulesPath = ./generated/modules; moduleSwitches = builtins.fromJSON (builtins.readFile ./assets/system/conf/modules.json); importedModules = inputs.import-tree modulesPath; # Keep only enabled modules enabledModules = lib.filterAttrs (name: _: moduleSwitches.${name} or false) importedModules.imports; moduleList = builtins.attrValues enabledModules; # Function to safely evaluate a fragment safeFragment = m: let frag = if builtins.hasAttr "homeManagerExtraUserFragment" m then m.homeManagerExtraUserFragment else {}; evaled = if builtins.isFunction frag then frag {} else frag; in if builtins.isAttrs evaled then evaled else {}; # Merge all fragments mergedFragments = lib.foldl' lib.mkMerge {} (map safeFragment moduleList); in { networking.hostName = "traveldroid"; system.stateVersion = "26.05"; # Top-level key is username → merged fragments home-manager.users = { "${username}" = mergedFragments; }; }