diff --git a/configuration.nix b/configuration.nix index 01a9952..3b8e3d2 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 dccece2..9f7fba8 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 816412e..5e201d8 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 d074cb8..5866235 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 0000000..eab0385 --- /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; + }) + ]); +}