From 4eeadf3c96cd33a0415c855aa4fdb4a8f54a75bb Mon Sep 17 00:00:00 2001 From: Soliprem Date: Sat, 21 Dec 2024 04:14:08 +0100 Subject: [PATCH] R: added R-nvim --- flake.nix | 5 +++ modules/plugins/languages/r.nix | 58 ++++++++++++++++++++++++++++----- 2 files changed, 54 insertions(+), 9 deletions(-) diff --git a/flake.nix b/flake.nix index 161ba43f..a89dfef7 100644 --- a/flake.nix +++ b/flake.nix @@ -721,6 +721,11 @@ flake = false; }; + plugin-R-nvim = { + url = "github:R-nvim/R.nvim"; + flake = false; + }; + plugin-haskell-tools-nvim = { url = "github:mrcjkb/haskell-tools.nvim"; flake = false; diff --git a/modules/plugins/languages/r.nix b/modules/plugins/languages/r.nix index 8a685a01..542f2251 100644 --- a/modules/plugins/languages/r.nix +++ b/modules/plugins/languages/r.nix @@ -6,11 +6,13 @@ }: let inherit (builtins) attrNames; inherit (lib.options) mkEnableOption mkOption literalExpression; + inherit (lib.meta) getExe; inherit (lib.modules) mkIf mkMerge; inherit (lib.lists) isList; - inherit (lib.types) enum either listOf package str; - inherit (lib.nvim.lua) expToLua; - inherit (lib.nvim.types) mkGrammarOption; + inherit (lib.types) enum either listOf package str nullOr attrsOf; + inherit (lib.nvim.lua) expToLua toLuaObject; + inherit (lib.nvim.types) mkGrammarOption mkPluginSetupOption; + inherit (lib.nvim.dag) entryAnywhere; cfg = config.vim.languages.r; @@ -74,7 +76,12 @@ in { treesitter = { enable = mkEnableOption "R treesitter" // {default = config.vim.languages.enableTreesitter;}; - package = mkGrammarOption pkgs "r"; + rPackage = mkGrammarOption pkgs "r"; + rnowebPackage = mkGrammarOption pkgs "rnoweb"; + mdPackage = mkGrammarOption pkgs "markdown"; + mdInlinePackage = mkGrammarOption pkgs "markdown-inline"; + yamlPackage = mkGrammarOption pkgs "yaml"; + csvPackage = mkGrammarOption pkgs "csv"; }; lsp = { @@ -109,14 +116,28 @@ in { description = "R formatter package"; }; }; + + extensions = { + R-nvim = { + enable = + mkEnableOption '' + [R.nvim]: https://github.com/R-Nvim/R.nvim + + R.nvim adds R support to Neovim, including: + + - Communication with R via Neovim's built-in terminal or tmux + - A built-in object explorer and autocompletions built from your R environment + - Keyboard shortcuts for common inserts like <- and |> + - Quarto/R Markdown support + '' + // {default = true;}; + + setupOpts = mkPluginSetupOption "R-nvim" {}; + }; + }; }; config = mkIf cfg.enable (mkMerge [ - (mkIf cfg.treesitter.enable { - vim.treesitter.enable = true; - vim.treesitter.grammars = [cfg.treesitter.package]; - }) - (mkIf cfg.format.enable { vim.lsp.null-ls.enable = true; vim.lsp.null-ls.sources.r-format = formats.${cfg.format.type}.nullConfig; @@ -126,5 +147,24 @@ in { vim.lsp.lspconfig.enable = true; vim.lsp.lspconfig.sources.r-lsp = servers.${cfg.lsp.server}.lspConfig; }) + + (mkIf cfg.treesitter.enable { + vim.treesitter.enable = true; + vim.treesitter.grammars = [ + cfg.treesitter.rPackage + cfg.treesitter.rnowebPackage + cfg.treesitter.mdPackage + cfg.treesitter.mdInlinePackage + cfg.treesitter.yamlPackage + cfg.treesitter.csvPackage + ]; + }) + + (mkIf cfg.extensions.R-nvim.enable { + vim.startPlugins = ["R-nvim"]; + vim.pluginRC.R-nvim= entryAnywhere '' + require("r").setup(${toLuaObject cfg.extensions.R-nvim.setupOpts}) + ''; + }) ]); }