summaryrefslogtreecommitdiffstats
path: root/usecases/desktop/development/nixvim-dev.nix
diff options
context:
space:
mode:
Diffstat (limited to 'usecases/desktop/development/nixvim-dev.nix')
-rw-r--r--usecases/desktop/development/nixvim-dev.nix300
1 files changed, 300 insertions, 0 deletions
diff --git a/usecases/desktop/development/nixvim-dev.nix b/usecases/desktop/development/nixvim-dev.nix
new file mode 100644
index 0000000..83f5d10
--- /dev/null
+++ b/usecases/desktop/development/nixvim-dev.nix
@@ -0,0 +1,300 @@
1_inputs: _:
2
3# TODO: neodev
4# TODO: pandoc
5{
6 programs.nixvim = {
7 # TODO:
8 # extraConfigLuaPost = ''
9 # local function set_ltex_lang(lang)
10 # local ltex = vim.lsp.get_active_clients({ name = "ltex" })[1]
11 # if ltex == nil then
12 # return
13 # end
14 #
15 # if lang == nil then
16 # lang = vim.opt_local.spelllang:get()[1]
17 # end
18 #
19 # if lang == "en" then
20 # lang = "en-US"
21 # end
22 #
23 # ltex.config.settings.ltex.language = lang
24 # end
25 #
26 # vim.api.nvim_create_user_command(
27 # "LTeXSetLang",
28 # function(opts)
29 # local lang = opts.fargs[1]
30 # set_ltex_lang(lang)
31 # end,
32 # {
33 # nargs = 1,
34 # complete = function() return { "en", "fr" } end,
35 # }
36 # )
37 #
38 # vim.api.nvim_create_autocmd("OptionSet", {
39 # desc = "Set LTex language on spell change",
40 # callback = function(ev)
41 # if ev.match ~= "spelllang" then
42 # return
43 # end
44 # set_ltex_lang()
45 # end,
46 # })
47 #
48 # vim.api.nvim_create_autocmd("LspAttach", {
49 # desc = "Set LTex language on attach",
50 # callback = function(ev)
51 # local client = vim.lsp.get_client_by_id(ev.data.client_id)
52 # if client.config.name ~= "ltex" then
53 # return
54 # end
55 # set_ltex_lang()
56 # end,
57 # })
58 # '';
59
60 plugins = {
61 # TODO:
62 #conform-nvim.enable = true;
63
64 clangd-extensions.enable = true;
65
66 crates-nvim = {
67 enable = true;
68 extraOptions.null_ls.enabled = true;
69 };
70
71 lsp = {
72 enable = true;
73
74 keymaps = {
75 diagnostic = {
76 "<leader>se" = {
77 action = "open_float";
78 desc = "LSP diagnostic";
79 };
80 "<leader>sl" = {
81 action = "setloclist";
82 desc = "LSP set loclist";
83 };
84 "<leader>sq" = {
85 action = "setqflist";
86 desc = "LSP set quickfixlist";
87 };
88 };
89
90 extra = [
91 {
92 key = "gd";
93 action = "require('telescope.builtin').lsp_definitions";
94 lua = true;
95 options.desc = "LSP definitions";
96 }
97 {
98 key = "gr";
99 action = "require('telescope.builtin').lsp_references";
100 lua = true;
101 options.desc = "LSP references";
102 }
103 {
104 key = "<leader>sd";
105 action = "require('lsp_lines').toggle";
106 lua = true;
107 options.desc = "LSP toggle inline diagnostics";
108 }
109 {
110 key = "<leader>sE";
111 action = "require('telescope.builtin').diagnostics";
112 lua = true;
113 options.desc = "LSP all diagnostics";
114 }
115 {
116 key = "<leader>ss";
117 action = "require('telescope.builtin').lsp_document_symbols";
118 lua = true;
119 options.desc = "LSP document symbols";
120 }
121 {
122 key = "<leader>sS";
123 action = "require('telescope.builtin').lsp_workspace_symbols";
124 lua = true;
125 options.desc = "LSP workspace symbols";
126 }
127 ];
128
129 lspBuf = {
130 K = {
131 action = "hover";
132 desc = "LSP hover";
133 };
134 gr = {
135 action = "references";
136 desc = "LSP references";
137 };
138 # TODO setup actions-preview-nvim
139 "<leader>sa" = {
140 action = "code_action";
141 desc = "LSP code actions";
142 };
143 "<leader>sf" = {
144 action = "format";
145 desc = "LSP format";
146 };
147 "<leader>si" = {
148 action = "implementation";
149 desc = "LSP implementation";
150 };
151 "<leader>sr" = {
152 action = "rename";
153 desc = "LSP rename";
154 };
155 "<leader>st" = {
156 action = "type_definition";
157 desc = "LSP type definition";
158 };
159 };
160 };
161
162 onAttach = ''
163 require("clangd_extensions.inlay_hints").setup_autocmd()
164 require("clangd_extensions.inlay_hints").set_inlay_hints()
165 '';
166
167 servers = {
168 bashls.enable = true;
169 clangd = {
170 enable = true;
171 extraOptions.cmd = [
172 "clangd"
173 "--background-index"
174 "--clang-tidy"
175 "--fallback-style=WebKit"
176 "--header-insertion-decorators"
177 "--header-insertion=iwyu"
178 ];
179 };
180 elixirls.enable = true;
181 # TODO: buggy with lsp-lines?
182 ltex = {
183 enable = true;
184 filetypes = [
185 "bib"
186 "gitcommit"
187 "markdown"
188 "org"
189 "plaintex"
190 "rst"
191 "rnoweb"
192 "tex"
193 # vv Added this one vv
194 "typst"
195 "pandoc"
196 "quarto"
197 "rmd"
198 "context"
199 "html"
200 "xhtml"
201 ];
202 };
203 lua-ls.enable = true;
204 # completion.callSnippet = "Replace";?
205 marksman.enable = true;
206 nixd = {
207 enable = true;
208 # TODO: doesn't work with string substitution
209 settings.formatting.command = [ "nixfmt" ];
210 };
211 pylsp = {
212 enable = true;
213 settings.plugins.ruff.enabled = true;
214 };
215 taplo.enable = true;
216 typos-lsp.enable = true;
217 typst-lsp.enable = true;
218 };
219 };
220
221 lsp-lines = {
222 enable = true;
223 # TODO: seems buggy with multiple sources?
224 # currentLine = true;
225 };
226
227 rustaceanvim = {
228 enable = true;
229 server = {
230 onAttach = ''
231 function(client, bufnr)
232 __lspOnAttach(client, bufnr)
233
234 vim.keymap.set(
235 -- {"n", "v"},
236 "n",
237 "J",
238 function() vim.cmd.RustLsp('joinLines') end,
239 {
240 silent = true,
241 buffer = bufnr,
242 desc = "rust-analyzer join lines",
243 }
244 )
245
246 vim.keymap.set(
247 "n",
248 "<M-Up>",
249 function() vim.cmd.RustLsp({ "moveItem", "up" }) end,
250 {
251 silent = true,
252 buffer = bufnr,
253 desc = "rust-analyzer move item up",
254 }
255 )
256
257 vim.keymap.set(
258 "n",
259 "<M-Down>",
260 function() vim.cmd.RustLsp({ "moveItem", "down" }) end,
261 {
262 silent = true,
263 buffer = bufnr,
264 desc = "rust-analyzer move item down",
265 }
266 )
267
268 vim.keymap.set(
269 "n",
270 "<leader>sR",
271 function() vim.cmd.RustLsp('runnables') end,
272 {
273 silent = true,
274 buffer = bufnr,
275 desc = "rust-analyzer runnables",
276 }
277 )
278
279 vim.keymap.set(
280 "n",
281 "<leader>sx",
282 function() vim.cmd.RustLsp('explainError') end,
283 {
284 silent = true,
285 buffer = bufnr,
286 desc = "rust-analyzer explain error",
287 }
288 )
289 end
290 '';
291 # TODO?
292 # settings.rust-analyzer = {
293 # checkOnSave.command = "clippy";
294 # experimental.procAttrMacros = true;
295 # };
296 };
297 };
298 };
299 };
300}