mirror of
https://github.com/dwinkler1/nvimConfig.git
synced 2026-05-22 12:03:31 -04:00
fixed R.nvim
This commit is contained in:
parent
4884bf685f
commit
07d2156dfb
7 changed files with 65 additions and 7 deletions
8
.commandcode/taste/taste.md
Normal file
8
.commandcode/taste/taste.md
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
# nix
|
||||||
|
- For R.nvim in the Nix wrapper, both RNVIM_COMPLDIR (C server compilation) and a writable R_LIBS_USER directory (nvimcom R package installation) must be configured — fixing only one leaves permission errors in the other. Confidence: 0.65
|
||||||
|
- For R.nvim writable directories (RNVIM_COMPLDIR, R_LIBS_USER, TMPDIR), prefer project-local paths (e.g., $PWD/.Rlibs) over global cache paths — the cache approach may let the build succeed but still fail at runtime. Confidence: 0.70
|
||||||
|
|
||||||
|
# Taste (Continuously Learned by [CommandCode][cmd])
|
||||||
|
|
||||||
|
[cmd]: https://commandcode.ai/
|
||||||
|
|
||||||
13
flake.nix
13
flake.nix
|
|
@ -46,7 +46,7 @@
|
||||||
nix = true;
|
nix = true;
|
||||||
optional = false;
|
optional = false;
|
||||||
python = false;
|
python = false;
|
||||||
r = false;
|
r = true;
|
||||||
};
|
};
|
||||||
settings = {
|
settings = {
|
||||||
lang_packages = {
|
lang_packages = {
|
||||||
|
|
@ -199,7 +199,8 @@
|
||||||
zk
|
zk
|
||||||
];
|
];
|
||||||
|
|
||||||
shellPackages = [nvimPkg]
|
shellPackages =
|
||||||
|
[nvimPkg]
|
||||||
++ pkgs.lib.optionals cfg.cats.python pythonPackages
|
++ pkgs.lib.optionals cfg.cats.python pythonPackages
|
||||||
++ pkgs.lib.optionals cfg.cats.r rPackages
|
++ pkgs.lib.optionals cfg.cats.r rPackages
|
||||||
++ pkgs.lib.optionals cfg.cats.julia juliaPackages
|
++ pkgs.lib.optionals cfg.cats.julia juliaPackages
|
||||||
|
|
@ -210,7 +211,13 @@
|
||||||
packages = shellPackages;
|
packages = shellPackages;
|
||||||
nativeBuildInputs = with pkgs; [] ++ (pkgs.lib.optionals cfg.cats.optional [devenv]);
|
nativeBuildInputs = with pkgs; [] ++ (pkgs.lib.optionals cfg.cats.optional [devenv]);
|
||||||
inputsFrom = [];
|
inputsFrom = [];
|
||||||
shellHook = "";
|
shellHook = ''
|
||||||
|
echo 'I am a NixShell'
|
||||||
|
export R_HOME=$(R RHOME)
|
||||||
|
export R_LIBS_SITE=$(strings "$(command -v R)" | grep -oP '/nix/store/[^:]+/library' | sort -u | paste -sd: -)
|
||||||
|
export R_LIBS_USER="$PWD/.r-libs"
|
||||||
|
mkdir -p "$R_LIBS_USER"
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@
|
||||||
nix = lib.mkDefault true;
|
nix = lib.mkDefault true;
|
||||||
optional = lib.mkDefault false;
|
optional = lib.mkDefault false;
|
||||||
python = lib.mkDefault false;
|
python = lib.mkDefault false;
|
||||||
r = lib.mkDefault false;
|
r = lib.mkDefault true;
|
||||||
test = lib.mkDefault false;
|
test = lib.mkDefault false;
|
||||||
treesitterParsers = lib.mkDefault true;
|
treesitterParsers = lib.mkDefault true;
|
||||||
utils = lib.mkDefault true;
|
utils = lib.mkDefault true;
|
||||||
|
|
|
||||||
|
|
@ -11,12 +11,17 @@
|
||||||
UV_PYTHON_DOWNLOADS = "never";
|
UV_PYTHON_DOWNLOADS = "never";
|
||||||
UV_PYTHON = pkgs.python.interpreter;
|
UV_PYTHON = pkgs.python.interpreter;
|
||||||
})
|
})
|
||||||
|
(lib.mkIf (config.cats.r or false) {
|
||||||
|
RNVIM_COMPLDIR = "$PWD/.r-compl";
|
||||||
|
R_LIBS_USER = "${pkgs.nvimcom}:$PWD/.Rlibs";
|
||||||
|
TMPDIR = "$PWD/.r-tmp";
|
||||||
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
# Environment variables with defaults (can be overridden by user)
|
# Environment variables with defaults (can be overridden by user)
|
||||||
config.envDefault = lib.mkMerge [
|
config.envDefault = lib.mkMerge [
|
||||||
(lib.mkIf (config.cats.r or false) {
|
(lib.mkIf (config.cats.r or false) {
|
||||||
R_LIBS_USER = "./.Rlibs";
|
R_LIBS_USER = "${pkgs.nvimcom}:$PWD/.Rlibs";
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,13 @@
|
||||||
|
|
||||||
config.specs.r = {
|
config.specs.r = {
|
||||||
data = with pkgs.vimPlugins; [
|
data = with pkgs.vimPlugins; [
|
||||||
config.nvim-lib.neovimPlugins.r
|
(config.nvim-lib.neovimPlugins.r.overrideAttrs (old: {
|
||||||
|
postInstall = (old.postInstall or "") + ''
|
||||||
|
mkdir -p $out/rnvimserver
|
||||||
|
cp ${pkgs.nvimcom}/bin/rnvimserver $out/rnvimserver/rnvimserver
|
||||||
|
chmod +x $out/rnvimserver/rnvimserver
|
||||||
|
'';
|
||||||
|
}))
|
||||||
quarto-nvim
|
quarto-nvim
|
||||||
{
|
{
|
||||||
data = otter-nvim;
|
data = otter-nvim;
|
||||||
|
|
|
||||||
|
|
@ -33,12 +33,38 @@
|
||||||
overlays = [inputs.fran.overlays.default];
|
overlays = [inputs.fran.overlays.default];
|
||||||
}; # rixpkgs.legacyPackages.${prev.stdenv.hostPlatform.system};
|
}; # rixpkgs.legacyPackages.${prev.stdenv.hostPlatform.system};
|
||||||
|
|
||||||
|
# Pre-build nvimcom from R.nvim plugin source so R.nvim never tries to
|
||||||
|
# compile it at runtime into the read-only nix store.
|
||||||
|
nvimcom = final.stdenv.mkDerivation {
|
||||||
|
pname = "nvimcom";
|
||||||
|
version = "0.9.92";
|
||||||
|
src = inputs.plugins-r;
|
||||||
|
nativeBuildInputs = [
|
||||||
|
(rpkgs.rWrapper.override { packages = []; })
|
||||||
|
];
|
||||||
|
buildPhase = ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
R CMD INSTALL -l $out nvimcom
|
||||||
|
cd rnvimserver
|
||||||
|
$CC -pthread -O2 -Wall \
|
||||||
|
complete.c resolve.c hover.c definition.c signature.c \
|
||||||
|
rhelp.c chunk.c roxygen.c data_structures.c logging.c \
|
||||||
|
rnvimserver.c obbr.c tcp.c utilities.c ../nvimcom/src/common.c \
|
||||||
|
-o $out/bin/rnvimserver
|
||||||
|
cd ..
|
||||||
|
mkdir -p $out/nvimcom/bin
|
||||||
|
cp $out/bin/rnvimserver $out/nvimcom/bin/rnvimserver
|
||||||
|
chmod +x $out/bin/rnvimserver $out/nvimcom/bin/rnvimserver
|
||||||
|
'';
|
||||||
|
installPhase = "true";
|
||||||
|
};
|
||||||
|
|
||||||
# Standard R packages used by default in rWrapper and quarto
|
# Standard R packages used by default in rWrapper and quarto
|
||||||
reqPkgs = with rpkgs.rPackages; [
|
reqPkgs = with rpkgs.rPackages; [
|
||||||
# languageserver
|
# languageserver
|
||||||
];
|
];
|
||||||
in {
|
in {
|
||||||
inherit rpkgs;
|
inherit rpkgs nvimcom;
|
||||||
baseRPackages = reqPkgs;
|
baseRPackages = reqPkgs;
|
||||||
|
|
||||||
# R wrapper with standard packages
|
# R wrapper with standard packages
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,12 @@ end)
|
||||||
-- r
|
-- r
|
||||||
now(function()
|
now(function()
|
||||||
if nix.get_cat("r", false) then
|
if nix.get_cat("r", false) then
|
||||||
|
local cwd = vim.fn.getcwd(-1)
|
||||||
|
vim.env.RNVIM_COMPLDIR = cwd .. "/.r-compl"
|
||||||
|
vim.env.R_LIBS_USER = (vim.env.R_LIBS_USER or ""):gsub("%$PWD", cwd)
|
||||||
|
vim.env.TMPDIR = cwd .. "/.r-tmp"
|
||||||
|
vim.fn.mkdir(vim.env.RNVIM_COMPLDIR, "p")
|
||||||
|
vim.fn.mkdir(vim.env.TMPDIR, "p")
|
||||||
vim.g.rout_follow_colorscheme = true
|
vim.g.rout_follow_colorscheme = true
|
||||||
require("r").setup({
|
require("r").setup({
|
||||||
-- Create a table with the options to be passed to setup()
|
-- Create a table with the options to be passed to setup()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue