diff --git a/config/init.lua b/config/init.lua index 2c57f31..cad3a73 100644 --- a/config/init.lua +++ b/config/init.lua @@ -1,2 +1,3 @@ require("minimal-init") require("nvim-treesitter-conf") +require("lsp-conf") diff --git a/config/lua/lsp-conf.lua b/config/lua/lsp-conf.lua new file mode 100644 index 0000000..7328f68 --- /dev/null +++ b/config/lua/lsp-conf.lua @@ -0,0 +1,42 @@ +-- Setup language servers. +local lspconfig = require('lspconfig') +lspconfig.gopls.setup {} + + +-- Global mappings. +-- See `:help vim.diagnostic.*` for documentation on any of the below functions +vim.keymap.set('n', 'e', vim.diagnostic.open_float) +vim.keymap.set('n', '[d', vim.diagnostic.goto_prev) +vim.keymap.set('n', ']d', vim.diagnostic.goto_next) +vim.keymap.set('n', 'q', vim.diagnostic.setloclist) + +-- Use LspAttach autocommand to only map the following keys +-- after the language server attaches to the current buffer +vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('UserLspConfig', {}), + callback = function(ev) + -- Enable completion triggered by + vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc' + + -- Buffer local mappings. + -- See `:help vim.lsp.*` for documentation on any of the below functions + local opts = { buffer = ev.buf } + vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) + vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) + vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts) + vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts) + vim.keymap.set('n', '', vim.lsp.buf.signature_help, opts) + vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, opts) + vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, opts) + vim.keymap.set('n', 'wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, opts) + vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, opts) + vim.keymap.set('n', 'rn', vim.lsp.buf.rename, opts) + vim.keymap.set({ 'n', 'v' }, 'ca', vim.lsp.buf.code_action, opts) + vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) + vim.keymap.set('n', 'f', function() + vim.lsp.buf.format { async = true } + end, opts) + end, +}) diff --git a/flake.nix b/flake.nix index bb50ac1..6f9ae33 100644 --- a/flake.nix +++ b/flake.nix @@ -60,32 +60,32 @@ EOF ''; packages.plugins = with pkgs.vimPlugins; { - start = plugins.base ++ plugins.extra ++ plugins.treesitter; + start = plugins.base ++ plugins.extra; }; }; }); - packages.minimal = pkgs.wrapNeovim neovim-with-deps (base // { - extraMakeWrapperArgs = ''--prefix PATH : "${pkgs.lib.makeBinPath dependancies}"''; - configure = { - customRC = - '' - lua << EOF - package.path = "${self}/config/?.lua;" .. "${self}/config/lua/?.lua;" .. package.path - vim.o.runtimepath = "${self}/config," .. vim.o.runtimepath - '' - + pkgs.lib.readFile ./config/minimal-init.lua - + '' - EOF - ''; - packages.plugins = with pkgs.vimPlugins; { - start = plugins.base; + packages.minimal = pkgs.wrapNeovim neovim-with-deps (base // { + extraMakeWrapperArgs = ''--prefix PATH : "${pkgs.lib.makeBinPath dependancies}"''; + configure = { + customRC = + '' + lua << EOF + package.path = "${self}/config/?.lua;" .. "${self}/config/lua/?.lua;" .. package.path + vim.o.runtimepath = "${self}/config," .. vim.o.runtimepath + '' + + pkgs.lib.readFile ./config/minimal-init.lua + + '' + EOF + ''; + packages.plugins = with pkgs.vimPlugins; { + start = plugins.base; + }; }; + }); + apps.full = flake-utils.lib.mkApp { + drv = packages.full; name = "neovim"; exePath = "/bin/nvim"; }; + apps.default = apps.full; + packages.default = packages.full; }); - apps.full = flake-utils.lib.mkApp { - drv = packages.full; name = "neovim"; exePath = "/bin/nvim"; - }; - apps.default = apps.full; - packages.default = packages.full; - }); - } + } diff --git a/plugins.nix b/plugins.nix index 68cc004..b22b056 100644 --- a/plugins.nix +++ b/plugins.nix @@ -12,8 +12,11 @@ ]; extra = with pkgs.vimPlugins; [ vim-nix - ]; - treesitter = with pkgs.vimPlugins; [ + + #lsp + nvim-lspconfig + + #treesitter (nvim-treesitter.withPlugins ( plugins: with plugins; [