]> Git — Sourcephile - julm/julm-nix.git/blob - home-manager/profiles/nvim/lua/plugins/nvim-navic.lua
+use/op(nvim): tweak config
[julm/julm-nix.git] / home-manager / profiles / nvim / lua / plugins / nvim-navic.lua
1 -- Simple winbar/statusline plugin that shows your current code context
2 -- https://github.com/SmiteshP/nvim-navic
3 vim.api.nvim_set_hl(0, "NavicIconsFile", { default = true, bg = "#000000", fg = "#977D9E" })
4 vim.api.nvim_set_hl(0, "NavicIconsModule", { default = true, bg = "#000000", fg = "#977D9E" })
5 vim.api.nvim_set_hl(0, "NavicIconsNamespace", { default = true, bg = "#000000", fg = "#977D9E" })
6 vim.api.nvim_set_hl(0, "NavicIconsPackage", { default = true, bg = "#000000", fg = "#977D9E" })
7 vim.api.nvim_set_hl(0, "NavicIconsClass", { default = true, bg = "#000000", fg = "#977D9E" })
8 vim.api.nvim_set_hl(0, "NavicIconsMethod", { default = true, bg = "#000000", fg = "#977D9E" })
9 vim.api.nvim_set_hl(0, "NavicIconsProperty", { default = true, bg = "#000000", fg = "#977D9E" })
10 vim.api.nvim_set_hl(0, "NavicIconsField", { default = true, bg = "#000000", fg = "#977D9E" })
11 vim.api.nvim_set_hl(0, "NavicIconsConstructor", { default = true, bg = "#000000", fg = "#977D9E" })
12 vim.api.nvim_set_hl(0, "NavicIconsEnum", { default = true, bg = "#000000", fg = "#977D9E" })
13 vim.api.nvim_set_hl(0, "NavicIconsInterface", { default = true, bg = "#000000", fg = "#977D9E" })
14 vim.api.nvim_set_hl(0, "NavicIconsFunction", { default = true, bg = "#000000", fg = "#977D9E" })
15 vim.api.nvim_set_hl(0, "NavicIconsVariable", { default = true, bg = "#000000", fg = "#977D9E" })
16 vim.api.nvim_set_hl(0, "NavicIconsConstant", { default = true, bg = "#000000", fg = "#977D9E" })
17 vim.api.nvim_set_hl(0, "NavicIconsString", { default = true, bg = "#000000", fg = "#977D9E" })
18 vim.api.nvim_set_hl(0, "NavicIconsNumber", { default = true, bg = "#000000", fg = "#977D9E" })
19 vim.api.nvim_set_hl(0, "NavicIconsBoolean", { default = true, bg = "#000000", fg = "#977D9E" })
20 vim.api.nvim_set_hl(0, "NavicIconsArray", { default = true, bg = "#000000", fg = "#977D9E" })
21 vim.api.nvim_set_hl(0, "NavicIconsObject", { default = true, bg = "#000000", fg = "#977D9E" })
22 vim.api.nvim_set_hl(0, "NavicIconsKey", { default = true, bg = "#000000", fg = "#977D9E" })
23 vim.api.nvim_set_hl(0, "NavicIconsNull", { default = true, bg = "#000000", fg = "#977D9E" })
24 vim.api.nvim_set_hl(0, "NavicIconsEnumMember", { default = true, bg = "#000000", fg = "#977D9E" })
25 vim.api.nvim_set_hl(0, "NavicIconsStruct", { default = true, bg = "#000000", fg = "#977D9E" })
26 vim.api.nvim_set_hl(0, "NavicIconsEvent", { default = true, bg = "#000000", fg = "#977D9E" })
27 vim.api.nvim_set_hl(0, "NavicIconsOperator", { default = true, bg = "#000000", fg = "#977D9E" })
28 vim.api.nvim_set_hl(0, "NavicIconsTypeParameter", { default = true, bg = "#000000", fg = "#977D9E" })
29 vim.api.nvim_set_hl(0, "NavicText", { default = true, bg = "#000000", fg = "#ffffff" })
30 vim.api.nvim_set_hl(0, "NavicSeparator", { default = true, bg = "#000000", fg = "#073642" })
31 local attach_keymaps = function(client, bufnr)
32 vim.keymap.set(
33 "n",
34 "<leader>lgD",
35 vim.lsp.buf.declaration,
36 { buffer = bufnr, noremap = true, silent = true, desc = "Go to declaration" }
37 )
38 vim.keymap.set(
39 "n",
40 "<leader>lgd",
41 vim.lsp.buf.definition,
42 { buffer = bufnr, noremap = true, silent = true, desc = "Go to definition" }
43 )
44 vim.keymap.set(
45 "n",
46 "<leader>lgt",
47 vim.lsp.buf.type_definition,
48 { buffer = bufnr, noremap = true, silent = true, desc = "Go to type" }
49 )
50 vim.keymap.set(
51 "n",
52 "<leader>lgi",
53 vim.lsp.buf.implementation,
54 { buffer = bufnr, noremap = true, silent = true, desc = "List implementations" }
55 )
56 vim.keymap.set(
57 "n",
58 "<leader>lgr",
59 vim.lsp.buf.references,
60 { buffer = bufnr, noremap = true, silent = true, desc = "List references" }
61 )
62 vim.keymap.set(
63 "n",
64 "<leader>lgn",
65 vim.diagnostic.goto_next,
66 { buffer = bufnr, noremap = true, silent = true, desc = "Go to next diagnostic" }
67 )
68 vim.keymap.set(
69 "n",
70 "<leader>lgp",
71 vim.diagnostic.goto_prev,
72 { buffer = bufnr, noremap = true, silent = true, desc = "Go to previous diagnostic" }
73 )
74 vim.keymap.set(
75 "n",
76 "<leader>le",
77 vim.diagnostic.open_float,
78 { buffer = bufnr, noremap = true, silent = true, desc = "Open diagnostic float" }
79 )
80 vim.keymap.set(
81 "n",
82 "<leader>lH",
83 vim.lsp.buf.document_highlight,
84 { buffer = bufnr, noremap = true, silent = true, desc = "Document highlight" }
85 )
86 vim.keymap.set(
87 "n",
88 "<leader>lS",
89 vim.lsp.buf.document_symbol,
90 { buffer = bufnr, noremap = true, silent = true, desc = "List document symbols" }
91 )
92 vim.keymap.set(
93 "n",
94 "<leader>lwa",
95 vim.lsp.buf.add_workspace_folder,
96 { buffer = bufnr, noremap = true, silent = true, desc = "Add workspace folder" }
97 )
98 vim.keymap.set(
99 "n",
100 "<leader>lwr",
101 vim.lsp.buf.remove_workspace_folder,
102 { buffer = bufnr, noremap = true, silent = true, desc = "Remove workspace folder" }
103 )
104 vim.keymap.set("n", "<leader>lwl", function()
105 vim.notify(vim.inspect(vim.lsp.buf.list_workspace_folders()))
106 end, { buffer = bufnr, noremap = true, silent = true, desc = "List workspace folders" })
107 vim.keymap.set(
108 "n",
109 "<leader>lws",
110 vim.lsp.buf.workspace_symbol,
111 { buffer = bufnr, noremap = true, silent = true, desc = "List workspace symbols" }
112 )
113 vim.keymap.set(
114 "n",
115 "<leader>lh",
116 vim.lsp.buf.hover,
117 { buffer = bufnr, noremap = true, silent = true, desc = "Trigger hover" }
118 )
119 vim.keymap.set(
120 "n",
121 "<leader>ls",
122 vim.lsp.buf.signature_help,
123 { buffer = bufnr, noremap = true, silent = true, desc = "Signature help" }
124 )
125 vim.keymap.set(
126 "n",
127 "<leader>ln",
128 vim.lsp.buf.rename,
129 { buffer = bufnr, noremap = true, silent = true, desc = "Rename symbol" }
130 )
131 vim.keymap.set(
132 "n",
133 "<leader>la",
134 vim.lsp.buf.code_action,
135 { buffer = bufnr, noremap = true, silent = true, desc = "Code action" }
136 )
137 vim.keymap.set(
138 "n",
139 "<leader>lf",
140 vim.lsp.buf.format,
141 { buffer = bufnr, noremap = true, silent = true, desc = "Format" }
142 )
143 vim.keymap.set("n", "<leader>ltf", function()
144 vim.b.disableFormatSave = not vim.b.disableFormatSave
145 end, { buffer = bufnr, noremap = true, silent = true, desc = "Toggle format on save" })
146 end
147 return {
148 "nvim-navic",
149 lazy = false,
150 enabled = false,
151 after = function()
152 local navic = require("nvim-navic")
153 navic.setup({
154 icons = {
155 File = "󰈙 ",
156 Module = " ",
157 Namespace = "󰌗 ",
158 Package = " ",
159 Class = "󰌗 ",
160 Method = "󰆧 ",
161 Property = " ",
162 Field = " ",
163 Constructor = " ",
164 Enum = "󰕘",
165 Interface = "󰕘",
166 Function = "󰊕 ",
167 Variable = "󰆧 ",
168 Constant = "󰏿 ",
169 String = "󰀬 ",
170 Number = "󰎠 ",
171 Boolean = "◩ ",
172 Array = "󰅪 ",
173 Object = "󰅩 ",
174 Key = "󰌋 ",
175 Null = "󰟢 ",
176 EnumMember = " ",
177 Struct = "󰌗 ",
178 Event = " ",
179 Operator = "󰆕 ",
180 TypeParameter = "󰊄 ",
181 },
182 lsp = {
183 auto_attach = false,
184 preference = nil,
185 },
186 highlight = true,
187 separator = " > ",
188 depth_limit = 0,
189 depth_limit_indicator = "..",
190 safe_output = true,
191 lazy_update_context = true,
192 click = true,
193 format_text = function(text)
194 return text
195 end,
196 })
197 local default_on_attach = function(client, bufnr)
198 attach_keymaps(client, bufnr)
199 -- let navic attach to buffers
200 if client.server_capabilities.documentSymbolProvider then
201 navic.attach(client, bufnr)
202 end
203 end
204 vim.api.nvim_create_autocmd("LspAttach", {
205 callback = function(event)
206 local bufnr = event.buf
207 local client = vim.lsp.get_client_by_id(event.data.client_id)
208 default_on_attach(client, bufnr)
209 end,
210 desc = "Activate navic on LSP attach",
211 group = vim.api.nvim_create_augroup("navic-lsp-attach", { clear = true }),
212 })
213 -- Always show the winbar to avoid annoying scroll
214 -- when showing nvim-navic and when not.
215 vim.opt.winbar = " "
216 end,
217 }