= Modules :toc: These are various modules ranging from link:https://nixos.org/manual/nixos/stable/index.html#sec-writing-modules[NixOS modules] and link:https://github.com/nix-community/home-manager[home-manager] modules. The modules are imported usually through `lib.filesToAttr`, allowing for easier structuring without modifying the index file of each module (i.e., `default.nix`). (See the implementation for more details.) For example, take the following module folder structure of the link:./nixos/[custom NixOS modules]... [source, tree] ---- nixos/ ├── themes/ │   ├── a-happy-gnome/ │   │   ├── default.nix │   │   └── README.adoc │   ├── a-sad-gnome/ │   │   ├── default.nix │   │   └── README.adoc │   └── default.nix ├── specific/ │   ├── borg.nix │   └── prometheus.nix ├── agenix.nix ├── archiving.nix ├── desktop.nix ├── dev.nix ├── editors.nix └── users.nix ---- ...where it should have the equivalent attribute set. [source, nix] ---- { agenix = path/to/agenix.nix; archiving = path/to/archiving.nix; desktop = path/to/desktop.nix; dev = path/to/dev.nix; editors = path/to/editors.nix; specific = { borg = path/to/specific/borg.nix; prometheus = path/to/specific/prometheus.nix; }; themes = path/to/themes; # Since it has a 'default.nix' detected, we're using it instead. users = path/to/users.nix; } ---- The resulting attribute set can be easily be used for importing. Here's an example of a NixOS system created with the modules which can used for shared configuration between hosts. [source, nix] ---- lib.nixosSystem { system = "x86_64-linux"; modules = lib.mapAttrsToList (name: path: import path) (lib.filesToAttr ./modules); } ---- == Flake outputs Various modules are then exported to the project flake as the following output: * `nixosModules` exports modules from link:./nixos/[`./nixos/`]. * `homeManagerModules` exports modules from link:./home-manager/[`./home-manager/`].