aboutsummaryrefslogtreecommitdiffstats
path: root/modules/programs/nixvim/plugins/lsp.nix
blob: dbe66a89c39faf0a3248afda8a2fd839c8efa5e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
{ config, lib, ... }:

# LSP - Language Server Protocol configuration (nvim-lspconfig)
{
  config.programs.nixvim = lib.mkIf config.programs.nixvim.enable {
    plugins.lsp = {
      enable = true;
      inlayHints = true;
      autoLoad = true;
      keymaps.lspBuf = {
        K = "hover";
        gD = "references";
        gd = "definition";
        gi = "implementation";
        gt = "type_definition";
      };
      servers = {
        nil_ls = {
          enable = true;
        };
        lua_ls = {
          enable = true;
          package = null;
        };
        nixd = {
          enable = true;
          package = null;
        };
        pyright = {
          enable = true;
          package = null;
        };
        ts_ls = {
          enable = true;
          package = null;
        };
        clangd = {
          enable = true;
          package = null;
        };
        jsonls = {
          enable = true;
          package = null;
        };
        yamlls = {
          enable = true;
          package = null;
        };
        bash-language-server = {
          enable = true;
          package = null;
        };
        gopls = {
          enable = true;
          package = null;
        };
      };
    };

    diagnostic = {
      settings = {
        virtual_text = false;
        signs = true;
        underline = true;
        update_in_insert = false;
        float = {
          border = "rounded";
          source = true; # Show which LSP the diagnostic is from
          header = "";
          prefix = "";
        };
      };
    };

    # Show diagnostics float on cursor hold
    autoCmd = [
      {
        event = [ "CursorHold" ];
        pattern = "*";
        callback.__raw = ''
          function()
            vim.diagnostic.open_float(nil, { focus = false })
          end
        '';
      }
    ];

    # How long before CursorHold fires (in ms)
    opts.updatetime = 500;
  };
}