{ lib, config, 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 first evaluatedModules = map (m: if builtins.isFunction m then m { inherit lib config; } else m ) imported.imports; # STEP 2: attach names safely, stripping .nix modulesWithNames = map (m: { name = if m ? _file then builtins.replaceSuffix ".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 final module values moduleList = map (m: m.value) enabledModules; in { networking.hostName = "traveldroid"; system.stateVersion = "26.05"; imports = [ ./boot.nix ./hardware-configuration.nix ]; home-manager.users = lib.mkMerge moduleList; # Logging to screen # Print number of enabled modules and each module's attribute count tracing1 = builtins.trace (builtins.concatStringsSep "\n" (map (m: "${m.name} (${builtins.toString (builtins.length (builtins.attrNames m.value))} attrs)") enabledModules)) true; tracing2 = builtins.trace (toString (builtins.length enabledModules) + " modules enabled: " + builtins.concatStringsSep ", " (map (m: m.name) enabledModules)) true; # logging to file let debugFile = "/tmp/traveldroid-modules-debug.txt"; debugContents = builtins.concatStringsSep "\n" (map (m: "${m.name} (${builtins.toString (builtins.length (builtins.attrNames m.value))} attrs)") enabledModules); in { # Write a file during the build environment.etc."traveldroid-modules-debug.txt".text = debugContents; } }