mirror of
https://github.com/dwinkler1/nvimConfig.git
synced 2026-05-22 20:13:32 -04:00
Compare commits
No commits in common. "main" and "copilot/fix-quarto-functionality-with-r" have entirely different histories.
main
...
copilot/fi
21 changed files with 395 additions and 341 deletions
|
|
@ -1,5 +0,0 @@
|
||||||
if (Sys.getenv("RNVIM_TMPDIR") == "") {
|
|
||||||
options(defaultPackages = c("utils", "grDevices", "graphics", "stats", "methods"))
|
|
||||||
} else {
|
|
||||||
options(defaultPackages = c("utils", "grDevices", "graphics", "stats", "methods", "nvimcom"))
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
# 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
|
|
||||||
- Do not use lib.mkDefault on values consumed by lib.optionals or other boolean-checking functions — mkDefault wraps values in a priority set that fails "expected a Boolean" at evaluation time. Use plain booleans for inline conditionals, reserving mkDefault for module options resolved by the merge system. Confidence: 0.70
|
|
||||||
|
|
||||||
# Taste (Continuously Learned by [CommandCode][cmd])
|
|
||||||
|
|
||||||
[cmd]: https://commandcode.ai/
|
|
||||||
|
|
||||||
45
flake.lock
generated
45
flake.lock
generated
|
|
@ -22,11 +22,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1778869304,
|
"lastModified": 1776169885,
|
||||||
"narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=",
|
"narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "d233902339c02a9c334e7e593de68855ad26c4cb",
|
"rev": "4bd9165a9165d7b5e33ae57f3eecbcb28fb231c9",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -55,43 +55,19 @@
|
||||||
"plugins-r": {
|
"plugins-r": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1776905071,
|
"lastModified": 1776340770,
|
||||||
"narHash": "sha256-dXox6qEs1VDE7vPNDoN8bY4g06uj1IEs6uki72w8lpA=",
|
"narHash": "sha256-o/8UZIc/Bq9dWTjA+MpSR5uMUpE7KHTErk+TwWID8Ww=",
|
||||||
"owner": "R-nvim",
|
"owner": "R-nvim",
|
||||||
"repo": "R.nvim",
|
"repo": "R.nvim",
|
||||||
"rev": "582f2af11290ac067e49018db38e12a511325556",
|
"rev": "b9cfffeb9b4e484aa9e13f01c0eb80230aada455",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "R-nvim",
|
"owner": "R-nvim",
|
||||||
"ref": "v0.99.4",
|
|
||||||
"repo": "R.nvim",
|
"repo": "R.nvim",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"r-nvim-nix": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"rixpkgs"
|
|
||||||
],
|
|
||||||
"rnvimsrc": [
|
|
||||||
"plugins-r"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1778684156,
|
|
||||||
"narHash": "sha256-Z4y1tQfkIsPK4NRxGn668HMDfWxnxNxSJ0CAOOXiIfY=",
|
|
||||||
"owner": "dwinkler1",
|
|
||||||
"repo": "r_nvim_nix",
|
|
||||||
"rev": "2f49dfee27886068e2f49cbd54558ce4cc424c82",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "dwinkler1",
|
|
||||||
"repo": "r_nvim_nix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"rixpkgs": {
|
"rixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1771303851,
|
"lastModified": 1771303851,
|
||||||
|
|
@ -103,8 +79,8 @@
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "dwinkler1",
|
"owner": "dwinkler1",
|
||||||
|
"ref": "nixpkgs",
|
||||||
"repo": "rixpkgs",
|
"repo": "rixpkgs",
|
||||||
"rev": "af2dd3f7b4b172077747c0869d4e30702fb71b0e",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -114,7 +90,6 @@
|
||||||
"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"
|
||||||
}
|
}
|
||||||
|
|
@ -126,11 +101,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1779297405,
|
"lastModified": 1776375800,
|
||||||
"narHash": "sha256-VFoBwH7ZjVxCnvZTb5ODRXt70sLtWMxstive0N+RS50=",
|
"narHash": "sha256-/SSAR77Brr9fbapsh1cb2K47JXCbvwS1GjM4yyDxle8=",
|
||||||
"owner": "BirdeeHub",
|
"owner": "BirdeeHub",
|
||||||
"repo": "nix-wrapper-modules",
|
"repo": "nix-wrapper-modules",
|
||||||
"rev": "e7ed7a1205945befdf2e0d73ba7df91d935e5af1",
|
"rev": "f11469ca69068bac13d9e163b2bd268cc06dff57",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
||||||
197
flake.nix
197
flake.nix
|
|
@ -1,19 +1,16 @@
|
||||||
# Copyright (c) 2026 Daniel
|
# Copyright (c) 2026 BirdeeHub
|
||||||
# Licensed under the MIT license
|
# Licensed under the MIT license
|
||||||
{
|
{
|
||||||
description = "Daniel's NixCats";
|
description = "Daniel's NixCats";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
|
#nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
|
||||||
wrappers = {
|
wrappers = {
|
||||||
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/af2dd3f7b4b172077747c0869d4e30702fb71b0e";
|
rixpkgs.url = "github:dwinkler1/rixpkgs/nixpkgs";
|
||||||
|
|
||||||
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";
|
||||||
|
|
@ -23,7 +20,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
"plugins-r" = {
|
"plugins-r" = {
|
||||||
url = "github:R-nvim/R.nvim/v0.99.4";
|
url = "github:R-nvim/R.nvim";
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -39,34 +36,45 @@
|
||||||
wrappers,
|
wrappers,
|
||||||
...
|
...
|
||||||
} @ inputs: let
|
} @ inputs: let
|
||||||
mkWrapperConfig = pkgs: {
|
|
||||||
cats = {
|
|
||||||
clickhouse = false;
|
|
||||||
gitPlugins = true;
|
|
||||||
julia = false;
|
|
||||||
lua = true;
|
|
||||||
markdown = true;
|
|
||||||
nix = true;
|
|
||||||
optional = false;
|
|
||||||
python = false;
|
|
||||||
r = true;
|
|
||||||
};
|
|
||||||
settings = {
|
|
||||||
lang_packages = {
|
|
||||||
python = [];
|
|
||||||
r = [];
|
|
||||||
julia = [];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
binName = "vv";
|
|
||||||
};
|
|
||||||
|
|
||||||
wrapperSettings = pkgs: let
|
wrapperSettings = pkgs: let
|
||||||
cfg = mkWrapperConfig pkgs;
|
def = pkgs.lib.mkDefault;
|
||||||
in
|
in
|
||||||
wrapper.config.wrap {
|
wrapper.config.wrap {
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
inherit (cfg) settings binName;
|
cats = {
|
||||||
|
clickhouse = def false;
|
||||||
|
gitPlugins = def true;
|
||||||
|
julia = def false;
|
||||||
|
lua = def true;
|
||||||
|
markdown = def false;
|
||||||
|
nix = def true;
|
||||||
|
optional = def false;
|
||||||
|
python = def false;
|
||||||
|
r = def false;
|
||||||
|
};
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
lang_packages = {
|
||||||
|
python = with pkgs.python3Packages; [
|
||||||
|
duckdb
|
||||||
|
polars
|
||||||
|
];
|
||||||
|
|
||||||
|
r = with pkgs.rpkgs.rPackages; [
|
||||||
|
arrow
|
||||||
|
broom
|
||||||
|
data_table
|
||||||
|
janitor
|
||||||
|
styler
|
||||||
|
];
|
||||||
|
|
||||||
|
julia = ["DataFramesMeta" "QuackIO"];
|
||||||
|
};
|
||||||
|
colorscheme = def "cyberdream";
|
||||||
|
background = def "dark";
|
||||||
|
wrapRc = def true;
|
||||||
|
};
|
||||||
|
binName = def "vv";
|
||||||
};
|
};
|
||||||
|
|
||||||
systems = [
|
systems = [
|
||||||
|
|
@ -77,39 +85,54 @@
|
||||||
|
|
||||||
forAllSystems = nixpkgs.lib.genAttrs systems;
|
forAllSystems = nixpkgs.lib.genAttrs systems;
|
||||||
|
|
||||||
|
extra_pkg_config = {
|
||||||
|
# allowUnfree = true;
|
||||||
|
};
|
||||||
|
|
||||||
overlayDefs = import ./overlays inputs;
|
overlayDefs = import ./overlays inputs;
|
||||||
|
|
||||||
|
dependencyOverlays = overlayDefs.dependencyOverlays;
|
||||||
|
|
||||||
|
dependencyOverlay = overlayDefs.dependencyOverlay;
|
||||||
|
|
||||||
mkPkgs = system:
|
mkPkgs = system:
|
||||||
import nixpkgs {
|
import nixpkgs {
|
||||||
inherit system;
|
inherit system;
|
||||||
config = { allowUnfree = true; };
|
config = extra_pkg_config;
|
||||||
overlays = [ overlayDefs.dependencyOverlay ];
|
overlays = [dependencyOverlay];
|
||||||
};
|
};
|
||||||
|
|
||||||
module = (import ./modules/neovim.nix) inputs;
|
module = nixpkgs.lib.modules.importApply ./modules/neovim.nix inputs;
|
||||||
wrapper = wrappers.lib.evalModule module;
|
wrapper = wrappers.lib.evalModule module;
|
||||||
in {
|
in {
|
||||||
overlays = {
|
overlays = {
|
||||||
# overlay `vv` wraps the module with default settings only.
|
|
||||||
# For the fully-configured binary (including mkWrapperConfig overrides),
|
|
||||||
# use `packages.<system>.default` instead.
|
|
||||||
default = nixpkgs.lib.composeManyExtensions [
|
default = nixpkgs.lib.composeManyExtensions [
|
||||||
overlayDefs.dependencyOverlay
|
dependencyOverlay
|
||||||
(final: prev: {
|
(final: prev: {
|
||||||
vv = wrapper.config.wrap {pkgs = final;};
|
vv = wrapper.config.wrap {pkgs = final;};
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
dependencies = overlayDefs.dependencyOverlay;
|
dependencies = dependencyOverlay;
|
||||||
|
vv = self.overlays.default;
|
||||||
};
|
};
|
||||||
|
|
||||||
wrapperModules.default = module;
|
wrapperModules = {
|
||||||
wrapperConfigs.default = wrapper.config;
|
default = module;
|
||||||
|
neovim = self.wrapperModules.default;
|
||||||
|
};
|
||||||
|
|
||||||
|
wrappers = {
|
||||||
|
default = wrapper.config;
|
||||||
|
neovim = self.wrappers.default;
|
||||||
|
};
|
||||||
|
|
||||||
packages = forAllSystems (
|
packages = forAllSystems (
|
||||||
system: let
|
system: let
|
||||||
pkgs = mkPkgs system;
|
pkgs = mkPkgs system;
|
||||||
|
nvimPkg = wrapperSettings pkgs;
|
||||||
in {
|
in {
|
||||||
default = wrapperSettings pkgs;
|
default = nvimPkg;
|
||||||
|
vv = nvimPkg;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -124,79 +147,13 @@
|
||||||
system: let
|
system: let
|
||||||
pkgs = mkPkgs system;
|
pkgs = mkPkgs system;
|
||||||
nvimPkg = wrapperSettings pkgs;
|
nvimPkg = wrapperSettings pkgs;
|
||||||
|
|
||||||
pythonPkgs = with pkgs.python3Packages; [
|
|
||||||
duckdb
|
|
||||||
polars
|
|
||||||
];
|
|
||||||
|
|
||||||
rPkgs = (with pkgs.rpkgs.rPackages; [
|
|
||||||
arrow
|
|
||||||
broom
|
|
||||||
data_table
|
|
||||||
janitor
|
|
||||||
languageserver
|
|
||||||
styler
|
|
||||||
]) ++ [ pkgs.nvimcom ];
|
|
||||||
|
|
||||||
juliaPkgs = ["DataFramesMeta" "QuackIO"];
|
|
||||||
|
|
||||||
pythonPackages = let
|
|
||||||
python_packages_fn =
|
|
||||||
if pkgs ? basePythonPackages
|
|
||||||
then ps: pkgs.basePythonPackages ps ++ pythonPkgs
|
|
||||||
else _: pythonPkgs;
|
|
||||||
in
|
|
||||||
with pkgs; [
|
|
||||||
(python3.withPackages python_packages_fn)
|
|
||||||
nodejs
|
|
||||||
ruff
|
|
||||||
basedpyright
|
|
||||||
uv
|
|
||||||
];
|
|
||||||
|
|
||||||
rPackages = let
|
|
||||||
r_packages = (pkgs.baseRPackages or []) ++ rPkgs;
|
|
||||||
in
|
|
||||||
with pkgs; [
|
|
||||||
(rWrapper.override {packages = r_packages;})
|
|
||||||
radianWrapper
|
|
||||||
(quarto.override {extraRPackages = r_packages;})
|
|
||||||
air-formatter
|
|
||||||
yaml-language-server
|
|
||||||
updateR
|
|
||||||
nvimcom
|
|
||||||
rnvimserver
|
|
||||||
];
|
|
||||||
|
|
||||||
juliaPackages = let
|
|
||||||
julia_with_packages = pkgs.julia-bin.withPackages juliaPkgs;
|
|
||||||
in [julia_with_packages];
|
|
||||||
|
|
||||||
markdownPackages = with pkgs; [
|
|
||||||
python313Packages.pylatexenc
|
|
||||||
quarto
|
|
||||||
zk
|
|
||||||
];
|
|
||||||
|
|
||||||
shellPackages =
|
|
||||||
[nvimPkg]
|
|
||||||
++ pkgs.lib.optionals wrapper.config.cats.python pythonPackages
|
|
||||||
++ pkgs.lib.optionals wrapper.config.cats.r rPackages
|
|
||||||
++ pkgs.lib.optionals wrapper.config.cats.julia juliaPackages
|
|
||||||
++ pkgs.lib.optionals wrapper.config.cats.markdown markdownPackages;
|
|
||||||
in {
|
in {
|
||||||
default = pkgs.mkShell {
|
default = pkgs.mkShell {
|
||||||
name = "vShell";
|
name = "vShell";
|
||||||
packages = shellPackages;
|
packages = [nvimPkg];
|
||||||
nativeBuildInputs = pkgs.lib.optionals wrapper.config.cats.optional [ pkgs.devenv ];
|
nativeBuildInputs = with pkgs; [] ++ (pkgs.lib.optionals self.wrappers.default.cats.optional [devenv]);
|
||||||
shellHook = ''
|
inputsFrom = [];
|
||||||
echo 'I am a NixShell'
|
shellHook = "";
|
||||||
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"
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
@ -206,11 +163,18 @@
|
||||||
pkgs = mkPkgs system;
|
pkgs = mkPkgs system;
|
||||||
nvimPkg = wrapperSettings pkgs;
|
nvimPkg = wrapperSettings pkgs;
|
||||||
in {
|
in {
|
||||||
default = pkgs.runCommand "check-vv" {} ''
|
default = nvimPkg;
|
||||||
|
module-eval = let
|
||||||
|
_ = wrapper.config;
|
||||||
|
in
|
||||||
|
pkgs.runCommand "check-module-eval" {} ''
|
||||||
|
echo "Module evaluation successful" > $out
|
||||||
|
'';
|
||||||
|
package-build = pkgs.runCommand "check-vv" {} ''
|
||||||
BINARY_PATH="${nvimPkg}/bin/vv"
|
BINARY_PATH="${nvimPkg}/bin/vv"
|
||||||
|
|
||||||
if [ ! -x "$BINARY_PATH" ]; then
|
if [ ! -x "$BINARY_PATH" ]; then
|
||||||
echo "Error: Binary not found or not executable"
|
echo "Error: Binary n not found or not executable"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -223,11 +187,6 @@
|
||||||
cat version_output.txt >> $out
|
cat version_output.txt >> $out
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
module-eval =
|
|
||||||
let _ = wrapper.config;
|
|
||||||
in pkgs.runCommand "check-module-eval" {} ''
|
|
||||||
echo "Module evaluation successful" > $out
|
|
||||||
'';
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
-- Add the key mappings only for Markdown files in a zk notebook.
|
-- Add the key mappings only for Markdown files in a zk notebook.
|
||||||
local nix = require("config.nix")
|
if require("zk.util").notebook_root(vim.fn.expand('%:p')) ~= nil then
|
||||||
if nix.get_cat("markdown", false) then
|
|
||||||
if require("zk.util").notebook_root(vim.fn.expand('%:p')) ~= nil then
|
|
||||||
local map = vim.keymap.set
|
local map = vim.keymap.set
|
||||||
-- Open the link under the caret.
|
-- Open the link under the caret.
|
||||||
map("n", "<CR>", "<Cmd>lua vim.lsp.buf.definition()<CR>", { noremap = true, silent = false, buffer = true })
|
map("n", "<CR>", "<Cmd>lua vim.lsp.buf.definition()<CR>", { noremap = true, silent = false, buffer = true })
|
||||||
|
|
@ -31,5 +29,4 @@ if nix.get_cat("markdown", false) then
|
||||||
map("v", "<leader>za", ":'<,'>lua vim.lsp.buf.range_code_action()<CR>",
|
map("v", "<leader>za", ":'<,'>lua vim.lsp.buf.range_code_action()<CR>",
|
||||||
{ noremap = true, silent = false, buffer = true, desc = "Code actions" })
|
{ noremap = true, silent = false, buffer = true, desc = "Code actions" })
|
||||||
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
Available categories:
|
Available categories:
|
||||||
- clickhouse: Clickhouse client and tools
|
- clickhouse: Clickhouse client and tools
|
||||||
|
- customPlugins: local plugin specs
|
||||||
- external: external tools and integrations
|
- external: external tools and integrations
|
||||||
- general: core Neovim plugins/features
|
- general: core Neovim plugins/features
|
||||||
- gitPlugins: git-related plugins
|
- gitPlugins: git-related plugins
|
||||||
|
|
@ -24,6 +25,7 @@
|
||||||
- optional: optional tools and utilities
|
- optional: optional tools and utilities
|
||||||
- python: Python tooling and plugins
|
- python: Python tooling and plugins
|
||||||
- r: R tooling and plugins
|
- r: R tooling and plugins
|
||||||
|
- test: test-only tooling (disabled by default)
|
||||||
- treesitterParsers: Treesitter parsers
|
- treesitterParsers: Treesitter parsers
|
||||||
- utils: general utilities
|
- utils: general utilities
|
||||||
'';
|
'';
|
||||||
|
|
@ -31,16 +33,18 @@
|
||||||
|
|
||||||
config.cats = {
|
config.cats = {
|
||||||
clickhouse = lib.mkDefault false;
|
clickhouse = lib.mkDefault false;
|
||||||
|
customPlugins = lib.mkDefault true;
|
||||||
external = lib.mkDefault true;
|
external = lib.mkDefault true;
|
||||||
general = lib.mkDefault true;
|
general = lib.mkDefault true;
|
||||||
gitPlugins = lib.mkDefault true;
|
gitPlugins = lib.mkDefault true;
|
||||||
julia = lib.mkDefault false;
|
julia = lib.mkDefault false;
|
||||||
lua = lib.mkDefault true;
|
lua = lib.mkDefault true;
|
||||||
markdown = lib.mkDefault true;
|
markdown = lib.mkDefault false;
|
||||||
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 true;
|
r = lib.mkDefault false;
|
||||||
|
test = lib.mkDefault false;
|
||||||
treesitterParsers = lib.mkDefault true;
|
treesitterParsers = lib.mkDefault true;
|
||||||
utils = lib.mkDefault true;
|
utils = lib.mkDefault true;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
# Lua packages available to neovim (for :lua require())
|
# Lua packages available to neovim (for :lua require())
|
||||||
config.settings.nvim_lua_env = lp:
|
config.settings.nvim_lua_env = lp:
|
||||||
lib.optionals (config.cats.general or true) [ lp.tiktoken_core ];
|
lib.optionals (config.cats.general or false) [ lp.tiktoken_core ];
|
||||||
|
|
||||||
# Binary name for the wrapper
|
# Binary name for the wrapper
|
||||||
config.binName = lib.mkDefault "vv";
|
config.binName = lib.mkDefault "vv";
|
||||||
|
|
@ -25,10 +25,10 @@
|
||||||
config.settings.block_normal_config = true;
|
config.settings.block_normal_config = true;
|
||||||
|
|
||||||
# Don't symlink the config (we wrap it instead)
|
# Don't symlink the config (we wrap it instead)
|
||||||
config.settings.dont_link = lib.mkDefault false;
|
config.settings.dont_link = false;
|
||||||
|
|
||||||
# Create additional aliases for the binary
|
# Create additional aliases for the binary
|
||||||
config.settings.aliases = lib.mkDefault [ "vvim" ];
|
config.settings.aliases = [ "vvim" ];
|
||||||
|
|
||||||
# Enable wrapper handling of spec runtimeDeps (template pattern).
|
# Enable wrapper handling of spec runtimeDeps (template pattern).
|
||||||
config.settings.autowrapRuntimeDeps = true;
|
config.settings.autowrapRuntimeDeps = true;
|
||||||
|
|
|
||||||
|
|
@ -7,21 +7,16 @@
|
||||||
# Environment variables set for the wrapper.
|
# Environment variables set for the wrapper.
|
||||||
# These are available when running neovim.
|
# These are available when running neovim.
|
||||||
config.env = lib.mkMerge [
|
config.env = lib.mkMerge [
|
||||||
(lib.mkIf (config.cats.python or true) {
|
(lib.mkIf (config.cats.python or false) {
|
||||||
UV_PYTHON_DOWNLOADS = "never";
|
UV_PYTHON_DOWNLOADS = "never";
|
||||||
UV_PYTHON = pkgs.python.interpreter;
|
UV_PYTHON = pkgs.python.interpreter;
|
||||||
})
|
})
|
||||||
(lib.mkIf (config.cats.r or true) {
|
|
||||||
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 true) {
|
(lib.mkIf (config.cats.r or false) {
|
||||||
R_LIBS_USER = "${pkgs.nvimcom}/library:$PWD/.Rlibs";
|
R_LIBS_USER = "./.Rlibs";
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
nvim-host.enable = true;
|
nvim-host.enable = true;
|
||||||
nvim-host.package = "${pkgs.neovide}/bin/neovide";
|
nvim-host.package = "${pkgs.neovide}/bin/neovide";
|
||||||
nvim-host.argv0 = "neovide";
|
nvim-host.argv0 = "neovide";
|
||||||
nvim-host.flags."--neovim-bin" = "${builtins.placeholder "out"}/bin/${config.binName}";
|
nvim-host.flags."--neovim-bin" = "${placeholder "out"}/bin/${config.binName}";
|
||||||
};
|
};
|
||||||
|
|
||||||
m = {
|
m = {
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
};
|
};
|
||||||
default = { };
|
default = { };
|
||||||
description = ''
|
description = ''
|
||||||
Language-specific package overrides appended to each language spec's runtimePackages.
|
Language-specific package overrides appended to each language spec's extraPackages.
|
||||||
Intended for flake.nix overrides via wrapper.config.wrap.
|
Intended for flake.nix overrides via wrapper.config.wrap.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -10,13 +10,14 @@ let
|
||||||
let
|
let
|
||||||
is_enabled = if spec ? enable then spec.enable else true;
|
is_enabled = if spec ? enable then spec.enable else true;
|
||||||
has_runtime_deps = (spec.runtimeDeps or false) == runtime_deps_type;
|
has_runtime_deps = (spec.runtimeDeps or false) == runtime_deps_type;
|
||||||
packages = spec.runtimePackages or [ ];
|
packages = spec.extraPackages or [ ];
|
||||||
in
|
in
|
||||||
acc ++ lib.optionals (is_enabled && has_runtime_deps) packages
|
acc ++ lib.optionals (is_enabled && has_runtime_deps) packages
|
||||||
)
|
)
|
||||||
[ ];
|
[ ];
|
||||||
|
|
||||||
prefix_packages = collect_runtime_packages "prefix";
|
prefix_packages = collect_runtime_packages "prefix";
|
||||||
|
suffix_packages = collect_runtime_packages "suffix";
|
||||||
|
|
||||||
to_path_specs = packages: [
|
to_path_specs = packages: [
|
||||||
{
|
{
|
||||||
|
|
@ -30,4 +31,5 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
config.prefixVar = lib.optionals (prefix_packages != [ ]) (to_path_specs prefix_packages);
|
config.prefixVar = lib.optionals (prefix_packages != [ ]) (to_path_specs prefix_packages);
|
||||||
|
config.suffixVar = lib.optionals (suffix_packages != [ ]) (to_path_specs suffix_packages);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
51
modules/module/specs/cats-enable.nix
Normal file
51
modules/module/specs/cats-enable.nix
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
{ config, lib, ... }:
|
||||||
|
{
|
||||||
|
# This module implements category-based enabling of specs.
|
||||||
|
# It runs early (order 200) so other specMaps can see the enable flags.
|
||||||
|
#
|
||||||
|
# How it works:
|
||||||
|
# 1. For each spec, extract its name (removing -lazy suffix if present)
|
||||||
|
# 2. Check if there's a corresponding cats.<name> toggle
|
||||||
|
# 3. Set spec.value.enable based on the cats toggle (default: true)
|
||||||
|
# 4. This allows specs to be conditionally included based on config.cats settings
|
||||||
|
#
|
||||||
|
# Example: If config.cats.python = false, then specs.python.enable = false
|
||||||
|
|
||||||
|
config.specMaps = lib.mkOrder 200 [
|
||||||
|
{
|
||||||
|
name = "CATS_ENABLE";
|
||||||
|
data =
|
||||||
|
list:
|
||||||
|
map (
|
||||||
|
v:
|
||||||
|
if v.type == "spec" || v.type == "parent" then
|
||||||
|
let
|
||||||
|
# Extract spec name, handling lazy specs (remove -lazy suffix)
|
||||||
|
specName =
|
||||||
|
if v.name == null then
|
||||||
|
null
|
||||||
|
else if lib.hasSuffix "-lazy" v.name then
|
||||||
|
lib.removeSuffix "-lazy" v.name
|
||||||
|
else
|
||||||
|
v.name;
|
||||||
|
|
||||||
|
# Check if this spec has a corresponding cat toggle
|
||||||
|
catEnabled =
|
||||||
|
if specName != null && builtins.hasAttr specName config.cats then
|
||||||
|
config.cats.${specName}
|
||||||
|
else
|
||||||
|
true; # Default to enabled if no cat toggle exists
|
||||||
|
in
|
||||||
|
v
|
||||||
|
// {
|
||||||
|
value = v.value // {
|
||||||
|
# Use explicit enable if set, otherwise use cat toggle
|
||||||
|
enable = if v.value ? enable then v.value.enable else catEnabled;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
v
|
||||||
|
) list;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
@ -5,14 +5,24 @@
|
||||||
wlib,
|
wlib,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
|
# ============================================================================
|
||||||
|
# SPEC MODULE DEFAULTS
|
||||||
|
# ============================================================================
|
||||||
|
# Define default options available to all specs
|
||||||
|
|
||||||
config.specMods = {parentSpec ? null, ...}: {
|
config.specMods = {parentSpec ? null, ...}: {
|
||||||
options.runtimePkgs = lib.mkOption {
|
options.extraPackages = lib.mkOption {
|
||||||
type = lib.types.listOf wlib.types.stringable;
|
type = lib.types.listOf wlib.types.stringable;
|
||||||
default = [];
|
default = [];
|
||||||
description = "a runtimePkgs spec field to put packages to suffix to the PATH";
|
description = "a extraPackages spec field to put packages to suffix to the PATH";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# EXTERNAL TOOLS SPEC
|
||||||
|
# ============================================================================
|
||||||
|
# Core system tools and utilities
|
||||||
|
|
||||||
config.specs.external = {
|
config.specs.external = {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
before = ["INIT_MAIN"];
|
before = ["INIT_MAIN"];
|
||||||
|
|
@ -20,7 +30,7 @@
|
||||||
vim.o.shell = "${pkgs.zsh}/bin/zsh"
|
vim.o.shell = "${pkgs.zsh}/bin/zsh"
|
||||||
'';
|
'';
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
runtimePkgs = with pkgs; [
|
extraPackages = with pkgs; [
|
||||||
perl
|
perl
|
||||||
ruby
|
ruby
|
||||||
shfmt
|
shfmt
|
||||||
|
|
@ -29,11 +39,15 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# OPTIONAL TOOLS SPEC
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
config.specs.optional = lib.mkIf (config.cats.optional or true) {
|
config.specs.optional = lib.mkIf (config.cats.optional or true) {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
before = ["INIT_MAIN"];
|
before = ["INIT_MAIN"];
|
||||||
runtimePkgs = with pkgs; [
|
extraPackages = with pkgs; [
|
||||||
bat
|
bat
|
||||||
broot
|
broot
|
||||||
devenv
|
devenv
|
||||||
|
|
@ -62,38 +76,54 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# MARKDOWN SPEC
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
config.specs.markdown = lib.mkIf (config.cats.markdown or true) {
|
config.specs.markdown = lib.mkIf (config.cats.markdown or true) {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
runtimePkgs = with pkgs; [
|
extraPackages = with pkgs; [
|
||||||
python313Packages.pylatexenc
|
python313Packages.pylatexenc
|
||||||
quarto
|
quarto
|
||||||
zk
|
zk
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# NIX SPEC
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
config.specs.nix = lib.mkIf (config.cats.nix or true) {
|
config.specs.nix = lib.mkIf (config.cats.nix or true) {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
runtimePkgs = with pkgs; [
|
extraPackages = with pkgs; [
|
||||||
alejandra
|
alejandra
|
||||||
nix-doc
|
nix-doc
|
||||||
nixd
|
nixd
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# LUA SPEC
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
config.specs.lua = lib.mkIf (config.cats.lua or true) {
|
config.specs.lua = lib.mkIf (config.cats.lua or true) {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
runtimePkgs = with pkgs; [
|
extraPackages = with pkgs; [
|
||||||
lua-language-server
|
lua-language-server
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# PYTHON SPEC
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
config.specs.python = lib.mkIf (config.cats.python or true) {
|
config.specs.python = lib.mkIf (config.cats.python or true) {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
runtimePkgs = let
|
extraPackages = let
|
||||||
python_packages_fn =
|
python_packages_fn =
|
||||||
if pkgs ? basePythonPackages
|
if pkgs ? basePythonPackages
|
||||||
then ps: pkgs.basePythonPackages ps ++ config.settings.lang_packages.python
|
then ps: pkgs.basePythonPackages ps ++ config.settings.lang_packages.python
|
||||||
|
|
@ -109,10 +139,14 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# R SPEC
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
config.specs.r = lib.mkIf (config.cats.r or true) {
|
config.specs.r = lib.mkIf (config.cats.r or true) {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
runtimePkgs = let
|
extraPackages = let
|
||||||
r_packages = (pkgs.baseRPackages or []) ++ config.settings.lang_packages.r;
|
r_packages = (pkgs.baseRPackages or []) ++ config.settings.lang_packages.r;
|
||||||
in
|
in
|
||||||
with pkgs; [
|
with pkgs; [
|
||||||
|
|
@ -125,22 +159,30 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# JULIA SPEC
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
config.specs.julia = lib.mkIf (config.cats.julia or true) {
|
config.specs.julia = lib.mkIf (config.cats.julia or true) {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
runtimePkgs = let
|
extraPackages = let
|
||||||
julia_with_packages =
|
julia_with_packages =
|
||||||
pkgs.julia-bin.withPackages config.settings.lang_packages.julia;
|
pkgs.julia-bin.withPackages config.settings.lang_packages.julia;
|
||||||
in [julia_with_packages];
|
in [julia_with_packages];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# CLICKHOUSE SPEC
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
config.specs.clickhouse = lib.mkIf (config.cats.clickhouse or true) {
|
config.specs.clickhouse = lib.mkIf (config.cats.clickhouse or true) {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
runtimePkgs = with pkgs; [
|
extraPackages = with pkgs; [
|
||||||
clickhouse-lts
|
clickhouse-lts
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.runtimePkgs = config.specCollect (acc: v: acc ++ (v.runtimePkgs or [])) [];
|
config.extraPackages = config.specCollect (acc: v: acc ++ (v.extraPackages or [])) [];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,15 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
config.specs.gitPlugins = lib.mkIf (config.cats.gitPlugins or true) {
|
{
|
||||||
data = [];
|
config.specs.gitPlugins = {
|
||||||
|
data = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.r = lib.mkIf (config.cats.r or true) {
|
config.specs.r = {
|
||||||
data = with pkgs.vimPlugins; [
|
data = with pkgs.vimPlugins; [
|
||||||
pkgs.r-nvim
|
config.nvim-lib.neovimPlugins.r
|
||||||
quarto-nvim
|
quarto-nvim
|
||||||
{
|
{
|
||||||
data = otter-nvim;
|
data = otter-nvim;
|
||||||
|
|
@ -19,14 +20,14 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.markdown-lazy = lib.mkIf (config.cats.markdown or true) {
|
config.specs.markdown-lazy = {
|
||||||
lazy = true;
|
lazy = true;
|
||||||
data = [
|
data = [
|
||||||
config.nvim-lib.neovimPlugins.cmp-pandoc-references
|
config.nvim-lib.neovimPlugins.cmp-pandoc-references
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.general = lib.mkIf (config.cats.general or true) {
|
config.specs.general = {
|
||||||
data = with pkgs.vimPlugins; [
|
data = with pkgs.vimPlugins; [
|
||||||
lze
|
lze
|
||||||
lzextras
|
lzextras
|
||||||
|
|
@ -79,7 +80,7 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.lua = lib.mkIf (config.cats.lua or true) {
|
config.specs.lua = {
|
||||||
data = with pkgs.vimPlugins; [
|
data = with pkgs.vimPlugins; [
|
||||||
luvit-meta
|
luvit-meta
|
||||||
{
|
{
|
||||||
|
|
@ -89,7 +90,7 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.markdown = lib.mkIf (config.cats.markdown or true) {
|
config.specs.markdown = {
|
||||||
data = with pkgs.vimPlugins; [
|
data = with pkgs.vimPlugins; [
|
||||||
quarto-nvim
|
quarto-nvim
|
||||||
render-markdown-nvim
|
render-markdown-nvim
|
||||||
|
|
@ -104,22 +105,20 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.utils = lib.mkIf (config.cats.utils or true) {
|
config.specs.utils = {
|
||||||
data = with pkgs.vimPlugins; [
|
data = with pkgs.vimPlugins; [
|
||||||
blink-cmp
|
blink-cmp
|
||||||
nvim-lspconfig
|
nvim-lspconfig
|
||||||
nvim-treesitter-context
|
nvim-treesitter-context
|
||||||
nvim-treesitter-textobjects
|
nvim-treesitter-textobjects
|
||||||
{
|
{
|
||||||
data = pkgs.codecompanion-nvim.overrideAttrs (old: {
|
data = pkgs.codecompanion-nvim;
|
||||||
doCheck = false;
|
|
||||||
});
|
|
||||||
pname = "codecompanion";
|
pname = "codecompanion";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.treesitterParsers = lib.mkIf (config.cats.treesitterParsers or true) {
|
config.specs.treesitterParsers = {
|
||||||
data = with pkgs.vimPlugins.nvim-treesitter-parsers; [
|
data = with pkgs.vimPlugins.nvim-treesitter-parsers; [
|
||||||
bash
|
bash
|
||||||
c
|
c
|
||||||
|
|
@ -158,7 +157,7 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.utils-lazy = lib.mkIf (config.cats.utils or true) {
|
config.specs.utils-lazy = {
|
||||||
lazy = true;
|
lazy = true;
|
||||||
data = with pkgs.vimPlugins; [
|
data = with pkgs.vimPlugins; [
|
||||||
blink-compat
|
blink-compat
|
||||||
|
|
@ -175,8 +174,8 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.gitPlugins-lazy = lib.mkIf (config.cats.gitPlugins or true) {
|
config.specs.gitPlugins-lazy = {
|
||||||
lazy = true;
|
lazy = true;
|
||||||
data = [];
|
data = [ ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,16 @@ inputs:
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
|
# ============================================================================
|
||||||
|
# IMPORTS
|
||||||
|
# ============================================================================
|
||||||
|
# Import the base neovim wrapper module and all configuration modules
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
wlib.wrapperModules.neovim
|
wlib.wrapperModules.neovim
|
||||||
./module/specs/deps.nix
|
./module/specs/deps.nix
|
||||||
./module/specs/plugins.nix
|
./module/specs/plugins.nix
|
||||||
|
./module/specs/cats-enable.nix
|
||||||
./module/settings/core.nix
|
./module/settings/core.nix
|
||||||
./module/settings/cats.nix
|
./module/settings/cats.nix
|
||||||
./module/settings/env.nix
|
./module/settings/env.nix
|
||||||
|
|
@ -19,6 +25,11 @@ inputs:
|
||||||
./module/settings/runtime-path.nix
|
./module/settings/runtime-path.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# HELPER FUNCTIONS
|
||||||
|
# ============================================================================
|
||||||
|
# Utilities for working with plugin inputs
|
||||||
|
|
||||||
options.nvim-lib.neovimPlugins = lib.mkOption {
|
options.nvim-lib.neovimPlugins = lib.mkOption {
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = lib.types.attrsOf wlib.types.stringable;
|
type = lib.types.attrsOf wlib.types.stringable;
|
||||||
|
|
@ -47,6 +58,11 @@ inputs:
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# CONFIGURATION
|
||||||
|
# ============================================================================
|
||||||
|
# Pass cats configuration to neovim and expose metadata
|
||||||
|
|
||||||
config.settings.cats = config.cats;
|
config.settings.cats = config.cats;
|
||||||
config.info.cats = config.cats;
|
config.info.cats = config.cats;
|
||||||
config.info.nixCats_config_location = config.settings.config_directory;
|
config.info.nixCats_config_location = config.settings.config_directory;
|
||||||
|
|
|
||||||
|
|
@ -3,33 +3,39 @@ 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;
|
||||||
pythonOverlay = import ./python.nix {inherit inputs;};
|
pythonOverlay = import ./python.nix inputs;
|
||||||
pluginsOverlay = import ./plugins.nix {inherit inputs;};
|
pluginsOverlay = import ./plugins.nix inputs;
|
||||||
|
|
||||||
dependencyOverlays = [
|
dependencyOverlays = [
|
||||||
rOverlay
|
rOverlay
|
||||||
rNvimNixOverlay
|
|
||||||
pythonOverlay
|
pythonOverlay
|
||||||
pluginsOverlay
|
pluginsOverlay
|
||||||
];
|
];
|
||||||
dependencyOverlay = lib.composeManyExtensions dependencyOverlays;
|
dependencyOverlay = lib.composeManyExtensions dependencyOverlays;
|
||||||
|
|
||||||
# franOverlay provides R-specific tooling (radianWrapper, air-formatter).
|
|
||||||
# It is scoped to rixpkgs (via overlays/r.nix) rather than the global
|
|
||||||
# package set, since it only applies to R package derivations.
|
|
||||||
franOverlay = inputs.fran.overlays.default;
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
inherit
|
inherit
|
||||||
rOverlay
|
rOverlay
|
||||||
rNvimNixOverlay
|
|
||||||
franOverlay
|
franOverlay
|
||||||
pythonOverlay
|
pythonOverlay
|
||||||
pluginsOverlay
|
pluginsOverlay
|
||||||
dependencyOverlays
|
dependencyOverlays
|
||||||
dependencyOverlay;
|
dependencyOverlay;
|
||||||
|
|
||||||
|
# Named exports for downstream composition.
|
||||||
default = dependencyOverlay;
|
default = dependencyOverlay;
|
||||||
dependencies = dependencyOverlays;
|
dependencies = dependencyOverlays;
|
||||||
|
|
||||||
|
overlays = {
|
||||||
|
inherit
|
||||||
|
rOverlay
|
||||||
|
franOverlay
|
||||||
|
pythonOverlay
|
||||||
|
pluginsOverlay
|
||||||
|
dependencyOverlays
|
||||||
|
dependencyOverlay;
|
||||||
|
default = dependencyOverlay;
|
||||||
|
dependencies = dependencyOverlays;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,52 @@
|
||||||
|
# R packages overlay (rix)
|
||||||
|
#
|
||||||
|
# This overlay provides access to R packages from rstats-on-nix.
|
||||||
|
#
|
||||||
|
# rstats-on-nix maintains snapshots of CRAN packages built with Nix:
|
||||||
|
# - Provides reproducible R package versions
|
||||||
|
# - Ensures binary cache availability for faster builds
|
||||||
|
# - Maintained by the rstats-on-nix community
|
||||||
|
#
|
||||||
|
# Available attributes after applying this overlay:
|
||||||
|
# - pkgs.rpkgs: R packages from rstats-on-nix
|
||||||
|
# - pkgs.rpkgs.rPackages: All CRAN packages
|
||||||
|
# - pkgs.rpkgs.quarto: Quarto publishing system
|
||||||
|
# - pkgs.rpkgs.rWrapper: R with package management
|
||||||
|
# - pkgs.rWrapper: R wrapper with standard packages pre-configured
|
||||||
|
# - pkgs.quarto: Quarto with R integration and standard packages
|
||||||
|
#
|
||||||
|
# Custom R packages and tools (radianWrapper, air-formatter) come from
|
||||||
|
# the fran overlay which should be applied separately.
|
||||||
|
#
|
||||||
|
# To use specific R packages, reference them via:
|
||||||
|
# with pkgs.rpkgs.rPackages; [ package1 package2 ]
|
||||||
|
#
|
||||||
|
# Update the R snapshot date in flake.nix inputs section:
|
||||||
|
# rixpkgs.url = "github:rstats-on-nix/nixpkgs/YYYY-MM-DD"
|
||||||
{
|
{
|
||||||
inputs,
|
inputs,
|
||||||
...
|
...
|
||||||
}: final: prev: let
|
}: final: prev: let
|
||||||
|
# R packages from rstats-on-nix for the current system
|
||||||
rpkgs = import inputs.rixpkgs {
|
rpkgs = import inputs.rixpkgs {
|
||||||
system = prev.stdenv.hostPlatform.system;
|
system = prev.stdenv.hostPlatform.system;
|
||||||
overlays = [inputs.fran.overlays.default];
|
overlays = [inputs.fran.overlays.default];
|
||||||
};
|
}; # rixpkgs.legacyPackages.${prev.stdenv.hostPlatform.system};
|
||||||
|
|
||||||
|
# Standard R packages used by default in rWrapper and quarto
|
||||||
|
reqPkgs = with rpkgs.rPackages; [
|
||||||
|
# languageserver
|
||||||
|
];
|
||||||
in {
|
in {
|
||||||
inherit rpkgs;
|
inherit rpkgs;
|
||||||
baseRPackages = [ ];
|
baseRPackages = reqPkgs;
|
||||||
rWrapper = rpkgs.rWrapper.override {packages = [ ];};
|
|
||||||
quarto = rpkgs.quarto.override {extraRPackages = [ ];};
|
# R wrapper with standard packages
|
||||||
|
rWrapper = rpkgs.rWrapper.override {packages = reqPkgs;};
|
||||||
|
|
||||||
|
# Quarto with R integration
|
||||||
|
quarto = rpkgs.quarto.override {extraRPackages = reqPkgs;};
|
||||||
|
|
||||||
|
# Update helper for rix
|
||||||
updateR = import ../scripts/updater.nix {pkgs = final;};
|
updateR = import ../scripts/updater.nix {pkgs = final;};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -390,7 +390,6 @@ end)
|
||||||
|
|
||||||
-- zk
|
-- zk
|
||||||
now_if_args(function()
|
now_if_args(function()
|
||||||
if nix.get_cat("markdown", false) then
|
|
||||||
require("zk").setup({
|
require("zk").setup({
|
||||||
picker = "minipick",
|
picker = "minipick",
|
||||||
lsp = {
|
lsp = {
|
||||||
|
|
@ -410,5 +409,4 @@ now_if_args(function()
|
||||||
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
end
|
|
||||||
end)
|
end)
|
||||||
|
|
|
||||||
|
|
@ -44,12 +44,6 @@ 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()
|
||||||
|
|
@ -71,7 +65,6 @@ end)
|
||||||
now(function()
|
now(function()
|
||||||
vim.treesitter.language.register("markdown", { "quarto", "rmd" })
|
vim.treesitter.language.register("markdown", { "quarto", "rmd" })
|
||||||
|
|
||||||
if nix.get_cat({ "r", "markdown" }, false) then
|
|
||||||
vim.api.nvim_create_autocmd("FileType", {
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
pattern = { "quarto" },
|
pattern = { "quarto" },
|
||||||
callback = function()
|
callback = function()
|
||||||
|
|
@ -88,11 +81,9 @@ now(function()
|
||||||
write_to_disk = true,
|
write_to_disk = true,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
end
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
later(function()
|
later(function()
|
||||||
if nix.get_cat({ "r", "markdown" }, false) then
|
|
||||||
require("quarto").setup({
|
require("quarto").setup({
|
||||||
lspFeatures = {
|
lspFeatures = {
|
||||||
enabled = true,
|
enabled = true,
|
||||||
|
|
@ -111,5 +102,4 @@ later(function()
|
||||||
default_method = "slime",
|
default_method = "slime",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
end
|
|
||||||
end)
|
end)
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
local add = Config.add
|
local add = Config.add
|
||||||
local now_if_args = Config.now_if_args
|
local now_if_args = Config.now_if_args
|
||||||
local later = MiniDeps.later
|
local later = MiniDeps.later
|
||||||
local nix = require('config.nix')
|
|
||||||
|
|
||||||
if not Config.isNixCats then
|
if not Config.isNixCats then
|
||||||
local m_add = MiniDeps.add
|
local m_add = MiniDeps.add
|
||||||
|
|
@ -13,7 +12,6 @@ end
|
||||||
|
|
||||||
-- lua
|
-- lua
|
||||||
later(function()
|
later(function()
|
||||||
if nix.get_cat("lua", false) then
|
|
||||||
add("luvit-meta")
|
add("luvit-meta")
|
||||||
add("lazydev")
|
add("lazydev")
|
||||||
require("lazydev").setup({
|
require("lazydev").setup({
|
||||||
|
|
@ -27,7 +25,6 @@ later(function()
|
||||||
{ path = "${3rd}/luv/library", words = { "vim%.uv" } },
|
{ path = "${3rd}/luv/library", words = { "vim%.uv" } },
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
end
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- Markdown
|
-- Markdown
|
||||||
|
|
|
||||||
|
|
@ -15,17 +15,17 @@ now_if_args(function()
|
||||||
marksman = {
|
marksman = {
|
||||||
filetypes = { "markdown", "markdown_inline", "codecompanion" },
|
filetypes = { "markdown", "markdown_inline", "codecompanion" },
|
||||||
},
|
},
|
||||||
r_ls = {
|
-- r_language_server = {
|
||||||
filetypes = { 'r', 'rmd', 'rmarkdown' },
|
-- filetypes = { 'r', 'rmd', 'rmarkdown' },
|
||||||
settings = {
|
-- settings = {
|
||||||
['r_ls'] = {
|
-- ['r_language_server'] = {
|
||||||
lsp = {
|
-- lsp = {
|
||||||
rich_documentation = true,
|
-- rich_documentation = true,
|
||||||
enable = true,
|
-- enable = true,
|
||||||
},
|
-- },
|
||||||
},
|
-- },
|
||||||
}
|
-- }
|
||||||
},
|
-- },
|
||||||
julials = {
|
julials = {
|
||||||
settings = {
|
settings = {
|
||||||
julia = {
|
julia = {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue