From 319e972dcc7bc2fed45473f7555571a92b7ee15d Mon Sep 17 00:00:00 2001 From: hok7z Date: Sat, 24 Dec 2022 19:33:46 +0200 Subject: [PATCH] Update neovim dotfiles --- .config/nvim/ginit.vim | 3 - .config/nvim/init.lua | 7 +- .config/nvim/lua/core/autocmds.lua | 19 +- .config/nvim/lua/core/icons.lua | 88 ------- .../lua/core/{mappings.lua => keybinds.lua} | 31 +-- .config/nvim/lua/core/options.lua | 79 ++---- .config/nvim/lua/core/plugins.lua | 230 ++++++++---------- .config/nvim/lua/core/statusline.lua | 154 ------------ .config/nvim/lua/lsp/init.lua | 73 ++++++ .config/nvim/lua/lsp/servers/clangd.lua | 14 ++ .config/nvim/lua/lsp/servers/cssls.lua | 14 ++ .config/nvim/lua/lsp/servers/gopls.lua | 15 ++ .config/nvim/lua/lsp/servers/pyright.lua | 10 + .config/nvim/lua/plugins/cmp.lua | 9 - .config/nvim/lua/plugins/lsp.lua | 85 ------- 15 files changed, 254 insertions(+), 577 deletions(-) delete mode 100644 .config/nvim/ginit.vim delete mode 100644 .config/nvim/lua/core/icons.lua rename .config/nvim/lua/core/{mappings.lua => keybinds.lua} (77%) create mode 100644 .config/nvim/lua/lsp/init.lua create mode 100644 .config/nvim/lua/lsp/servers/clangd.lua create mode 100644 .config/nvim/lua/lsp/servers/cssls.lua create mode 100644 .config/nvim/lua/lsp/servers/gopls.lua create mode 100644 .config/nvim/lua/lsp/servers/pyright.lua delete mode 100644 .config/nvim/lua/plugins/lsp.lua diff --git a/.config/nvim/ginit.vim b/.config/nvim/ginit.vim deleted file mode 100644 index 3fb6cef..0000000 --- a/.config/nvim/ginit.vim +++ /dev/null @@ -1,3 +0,0 @@ -GuiFont! Iosevka:h15 -GuiTabline 0 -GuiPopupmenu 0 diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua index 51a3518..bfc518d 100644 --- a/.config/nvim/init.lua +++ b/.config/nvim/init.lua @@ -1,9 +1,4 @@ -local core = { - "options", - "mappings", - "autocmds", - "plugins" -} +local core = {"options", "keybinds", "autocmds", "plugins"} for _,source in ipairs(core) do local status_ok,fault = pcall(require,'core.' .. source) diff --git a/.config/nvim/lua/core/autocmds.lua b/.config/nvim/lua/core/autocmds.lua index d5bdf8c..60bec2f 100644 --- a/.config/nvim/lua/core/autocmds.lua +++ b/.config/nvim/lua/core/autocmds.lua @@ -1,20 +1,13 @@ vim.api.nvim_create_autocmd({"WinEnter","BufEnter"},{ - callback = function() - vim.opt.statusline = "%F" - end + callback = function() + vim.opt.statusline = "%F" + end }) vim.api.nvim_create_autocmd({"BufEnter","BufWinEnter","WinEnter","CmdwinEnter"},{ - callback = function() - if vim.fn.expand("%") == "NvimTree_1" then - vim.opt.statusline = " NvimTree" - end - end, -}) - -vim.api.nvim_create_autocmd({"BufEnter","BufWinEnter"},{ - pattern = {"*.json"}, callback = function() - vim.lsp.buf.formatting() + if vim.fn.expand("%") == "NvimTree_1" then + vim.opt.statusline = " NvimTree" + end end, }) diff --git a/.config/nvim/lua/core/icons.lua b/.config/nvim/lua/core/icons.lua deleted file mode 100644 index e45ac02..0000000 --- a/.config/nvim/lua/core/icons.lua +++ /dev/null @@ -1,88 +0,0 @@ -return { - kind = { - Text = "", - Method = "", - Function = "", - Constructor = "", - Field = "ﰠ", - Variable = "", - Class = "ﴯ", - Interface = "", - Module = "", - Property = "ﰠ", - Unit = "塞", - Value = "", - Enum = "", - Keyword = "", - Snippet = "", - Color = "", - File = "", - Reference = "", - Folder = "", - EnumMember = "", - Constant = "", - Struct = "פּ", - Event = "", - Operator = "", - TypeParameter = "" - }, - - diagnostic = { - default = { - { name = "Error",icon = " ", color = "Default" }, - { name = "Warn", icon = " ", color = "Default" }, - { name = "Info", icon = " ", color = "Default" }, - { name = "Hint", icon = " ", color = "Default" }, - }, - - catppuccin = { - { name = "Error", icon = "", color = "Default" }, - { name = "Warn", icon = "", color = "Default" }, - { name = "Info", icon = "", color = "Default" }, - { name = "Hint", icon = "", color = "Default" } - }, - }, - - ui = { - ArrowClosed = "", - ArrowOpen = "", - Lock = "", - Circle = "", - BigCircle = "", - BigUnfilledCircle = "", - Close = "", - NewFile = "", - Search = "", - Lightbulb = "", - Project = "", - Dashboard = "", - History = "", - Comment = "", - Bug = "", - Code = "", - Telescope = "", - Gear = "", - Package = "", - List = "", - SignIn = "", - SignOut = "", - Check = "", - Fire = "", - Note = "", - BookMark = "", - Pencil = "", - ChevronRight = "", - Table = "", - Calendar = "", - CloudDownload = "", - }, - - notify = { - ERROR = "", - WARN = "", - INFO = "", - DEBUG = "", - TRACE = "✎", - }, - -} diff --git a/.config/nvim/lua/core/mappings.lua b/.config/nvim/lua/core/keybinds.lua similarity index 77% rename from .config/nvim/lua/core/mappings.lua rename to .config/nvim/lua/core/keybinds.lua index c1515cc..36db620 100644 --- a/.config/nvim/lua/core/mappings.lua +++ b/.config/nvim/lua/core/keybinds.lua @@ -1,48 +1,34 @@ local keymap = vim.keymap.set - -vim.g.mapleader = " " - -keymap("n",",",":nohlsearch") -keymap("n","m",":MarkdownPreview") - -- Block arrows vim.api.nvim_set_keymap('', '', '', {noremap = true}) vim.api.nvim_set_keymap('', '', '', {noremap = true}) vim.api.nvim_set_keymap('', '', '', {noremap = true}) vim.api.nvim_set_keymap('', '', '',{noremap = true}) --- resize -keymap("n","",":resize -2") -keymap("n","",":resize 2") -keymap("n","",":vertical resize -2") -keymap("n","",":vertical resize 2") +keymap("n",",",":nohlsearch") -- tabs keymap("n","tn",":tabnew ") keymap("n","tc",":tabclose") - --- NvimTree -- -keymap("n","",":NvimTreeToggle") -keymap("n","n",":NvimTreeFindFile") -keymap("n","","gh defx#do_action('cd',getcwd())") - -- Telescope -- keymap("n","ff"," Telescope find_files ") keymap("n","fg"," Telescope live_grep ") keymap("n","fb"," Telescope buffers ") keymap("n","fh"," Telescope help_tags ") +-- NvimTree -- +keymap("n","",":NvimTreeToggle") +keymap("n","n",":NvimTreeFindFile") +keymap("n","","gh defx#do_action('cd',getcwd())") + + -- barbar.nvim -keymap('n', '', ':BufferPrevious') keymap('n', '', ':BufferNext') +keymap('n', '', ':BufferPrevious') --- Re-order to previous/next -keymap('n', '', ':BufferMovePrevious') -keymap('n', '>', ' :BufferMoveNext') --- Goto buffer in position... keymap('n', '', ':BufferGoto 1') keymap('n', '', ':BufferGoto 2') keymap('n', '', ':BufferGoto 3') @@ -54,5 +40,4 @@ keymap('n', '', ':BufferGoto 8') keymap('n', '', ':BufferGoto 9') keymap('n', '', ':BufferLast') --- Close buffer keymap('n', '', ':BufferClose') diff --git a/.config/nvim/lua/core/options.lua b/.config/nvim/lua/core/options.lua index 9546e31..ff1e561 100644 --- a/.config/nvim/lua/core/options.lua +++ b/.config/nvim/lua/core/options.lua @@ -1,77 +1,28 @@ local opt = vim.opt -vim.g.did_load_filetypes = 1 +local ok, notify = pcall(require, "notify") +if ok then + vim.notify = notify +end + +vim.cmd[[colorscheme catppuccin-macchiato]] opt.encoding = "utf-8" opt.clipboard = "unnamedplus" opt.swapfile = false -vim.g.icons = require("core.icons") - -local ok,notify = pcall(require,"notify") -if ok then - vim.notify = notify -end - -opt.termguicolors = true -opt.listchars = {eol = '↲', tab = '▸ ', trail = '·'} - -local ok,utils = pcall(require,"core.utils") -if (not ok) then - vim.notify("Can't load utils") -end - --- utils.run_colorscheme("vscode",function() --- -- https://github.com/hrsh7th/nvim-cmp/wiki/Menu-Appearance#custom-menu-direction --- utils.highlight("CmpItemAbbrDeprecated", {guibg=NONE,gui=strikethrough,guifg=#808080}) --- --- utils.highlight("CmpItemAbbrMatch", {guibg=NONE,guifg=#569CD6}) --- utils.highlight("CmpItemAbbrMatchFuzzy", {guibg=NONE,guifg=#569CD6}) --- --- utils.highlight("CmpItemKindVariable", {guibg=NONE,guifg=#9CDCFE}) --- utils.highlight("CmpItemKindInterface", {guibg=NONE,guifg=#9CDCFE}) --- utils.highlight("CmpItemKindText", {guibg=NONE,guifg=#9CDCFE}) --- --- utils.highlight("CmpItemKindFunction", {guibg=NONE,guifg=#C586C0}) --- utils.highlight("CmpItemKindMethod", {guibg=NONE,guifg=#C586C0}) --- --- utils.highlight("CmpItemKindKeyword", {guibg=NONE guifg=#D4D4D4}) --- utils.highlight("CmpItemKindProperty", {guibg=NONE guifg=#D4D4D4}) --- utils.highlight("CmpItemKindUnit", {guibg=NONE guifg=#D4D4D4}) --- --- vim.g.diagnostic_signs = vim.g.icons.diagnostics.default --- end) --- utils.run_colorscheme("github-dark",function() --- require("github-theme").setup({ --- theme_style = "dark_default", --- function_style = "italic", --- sidebars = { "qf", "vista_kind", "terminal", "packer" }, --- hide_inactive_statusline = false, --- }) --- --- vim.g.diagnostic_signs = { --- {name = "Error",icon = " ", color = "Default"}, --- {name = "Warn", icon = " ", color = "Default"}, --- {name = "Info", icon = " ", color = "Default"}, --- {name = "Hint", icon = " ", color = "Default"}, --- } --- end) -utils.run_colorscheme("catppuccin",function() - vim.g.catppucin_flavor = "mocha" -- latte, frappe, macchiato, mocha - vim.g.diagnostics_signs = vim.g.icons.diagnostic.catppuccin -end) - --- statusline = require("core.statusline") --- opt.statusline = "%!luaeval('statusline.active()')" - opt.number = true -opt.mouse = "a" opt.relativenumber = true +vim.g.mapleader = " " + +opt.list = true +opt.listchars = {tab = '| '} + +vim.g.diagnostic_sings = {"", "", "", ""} + +opt.mouse = "a" + opt.tabstop = 4 opt.shiftwidth = 4 opt.expandtab = true - -opt.ts = 4 -opt.sw = 4 -opt.splitright = true diff --git a/.config/nvim/lua/core/plugins.lua b/.config/nvim/lua/core/plugins.lua index ae07c71..bf5b99b 100644 --- a/.config/nvim/lua/core/plugins.lua +++ b/.config/nvim/lua/core/plugins.lua @@ -13,25 +13,46 @@ vim.api.nvim_create_autocmd("BufWritePost", { }) packer.startup{ - function(use) + function(use) use {"wbthomason/packer.nvim"} - use {"nathom/filetype.nvim"} - - -- Colorchemes - use {"catppuccin/nvim",as = "catppuccin"} - use {"rebelot/kanagawa.nvim"} + use { + "lewis6991/impatient.nvim", + config = function() require('impatient') end + } + + -- Colorchemes + use {"catppuccin/nvim", as = "catppuccin"} use {"tiagovla/tokyodark.nvim"} - use {"folke/tokyonight.nvim"} - use {"navarasu/onedark.nvim"} + use {"rebelot/kanagawa.nvim"} use {"projekt0n/github-nvim-theme"} use {"Mofiqul/vscode.nvim"} - use { - "norcalli/nvim-colorizer.lua", - config = function() require'colorizer'.setup() end - } use {"dstein64/vim-startuptime"} + + use { + "kyazdani42/nvim-tree.lua", + requires = { "kyazdani42/nvim-web-devicons" }, + config = function() require("plugins.nvim-tree") end + } + + use {"rcarriga/nvim-notify"} + + use { + "lewis6991/gitsigns.nvim", + config = function() require("gitsigns").setup{keymaps = {}} end + } + + + use { + "akinsho/toggleterm.nvim", tag = 'v2.*', + config = function() require("toggleterm").setup() end + } + + use { + "windwp/nvim-autopairs", + config = function() require("nvim-autopairs").setup() end + } use { "lukas-reineke/indent-blankline.nvim", @@ -42,40 +63,31 @@ packer.startup{ } end } - - use { - "windwp/nvim-autopairs", - config = function() require("nvim-autopairs").setup() end - } - - use { - "nacro90/numb.nvim", - config = function() require('numb').setup() end - } use { "numToStr/Comment.nvim", config = function() require('Comment').setup() end } - use { - "lewis6991/gitsigns.nvim", - config = function() - require("gitsigns").setup{keymaps = {}} - end - } - use { "folke/todo-comments.nvim", requires = "nvim-lua/plenary.nvim", config = function() require("todo-comments").setup() end } - use {"davidgranstrom/nvim-markdown-preview"} + use { + "nvim-treesitter/nvim-treesitter", + requires = { + "nvim-treesitter/playground", + "nvim-treesitter/nvim-treesitter-textobjects", + }, + run = function() vim.cmd("TSUpdate") end, + config = function() require("plugins.treesitter") end + } use { "nvim-telescope/telescope.nvim", - requires = { "nvim-lua/plenary.nvim" }, + requires = {"nvim-lua/plenary.nvim"}, config = function() local actions = require('telescope.actions') require('telescope').setup{ @@ -91,94 +103,21 @@ packer.startup{ } use { - "akinsho/toggleterm.nvim", tag = 'v2.*', - config = function() require("toggleterm").setup() end + 'romgrk/barbar.nvim', + requires = {'kyazdani42/nvim-web-devicons'}, + config = function() require("plugins.barbar") end } + -- Language Server Protocol use { - "kyazdani42/nvim-tree.lua", - requires = { "kyazdani42/nvim-web-devicons" }, - config = function() require("plugins.nvim-tree") end - } - - - use { - "rcarriga/nvim-notify", + "neovim/nvim-lspconfig", + requires = { "williamboman/mason.nvim", "williamboman/mason-lspconfig.nvim" }, config = function() - local notify = require("notify") - notify.setup{ - level = "info", - stages = "fade_in_slide_out", - - on_open = nil, - on_close = nil, - - render = "default", - timeout = 5000, - - max_width = nil, - max_height = nil, - - background_colour = "Normal", - - minimum_width = 50, - - icons = vim.g.icons.notify, - } - + require("lsp") + require("mason").setup() end } - -- TODO: write own statusline - -- use { - -- "nvim-lualine/lualine.nvim", - -- requires = { 'kyazdani42/nvim-web-devicons',opt = true}, - -- config = function() require("plugins.lualine") end - -- } - - - use { - 'romgrk/barbar.nvim', - requires = {'kyazdani42/nvim-web-devicons'}, - config = function() require("plugins.barbar") end, - } - - use { - 'pwntester/octo.nvim', - requires = { - 'nvim-lua/plenary.nvim', - }, - config = function() require"octo".setup() end - } - - use { - "sindrets/diffview.nvim", - requires = 'nvim-lua/plenary.nvim' - } - - use { - "nvim-treesitter/nvim-treesitter", - requires = { - "nvim-treesitter/playground", - "nvim-treesitter/nvim-treesitter-textobjects", - }, - run = function() vim.cmd("TSUpdate") end, - config = function() require("plugins.treesitter") end - } - - - -- Language Server Protocol - use { - "neovim/nvim-lspconfig", - config = function() require("plugins.lsp") end - } - - - use { - "j-hui/fidget.nvim", - config = function() require"fidget".setup() end - } - use { "hrsh7th/nvim-cmp", requires = { @@ -200,23 +139,57 @@ packer.startup{ lspkind.init{ mode = 'symbol_text', preset = 'codicons', - - symbol_map = vim.g.icons.kind + + symbol_map = { + Text = "", + Method = "", + Function = "", + Constructor = "", + Field = "ﰠ", + Variable = "", + Class = "ﴯ", + Interface = "", + Module = "", + Property = "ﰠ", + Unit = "塞", + Value = "", + Enum = "", + Keyword = "", + Snippet = "", + Color = "", + File = "", + Reference = "", + Folder = "", + EnumMember = "", + Constant = "", + Struct = "פּ", + Event = "", + Operator = "", + TypeParameter = "" + } } end } use { "L3MON4D3/LuaSnip", - requires = { - "rafamadriz/friendly-snippets", - }, - config = function() - require("luasnip/loaders/from_vscode").lazy_load() - end + requires = {"rafamadriz/friendly-snippets"}, + config = function() require("luasnip/loaders/from_vscode").lazy_load() end + } + + use { + "jose-elias-alvarez/null-ls.nvim", + config = function() require("plugins.null-ls") end } + + use { + "SmiteshP/nvim-gps", + requires = "nvim-treesitter/nvim-treesitter", + config = function() require("nvim-gps").setup() end, + } + use { "ray-x/lsp_signature.nvim", config = function() @@ -231,19 +204,11 @@ packer.startup{ } use { - "SmiteshP/nvim-gps", - requires = "nvim-treesitter/nvim-treesitter", - config = function() require("nvim-gps").setup() end, + "j-hui/fidget.nvim", + config = function() require("fidget").setup() end } - - - use { - "jose-elias-alvarez/null-ls.nvim", - config = function() require("plugins.null-ls") end - } - - -- Debug Adapter Protocol + -- Debug Adapter Protocol use { "mfussenegger/nvim-dap", requires = { @@ -254,7 +219,7 @@ packer.startup{ } end, - + config = { display = { open_fn = function() @@ -264,6 +229,7 @@ packer.startup{ } } + local function bootstrap() local fn = vim.fn local packer_install_path = diff --git a/.config/nvim/lua/core/statusline.lua b/.config/nvim/lua/core/statusline.lua index b04f0ee..e69de29 100644 --- a/.config/nvim/lua/core/statusline.lua +++ b/.config/nvim/lua/core/statusline.lua @@ -1,154 +0,0 @@ -local fn = vim.fn -local api = vim.api - -local M = {} - --- possible values are 'arrow' | 'rounded' | 'blank' -local active_sep = 'blank' - --- change them if you want to different separator -M.separators = { - arrow = { '', '' }, - rounded = { '', '' }, - blank = { '', '' }, -} - --- highlight groups -M.colors = { - active = '%#StatusLine#', - inactive = '%#StatuslineNC#', - mode = '%#Mode#', - mode_alt = '%#ModeAlt#', - git = '%#Git#', - git_alt = '%#GitAlt#', - filetype = '%#Filetype#', - filetype_alt = '%#FiletypeAlt#', - line_col = '%#LineCol#', - line_col_alt = '%#LineColAlt#', -} - -M.trunc_width = setmetatable({ - mode = 80, - git_status = 90, - filename = 140, - line_col = 60, -}, { - __index = function() - return 80 - end -}) - -M.is_truncated = function(_, width) - local current_width = api.nvim_win_get_width(0) - return current_width < width -end - -M.modes = setmetatable({ - ['n'] = {'Normal', 'N'}; - ['no'] = {'N·Pending', 'N·P'} ; - ['v'] = {'Visual', 'V' }; - ['V'] = {'V·Line', 'V·L' }; - [''] = {'V·Block', 'V·B'}; -- this is not ^V, but it's , they're different - ['s'] = {'Select', 'S'}; - ['S'] = {'S·Line', 'S·L'}; - [''] = {'S·Block', 'S·B'}; -- same with this one, it's not ^S but it's  - ['i'] = {'Insert', 'I'}; - ['ic'] = {'Insert', 'I'}; - ['R'] = {'Replace', 'R'}; - ['Rv'] = {'V·Replace', 'V·R'}; - ['c'] = {'Command', 'C'}; - ['cv'] = {'Vim·Ex ', 'V·E'}; - ['ce'] = {'Ex ', 'E'}; - ['r'] = {'Prompt ', 'P'}; - ['rm'] = {'More ', 'M'}; - ['r?'] = {'Confirm ', 'C'}; - ['!'] = {'Shell ', 'S'}; - ['t'] = {'Terminal ', 'T'}; -}, { - __index = function() - return {'Unknown', 'U'} -- handle edge cases - end -}) - -M.get_current_mode = function(self) - local current_mode = api.nvim_get_mode().mode - - if self:is_truncated(self.trunc_width.mode) then - return string.format(' %s ', self.modes[current_mode][2]):upper() - end - return string.format(' %s ', self.modes[current_mode][1]):upper() -end - -M.get_git_status = function(self) - -- use fallback because it doesn't set this variable on the initial `BufEnter` - local signs = vim.b.gitsigns_status_dict or {head = '', added = 0, changed = 0, removed = 0} - local is_head_empty = signs.head ~= '' - - if self:is_truncated(self.trunc_width.git_status) then - return is_head_empty and string.format('  %s ', signs.head or '') or '' - end - - return is_head_empty and string.format( - ' +%s ~%s -%s |  %s ', - signs.added, signs.changed, signs.removed, signs.head - ) or '' -end - -M.get_filename = function(self) - if self:is_truncated(self.trunc_width.filename) then return " %<%f " end - return " %<%F " -end - -M.get_filetype = function() - local file_name, file_ext = fn.expand("%:t"), fn.expand("%:e") - local icon = require'nvim-web-devicons'.get_icon(file_name, file_ext, { default = true }) - local filetype = vim.bo.filetype - - if filetype == '' then return '' end - return string.format(' %s %s ', icon, filetype):lower() -end - -M.get_line_col = function(self) - if self:is_truncated(self.trunc_width.line_col) then return ' %l:%c ' end - return ' Ln %l, Col %c ' -end - - -M.set_active = function(self) - local colors = self.colors - - local mode = colors.mode .. self:get_current_mode() - local mode_alt = colors.mode_alt .. self.separators[active_sep][1] - local git = colors.git .. self:get_git_status() - local git_alt = colors.git_alt .. self.separators[active_sep][1] - local filename = colors.inactive .. self:get_filename() - local filetype_alt = colors.filetype_alt .. self.separators[active_sep][2] - local filetype = colors.filetype .. self:get_filetype() - local line_col = colors.line_col .. self:get_line_col() - local line_col_alt = colors.line_col_alt .. self.separators[active_sep][2] - - return table.concat({ - colors.active, mode, mode_alt, git, git_alt, - "%=", filename, "%=", - filetype_alt, filetype, line_col_alt, line_col - }) -end - -M.set_inactive = function(self) - return self.colors.inactive .. '%= %F %=' -end - -M.set_explorer = function(self) - local title = self.colors.mode .. '  ' - local title_alt = self.colors.mode_alt .. self.separators[active_sep][2] - - return table.concat({ self.colors.active, title, title_alt }) -end - -Statusline = setmetatable(M, { - __call = function(statusline, mode) - if mode == "active" then return statusline:set_active() end - if mode == "inactive" then return statusline:set_inactive() end - if mode == "explorer" then return statusline:set_explorer() end - end -}) diff --git a/.config/nvim/lua/lsp/init.lua b/.config/nvim/lua/lsp/init.lua new file mode 100644 index 0000000..17a497b --- /dev/null +++ b/.config/nvim/lua/lsp/init.lua @@ -0,0 +1,73 @@ +local ok, lsp = pcall(require,"lspconfig") +if not ok then + vim.notify("Failed to load lspconfig\n\n") + return +end + +local ok, mason_lsp = pcall(require, "mason-lspconfig") +if not ok then + vim.notify("Failed load mason-lspconfig") +end + +local sign = vim.fn.sign_define +local sign_name = {"Error","Warn","Info","Hint"} + +vim.g.lsp_path = os.getenv("HOME") .. "/.local/share/nvim/mason/bin/" + +vim.g.lsp_capabilities = vim.lsp.protocol.make_client_capabilities() +vim.g.lsp_capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) +vim.g.lsp_capabilities.textDocument.foldingRange = { + dynamicRegistration = false, + lineFoldingOnly = true, +} + +vim.diagnostic.config { + signs = true, + underline = true, + update_in_insert = false, + severity_sort = false, + + virtual_text = {prefix = 'x'}, + float = {border = "rounded"}, +} + +vim.g.lsp_handler = { + ["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover,{border="rounded"}), + ["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help,{border="rounded"}) +} + +for k, icon in pairs(vim.g.diagnostic_sings) do + sign("DiagnosticSign" .. sign_name[k],{text=icon,texthl="DiagnosticSign" .. sign_name[k]}) +end + + +vim.g.lsp_on_attach = function(client,bufnr) + print("Attaching to:",client.name) + local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr,...) end + local opts = {noremap = true,silent=true} + + buf_set_keymap('n','gd','lua vim.lsp.buf.definition()',opts) + buf_set_keymap('n','K', 'lua vim.lsp.buf.hover()',opts) + buf_set_keymap('n','[d','lua vim.diagnostic.goto_prev()',opts) + buf_set_keymap('n',']d','lua vim.diagnostic.goto_next()',opts) + buf_set_keymap('n','d','lua vim.diagnostic.open_float({border="rounded"})',opts) + buf_set_keymap('n','f','lua vim.lsp.buf.formatting()',opts) +end + +local servers = mason_lsp.get_installed_servers() + +for _, server in ipairs(servers) do + local ok, result = pcall(require, "lsp.servers."..server) + if ok then + local lsp_srv = lsp[server] + if lsp_srv ~= nil then + local ok, err = pcall(lsp_srv.setup, result) + if err ~= nil then + vim.pretty_print(err) + end + else + vim.notify("Missing server configuration for " .. server,"error") + vim.pretty_print({server = server, result = result}) + end + end +end diff --git a/.config/nvim/lua/lsp/servers/clangd.lua b/.config/nvim/lua/lsp/servers/clangd.lua new file mode 100644 index 0000000..4dec7fb --- /dev/null +++ b/.config/nvim/lua/lsp/servers/clangd.lua @@ -0,0 +1,14 @@ +return { + filetypes = {"c","cpp","objc","objcpp"}, + + on_attach = vim.g.lsp_on_attach, + handlers = vim.g.lsp_handlers, + + capabilities = require('cmp_nvim_lsp').default_capabilities(vim.g.lsp_capabilities), + root_dir = require"lspconfig.util".root_pattern{ + "CMakeList.txt", + "compile_flags.txt", + ".git", + vim.fn.getcwd() + } +} diff --git a/.config/nvim/lua/lsp/servers/cssls.lua b/.config/nvim/lua/lsp/servers/cssls.lua new file mode 100644 index 0000000..d900b4d --- /dev/null +++ b/.config/nvim/lua/lsp/servers/cssls.lua @@ -0,0 +1,14 @@ +return { + filetypes = {"css", "scss", "less" }, + + cmd = { vim.g.lsp_path .. "vscode-css-language-server", "--stdio"}, + + on_attach = vim.g.lsp_on_attach, + handlers = vim.g.lsp_handler, + capabilities = require('cmp_nvim_lsp').default_capabilities(vim.g.lsp_capabilities), + + root_dir = require"lspconfig.util".root_pattern{ + "package.json", + ".git" + }, +} diff --git a/.config/nvim/lua/lsp/servers/gopls.lua b/.config/nvim/lua/lsp/servers/gopls.lua new file mode 100644 index 0000000..a459332 --- /dev/null +++ b/.config/nvim/lua/lsp/servers/gopls.lua @@ -0,0 +1,15 @@ +return { + filetypes = {"go", "gomod"}, + + cmd = {vim.g.lsp_path .. "gopls"}, + + on_attach = vim.g.lsp_on_attach, + handlers = vim.g.lsp_handler, + capabilities = require('cmp_nvim_lsp').default_capabilities(vim.g.lsp_capabilities), + + root_dir = require"lspconfig.util".root_pattern{ + "go.mod", + ".git", + vim.fn.getcwd(), + }, +} diff --git a/.config/nvim/lua/lsp/servers/pyright.lua b/.config/nvim/lua/lsp/servers/pyright.lua new file mode 100644 index 0000000..6c8d267 --- /dev/null +++ b/.config/nvim/lua/lsp/servers/pyright.lua @@ -0,0 +1,10 @@ +return { + filetypes = {"python"}, + + cmd = {vim.g.lsp_path .. "pyright-langserver", "--stdio"}, + + on_attach = vim.g.lsp_on_attach, + handlers = vim.g.lsp_handlers, + + capabilities = require('cmp_nvim_lsp').default_capabilities(vim.g.lsp_capabilities), +} diff --git a/.config/nvim/lua/plugins/cmp.lua b/.config/nvim/lua/plugins/cmp.lua index 78fbf8e..1e70031 100644 --- a/.config/nvim/lua/plugins/cmp.lua +++ b/.config/nvim/lua/plugins/cmp.lua @@ -32,7 +32,6 @@ cmp.setup { formatting = { fields = { "kind", "abbr", "menu" }, format = function(entry, vim_item) - -- local kind = string.format("%s %s",vim.g.icons.kind[vim_item.kind], vim_item.kind) local kind = require("lspkind").cmp_format({mode = "symbol_text", maxwidth = 50})(entry, vim_item) local strings = vim.split(kind.kind, "%s",{trimempty = true}) @@ -40,14 +39,6 @@ cmp.setup { kind.menu = " (" .. strings[2] .. ")" return kind - - -- vim_item.menu = ({ - -- nvim_lsp = "[LSP]", - -- nvim_lua = "[Lua]", - -- buffer = "[BUF]", - -- })[entry.source.name] - -- - -- return vim_item end }, diff --git a/.config/nvim/lua/plugins/lsp.lua b/.config/nvim/lua/plugins/lsp.lua deleted file mode 100644 index da42ce9..0000000 --- a/.config/nvim/lua/plugins/lsp.lua +++ /dev/null @@ -1,85 +0,0 @@ -local ok,nvim_lsp = pcall(require,"lspconfig") -if not ok then - vim.notify("Failed to load lspconfig\n\n") - return -end - -local utils = require"core.utils" -local root_pattern = require"lspconfig.util".root_pattern -local sign = vim.fn.sign_define -local capabilities = vim.lsp.protocol.make_client_capabilities() - -local handlers = { - ["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover,{border = "rounded"}), - ["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help,{border = "rounded"}), -} - - -local function DiagnosticSign(name,icon,color) - sign("DiagnosticSign"..name,{text=icon,texthl="DiagnosticSign"..name}) - if (color ~= "Default") then - utils.highlight{"Diagnostic"..name,fg=color} - end -end - - -for _,sign in pairs(vim.g.diagnostics_signs) do - DiagnosticSign(sign.name,sign.icon,sign.color) -end - -vim.diagnostic.config { - signs = true, - underline = true, - update_in_insert = false, - severity_sort = false, - - virtual_text = {prefix = 'x'}, - float = {border = "rounded"}, -} - - -local on_attach = function(client,bufnr) - print("Attaching to:",client.name) - local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr,...) end - local opts = {noremap = true,silent=true} - - buf_set_keymap('n','gd','lua vim.lsp.buf.definition()',opts) - buf_set_keymap('n','K', 'lua vim.lsp.buf.hover()',opts) - buf_set_keymap('n','[d','lua vim.diagnostic.goto_prev()',opts) - buf_set_keymap('n',']d','lua vim.diagnostic.goto_next()',opts) - buf_set_keymap('n','d','lua vim.diagnostic.open_float({border="rounded"})',opts) - buf_set_keymap('n','f','lua vim.lsp.buf.formatting()',opts) -end - --- LSP Servers -nvim_lsp.clangd.setup { - filetypes = {"c","cpp","objc","objcpp"}, - on_attach = on_attach, - handlers = handlers, - capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities), - root_dir = root_pattern { - "CMakeList.txt", - "compile_flags.txt", - ".git", - vim.fn.getcwd() - } -} - -nvim_lsp.pyright.setup{ - on_attach = on_attach, - handlers = handlers, - capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities), -} - -nvim_lsp.gopls.setup { - cmd = {"gopls","server"}, - filetypes = {"go", "gomod"}, - on_attach = on_attach, - handlers = handlers, - capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities), - root_dir = root_pattern{ - "go.mod", - ".git", - vim.fn.getcwd(), - }, -}