Options Schema for the Dendritic Flake
The options layer defines the vocabulary that every branch, leaf, and host uses. It turns informal conventions into typed module options under my.*.
Up: cells
Down: core options | profile options | host options | theme options | Matrix options
What this node does
cells/options.nix imports the option modules.
_: {
imports = [
./options/core.nix
./options/matrix.nix
./options/theme.nix
./options/profile.nix
./options/hosts.nix
];
}That makes my.user, my.profile, my.branches, my.hosts, my.theme, and my.matrix available to the rest of the flake.
Why options come before branches
Branches and hosts need a shared schema. Without my.branches, a leaf could not safely append modules to config.my.branches.desktop.hmModules. Without my.hosts, a host file would not have a typed place to declare hardware modules or branch additions.
The options layer is the vocabulary of the organism. Branches and leaves are sentences written in that vocabulary.
What to copy
Define your own namespace, then keep cross-cutting settings in it.
options.my = {
profile.branches = mkOption {
type = types.listOf types.str;
default = [ "base" "security" ];
};
branches = mkOption {
type = types.attrsOf branchSubmodule;
default = { };
};
};This is easier to extend than scattering raw lists of imports across each host.