diff --git a/flake.lock b/flake.lock index 6820ac484..f939c1284 100644 --- a/flake.lock +++ b/flake.lock @@ -762,6 +762,22 @@ "type": "github" } }, + "neodev-nvim": { + "flake": false, + "locked": { + "lastModified": 1695449121, + "narHash": "sha256-WisbNLKEz0IgO7gLDA2quNzK69hJaHzmvWkZSUPQb6k=", + "owner": "folke", + "repo": "neodev.nvim", + "rev": "c8e126393a34939fb448d48eeddb510971739e3a", + "type": "github" + }, + "original": { + "owner": "folke", + "repo": "neodev.nvim", + "type": "github" + } + }, "nil": { "inputs": { "flake-utils": [ @@ -1445,6 +1461,7 @@ "mind-nvim": "mind-nvim", "minimap-vim": "minimap-vim", "modes-nvim": "modes-nvim", + "neodev-nvim": "neodev-nvim", "nil": "nil", "nixpkgs": "nixpkgs", "nmd": "nmd", diff --git a/flake.nix b/flake.nix index ea91125ec..48a280ffa 100644 --- a/flake.nix +++ b/flake.nix @@ -133,6 +133,11 @@ flake = false; }; + neodev-nvim = { + url = "github:folke/neodev.nvim"; + flake = false; + }; + elixir-ls = { url = "github:elixir-lsp/elixir-ls"; flake = false; diff --git a/lib/types/plugins.nix b/lib/types/plugins.nix index 03251de57..7d8c95bdf 100644 --- a/lib/types/plugins.nix +++ b/lib/types/plugins.nix @@ -80,6 +80,7 @@ with lib; let "vim-repeat" "smartcolumn" "project-nvim" + "neodev-nvim" "elixir-ls" "elixir-tools" "nvim-colorizer-lua" diff --git a/modules/languages/default.nix b/modules/languages/default.nix index 20119719c..e2d5b05c4 100644 --- a/modules/languages/default.nix +++ b/modules/languages/default.nix @@ -24,6 +24,7 @@ in { ./html.nix ./svelte.nix ./java.nix + ./lua.nix ]; options.vim.languages = { diff --git a/modules/languages/lua.nix b/modules/languages/lua.nix index 6e132f954..31821ca04 100644 --- a/modules/languages/lua.nix +++ b/modules/languages/lua.nix @@ -6,57 +6,54 @@ }: with lib; with builtins; let - cfg = config.vim.languages.go; - - defaultServer = "lua-ls"; - servers = { - lua-ls = { - package = pkgs.lua-language-server; - lspConfig = '' - lspconfig.lua_ls.setup { - capabilities = capabilities; - on_attach = default_on_attach; - cmd = ${ - if isList cfg.lsp.package - then nvim.lua.expToLua cfg.lsp.package - else ''{"${getExe cfg.lsp.package}"}'' - }; - } - ''; - }; - }; + cfg = config.vim.languages.lua; in { options.vim.languages.lua = { + enable = mkEnableOption "Lua language support"; treesitter = { - enable = mkOption "Enable Lua Treesitter support" // {default = config.vim.languages.enableTreesitter;}; + enable = mkEnableOption "Enable Lua Treesitter support" // {default = config.vim.languages.enableTreesitter;}; package = nvim.types.mkGrammarOption pkgs "lua"; }; lsp = { - enable = mkOption "Enable Lua LSP support" // {default = config.vim.languages.enableLSP;}; - - server = mkOption { - description = "Lua LSP server to use"; - type = with types; enum (attrNames servers); - default = defaultServer; - }; + enable = mkEnableOption "Enable Lua LSP support via LuaLS" // {default = config.vim.languages.enableLSP;}; package = mkOption { - description = "Lua LSP server package, or the command to run as a list of strings"; + description = "LuaLS package, or the command to run as a list of strings"; type = with types; either package (listOf str); - default = servers.${cfg.lsp.server}.package; + default = pkgs.lua-language-server; }; + + neodev.enable = mkEnableOption "Enable neodev.nvim integration"; }; }; config = mkIf cfg.enable (mkMerge [ + (mkIf cfg.treesitter.enable { + vim.treesitter.enable = true; + vim.treesitter.grammars = [cfg.treesitter.package]; + }) + (mkIf cfg.lsp.enable { vim.lsp.lspconfig.enable = true; - vim.lsp.lspconfig.sources.lua-lsp = servers.${cfg.lsp.server}.lspConfig; + vim.lsp.lspconfig.sources.lua-lsp = '' + lspconfig.lua_ls.setup { + capabilities = capabilities; + on_attach = default_on_attach; + ${optionalString cfg.lsp.neodev.enable "before_init = require('neodev.lsp').before_init;"} + cmd = ${ + if isList cfg.lsp.package + then nvim.lua.expToLua cfg.lsp.package + else ''{"${getExe cfg.lsp.package}"}'' + }; + } + ''; }) - (mkIf cfg.treesitter.enable { - vim.treesitter.enable = true; - vim.treesitter.grammars = [cfg.treesitter.package]; + (mkIf cfg.lsp.neodev.enable { + vim.startPlugins = ["neodev-nvim"]; + vim.luaConfigRC.neodev = nvim.dag.entryBefore ["lua-lsp"] '' + require("neodev").setup({}) + ''; }) ]); }