I think about it like this:
Layer 2b: ->> User applications (flatpak, nixpkgs, etc.)
Layer 2a: ->> User data (mutable, persistent no matter what your system layer is)
Layer 1: -> System (immutable/read-only/updated "atomically" meaning all at once)
Layer 0: Hardware
Or, alternately, it's what macos has been doing with absolutely no fanfare for several versions now. That's not a knock, btw. It's an illustration that it can be completely transparent in use, though it may require some habit changes on linux.
Git integration seems to be so embedded that it's easy to miss. Open a git repository folder and you can switch branches and whatnot. But, like, in the command palette, there's no Git > Pull or Git > Clone as in vscode. (I have barely scratched the surface so it might be there hiding in plain sight.)