This article and video might be good for you, but they are more about a conceptual overview of what the fundamental parts of Nix are and how they interact.
Flakes are a dependency-pinning and hermetic evaluation feature baked into the Nix tool itself.
Overlays are an idiom that uses lazy evaluation to build up larger attribute sets in a modular and composable way (e.g., package collections for a particular programming language).