From 1f3b417469b4c56af9a0108f89f8f3d1c46f6c86 Mon Sep 17 00:00:00 2001 From: sjcobb Date: Wed, 2 Jul 2025 00:15:21 +0100 Subject: [PATCH 1/3] convert lua module --- modules/plugins/languages/lua.nix | 56 ++++++++++++------------------- 1 file changed, 22 insertions(+), 34 deletions(-) diff --git a/modules/plugins/languages/lua.nix b/modules/plugins/languages/lua.nix index 6bc9941e..9f56cbea 100644 --- a/modules/plugins/languages/lua.nix +++ b/modules/plugins/languages/lua.nix @@ -8,32 +8,13 @@ inherit (lib.options) mkEnableOption mkOption; inherit (lib.modules) mkIf mkMerge; inherit (lib.meta) getExe; - inherit (lib.types) bool enum listOf package; + inherit (lib.lists) isList; + inherit (lib.types) bool either enum listOf package str; inherit (lib.nvim.types) diagnostics mkGrammarOption; + inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.dag) entryBefore; - inherit (lib.nvim.attrsets) mapListToAttrs; cfg = config.vim.languages.lua; - - defaultServers = ["lua-language-server"]; - servers = { - lua-language-server = { - enable = true; - cmd = [(getExe pkgs.lua-language-server)]; - filetypes = ["lua"]; - root_markers = [ - ".luarc.json" - ".luarc.jsonc" - ".luacheckrc" - ".stylua.toml" - "stylua.toml" - "selene.toml" - "selene.yml" - ".git" - ]; - }; - }; - defaultFormat = "stylua"; formats = { stylua = { @@ -62,11 +43,12 @@ in { }; lsp = { - enable = mkEnableOption "Lua LSP support" // {default = config.vim.lsp.enable;}; - servers = mkOption { - description = "Lua LSP server to use"; - type = listOf (enum (attrNames servers)); - default = defaultServers; + enable = mkEnableOption "Lua LSP support via LuaLS" // {default = config.vim.lsp.enable;}; + + package = mkOption { + description = "LuaLS package, or the command to run as a list of strings"; + type = either package (listOf str); + default = pkgs.lua-language-server; }; lazydev.enable = mkEnableOption "lazydev.nvim integration, useful for neovim plugin developers"; @@ -109,17 +91,23 @@ in { (mkIf cfg.enable (mkMerge [ (mkIf cfg.lsp.enable { - vim.lsp.servers = - mapListToAttrs (n: { - name = n; - value = servers.${n}; - }) - cfg.lsp.servers; + vim.lsp.lspconfig.enable = true; + vim.lsp.lspconfig.sources.lua-lsp = '' + lspconfig.lua_ls.setup { + capabilities = capabilities; + on_attach = default_on_attach; + cmd = ${ + if isList cfg.lsp.package + then expToLua cfg.lsp.package + else ''{"${getExe cfg.lsp.package}"}'' + }; + } + ''; }) (mkIf cfg.lsp.lazydev.enable { vim.startPlugins = ["lazydev-nvim"]; - vim.pluginRC.lazydev = entryBefore ["lsp-servers"] '' + vim.pluginRC.lazydev = entryBefore ["lua-lsp"] '' require("lazydev").setup({ enabled = function(root_dir) return not vim.uv.fs_stat(root_dir .. "/.luarc.json") From 16c7c28ba105dd7834e66a713f57143070df91f3 Mon Sep 17 00:00:00 2001 From: sjcobb Date: Wed, 2 Jul 2025 00:15:37 +0100 Subject: [PATCH 2/3] convert nim module --- modules/plugins/languages/nim.nix | 62 +++++++++++++++---------------- modules/plugins/languages/nu.nix | 57 ++++++++++++++-------------- 2 files changed, 60 insertions(+), 59 deletions(-) diff --git a/modules/plugins/languages/nim.nix b/modules/plugins/languages/nim.nix index d9a29e37..571f0761 100644 --- a/modules/plugins/languages/nim.nix +++ b/modules/plugins/languages/nim.nix @@ -6,32 +6,34 @@ }: let inherit (builtins) attrNames; inherit (lib.options) mkEnableOption mkOption; - inherit (lib.meta) getExe; + inherit (lib.meta) getExe'; inherit (lib.modules) mkIf mkMerge; - inherit (lib.lists) isList; - inherit (lib.types) enum either listOf package str; + inherit (lib.types) enum listOf package; inherit (lib.nvim.types) mkGrammarOption; - inherit (lib.nvim.lua) expToLua; + inherit (lib.generators) mkLuaInline; + inherit (lib.nvim.attrsets) mapListToAttrs; cfg = config.vim.languages.nim; - defaultServer = "nimlsp"; + defaultServers = ["nimlsp"]; servers = { nimlsp = { - package = pkgs.nimlsp; - lspConfig = '' - lspconfig.nimls.setup{ - capabilities = capabilities; - on_attach = default_on_attach; - cmd = ${ - if isList cfg.lsp.package - then expToLua cfg.lsp.package - else '' - {"${cfg.lsp.package}/bin/nimlsp"} - '' - }; - } - ''; + enable = true; + cmd = [(getExe' pkgs.nimlsp "nimlsp")]; + filetypes = ["nim"]; + root_dir = + mkLuaInline + /* + lua + */ + '' + function(bufnr, on_dir) + local fname = vim.api.nvim_buf_get_name(bufnr) + on_dir( + util.root_pattern '*.nimble'(fname) or vim.fs.dirname(vim.fs.find('.git', { path = fname, upward = true })[1]) + ) + end + ''; }; }; @@ -55,17 +57,11 @@ in { lsp = { enable = mkEnableOption "Nim LSP support" // {default = config.vim.lsp.enable;}; - server = mkOption { - description = "Nim LSP server to use"; - type = str; - default = defaultServer; - }; - package = mkOption { - description = "Nim LSP server package, or the command to run as a list of strings"; - example = ''[lib.getExe pkgs.nimlsp]''; - type = either package (listOf str); - default = servers.${cfg.lsp.server}.package; + servers = mkOption { + description = "Nim LSP server to use"; + type = listOf (enum (attrNames servers)); + default = defaultServers; }; }; @@ -101,8 +97,12 @@ in { }) (mkIf cfg.lsp.enable { - vim.lsp.lspconfig.enable = true; - vim.lsp.lspconfig.sources.nim-lsp = servers.${cfg.lsp.server}.lspConfig; + vim.lsp.servers = + mapListToAttrs (n: { + name = n; + value = servers.${n}; + }) + cfg.lsp.servers; }) (mkIf cfg.format.enable { diff --git a/modules/plugins/languages/nu.nix b/modules/plugins/languages/nu.nix index bd007fc8..21acccb3 100644 --- a/modules/plugins/languages/nu.nix +++ b/modules/plugins/languages/nu.nix @@ -5,27 +5,30 @@ ... }: let inherit (lib.options) mkEnableOption mkOption; - inherit (lib.types) str either package listOf; + inherit (lib.types) enum listOf; inherit (lib.modules) mkIf mkMerge; - inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.types) mkGrammarOption; - inherit (builtins) isList; + inherit (lib.meta) getExe; + inherit (lib.generators) mkLuaInline; + inherit (lib.nvim.attrsets) mapListToAttrs; + inherit (builtins) attrNames; - defaultServer = "nushell"; + defaultServers = ["nushell"]; servers = { nushell = { - package = pkgs.nushell; - lspConfig = '' - lspconfig.nushell.setup{ - capabilities = capabilities, - on_attach = default_on_attach, - cmd = ${ - if isList cfg.lsp.package - then expToLua cfg.lsp.package - else ''{"${cfg.lsp.package}/bin/nu", "--no-config-file", "--lsp"}'' - } - } - ''; + enable = true; + cmd = [(getExe pkgs.nushell) "--no-config-file" "--lsp"]; + filetypes = ["nu"]; + root_dir = + mkLuaInline + /* + lua + */ + '' + function(bufnr, on_dir) + on_dir(vim.fs.root(bufnr, { '.git' }) or vim.fs.dirname(vim.api.nvim_buf_get_name(bufnr))) + end + ''; }; }; @@ -41,17 +44,11 @@ in { lsp = { enable = mkEnableOption "Nu LSP support" // {default = config.vim.lsp.enable;}; - server = mkOption { - type = str; - default = defaultServer; - description = "Nu LSP server to use"; - }; - package = mkOption { - type = either package (listOf str); - default = servers.${cfg.lsp.server}.package; - example = ''[(lib.getExe pkgs.nushell) "--lsp"]''; - description = "Nu LSP server package, or the command to run as a list of strings"; + servers = mkOption { + description = "Nu LSP server to use"; + type = listOf (enum (attrNames servers)); + default = defaultServers; }; }; }; @@ -63,8 +60,12 @@ in { }) (mkIf cfg.lsp.enable { - vim.lsp.lspconfig.enable = true; - vim.lsp.lspconfig.sources.nu-lsp = servers.${cfg.lsp.server}.lspConfig; + vim.lsp.servers = + mapListToAttrs (n: { + name = n; + value = servers.${n}; + }) + cfg.lsp.servers; }) ]); } From c743bca93f34d8830ef4e61502ff90797b82a6b3 Mon Sep 17 00:00:00 2001 From: sjcobb Date: Wed, 2 Jul 2025 00:19:05 +0100 Subject: [PATCH 3/3] convert lua module --- modules/plugins/languages/lua.nix | 56 +++++++++++++++++++------------ 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/modules/plugins/languages/lua.nix b/modules/plugins/languages/lua.nix index 9f56cbea..6bc9941e 100644 --- a/modules/plugins/languages/lua.nix +++ b/modules/plugins/languages/lua.nix @@ -8,13 +8,32 @@ inherit (lib.options) mkEnableOption mkOption; inherit (lib.modules) mkIf mkMerge; inherit (lib.meta) getExe; - inherit (lib.lists) isList; - inherit (lib.types) bool either enum listOf package str; + inherit (lib.types) bool enum listOf package; inherit (lib.nvim.types) diagnostics mkGrammarOption; - inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.dag) entryBefore; + inherit (lib.nvim.attrsets) mapListToAttrs; cfg = config.vim.languages.lua; + + defaultServers = ["lua-language-server"]; + servers = { + lua-language-server = { + enable = true; + cmd = [(getExe pkgs.lua-language-server)]; + filetypes = ["lua"]; + root_markers = [ + ".luarc.json" + ".luarc.jsonc" + ".luacheckrc" + ".stylua.toml" + "stylua.toml" + "selene.toml" + "selene.yml" + ".git" + ]; + }; + }; + defaultFormat = "stylua"; formats = { stylua = { @@ -43,12 +62,11 @@ in { }; lsp = { - enable = mkEnableOption "Lua LSP support via LuaLS" // {default = config.vim.lsp.enable;}; - - package = mkOption { - description = "LuaLS package, or the command to run as a list of strings"; - type = either package (listOf str); - default = pkgs.lua-language-server; + enable = mkEnableOption "Lua LSP support" // {default = config.vim.lsp.enable;}; + servers = mkOption { + description = "Lua LSP server to use"; + type = listOf (enum (attrNames servers)); + default = defaultServers; }; lazydev.enable = mkEnableOption "lazydev.nvim integration, useful for neovim plugin developers"; @@ -91,23 +109,17 @@ in { (mkIf cfg.enable (mkMerge [ (mkIf cfg.lsp.enable { - vim.lsp.lspconfig.enable = true; - vim.lsp.lspconfig.sources.lua-lsp = '' - lspconfig.lua_ls.setup { - capabilities = capabilities; - on_attach = default_on_attach; - cmd = ${ - if isList cfg.lsp.package - then expToLua cfg.lsp.package - else ''{"${getExe cfg.lsp.package}"}'' - }; - } - ''; + vim.lsp.servers = + mapListToAttrs (n: { + name = n; + value = servers.${n}; + }) + cfg.lsp.servers; }) (mkIf cfg.lsp.lazydev.enable { vim.startPlugins = ["lazydev-nvim"]; - vim.pluginRC.lazydev = entryBefore ["lua-lsp"] '' + vim.pluginRC.lazydev = entryBefore ["lsp-servers"] '' require("lazydev").setup({ enabled = function(root_dir) return not vim.uv.fs_stat(root_dir .. "/.luarc.json")