Two notes from reading the first several paragraphs:

1. It seems one needs to know some Scheme in order to write these files:

https://www.scheme.org/

I don't think it's possible to just "wing it" by copy-and-paste.

2. I did not understand the introductory paragraph about how services "extend" each other. Does every service have hooks for possible extensions? What if a new service doesn't fit existing extension hooks?

(I can understand service dependencies of course, but it seems to go beyond that.)

> Does every service have hooks for possible extensions? What if a new service doesn't fit existing extension hooks?

No, only few services define service extensions.

It's more common for services to be configured solely via their configuration struct.

See the following for docs:

* https://guix.gnu.org/manual/en/html_node/Service-Composition...

* https://guix.gnu.org/manual/en/html_node/Service-Types-and-S...

This is less flexible-by-default than NixOS module, where any module can modify any other module. That is by design. The Guix developers see NixOS's approach as failing the principle-of-least-authority, where any arbitrary module (even those imported via flakes) can add a root SSH key.

I use NixOS, but it's an interesting tradeoff.