{
  pkgs,
  lib,
  ...
}: {
  programs.nixvim = {
    # TODO: package goto-preview though a module
    extraConfigLuaPost = ''
      ${lib.strings.fileContents ./lua/goto-preview.lua}
    '';
    extraPlugins = [
      pkgs.vimExtraPlugins.goto-preview
    ];
    maps.normal = {
      "<space>gd" = {
        action = "require('goto-preview').goto_preview_definition";
        lua = true;
        desc = "[G]oto [D]efinition";
      };
      "<space>gtd" = {
        action = "require('goto-preview').goto_preview_type_definition";
        lua = true;
        desc = "[G]oto the [t]ype [D]efinition";
      };
      "<space>gi" = {
        action = "require('goto-preview').goto_preview_implementation";
        lua = true;
        desc = "[G]oto [I]mplementations";
      };
      "<space>gr" = {
        action = "require('goto-preview').goto_preview_references";
        lua = true;
        desc = "[G]o to all [R]eferences of the symbol";
      };
      "\\<space>" = {
        action = "require('goto-preview').close_all_win";
        lua = true;
        desc = "close all preview windows";
      };
    };
  };
}