mirror of
https://github.com/dwinkler1/nvimConfig.git
synced 2026-05-22 20:13:32 -04:00
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
This commit is contained in:
parent
603a02b627
commit
e9c99811d4
1 changed files with 88 additions and 32 deletions
102
flake.nix
102
flake.nix
|
|
@ -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 = "";
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue