Hiding API key hahaha
This commit is contained in:
31
lua/konsthol/lazy.lua
Normal file
31
lua/konsthol/lazy.lua
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
--> Run Lazy sync every time plugins.lua is updated
|
||||||
|
-- vim.cmd [[autocmd BufWritePost plugins.lua source <afile> | Lazy sync]]
|
||||||
|
|
||||||
|
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||||
|
if not vim.loop.fs_stat(lazypath) then
|
||||||
|
vim.fn.system({
|
||||||
|
"git",
|
||||||
|
"clone",
|
||||||
|
"--filter=blob:none",
|
||||||
|
"https://github.com/folke/lazy.nvim.git",
|
||||||
|
"--branch=stable", -- latest stable release
|
||||||
|
lazypath,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
vim.opt.rtp:prepend(lazypath)
|
||||||
|
|
||||||
|
local plugins = {
|
||||||
|
{ import = 'konsthol.plugins.lsp' },
|
||||||
|
}
|
||||||
|
|
||||||
|
local opts = {
|
||||||
|
checker = {
|
||||||
|
enabled = true,
|
||||||
|
notify = false,
|
||||||
|
},
|
||||||
|
change_detection = {
|
||||||
|
notify = false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
require('lazy').setup(plugins, opts)
|
||||||
181
lua/konsthol/plugins/lsp/cmp.lua
Normal file
181
lua/konsthol/plugins/lsp/cmp.lua
Normal file
@@ -0,0 +1,181 @@
|
|||||||
|
return {
|
||||||
|
'hrsh7th/nvim-cmp', --> Autocompletion plugin
|
||||||
|
event = 'InsertEnter',
|
||||||
|
dependencies = {
|
||||||
|
'hrsh7th/cmp-buffer', --> source for text in buffer
|
||||||
|
'hrsh7th/cmp-path', --> source for file system paths
|
||||||
|
'onsails/lspkind.nvim', --> VS Code like icons
|
||||||
|
'L3MON4D3/LuaSnip', --> Snippets plugin for custom snippets
|
||||||
|
'saadparwaiz1/cmp_luasnip', --> Snippets source for nvim-cmp (for autocompletion)
|
||||||
|
'rafamadriz/friendly-snippets', --> useful snippets
|
||||||
|
'hrsh7th/cmp-copilot',
|
||||||
|
'hrsh7th/cmp-nvim-lsp', --> LSP source for nvim-cmp
|
||||||
|
'hrsh7th/cmp-nvim-lua', --> LSP source for nvim-cmp
|
||||||
|
'hrsh7th/cmp-nvim-lsp-signature-help', --> Signature help for nvim-cmp
|
||||||
|
'kdheepak/cmp-latex-symbols', --> Latex symbols for nvim-cmp
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
-- Set up nvim-cmp
|
||||||
|
local cmp = require'cmp'
|
||||||
|
-- Set up luasnip
|
||||||
|
local lspkind = require('lspkind')
|
||||||
|
local luasnip = require('luasnip')
|
||||||
|
-- loads vscode style snippets from installed plugins (e.g. friendly-snippets)
|
||||||
|
require("luasnip.loaders.from_vscode").lazy_load()
|
||||||
|
-- Custom snippets for latex
|
||||||
|
require("luasnip.loaders.from_snipmate").load({ paths = "~/.config/nvim/snippets/" })
|
||||||
|
cmp.setup({
|
||||||
|
completion = {
|
||||||
|
completeopt = 'menu,menuone,preview,noselect',
|
||||||
|
},
|
||||||
|
snippet = {
|
||||||
|
-- REQUIRED - you must specify a snippet engine
|
||||||
|
expand = function(args)
|
||||||
|
-- vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users.
|
||||||
|
luasnip.lsp_expand(args.body) -- For `luasnip` users.
|
||||||
|
-- require('snippy').expand_snippet(args.body) -- For `snippy` users.
|
||||||
|
-- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users.
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
window = {
|
||||||
|
completion = cmp.config.window.bordered(), -- unfortunately changes selected item highlighting color
|
||||||
|
-- documentation = cmp.config.window.bordered(),
|
||||||
|
documentation = {
|
||||||
|
border = { "╭", "─", "╮", "│", "╯", "─", "╰", "│" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mapping = cmp.mapping.preset.insert({
|
||||||
|
-- ['<C-k>'] = cmp.mapping.select_prev_item(), -- previous suggestion
|
||||||
|
-- ['<C-j>'] = cmp.mapping.select_next_item(), -- next suggestion
|
||||||
|
-- ['<C-b>'] = cmp.mapping.scroll_docs(-4),
|
||||||
|
-- ['<C-f>'] = cmp.mapping.scroll_docs(4),
|
||||||
|
-- ['<C-Space>'] = cmp.mapping.complete(),
|
||||||
|
['<C-e>'] = cmp.mapping.abort(), -- closes the popup
|
||||||
|
['<CR>'] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
|
||||||
|
-- ['<CR>'] = cmp.mapping.confirm {
|
||||||
|
-- behavior = cmp.ConfirmBehavior.Replace,
|
||||||
|
-- select = true,
|
||||||
|
-- },
|
||||||
|
|
||||||
|
-- When in a snippet, <C-y> will jump to the next
|
||||||
|
-- snipper segment without accidentally
|
||||||
|
-- expanding another snippet.
|
||||||
|
['<C-y>'] = cmp.mapping(function(fallback)
|
||||||
|
if luasnip.jumpable(1) then
|
||||||
|
luasnip.jump(1)
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end, { 'i', 's' }),
|
||||||
|
|
||||||
|
-- ['<Tab>'] = cmp.mapping(function(fallback)
|
||||||
|
-- if cmp.visible() then
|
||||||
|
-- cmp.select_next_item()
|
||||||
|
-- elseif luasnip.expand_or_jumpable() then
|
||||||
|
-- luasnip.expand_or_jump()
|
||||||
|
-- else
|
||||||
|
-- fallback()
|
||||||
|
-- end
|
||||||
|
-- end, { 'i', 's' }),
|
||||||
|
-- ['<S-Tab>'] = cmp.mapping(function(fallback)
|
||||||
|
-- if cmp.visible() then
|
||||||
|
-- cmp.select_prev_item()
|
||||||
|
-- elseif luasnip.jumpable(-1) then
|
||||||
|
-- luasnip.jump(-1)
|
||||||
|
-- else
|
||||||
|
-- fallback()
|
||||||
|
-- end
|
||||||
|
-- end, { 'i', 's' }),
|
||||||
|
}),
|
||||||
|
sources = cmp.config.sources({
|
||||||
|
{ name = 'nvim_lsp' },
|
||||||
|
-- { name = 'vsnip' }, -- For vsnip users.
|
||||||
|
{ name = 'luasnip' }, -- For luasnip users.
|
||||||
|
{ name = 'nvim_lua' },
|
||||||
|
{ name = 'nvim_lsp_signature_help' },
|
||||||
|
-- { name = 'ultisnips' }, -- For ultisnips users.
|
||||||
|
-- { name = 'snippy' }, -- For snippy users.
|
||||||
|
}, {
|
||||||
|
{ name = 'buffer' },
|
||||||
|
{ name = 'path' },
|
||||||
|
-- { name = 'copilot' },
|
||||||
|
-- order matters here
|
||||||
|
}),
|
||||||
|
formatting = {
|
||||||
|
format = lspkind.cmp_format({
|
||||||
|
with_text = true,
|
||||||
|
mode = 'symbol', -- show only symbol annotations
|
||||||
|
-- mode = 'symbol_text', -- show symbol annotations and text
|
||||||
|
maxwidth = 80, -- prevent the popup from showing more than provided characters (e.g 50 will not show more than 50 characters)
|
||||||
|
ellipsis_char = '...', -- when popup menu exceed maxwidth, the truncated part would show ellipsis_char instead (must define maxwidth first)
|
||||||
|
|
||||||
|
-- The function below will be called before any actual modifications from lspkind
|
||||||
|
-- so that you can provide more controls on popup customization. (See [#30](https://github.com/onsails/lspkind-nvim/pull/30))
|
||||||
|
before = function (entry, vim_item)
|
||||||
|
vim_item.menu = ({
|
||||||
|
nvim_lsp = "[LSP]",
|
||||||
|
nvim_lua = "[NVIM_LUA]",
|
||||||
|
luasnip = "[Snippet]",
|
||||||
|
buffer = "[Buffer]",
|
||||||
|
path = "[Path]",
|
||||||
|
nvim_lsp_signature_help = "[Signature]",
|
||||||
|
latex_symbols = "[Latex Symbols]",
|
||||||
|
})[entry.source.name]
|
||||||
|
return vim_item
|
||||||
|
end
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Set configuration for specific filetype.
|
||||||
|
-- cmp.setup.filetype('gitcommit', {
|
||||||
|
-- sources = cmp.config.sources({
|
||||||
|
-- { name = 'cmp_git' }, -- You can specify the `cmp_git` source if you were installed it.
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- { name = 'buffer' },
|
||||||
|
-- })
|
||||||
|
-- })
|
||||||
|
|
||||||
|
cmp.setup.filetype('tex', {
|
||||||
|
sources = cmp.config.sources({
|
||||||
|
{ name = 'nvim_lsp' },
|
||||||
|
-- { name = 'vsnip' }, -- For vsnip users.
|
||||||
|
{ name = 'luasnip' }, -- For luasnip users.
|
||||||
|
{ name = 'nvim_lua' },
|
||||||
|
{ name = 'nvim_lsp_signature_help' },
|
||||||
|
-- { name = 'ultisnips' }, -- For ultisnips users.
|
||||||
|
-- { name = 'snippy' }, -- For snippy users.
|
||||||
|
}, {
|
||||||
|
{ name = 'buffer' },
|
||||||
|
{ name = 'path' },
|
||||||
|
{ -- will probably never load being this low in the list
|
||||||
|
name = 'latex_symbols',
|
||||||
|
option = {
|
||||||
|
strategy = 0, -- mixed
|
||||||
|
},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
-- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore).
|
||||||
|
-- cmp.setup.cmdline({ '/', '?' }, {
|
||||||
|
-- mapping = cmp.mapping.preset.cmdline(),
|
||||||
|
-- sources = {
|
||||||
|
-- { name = 'buffer' }
|
||||||
|
-- }
|
||||||
|
-- })
|
||||||
|
|
||||||
|
-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
|
||||||
|
-- cmp.setup.cmdline(':', {
|
||||||
|
-- mapping = cmp.mapping.preset.cmdline(),
|
||||||
|
-- sources = cmp.config.sources({
|
||||||
|
-- { name = 'path' }
|
||||||
|
-- }, {
|
||||||
|
-- { name = 'cmdline' }
|
||||||
|
-- })
|
||||||
|
-- })
|
||||||
|
end
|
||||||
|
}
|
||||||
163
lua/konsthol/plugins/lsp/lsp.lua
Normal file
163
lua/konsthol/plugins/lsp/lsp.lua
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
return {
|
||||||
|
--> LSP/cmp Plugins
|
||||||
|
'neovim/nvim-lspconfig',
|
||||||
|
event = { 'BufReadPre', 'BufNewFile' },
|
||||||
|
dependencies = {
|
||||||
|
'hrsh7th/cmp-nvim-lsp',
|
||||||
|
'lewis6991/hover.nvim',
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
-- Import lspconfig plugin
|
||||||
|
local lspconfig = require('lspconfig')
|
||||||
|
-- Import cmp_nvim_lsp plugin
|
||||||
|
local cmp_nvim_lsp = require('cmp_nvim_lsp')
|
||||||
|
-- Set options
|
||||||
|
local opts = { noremap = true, silent = true }
|
||||||
|
|
||||||
|
-- Diagnostics
|
||||||
|
-- Set diagnostic keymaps
|
||||||
|
local map = vim.keymap.set
|
||||||
|
opts.desc = "Open diagnostics"
|
||||||
|
map("n", "<leader>ld", ":lua vim.diagnostic.open_float()<CR>", opts)
|
||||||
|
opts.desc = "Diagnostic prev"
|
||||||
|
map("n", "[d", ":lua vim.diagnostic.goto_prev()<CR>", opts)
|
||||||
|
opts.desc = "Diagnostic next"
|
||||||
|
map("n", "]d", ":lua vim.diagnostic.goto_next()<CR>", opts)
|
||||||
|
opts.desc = "Diagnostic list"
|
||||||
|
map("n", "<leader>lq", ":lua vim.diagnostic.setloclist()<CR>", opts)
|
||||||
|
|
||||||
|
-- Set diagnostic signs
|
||||||
|
local signs = {
|
||||||
|
{ name = "DiagnosticSignError", text = "" },
|
||||||
|
{ name = "DiagnosticSignWarn", text = "" },
|
||||||
|
{ name = "DiagnosticSignHint", text = "" },
|
||||||
|
{ name = "DiagnosticSignInfo", text = "" },
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, sign in ipairs(signs) do
|
||||||
|
vim.fn.sign_define(sign.name, { texthl = sign.name, text = sign.text, numhl = "" })
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Set diagnostic config
|
||||||
|
local diagnostic_config = {
|
||||||
|
virtual_text = true, -- false disables virtual text
|
||||||
|
signs = {
|
||||||
|
active = signs, -- show signs
|
||||||
|
},
|
||||||
|
update_in_insert = true,
|
||||||
|
underline = true,
|
||||||
|
severity_sort = true,
|
||||||
|
float = {
|
||||||
|
focusable = true,
|
||||||
|
style = "minimal",
|
||||||
|
border = "rounded",
|
||||||
|
source = "always",
|
||||||
|
header = "",
|
||||||
|
prefix = "",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
vim.diagnostic.config(diagnostic_config)
|
||||||
|
|
||||||
|
-- Add border to hover window
|
||||||
|
local border = {
|
||||||
|
{"╭", "FloatBorder"},
|
||||||
|
{"─", "FloatBorder"},
|
||||||
|
{"╮", "FloatBorder"},
|
||||||
|
{"│", "FloatBorder"},
|
||||||
|
{"╯", "FloatBorder"},
|
||||||
|
{"─", "FloatBorder"},
|
||||||
|
{"╰", "FloatBorder"},
|
||||||
|
{"│", "FloatBorder"},
|
||||||
|
}
|
||||||
|
|
||||||
|
local hover = require('hover')
|
||||||
|
hover.setup({
|
||||||
|
init = function()
|
||||||
|
require('hover.providers.lsp')
|
||||||
|
end,
|
||||||
|
preview_opts = {
|
||||||
|
border = border,
|
||||||
|
},
|
||||||
|
preview_window = false,
|
||||||
|
title = true
|
||||||
|
})
|
||||||
|
vim.keymap.set("n", "K", require("hover").hover, {desc = "Hover info"})
|
||||||
|
|
||||||
|
-- LSP keymaps
|
||||||
|
local function lsp_keymaps(bufnr)
|
||||||
|
local keymap = function(mode, keys, func, desc)
|
||||||
|
if desc then
|
||||||
|
opts.desc = 'LSP: ' .. desc
|
||||||
|
end
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, mode, keys, func, opts)
|
||||||
|
end
|
||||||
|
keymap('n', 'gd', '<cmd>Telescope lsp_definitions<CR>', "Go to definition") -- Ctrl+o to go back
|
||||||
|
keymap('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', "Go to declaration")
|
||||||
|
-- keymap('n', 'K', require('hover').hover(), "Hover info")
|
||||||
|
keymap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', "Go to type implementation")
|
||||||
|
keymap('n', 'gr', "<cmd>Telescope lsp_references<CR>", "Go to references")
|
||||||
|
keymap('n', '<leader>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', "Rename") -- may need saving with :wa after
|
||||||
|
keymap('n', '<leader>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', "Code actions")
|
||||||
|
keymap('n', '<leader>F', '<cmd>Format<CR>', "Format")
|
||||||
|
keymap('n', '<leader>di', '<cmd>Telescope diagnostics<CR>', "Telescope Diagnostics")
|
||||||
|
keymap('n', '<leader>dss', '<cmd>Telescope lsp_document_symbols<CR>', "Telescope LSP Document Symbols")
|
||||||
|
keymap('n', '<leader>dsw', '<cmd>Telescope lsp_workspace_symbols<CR>', "Telescope LSP Workspace Symbols")
|
||||||
|
keymap('n', 'gld', '<cmd>lua vim.diagnostic.open_float()<CR>', "Get Line Diagnostics")
|
||||||
|
-- buf_set_keymap("n", "<leader>lf", ":lua vim.lsp.buf.format({ async = true })<CR>", opts) --> formats the current buffer
|
||||||
|
end
|
||||||
|
|
||||||
|
local handlers = {
|
||||||
|
["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, {border = border}),
|
||||||
|
-- ["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, {border = border }), -- seems to happen automatically
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
local on_attach = function(_, bufnr)
|
||||||
|
lsp_keymaps(bufnr)
|
||||||
|
-- vim.api.nvim_set_option_value(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') -- happens automatically
|
||||||
|
end
|
||||||
|
|
||||||
|
---@diagnostic disable-next-line: undefined-global
|
||||||
|
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||||
|
capabilities.textDocument.completion.completionItem.snippetSupport = true
|
||||||
|
capabilities = cmp_nvim_lsp.default_capabilities(capabilities)
|
||||||
|
local lsp_flags = {
|
||||||
|
debounce_text_changes = 150,
|
||||||
|
capabilities = capabilities,
|
||||||
|
virtual_text = true,
|
||||||
|
}
|
||||||
|
|
||||||
|
local lspsetup = function(server, config)
|
||||||
|
lspconfig[server].setup({
|
||||||
|
handlers = handlers,
|
||||||
|
on_attach = on_attach,
|
||||||
|
flags = lsp_flags,
|
||||||
|
settings = config,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Configure bash language server
|
||||||
|
lspsetup("bashls")
|
||||||
|
|
||||||
|
local lua_config = {
|
||||||
|
Lua = {
|
||||||
|
-- make the language server recognize "vim" global
|
||||||
|
diagnostics = {
|
||||||
|
globals = { "vim" }, -- Preferred than using a .luacheckrc file like nvim-lint requires
|
||||||
|
},
|
||||||
|
workspace = {
|
||||||
|
-- make language server aware of runtime files
|
||||||
|
library = {
|
||||||
|
[vim.fn.expand("$VIMRUNTIME/lua")] = true,
|
||||||
|
[vim.fn.stdpath("config") .. "/lua"] = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Configure lua language server (with special settings)
|
||||||
|
lspsetup("lua_ls", lua_config)
|
||||||
|
|
||||||
|
end
|
||||||
|
}
|
||||||
46
lua/konsthol/plugins/lsp/mason.lua
Normal file
46
lua/konsthol/plugins/lsp/mason.lua
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
return {
|
||||||
|
--> Mason Plugins
|
||||||
|
'williamboman/mason.nvim',
|
||||||
|
event = { 'BufReadPre', 'BufNewFile' },
|
||||||
|
dependencies = {
|
||||||
|
'williamboman/mason-lspconfig.nvim',
|
||||||
|
'WhoIsSethDaniel/mason-tool-installer.nvim',
|
||||||
|
-- 'mason-org/mason-registry',
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
-- Import Mason
|
||||||
|
local mason = require('mason')
|
||||||
|
-- Import mason-lspconfig
|
||||||
|
local mason_lsp = require('mason-lspconfig')
|
||||||
|
local mason_tool_installer = require('mason-tool-installer')
|
||||||
|
-- Enable mason and configure icons
|
||||||
|
mason.setup({
|
||||||
|
ui = {
|
||||||
|
icons = {
|
||||||
|
package_installed = "✓",
|
||||||
|
package_pending = "➜",
|
||||||
|
package_uninstalled = "✗",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
providers = {
|
||||||
|
"mason.providers.client",
|
||||||
|
-- "mason.providers.registry-api" -- This is the default provider. You can still include it here if you want, as a fallback to the client provider.
|
||||||
|
}
|
||||||
|
})
|
||||||
|
mason_lsp.setup({
|
||||||
|
-- List of servers for mason to install
|
||||||
|
ensure_installed = {
|
||||||
|
"bashls",
|
||||||
|
"lua_ls",
|
||||||
|
},
|
||||||
|
-- Auto-install configured servers (with lspconfig)
|
||||||
|
automatic_installation = true,
|
||||||
|
})
|
||||||
|
mason_tool_installer.setup({
|
||||||
|
ensure_installed = {
|
||||||
|
"shellcheck",
|
||||||
|
"shfmt",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user