{
  config,
  lib,
  ...
}: let
  inherit (lib.modules) mkIf;
  inherit (lib.nvim.lua) toLuaObject;
  inherit (lib.nvim.dag) entryAfter;

  inherit (config.vim) treesitter;
  cfg = treesitter.context;
in {
  config = mkIf (treesitter.enable && cfg.enable) {
    vim = {
      startPlugins = ["nvim-treesitter-context"];

      # set up treesitter-context after Treesitter. The ordering
      # should not matter, but there is no harm in doing this
      pluginRC.treesitter-context = entryAfter ["treesitter"] ''
        require("treesitter-context").setup(${toLuaObject cfg.setupOpts})
      '';
    };
  };
}