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.