A filesystem-based module system for Nix that automatically imports directories into attribute sets.
Haumea is a filesystem-based module system for Nix that automatically imports directories of Nix files into attribute sets. It solves the problem of manual file imports in Nix projects by providing a structured, automated approach to module loading and organization.
Nix developers and system administrators who manage complex Nix codebases and want to reduce manual import overhead while improving code organization.
Developers choose Haumea for its intuitive mapping between filesystem structure and Nix attributes, its support for self-referencing modules, and its extensibility through custom loaders and transformers.
Filesystem-based module system for Nix [maintainer=@figsoda]
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Haumea eliminates tedious manual Nix file imports by automatically loading directory contents into attribute sets, as highlighted in the 'Why Haumea?' section for reducing boilerplate.
It provides self, super, and root references for easy fixed-point creation and module interactions, drawing inspiration from traditional programming languages to manage complex dependencies.
By default, the file tree structure directly corresponds to the output attribute set, offering a clear and organized layout that simplifies code navigation, as shown in the README's example table.
Supports custom loaders and transformers to modify how files are loaded and manipulate the attribute tree, enabling flexibility beyond basic imports, as noted in the extensibility feature.
As a third-party module system for Nix, it introduces an external dependency that may not align with projects relying solely on standard Nix practices or seeking minimal tooling overhead.
Requires additional configuration and understanding of Haumea-specific concepts like loaders and transformers, which can be a barrier for teams accustomed to vanilla Nix imports.
Its focus on filesystem-based modules might not integrate seamlessly with all Nix tooling or workflows, especially those centered around NixOS modules or other established ecosystems.