Multi-File Configuration¶
This tutorial shows you how to organize your System Manager configuration across multiple files for better maintainability.
Prerequisites¶
- Completed Getting Started
- A working System Manager setup
What You'll Learn¶
- How to split configuration into separate modules
- How Nix merges configuration from multiple files
- Best practices for organizing larger configurations
Starting Point¶
By default, System Manager creates two files:
This works for simple setups, but as your configuration grows, you'll want to organize it better.
Step 1: Create a Modules Directory¶
Create a modules folder to hold your configuration files:
Step 2: Create Separate Module Files¶
Let's create two separate modules - one for packages and one for services.
modules/packages.nix
modules/services.nix
Step 3: Update Your Flake¶
Modify your flake.nix to load all modules:
Step 4: Apply the Configuration¶
How Nix Merges Configurations¶
When you have multiple modules, Nix automatically merges their config attribute sets. For example, if two files both add to environment.systemPackages, the packages are combined into a single list.
This means you can have:
modules/dev-tools.nixwith development packagesmodules/monitoring.nixwith monitoring toolsmodules/web-server.nixwith nginx configuration
And they'll all work together without conflicts.
Recommended Structure¶
For larger configurations:
Next Steps¶
- Learn about folder organization patterns
- See Working with Remote Flakes to host your config on GitHub
- Read about configuration options in the reference