Persistence of data

I am still a bit puzzled when it comes to persistence.

When I read:

IIUC the current default is to just keep the state (home, databases, etc).
And the links describe a journey to a (as much as possible) stateless system.

When I look at this

  impermanence.url = "github:nix-community/impermanence";

  environment.persistence."/nix/persist" = {
    directories = [
      { directory = "/srv"; mode="0755"; } # service data

I wonder would one use impermanence and not just separate subvolume?

The concept itself does indeed build on the assumption, that your root filesystem is volatile, but you still keep a persistent storage place around, which could very well be a subvolume. The impermanence module builds on that and offers an interface to create symlinks and bind mounts at scale across your system.