59 lines
1.8 KiB
Nix
59 lines
1.8 KiB
Nix
{ 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; } else m) imported.imports;
|
|
|
|
# STEP 2: attach names safely
|
|
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: build debug string
|
|
debugContents = builtins.concatStringsSep "\n"
|
|
(map (m: "${m.name} (${builtins.toString (builtins.length (builtins.attrNames m.value))} attrs)") enabledModules);
|
|
|
|
# STEP 5: force evaluation to print to screen
|
|
_ = builtins.trace ("==== Enabled modules (" + toString (builtins.length enabledModules) + ") ====\n" + debugContents) true;
|
|
|
|
# STEP 6: write to host /tmp during build
|
|
hostDebugFile = pkgs.runCommand "traveldroid-modules-debug-host" {
|
|
buildInputs = [ pkgs.coreutils ];
|
|
} ''
|
|
echo "${debugContents}" > /tmp/traveldroid-modules-debug.txt
|
|
mkdir -p $out
|
|
touch $out/dummy
|
|
'';
|
|
|
|
in
|
|
{
|
|
networking.hostName = "traveldroid";
|
|
system.stateVersion = "26.05";
|
|
|
|
imports = [
|
|
./boot.nix
|
|
./hardware-configuration.nix
|
|
];
|
|
|
|
home-manager.users = lib.mkMerge (map (m: m.value) enabledModules);
|
|
|
|
# Write debug file inside VM
|
|
environment.etc."traveldroid-modules-debug.txt".text = debugContents;
|
|
|
|
# Ensure host-side debug file is built
|
|
system.build.hostDebugDummy = hostDebugFile;
|
|
}
|