diff --git a/morph/README.rst b/morph/README.rst
index 96d03eb3cf522af6f1b0065105a2d57ab5c78f6a..bdfe48454529c0ff13f7b30aa275b5a1726a2096 100644
--- a/morph/README.rst
+++ b/morph/README.rst
@@ -36,11 +36,17 @@ lib
 ---
 
 This contains Nix library code for defining the grids.
+It has all the details of how each type of node in our grid is configured.
+It knows about morph (so defines ``deployment.secrets`` and has the logic for collecting data defined by other nodes).
+It defines options (i.e. ``grid.*``) for things specific to how we configure grids (e.g. ``grid.publicKeyPath``).
+It defines metadata about nodes that we use on other nodes (e.g. ``grid.monitoringvpnIPv4`` which is used to define various things on the monitoring node).
+Each top-level module here defines one type of node with all (or at least most) of the configuration necessary for that node.
 
 grid
 ----
 
 Specific grid definitions live in subdirectories beneath this directory.
+They consist almost exclusively setting options defined in ``morph/lib`` (and few options defined elsewhere) and then delegating to the ``morph/lib`` modules.
 
 private-keys
 ~~~~~~~~~~~~
diff --git a/nixos/modules/README.rst b/nixos/modules/README.rst
new file mode 100644
index 0000000000000000000000000000000000000000..b395eace08655ade8b52262dbdf3bf62664d1c66
--- /dev/null
+++ b/nixos/modules/README.rst
@@ -0,0 +1,5 @@
+These are mostly modelled on upstream nixos modules.
+They are generally fairly configurable (they don't tend to hard-code paths, they can be enabled or disabled).
+They don't know anything about morph (e.g. ``deployment.secrets``) or how the different grids are configured (e.g. ``grid.publicKeyPath``).
+Each module here tends to define one service (or group of related services) or feature.
+Eventually, all of these will be imported automatically and controlled by ``services.private-storage.*.enabled`` options.