diff options
author | Minijackson <minijackson@riseup.net> | 2024-05-15 22:03:04 +0200 |
---|---|---|
committer | Minijackson <minijackson@riseup.net> | 2024-05-15 22:03:04 +0200 |
commit | 3add3d06af15c0457075f994e0b4a91289737c74 (patch) | |
tree | aa80cabeeb7475b93edebdf4e8e8f347678b767a /usecases/desktop | |
parent | c962d1398a313b30d734a39cf4fd9e6c3bee9457 (diff) | |
download | nixos-config-reborn-3add3d06af15c0457075f994e0b4a91289737c74.tar.gz nixos-config-reborn-3add3d06af15c0457075f994e0b4a91289737c74.zip |
common/vim: switch to nixvim
Diffstat (limited to 'usecases/desktop')
-rw-r--r-- | usecases/desktop/development.nix | 3 | ||||
-rw-r--r-- | usecases/desktop/development/nixvim-dev.nix | 300 |
2 files changed, 302 insertions, 1 deletions
diff --git a/usecases/desktop/development.nix b/usecases/desktop/development.nix index f919ae1..d32e5ec 100644 --- a/usecases/desktop/development.nix +++ b/usecases/desktop/development.nix | |||
@@ -30,8 +30,9 @@ inputs: { | |||
30 | luaFormat = inputs.self.lib.generators.lua {}; | 30 | luaFormat = inputs.self.lib.generators.lua {}; |
31 | in { | 31 | in { |
32 | imports = [ | 32 | imports = [ |
33 | (import ./development/latex.nix inputs) | ||
34 | (import ./development/adb.nix inputs) | 33 | (import ./development/adb.nix inputs) |
34 | (import ./development/latex.nix inputs) | ||
35 | (import ./development/nixvim-dev.nix inputs) | ||
35 | ]; | 36 | ]; |
36 | 37 | ||
37 | options = with lib; | 38 | options = with lib; |
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 | } | ||