{
  pkgs,
  config,
  lib,
  ...
}:
with lib;
with builtins; let
  cfg = config.vim.lsp;
in {
  options.vim.lsp = {
    trouble = {
      enable = mkEnableOption "trouble diagnostics viewer";
    };
  };

  config = mkIf (cfg.enable && cfg.trouble.enable) {
    vim.startPlugins = ["trouble"];

    vim.nnoremap = {
      "<leader>xx" = "<cmd>TroubleToggle<CR>";
      "<leader>lwd" = "<cmd>TroubleToggle workspace_diagnostics<CR>";
      "<leader>ld" = "<cmd>TroubleToggle document_diagnostics<CR>";
      "<leader>lr" = "<cmd>TroubleToggle lsp_references<CR>";
      "<leader>xq" = "<cmd>TroubleToggle quickfix<CR>";
      "<leader>xl" = "<cmd>TroubleToggle loclist<CR>";
    };

    vim.luaConfigRC.trouble = nvim.dag.entryAnywhere ''
      -- Enable trouble diagnostics viewer
      require("trouble").setup {}
    '';
  };
}