Compare commits

..

2 commits

Author SHA1 Message Date
github-actions[bot]
c67fc21f1e flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/4bd9165' (2026-04-14)
  → 'github:nixos/nixpkgs/15f4ee4' (2026-04-30)
• Updated input 'plugins-r':
    'github:R-nvim/R.nvim/b9cfffe' (2026-04-16)
  → 'github:R-nvim/R.nvim/93077db' (2026-05-03)
• Updated input 'wrappers':
    'github:BirdeeHub/nix-wrapper-modules/f11469c' (2026-04-16)
  → 'github:BirdeeHub/nix-wrapper-modules/b1308b5' (2026-05-03)
2026-05-04 06:17:37 +00:00
e9c99811d4 feat(devshell): add language tools conditionally based on cats
- Extract mkWrapperConfig to share cats/settings between package and devshell
- Add python, R, julia, and markdown packages to devShells when their cats are enabled
- Reuse same package construction logic as specs/deps.nix for consistency
- Keep lang_packages overridable via lib.mkDefault for downstream flakes
2026-05-03 16:35:56 +10:00
2 changed files with 94 additions and 38 deletions

12
flake.lock generated
View file

@ -55,11 +55,11 @@
"plugins-r": { "plugins-r": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1777738411, "lastModified": 1777830151,
"narHash": "sha256-EaeQXoY1VXwva4GQ14W71zlEX9MrEOGq1oe/V69Rzvc=", "narHash": "sha256-Ux4Nslz1ts2EnhWylArClMHeVB+WsY0rfD5ZGMIYqoA=",
"owner": "R-nvim", "owner": "R-nvim",
"repo": "R.nvim", "repo": "R.nvim",
"rev": "72032fbe3732c6c1e0b8b21dd348408e392a543e", "rev": "93077db270c44814ea7e3d9a66461665f8f2d74a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -101,11 +101,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1777787239, "lastModified": 1777827587,
"narHash": "sha256-L4L4qLa/6ck3v9FzkTQismT4ctyaQL+J0cHCEnU0Kos=", "narHash": "sha256-Tz3QSgl1wwWH1jf0BngEkNhoWDIIWSBDE/RI+RpVemc=",
"owner": "BirdeeHub", "owner": "BirdeeHub",
"repo": "nix-wrapper-modules", "repo": "nix-wrapper-modules",
"rev": "6316917effdaae39e3b483f798d20f1ddba52e5a", "rev": "b1308b562306f59c7732357655d19cedb292d5e1",
"type": "github" "type": "github"
}, },
"original": { "original": {

102
flake.nix
View file

@ -36,30 +36,24 @@
wrappers, wrappers,
... ...
} @ inputs: let } @ inputs: let
wrapperSettings = pkgs: let mkWrapperConfig = pkgs: {
def = pkgs.lib.mkDefault;
in
wrapper.config.wrap {
inherit pkgs;
cats = { cats = {
clickhouse = def false; clickhouse = false;
gitPlugins = def true; gitPlugins = true;
julia = def false; julia = false;
lua = def true; lua = true;
markdown = def false; markdown = false;
nix = def true; nix = true;
optional = def false; optional = false;
python = def false; python = false;
r = def false; r = false;
}; };
settings = { settings = {
lang_packages = { lang_packages = {
python = with pkgs.python3Packages; [ python = with pkgs.python3Packages; [
duckdb duckdb
polars polars
]; ];
r = with pkgs.rpkgs.rPackages; [ r = with pkgs.rpkgs.rPackages; [
arrow arrow
broom broom
@ -67,14 +61,33 @@
janitor janitor
styler styler
]; ];
julia = ["DataFramesMeta" "QuackIO"]; julia = ["DataFramesMeta" "QuackIO"];
}; };
colorscheme = def "cyberdream"; colorscheme = "cyberdream";
background = def "dark"; background = "dark";
wrapRc = def true; wrapRc = true;
}; };
binName = def "vv"; binName = "vv";
};
wrapperSettings = pkgs: let
cfg = mkWrapperConfig pkgs;
def = pkgs.lib.mkDefault;
in
wrapper.config.wrap {
inherit pkgs;
cats = pkgs.lib.mapAttrs (_: v: def v) cfg.cats;
settings = {
lang_packages = {
python = def cfg.settings.lang_packages.python;
r = def cfg.settings.lang_packages.r;
julia = def cfg.settings.lang_packages.julia;
};
colorscheme = def cfg.settings.colorscheme;
background = def cfg.settings.background;
wrapRc = def cfg.settings.wrapRc;
};
binName = def cfg.binName;
}; };
systems = [ systems = [
@ -146,12 +159,55 @@
devShells = forAllSystems ( devShells = forAllSystems (
system: let system: let
pkgs = mkPkgs system; pkgs = mkPkgs system;
cfg = mkWrapperConfig pkgs;
nvimPkg = wrapperSettings pkgs; nvimPkg = wrapperSettings pkgs;
pythonPackages = let
python_packages_fn =
if pkgs ? basePythonPackages
then ps: pkgs.basePythonPackages ps ++ cfg.settings.lang_packages.python
else _: cfg.settings.lang_packages.python;
in
with pkgs; [
(python3.withPackages python_packages_fn)
nodejs
ruff
basedpyright
uv
];
rPackages = let
r_packages = (pkgs.baseRPackages or []) ++ cfg.settings.lang_packages.r;
in
with pkgs; [
(rWrapper.override {packages = r_packages;})
radianWrapper
(quarto.override {extraRPackages = r_packages;})
air-formatter
yaml-language-server
updateR
];
juliaPackages = let
julia_with_packages = pkgs.julia-bin.withPackages cfg.settings.lang_packages.julia;
in [julia_with_packages];
markdownPackages = with pkgs; [
python313Packages.pylatexenc
quarto
zk
];
shellPackages = [nvimPkg]
++ pkgs.lib.optionals cfg.cats.python pythonPackages
++ pkgs.lib.optionals cfg.cats.r rPackages
++ pkgs.lib.optionals cfg.cats.julia juliaPackages
++ pkgs.lib.optionals cfg.cats.markdown markdownPackages;
in { in {
default = pkgs.mkShell { default = pkgs.mkShell {
name = "vShell"; name = "vShell";
packages = [nvimPkg]; packages = shellPackages;
nativeBuildInputs = with pkgs; [] ++ (pkgs.lib.optionals self.wrappers.default.cats.optional [devenv]); nativeBuildInputs = with pkgs; [] ++ (pkgs.lib.optionals cfg.cats.optional [devenv]);
inputsFrom = []; inputsFrom = [];
shellHook = ""; shellHook = "";
}; };