anchor.diff:  let
     inherit (stdenv) lib;
   
  -  # make sure a plugin is a derivation. If plugin already is a derivation, this
  -  # is a no-op. If it is a string, it is looked up in knownPlugins.
  +  # make sure a plugin is a derivation and its dependencies are derivations. If
  +  # plugin already is a derivation, this is a no-op. If it is a string, it is
  +  # looked up in knownPlugins.
     pluginToDrv = knownPlugins: plugin:
  -    if builtins.isString plugin then
  -      # make sure `pname` is set to that we are able to convert the derivation
  -      # back to a string.
  -      ( knownPlugins.${plugin} // { pname = plugin; })
  -    else
  -      plugin;
  +  let
  +    drv =
  +      if builtins.isString plugin then
  +        # make sure `pname` is set to that we are able to convert the derivation
  +        # back to a string.
  +        ( knownPlugins.${plugin} // { pname = plugin; })
  +      else
  +        plugin;
  +  in
  +    # make sure all the dependencies of the plugin are also derivations
  +    drv // { dependencies = map (pluginToDrv knownPlugins) (drv.dependencies or []); };
   
     # transitive closure of plugin dependencies (plugin needs to be a derivation)
     transitiveClosure = plugin:
  
positive.code:             rev = "4c596548216b7c19971f8fc94e38ef1a2b55fee6";
              sha256 = "0f1cpnp1nxb4i5hgymjn2yn3k1jwkqmlgw1g02sq270lavp2dzs9";
            };
            dependencies = [];
          };
        });
      vimrcConfig.vam.pluginDictionaries = [ { names = [ "vim-trailing-whitespace" ]; } ];
  
negative.code:     );
  
    findDependenciesRecursively = plugins: lib.concatMap transitiveClosure plugins;
  
    vamDictToNames = x:
        if builtins.isString x then [x]
  