Working through your example:
nix-repl> let x = { foo = 1; inherit y; }; y = { bar = 2; inherit x; }; in x.y.x.foo
1
definitely aligns with and solidifies the understanding I was developing of how evaluation of something like foo.bar works as I worked through the lib.fix stuff. Gratis!