]> Git — Sourcephile - julm/julm-nix.git/blob - home-manager/profiles/nvim/lua/plugins/nvim-navic.lua
neovim: configure, using ghostty and tmux
[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 after = function()
151 local navic = require("nvim-navic")
152 navic.setup({
153 icons = {
154 File = "󰈙 ",
155 Module = " ",
156 Namespace = "󰌗 ",
157 Package = " ",
158 Class = "󰌗 ",
159 Method = "󰆧 ",
160 Property = " ",
161 Field = " ",
162 Constructor = " ",
163 Enum = "󰕘",
164 Interface = "󰕘",
165 Function = "󰊕 ",
166 Variable = "󰆧 ",
167 Constant = "󰏿 ",
168 String = "󰀬 ",
169 Number = "󰎠 ",
170 Boolean = "◩ ",
171 Array = "󰅪 ",
172 Object = "󰅩 ",
173 Key = "󰌋 ",
174 Null = "󰟢 ",
175 EnumMember = " ",
176 Struct = "󰌗 ",
177 Event = " ",
178 Operator = "󰆕 ",
179 TypeParameter = "󰊄 ",
180 },
181 lsp = {
182 auto_attach = false,
183 preference = nil,
184 },
185 highlight = true,
186 separator = " > ",
187 depth_limit = 0,
188 depth_limit_indicator = "..",
189 safe_output = true,
190 lazy_update_context = true,
191 click = true,
192 format_text = function(text)
193 return text
194 end,
195 })
196 local default_on_attach = function(client, bufnr)
197 attach_keymaps(client, bufnr)
198 -- let navic attach to buffers
199 if client.server_capabilities.documentSymbolProvider then
200 navic.attach(client, bufnr)
201 end
202 end
203 vim.api.nvim_create_autocmd("LspAttach", {
204 callback = function(event)
205 local bufnr = event.buf
206 local client = vim.lsp.get_client_by_id(event.data.client_id)
207 default_on_attach(client, bufnr)
208 end,
209 desc = "Activate navic on LSP attach",
210 group = vim.api.nvim_create_augroup("navic-lsp-attach", { clear = true }),
211 })
212 -- Always show the winbar to avoid annoying scroll
213 -- when showing nvim-navic and when not.
214 vim.opt.winbar = " "
215 end,
216 }