It uses channels, or more accurately, the nixpkgs entry in NIX_PATH, which should point at your user’s nixpkgs channel or root’s nixos channel (by default). You can correct your NIX_PATH to avoid this issue:
Delete all channels.
Configure your system’s NIX_PATH using the nix.nixPath setting to point nixpkgs at the desired nixpkgs instance.
Flakes do not change the set of available NixOS options for you. Something like nix.nixPath = [ "nixpkgs=${pkgs.path}" ]; should do. It is exactly what I use (albeit in a flakeless setup).
It seems like it’s no longer necessary to set it explicitly with recent nixpkgs revisions when using flakes. So you can skip step 2 as it’s already done for you.
nixpkgs=flake:nixpkgs means it’ll use the flake registry to get nixpkgs. And when building a NixOS system with flakes, by default your /etc/nix/registry.json file will point the nixpkgs flake to the copy of nixpkgs that your system was built with.
The difference being that this creates an entry for every input, rather than just nixpkgs.
Realistically, though, the only one I ever use is nixpkgs, via nix shell or nix run, and even those most often via comma. So I can probably just remove it.
It does also create an entry for self, which I haven’t used but I can imagine using maybe in some particular circumstances, including some kind of disaster recovery. I have nixos-version with the git revisions of the flake, but this copy includes any dirty changes that the particular revision may have been built with.