Overlay doesn't get applied in some cases

I am trying to make vimPlugins.nvim-treesitter-parsers.* overridable, so I created this patch, but for some reason it doesn’t work.

diff --git a/pkgs/applications/editors/vim/plugins/nvim-treesitter/overrides.nix b/pkgs/applications/editors/vim/plugins/nvim-treesitter/overrides.nix
index ef1fd6363c71..d153eb3f3063 100644
--- a/pkgs/applications/editors/vim/plugins/nvim-treesitter/overrides.nix
+++ b/pkgs/applications/editors/vim/plugins/nvim-treesitter/overrides.nix
@@ -25,7 +25,7 @@ let
   #   tree-sitter-ocaml-interface
   #   tree-sitter-ocaml_interface
   builtGrammars =
-    generatedGrammars
+    self.nvim-treesitter.generatedGrammars
     // lib.concatMapAttrs (
       k: v:
       let
@@ -38,9 +38,9 @@ let
         ${replaced} = v;
         "tree-sitter-${replaced}" = v;
       }
-    ) generatedDerivations;
+    ) self.nvim-treesitter.generatedGrammars;
 
-  allGrammars = lib.attrValues generatedDerivations;
+  allGrammars = lib.attrValues self.nvim-treesitter.generatedGrammars;
 
   # Usage:
   # pkgs.vimPlugins.nvim-treesitter.withPlugins (p: [ p.c p.java ... ])
@@ -49,10 +49,12 @@ let
   withPlugins =
     f:
     self.nvim-treesitter.overrideAttrs {
-      passthru.dependencies = map grammarToPlugin (f (tree-sitter.builtGrammars // builtGrammars));
+      passthru.dependencies = map grammarToPlugin (
+        f (tree-sitter.builtGrammars // self.nvim-treesitter.builtGrammars)
+      );
     };
 
-  withAllGrammars = withPlugins (_: allGrammars);
+  withAllGrammars = withPlugins (_: self.nvim-treesitter.allGrammars);
 in
 
 {
@@ -69,7 +71,9 @@ in
       withAllGrammars
       ;
 
-    grammarPlugins = lib.mapAttrs (_: grammarToPlugin) generatedDerivations;
+    generatedGrammars = generatedDerivations;
+
+    grammarPlugins = lib.mapAttrs (_: grammarToPlugin) self.nvim-treesitter.generatedGrammars;
 
     tests = {
       check-queries =
# my.nix
import ./. {
  overlays = [
    (final: prev: {
      vimPlugins = prev.vimPlugins // {
        nvim-treesitter = prev.vimPlugins.nvim-treesitter // {
          generatedGrammars = prev.vimPlugins.nvim-treesitter.generatedGrammars // {
            nu = prev.vimPlugins.nvim-treesitter.generatedGrammars.nu.overrideAttrs {
              version = "aaaaaa";

              installQueries = true;

              src = final.fetchFromGitHub {
                owner = "nushell";
                repo = "tree-sitter-nu";
                rev = "e36dde8d98549da7c9ef9e8f8698a3e77d4015ac";
                hash = "";
              };
            };
          };
        };
      };
    })
  ];
}
$ nix repl
Lix 2.92.0-dev-pre20241211-92ed9fe
Type :? for help.
nix-repl> :l my.nix
Added 23168 variables.

nix-repl> :b builtins.elemAt (builtins.filter (x: x.pname == "nu-grammar") vimPlugins.nvim-treesitter.allGrammars) 0 

This derivation produced the following outputs:
  out -> /nix/store/hp771sjfnk1bwwvz0m897qjg0ydva302-nu-grammar-0.0.0+rev=a94fdf1

nix-repl> :b vimPlugins.nvim-treesitter.generatedGrammars.nu
warning: found empty hash, assuming 'sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='
error: hash mismatch in fixed-output derivation '/nix/store/na4vk9zf50khdp3qlnnzfkxm0xdcm7v4-source.drv'

I don’t understand why generatedGrammars.nu gets overridden, but allGrammars.nu doesn’t. Even though I explicitly reference final.generatedGrammars.nu in the nvim-treesitter overlay.

Useful links: