self is outputs. The following trivial flake might help:
{
outputs = { self }: {
a = 1;
b = self.a + 1;
};
}
for which nix eval .#b results in 2.
The self reference is useful. For example the packages, modules, and overlays flake outputs can be used in your nixos host configurations which would be in outputs.nixosConfigurations.
self is more than just outputs. It references inputs, outputs, packages, and many other hidden things. It essentially is a reference to the entire flake “object”. Take the following example.