From 52ad5ec34c9f4c7f3d72d4ce30ecc7e26c294fe8 Mon Sep 17 00:00:00 2001 From: Soliprem <73885403+Soliprem@users.noreply.github.com> Date: Thu, 28 Nov 2024 18:12:19 +0100 Subject: [PATCH 1/2] modules/nu: init (#477) * modules/languages: add nu * configuration: enable nu for maximal * flake.lock: update nixpkgs * languages/nu: TS parser is now in nixpkgs * docs: added changelog entry for nu * modules/plugins/languages/nu.nix: applying suggested change for option ordering Co-authored-by: raf * configuration.nix: don't enable nu on maximal * modules/nu: removed useless comments * languages/nu: cleaning up after removing formatter code * modules/plugins/languages/nu.nix: better attrs ordering Co-authored-by: raf --------- Co-authored-by: diniamo Co-authored-by: raf --- configuration.nix | 1 + docs/release-notes/rl-0.7.md | 1 + flake.lock | 6 +-- modules/plugins/languages/default.nix | 1 + modules/plugins/languages/nu.nix | 70 +++++++++++++++++++++++++++ 5 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 modules/plugins/languages/nu.nix diff --git a/configuration.nix b/configuration.nix index 01a99524..3b8e3d25 100644 --- a/configuration.nix +++ b/configuration.nix @@ -76,6 +76,7 @@ isMaximal: { csharp.enable = isMaximal; julia.enable = isMaximal; vala.enable = isMaximal; + nu.enable = false; }; visuals = { diff --git a/docs/release-notes/rl-0.7.md b/docs/release-notes/rl-0.7.md index dccece29..9f7fba87 100644 --- a/docs/release-notes/rl-0.7.md +++ b/docs/release-notes/rl-0.7.md @@ -315,6 +315,7 @@ To migrate to `nixfmt`, simply change `vim.languages.nix.format.type` to the Typst language module. - Add LSP and Treesitter support for Assembly under `vim.languages.assembly` - Move [which-key](https://github.com/folke/which-key.nvim) to the new spec +- Add LSP and Treesitter support for Nushell under `vim.languages.nu` [Bloxx12](https://github.com/Bloxx12) diff --git a/flake.lock b/flake.lock index 816412e5..5e201d89 100644 --- a/flake.lock +++ b/flake.lock @@ -98,11 +98,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1730958623, - "narHash": "sha256-JwQZIGSYnRNOgDDoIgqKITrPVil+RMWHsZH1eE1VGN0=", + "lastModified": 1732617236, + "narHash": "sha256-PYkz6U0bSEaEB1al7O1XsqVNeSNS+s3NVclJw7YC43w=", "owner": "nixos", "repo": "nixpkgs", - "rev": "85f7e662eda4fa3a995556527c87b2524b691933", + "rev": "af51545ec9a44eadf3fe3547610a5cdd882bc34e", "type": "github" }, "original": { diff --git a/modules/plugins/languages/default.nix b/modules/plugins/languages/default.nix index d074cb8c..58662354 100644 --- a/modules/plugins/languages/default.nix +++ b/modules/plugins/languages/default.nix @@ -33,6 +33,7 @@ in { ./zig.nix ./csharp.nix ./julia.nix + ./nu.nix ]; options.vim.languages = { diff --git a/modules/plugins/languages/nu.nix b/modules/plugins/languages/nu.nix new file mode 100644 index 00000000..eab0385c --- /dev/null +++ b/modules/plugins/languages/nu.nix @@ -0,0 +1,70 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (lib.options) mkEnableOption mkOption; + inherit (lib.types) str either package listOf; + inherit (lib.modules) mkIf mkMerge; + inherit (lib.nvim.lua) expToLua; + inherit (lib.nvim.types) mkGrammarOption; + inherit (builtins) isList; + + defaultServer = "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"}'' + } + } + ''; + }; + }; + + cfg = config.vim.languages.nu; +in { + options.vim.languages.nu = { + enable = mkEnableOption "Nu language support"; + + treesitter = { + enable = mkEnableOption "Nu treesitter" // {default = config.vim.languages.enableTreesitter;}; + package = mkGrammarOption pkgs "nu"; + }; + + lsp = { + enable = mkEnableOption "Nu LSP support" // {default = config.vim.languages.enableLSP;}; + 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"; + }; + }; + }; + + 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.nu-lsp = servers.${cfg.lsp.server}.lspConfig; + }) + ]); +} From fee1b46924d34a5ba569f37dfd92a761ea373cf2 Mon Sep 17 00:00:00 2001 From: Ching Pei Yang <59727193+horriblename@users.noreply.github.com> Date: Fri, 29 Nov 2024 00:16:17 +0100 Subject: [PATCH 2/2] lazy: add assertions against common problems (#476) * lazy: allow null package * lazy: add assertions for common pitfalls * lazy: pass plugin name to custom load function * lazy: format description Co-authored-by: raf --------- Co-authored-by: raf --- modules/wrapper/lazy/config.nix | 36 ++++++++++++++++++++++++++++----- modules/wrapper/lazy/lazy.nix | 10 ++++++--- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/modules/wrapper/lazy/config.nix b/modules/wrapper/lazy/config.nix index 9675e030..6a9a6ea2 100644 --- a/modules/wrapper/lazy/config.nix +++ b/modules/wrapper/lazy/config.nix @@ -3,7 +3,7 @@ config, ... }: let - inherit (builtins) toJSON typeOf head length filter concatLists concatStringsSep; + inherit (builtins) toJSON typeOf head length filter concatLists concatStringsSep tryEval; inherit (lib.attrsets) mapAttrsToList; inherit (lib.modules) mkIf mkMerge; inherit (lib.generators) mkLuaInline; @@ -21,10 +21,36 @@ else keySpec.action; }; - toLuaLznSpec = name: spec: + toLuaLznSpec = name: spec: let + packageName = + if typeOf spec.package == "string" + then spec.package + else if (spec.package ? pname && (tryEval spec.package.pname).success) + then spec.package.pname + else spec.package.name; + in (removeAttrs spec ["package" "setupModule" "setupOpts" "keys"]) // { - "@1" = name; + "@1" = + if spec.package != null && packageName != name && spec.load == null + then + abort '' + vim.lazy.plugins.${name} does not match the package name ${packageName}. + + Please either: + - rename it to vim.lazy.plugins.${packageName}, or + - if you intend to use a custom loader, specify a + vim.lazy.plugins.${name}.load function. + '' + else if spec.package == null && spec.load == null + then + abort '' + vim.lazy.plugins.${name} has null package but no load function given. + + Please either specify a package, or (if you know what you're doing) provide a + custom load function. + '' + else name; beforeAll = if spec.beforeAll != null then @@ -62,7 +88,7 @@ if spec.load != null then mkLuaInline '' - funcion() + function(name) ${spec.load} end '' @@ -76,7 +102,7 @@ }; lznSpecs = mapAttrsToList toLuaLznSpec cfg.plugins; - pluginPackages = mapAttrsToList (_: plugin: plugin.package) cfg.plugins; + pluginPackages = filter (x: x != null) (mapAttrsToList (_: plugin: plugin.package) cfg.plugins); specToNotLazyConfig = _: spec: '' do diff --git a/modules/wrapper/lazy/lazy.nix b/modules/wrapper/lazy/lazy.nix index 56ec0022..e0dbea85 100644 --- a/modules/wrapper/lazy/lazy.nix +++ b/modules/wrapper/lazy/lazy.nix @@ -66,8 +66,12 @@ lznPluginType = submodule { options = { package = mkOption { - type = pluginType; - description = "Plugin package"; + type = nullOr pluginType; + description = '' + Plugin package. + + If null, a custom load function must be provided + ''; }; setupModule = mkOption { @@ -173,7 +177,7 @@ description = '' Lua code to override the `vim.g.lz_n.load()` function for a single plugin. - This will be wrapped in a function. + This will be wrapped in a `function(name) ... end`. ''; }; };