Packages should be invariant across similar systems. Configuration should vary. For a coarse-grained example, if I have a cluster of servers, they should all run exactly the same version of the OS, but have different hostnames.
A fair definition. If they're anything like mine, the hosts probably have unique hostnames but share the remaining 99% of the nginx config. Is that identical portion a "package" or "configuration"?
I think there are a few more steps in there. Assuming identical OS and arch, you've probably got:
* software packages that should be identical on all nodes in the cluster
* a set of software packages that should be installed on all nodes
* configuration that should be identical (e.g. 99% of an nginx config)
* configuration that is unique to the host (e.g. a hostname)
Or perhaps:
* packages limited to a single OS (traditional software packages for Linux)
* packages limited to a single organization (identical portions of configs)
* packages limited to a single node (hostname)
Anyway, I'm playing around with using Nix for all but the unique-per-host stuff. I see potential, but it may or may not pan out. I seem to always need a custom version of nginx, or ruby, and I find making custom Debian packages rather cumbersome, even with a fair amount of experience.