Architecture
Autowiring Pattern
Pack roots use wireImportsRecursively to auto-discover all .nix files recursively:
{flake, ...}: flake.inputs.autowire.wireImportsRecursively ./.
Subdirectories with a custom default.nix are treated as opaque — their default.nix is imported instead of recursing further. Adding a new .nix file to a pack directory automatically includes it.
Layered Composition
Configuration is built up in layers:
flake.nix— Declares all inputs; outputs generated viaflake-partsflake/*.nix— Flake-level glue (configs, formatter, activation). Each.nixfile is aflake-partsmodule imported byflake.nixpacks/{home,nixos}/— Autowired packs (common, host, container, gui). Import a pack, get everything in itmixins/{home,nixos}/— Opt-in configuration pieces (services, hardware, versions), manually imported by host configshome/*.nix— Per-user base Home Manager configurationsnixos/{hosts,containers}/— Per-host and per-container NixOS configurations
Custom Options
packs/home/common/options.nix defines the me option set used throughout Home Manager modules:
me.usernameme.fullnameme.email
These are set in each user’s base config (e.g., home/yjpark.nix).