Compare commits

...

4 commits

Author SHA1 Message Date
22809d94cd update 2026-05-13 13:28:55 +10:00
55866137ba cleanup 2026-05-13 12:30:36 +10:00
1055522af9 moved r-nvim to flake build 2026-05-13 12:30:17 +10:00
07d2156dfb fixed R.nvim 2026-05-12 15:58:31 +10:00
10 changed files with 89 additions and 14 deletions

5
.Rprofile Normal file
View file

@ -0,0 +1,5 @@
if (Sys.getenv("RNVIM_TMPDIR") == "") {
options(defaultPackages = c("utils", "grDevices", "graphics", "stats", "methods"))
} else {
options(defaultPackages = c("utils", "grDevices", "graphics", "stats", "methods", "nvimcom"))
}

View 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/

38
flake.lock generated
View file

@ -22,11 +22,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1777954456, "lastModified": 1778443072,
"narHash": "sha256-hGdgeU2Nk87RAuZyYjyDjFL6LK7dAZN5RE9+hrDTkDU=", "narHash": "sha256-zi7/fsqM/kFdNuED//4WOCUtezGtKKqRNORjMvfwjnA=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "549bd84d6279f9852cae6225e372cc67fb91a4c1", "rev": "da5ad661ba4e5ef59ba743f0d112cbc30e474f32",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -69,6 +69,29 @@
"type": "github" "type": "github"
} }
}, },
"r-nvim-nix": {
"inputs": {
"nixpkgs": [
"rixpkgs"
],
"rnvimsrc": [
"plugins-r"
]
},
"locked": {
"lastModified": 1778641093,
"narHash": "sha256-Cq0spPQCYJkyHFTBTXqjmbq663kIVZA63/TQkTzE4ps=",
"owner": "dwinkler1",
"repo": "r_nvim_nix",
"rev": "435103d25d56dbe43197f7969cf535fda17ff597",
"type": "github"
},
"original": {
"owner": "dwinkler1",
"repo": "r_nvim_nix",
"type": "github"
}
},
"rixpkgs": { "rixpkgs": {
"locked": { "locked": {
"lastModified": 1771303851, "lastModified": 1771303851,
@ -80,8 +103,8 @@
}, },
"original": { "original": {
"owner": "dwinkler1", "owner": "dwinkler1",
"ref": "nixpkgs",
"repo": "rixpkgs", "repo": "rixpkgs",
"rev": "af2dd3f7b4b172077747c0869d4e30702fb71b0e",
"type": "github" "type": "github"
} }
}, },
@ -91,6 +114,7 @@
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"plugins-cmp-pandoc-references": "plugins-cmp-pandoc-references", "plugins-cmp-pandoc-references": "plugins-cmp-pandoc-references",
"plugins-r": "plugins-r", "plugins-r": "plugins-r",
"r-nvim-nix": "r-nvim-nix",
"rixpkgs": "rixpkgs", "rixpkgs": "rixpkgs",
"wrappers": "wrappers" "wrappers": "wrappers"
} }
@ -102,11 +126,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1777991014, "lastModified": 1778560014,
"narHash": "sha256-0DS24OW9d9iz+w0LCz6KpS2IpE2z2gHxeBdMZg9xpDY=", "narHash": "sha256-Hu9RMo7vJt/4dx/vAvyG+cE9RBwpaH1ouyunvruYaDI=",
"owner": "BirdeeHub", "owner": "BirdeeHub",
"repo": "nix-wrapper-modules", "repo": "nix-wrapper-modules",
"rev": "dc5184095ad488e937ec308b52c9c0b218959d8b", "rev": "e30aa99c9c7038e16efae3cad7916a47307a9e36",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -10,7 +10,11 @@
url = "github:BirdeeHub/nix-wrapper-modules"; url = "github:BirdeeHub/nix-wrapper-modules";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
rixpkgs.url = "github:dwinkler1/rixpkgs/nixpkgs"; rixpkgs.url = "github:dwinkler1/rixpkgs/af2dd3f7b4b172077747c0869d4e30702fb71b0e";
r-nvim-nix.url = "github:dwinkler1/r_nvim_nix";
r-nvim-nix.inputs.rnvimsrc.follows = "plugins-r";
r-nvim-nix.inputs.nixpkgs.follows = "rixpkgs";
fran = { fran = {
url = "github:dwinkler1/fran"; url = "github:dwinkler1/fran";
@ -46,7 +50,7 @@
nix = true; nix = true;
optional = false; optional = false;
python = false; python = false;
r = false; r = true;
}; };
settings = { settings = {
lang_packages = { lang_packages = {
@ -61,6 +65,7 @@
janitor janitor
languageserver languageserver
styler styler
pkgs.nvimcom
]; ];
julia = ["DataFramesMeta" "QuackIO"]; julia = ["DataFramesMeta" "QuackIO"];
}; };
@ -187,6 +192,8 @@
air-formatter air-formatter
yaml-language-server yaml-language-server
updateR updateR
nvimcom
rnvimserver
]; ];
juliaPackages = let juliaPackages = let
@ -199,7 +206,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 +218,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"
'';
}; };
} }
); );

View file

@ -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;

View file

@ -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}/library:$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}/library:$PWD/.Rlibs";
}) })
]; ];
} }

View file

@ -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.rnvimserver}/bin/rnvimserver $out/rnvimserver/rnvimserver
chmod +x $out/rnvimserver/rnvimserver
'';
}))
quarto-nvim quarto-nvim
{ {
data = otter-nvim; data = otter-nvim;

View file

@ -3,12 +3,14 @@ let
lib = nixpkgs.lib; lib = nixpkgs.lib;
rOverlay = import ./r.nix {inherit inputs;}; rOverlay = import ./r.nix {inherit inputs;};
rNvimNixOverlay = inputs.r-nvim-nix.overlays.default;
franOverlay = inputs.fran.overlays.default; franOverlay = inputs.fran.overlays.default;
pythonOverlay = import ./python.nix inputs; pythonOverlay = import ./python.nix inputs;
pluginsOverlay = import ./plugins.nix inputs; pluginsOverlay = import ./plugins.nix inputs;
dependencyOverlays = [ dependencyOverlays = [
rOverlay rOverlay
rNvimNixOverlay
pythonOverlay pythonOverlay
pluginsOverlay pluginsOverlay
]; ];
@ -17,6 +19,7 @@ in
{ {
inherit inherit
rOverlay rOverlay
rNvimNixOverlay
franOverlay franOverlay
pythonOverlay pythonOverlay
pluginsOverlay pluginsOverlay
@ -30,6 +33,7 @@ in
overlays = { overlays = {
inherit inherit
rOverlay rOverlay
rNvimNixOverlay
franOverlay franOverlay
pythonOverlay pythonOverlay
pluginsOverlay pluginsOverlay

View file

@ -33,6 +33,9 @@
overlays = [inputs.fran.overlays.default]; overlays = [inputs.fran.overlays.default];
}; # rixpkgs.legacyPackages.${prev.stdenv.hostPlatform.system}; }; # rixpkgs.legacyPackages.${prev.stdenv.hostPlatform.system};
# nvimcom and rnvimserver are provided by the r-nvim-nix flake overlay
# (inputs.r-nvim-nix.overlays.default)
# 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

View file

@ -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()