From bdebf01a677790fa0c16363a9ea94d6c17f44044 Mon Sep 17 00:00:00 2001 From: Ching Pei Yang Date: Sat, 23 Sep 2023 01:12:31 +0200 Subject: [PATCH] feat: add lua treesitter & lsp --- modules/languages/lua.nix | 62 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 modules/languages/lua.nix diff --git a/modules/languages/lua.nix b/modules/languages/lua.nix new file mode 100644 index 00000000..6e132f95 --- /dev/null +++ b/modules/languages/lua.nix @@ -0,0 +1,62 @@ +{ + pkgs, + config, + lib, + ... +}: +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}"}'' + }; + } + ''; + }; + }; +in { + options.vim.languages.lua = { + treesitter = { + enable = mkOption "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; + }; + + package = mkOption { + description = "Lua LSP server package, or the command to run as a list of strings"; + type = with types; either package (listOf str); + default = servers.${cfg.lsp.server}.package; + }; + }; + }; + + config = mkIf cfg.enable (mkMerge [ + (mkIf cfg.lsp.enable { + vim.lsp.lspconfig.enable = true; + vim.lsp.lspconfig.sources.lua-lsp = servers.${cfg.lsp.server}.lspConfig; + }) + + (mkIf cfg.treesitter.enable { + vim.treesitter.enable = true; + vim.treesitter.grammars = [cfg.treesitter.package]; + }) + ]); +}