{ lib, config, inputs, ... }: let username = config.defaultUser or "henrov"; modulesPath = ./generated/modules; # import-tree gives { imports = { name = module; ... }; } imported = inputs.import-tree modulesPath; moduleSwitches = import ./assets/system/modules.conf; # keep only enabled modules enabledModules = lib.filterAttrs (name: _: moduleSwitches.${name} or false) imported.imports; # evaluate modules properly (IMPORTANT) evaluatedModules = builtins.mapAttrs (_: m: if builtins.isFunction m then m { inherit lib config; } else m ) enabledModules; # final list of user fragments moduleList = builtins.attrValues evaluatedModules; in { networking.hostName = "traveldroid"; system.stateVersion = "26.05"; home-manager.users = lib.mkMerge moduleList; # bonus: see what got loaded environment.variables.LOADED_MODULES = builtins.concatStringsSep "," (builtins.attrNames enabledModules); }