-
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
-
92
-
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
-
108
-
109
-
110
-
111
-
112
-
113
-
114
-
115
-
116
-
117
-
118
-
119
-
120
-
121
-
122
-
123
-
124
-
125
# Language specific tools are not configured in this file because
# these tools are project specific. Each project should have Flake
# file (provided by the project or manually created by a user).
{ config
, pkgs
, ...
}: {
programs = {
neovim = {
plugins = with pkgs.vimPlugins; [
{
plugin = cmp-nvim-lsp;
}
{
plugin = nvim-lspconfig;
type = "lua";
config = ''
-- Based on https://github.com/neovim/nvim-lspconfig#suggested-configuration
local capabilities = require("cmp_nvim_lsp").default_capabilities()
local lspconfig = require("lspconfig")
-- Elm
lspconfig.elmls.setup {
capabilities = capabilities,
}
-- TypeScript
lspconfig.tsserver.setup {
root_dir = lspconfig.util.root_pattern("tsconfig.json"),
single_file_support = false,
capabilities = capabilities,
}
-- Deno
lspconfig.denols.setup {
root_dir = lspconfig.util.root_pattern("deno.json"),
capabilities = capabilities,
}
-- CSS
lspconfig.cssls.setup {
capabilities = capabilities,
}
-- HTML
lspconfig.html.setup {
capabilities = capabilities,
}
-- LSP key mappings
vim.api.nvim_create_autocmd("LspAttach", {
group = vim.api.nvim_create_augroup("UserLspConfig", {}),
callback = function(ev)
local opts = { buffer = ev.buf }
vim.keymap.set("n", "K", vim.lsp.buf.hover, opts)
end,
})
-- Hover style
vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(
vim.lsp.handlers.hover,
{
border = "single",
}
)
'';
}
{
plugin = nvim-cmp;
type = "lua";
config = ''
local cmp = require("cmp")
cmp.setup({
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
mapping = cmp.mapping.preset.insert({
["<CR>"] = cmp.mapping.confirm {
behavior = cmp.ConfirmBehavior.Replace,
select = true,
},
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
return
end
fallback()
end, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
return
end
fallback()
end, { "i", "s" }),
}),
sources = {
{ name = "nvim_lsp" }
},
})
'';
}
{
plugin = trouble-nvim;
type = "lua";
config = ''
require("trouble").setup({
icons = false,
mode = "document_diagnostics",
auto_open = true,
auto_close = true,
signs = {
error = "error",
warning = "warn",
hint = "hint",
information = "info"
},
})
'';
}
];
};
};
}