mirror of
https://github.com/dwinkler1/nvimConfig.git
synced 2026-07-07 16:08:22 -04:00
refactor package installation
This commit is contained in:
parent
10254b11c7
commit
a0ba90c4d2
8 changed files with 433 additions and 193 deletions
247
README.md
Normal file
247
README.md
Normal file
|
|
@ -0,0 +1,247 @@
|
||||||
|
# nvimConfig
|
||||||
|
|
||||||
|
Modular Neovim wrapper config. Defines a wrapped `vv` binary with per-category packages, plugins, and environment variables. Available as NixOS module, Home Manager module, or single-starflake import.
|
||||||
|
|
||||||
|
## Quick start (imported into another flake)
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
rixpkgs.url = "github:dwinkler1/rixpkgs/af2dd3f7b4b172077747c0869d4e30702fb71b0e";
|
||||||
|
fran = {
|
||||||
|
url = "github:dwinkler1/fran";
|
||||||
|
inputs.nixpkgs.follows = "rixpkgs";
|
||||||
|
};
|
||||||
|
nvimConfig = {
|
||||||
|
url = "github:dwinkler1/nvimConfig";
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.follows = "nixpkgs";
|
||||||
|
rixpkgs.follows = "rixpkgs";
|
||||||
|
fran.follows = "fran";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs, nvimConfig, ... } @ inputs: let
|
||||||
|
systems = ["aarch64-darwin" "x86_64-linux" "aarch64-linux"];
|
||||||
|
forAllSystems = nixpkgs.lib.genAttrs systems;
|
||||||
|
in {
|
||||||
|
packages = forAllSystems (system: let
|
||||||
|
pkgs = import nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
config.allowUnfree = true;
|
||||||
|
overlays = [ nvimConfig.overlays.dependencies ];
|
||||||
|
};
|
||||||
|
evalResult = nvimConfig.inputs.wrappers.lib.evalModules {
|
||||||
|
modules = [
|
||||||
|
nvimConfig.wrapperModules.default
|
||||||
|
projectSettings # see below
|
||||||
|
];
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
default = evalResult.config.wrap { inherit pkgs; };
|
||||||
|
});
|
||||||
|
|
||||||
|
devShells = forAllSystems (system: let
|
||||||
|
pkgs = import nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
config.allowUnfree = true;
|
||||||
|
overlays = [ nvimConfig.overlays.dependencies ];
|
||||||
|
};
|
||||||
|
evalResult = nvimConfig.inputs.wrappers.lib.evalModules {
|
||||||
|
modules = [
|
||||||
|
nvimConfig.wrapperModules.default
|
||||||
|
projectSettings
|
||||||
|
];
|
||||||
|
};
|
||||||
|
nv = evalResult.config.wrap { inherit pkgs; };
|
||||||
|
in {
|
||||||
|
default = pkgs.mkShell {
|
||||||
|
packages =
|
||||||
|
[ nv ]
|
||||||
|
++ (evalResult.config.catPkgs.markdown or [])
|
||||||
|
++ (evalResult.config.catPkgs.nix or []);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Home Manager module
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{ inputs, ... }: {
|
||||||
|
home.packages = [
|
||||||
|
(inputs.nvimConfig.homeModules.default { inherit pkgs; })
|
||||||
|
# Or via the overlay:
|
||||||
|
# pkgs.vv
|
||||||
|
];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## NixOS module
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{ inputs, ... }: {
|
||||||
|
environment.systemPackages = [
|
||||||
|
(inputs.nvimConfig.nixosModules.default { inherit pkgs; })
|
||||||
|
];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Overriding settings
|
||||||
|
|
||||||
|
Define a `projectSettings` attrset and pass it as the second module in `evalModules`. Every option in `nvimConfig.wrapperConfigs.default` can be overridden here.
|
||||||
|
|
||||||
|
### Categories
|
||||||
|
|
||||||
|
Enable only the cats you need. Defaults are listed in `modules/module/settings/cats.nix`.
|
||||||
|
|
||||||
|
```nix
|
||||||
|
projectSettings = {
|
||||||
|
cats = {
|
||||||
|
python = true; # enable Python tooling
|
||||||
|
r = false; # disable R
|
||||||
|
nix = true;
|
||||||
|
lua = false;
|
||||||
|
markdown = false;
|
||||||
|
optional = false;
|
||||||
|
gitPlugins = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### Language packages (overlay extension)
|
||||||
|
|
||||||
|
Add Python/R/Julia libraries that get appended to the overlay base packages.
|
||||||
|
|
||||||
|
```nix
|
||||||
|
projectSettings = {
|
||||||
|
settings.lang_packages = {
|
||||||
|
python = with pkgs.python3Packages; [ pandas numpy ];
|
||||||
|
r = with pkgs.rpkgs.rPackages; [ fixest data_table ];
|
||||||
|
julia = [ "StatsBase" "Plots" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
Use `lib.mkForce` to replace rather than append:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
projectSettings = {
|
||||||
|
settings.lang_packages = {
|
||||||
|
python = pkgs.lib.mkForce (with pkgs.python3Packages; [ polars duckdb ]);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### Runtime dependencies (per-cat packages)
|
||||||
|
|
||||||
|
Override `catPkgs` to add tools that appear in both the wrapper PATH and the devShell. To add always-available packages not gated by any cat, use `runtimePkgs` directly (see next section).
|
||||||
|
|
||||||
|
```nix
|
||||||
|
projectSettings = {
|
||||||
|
catPkgs = {
|
||||||
|
nix = [ pkgs.nil pkgs.nixfmt ];
|
||||||
|
python = [
|
||||||
|
(pkgs.python3.withPackages (ps: [ ps.pandas ps.duckdb ]))
|
||||||
|
pkgs.ruff
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### Direct runtimePkgs override (always-on)
|
||||||
|
|
||||||
|
Add packages to `catPkgs.always` for tools that should always be available regardless of other cat toggles.
|
||||||
|
|
||||||
|
```nix
|
||||||
|
projectSettings = {
|
||||||
|
catPkgs = {
|
||||||
|
always = [ pkgs.git pkgs.curl pkgs.pre-commit ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### Runtime env vars
|
||||||
|
|
||||||
|
```nix
|
||||||
|
projectSettings = {
|
||||||
|
env = {
|
||||||
|
MY_PROJECT_VAR = "some-value";
|
||||||
|
};
|
||||||
|
envDefault = {
|
||||||
|
EDITOR = "vv";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
`env` values are forced; `envDefault` values can be overridden by the user's shell.
|
||||||
|
|
||||||
|
### Neovim settings
|
||||||
|
|
||||||
|
```nix
|
||||||
|
projectSettings = {
|
||||||
|
settings = {
|
||||||
|
colorscheme = "kanagawa";
|
||||||
|
background = "dark";
|
||||||
|
wrapRc = true;
|
||||||
|
config_directory = ./nvim; # path to init.lua + lua/ dir
|
||||||
|
aliases = [ "v" "nvim" ]; # extra binary names (default: [ "vvim" ])
|
||||||
|
};
|
||||||
|
binName = "nv"; # binary name (default: vv)
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## Adding plugins
|
||||||
|
|
||||||
|
```nix
|
||||||
|
projectSettings = {
|
||||||
|
specs = {
|
||||||
|
extraPlugins = {
|
||||||
|
data = with pkgs.vimPlugins; [
|
||||||
|
telescope-nvim
|
||||||
|
which-key-nvim
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
extraLazy = {
|
||||||
|
lazy = true;
|
||||||
|
data = with pkgs.vimPlugins; [ dashboard-nvim ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Inject Lua config at startup
|
||||||
|
extraLua = {
|
||||||
|
data = pkgs.writeText "extra.lua" ''
|
||||||
|
vim.opt.number = true
|
||||||
|
vim.opt.relativenumber = true
|
||||||
|
'';
|
||||||
|
before = ["INIT_MAIN"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
langPackages (flake.nix) ──► settings.lang_packages (module option)
|
||||||
|
│
|
||||||
|
cats.nix ──► config.cats │
|
||||||
|
│ │
|
||||||
|
▼ ▼
|
||||||
|
cat-packages.nix ──► config.catPkgs.<cat>
|
||||||
|
│ │
|
||||||
|
┌───────┘ │
|
||||||
|
▼ ▼
|
||||||
|
deps.nix (runtimePkgs) flake.nix (devShells)
|
||||||
|
│ │
|
||||||
|
▼ ▼
|
||||||
|
wrapped vv PATH nix develop PATH
|
||||||
|
```
|
||||||
|
|
||||||
|
- **Overlays** (`overlays/`) inject base packages into nixpkgs (rWrapper, quarto, baseRPackages, basePythonPackages).
|
||||||
|
- **cat-packages.nix** is the single source of truth for per-category packages. Each list is gated by its cat toggle.
|
||||||
|
- **deps.nix** wires `catPkgs` into the wrapper's runtime PATH.
|
||||||
|
- **flake.nix** reads `catPkgs` for the devShell. `langPackages` feeds into `settings.lang_packages`.
|
||||||
28
flake.lock
generated
28
flake.lock
generated
|
|
@ -74,20 +74,19 @@
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"rixpkgs"
|
"rixpkgs"
|
||||||
],
|
],
|
||||||
"rnvimsrc": [
|
"rnvimsrc": "rnvimsrc"
|
||||||
"plugins-r"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1778684156,
|
"lastModified": 1779438909,
|
||||||
"narHash": "sha256-Z4y1tQfkIsPK4NRxGn668HMDfWxnxNxSJ0CAOOXiIfY=",
|
"narHash": "sha256-1lvv0bdvSVyeCIgeZ7Ws7ffbDFurA5LJscS9dRLHzC8=",
|
||||||
"owner": "dwinkler1",
|
"owner": "dwinkler1",
|
||||||
"repo": "r_nvim_nix",
|
"repo": "r_nvim_nix",
|
||||||
"rev": "2f49dfee27886068e2f49cbd54558ce4cc424c82",
|
"rev": "ec17e22ab362a0ddfd6c2e9c5e95d43897a143be",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "dwinkler1",
|
"owner": "dwinkler1",
|
||||||
|
"ref": "v0.99.4",
|
||||||
"repo": "r_nvim_nix",
|
"repo": "r_nvim_nix",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
|
@ -108,6 +107,23 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"rnvimsrc": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1776905071,
|
||||||
|
"narHash": "sha256-dXox6qEs1VDE7vPNDoN8bY4g06uj1IEs6uki72w8lpA=",
|
||||||
|
"owner": "R-nvim",
|
||||||
|
"repo": "R.nvim",
|
||||||
|
"rev": "582f2af11290ac067e49018db38e12a511325556",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "R-nvim",
|
||||||
|
"ref": "v0.99.4",
|
||||||
|
"repo": "R.nvim",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"fran": "fran",
|
"fran": "fran",
|
||||||
|
|
|
||||||
97
flake.nix
97
flake.nix
|
|
@ -11,9 +11,12 @@
|
||||||
};
|
};
|
||||||
rixpkgs.url = "github:dwinkler1/rixpkgs/af2dd3f7b4b172077747c0869d4e30702fb71b0e";
|
rixpkgs.url = "github:dwinkler1/rixpkgs/af2dd3f7b4b172077747c0869d4e30702fb71b0e";
|
||||||
|
|
||||||
r-nvim-nix.url = "github:dwinkler1/r_nvim_nix";
|
r-nvim-nix = {
|
||||||
r-nvim-nix.inputs.rnvimsrc.follows = "plugins-r";
|
url = "github:dwinkler1/r_nvim_nix/v0.99.4";
|
||||||
r-nvim-nix.inputs.nixpkgs.follows = "rixpkgs";
|
inputs = {
|
||||||
|
nixpkgs.follows = "rixpkgs";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
fran = {
|
fran = {
|
||||||
url = "github:dwinkler1/fran";
|
url = "github:dwinkler1/fran";
|
||||||
|
|
@ -44,14 +47,15 @@
|
||||||
duckdb
|
duckdb
|
||||||
polars
|
polars
|
||||||
];
|
];
|
||||||
r = (with pkgs.rpkgs.rPackages; [
|
r =
|
||||||
|
(with pkgs.rpkgs.rPackages; [
|
||||||
arrow
|
arrow
|
||||||
broom
|
broom
|
||||||
data_table
|
data_table
|
||||||
janitor
|
janitor
|
||||||
styler
|
styler
|
||||||
pkgs.nvimcom
|
])
|
||||||
]) ++ [ pkgs.nvimcom ];
|
++ [pkgs.nvimcom];
|
||||||
julia = [
|
julia = [
|
||||||
"DataFramesMeta"
|
"DataFramesMeta"
|
||||||
"QuackIO"
|
"QuackIO"
|
||||||
|
|
@ -59,17 +63,6 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
mkWrapperConfig = pkgs: {
|
mkWrapperConfig = pkgs: {
|
||||||
cats = {
|
|
||||||
clickhouse = false;
|
|
||||||
gitPlugins = true;
|
|
||||||
julia = false;
|
|
||||||
lua = true;
|
|
||||||
markdown = true;
|
|
||||||
nix = true;
|
|
||||||
optional = false;
|
|
||||||
python = false;
|
|
||||||
r = true;
|
|
||||||
};
|
|
||||||
settings = {
|
settings = {
|
||||||
lang_packages = langPackages pkgs;
|
lang_packages = langPackages pkgs;
|
||||||
};
|
};
|
||||||
|
|
@ -98,7 +91,11 @@
|
||||||
import nixpkgs {
|
import nixpkgs {
|
||||||
inherit system;
|
inherit system;
|
||||||
config = {allowUnfree = true;};
|
config = {allowUnfree = true;};
|
||||||
overlays = [ overlayDefs.dependencyOverlay ];
|
overlays = [
|
||||||
|
overlayDefs.dependencyOverlay
|
||||||
|
inputs.r-nvim-nix.overlays.default
|
||||||
|
inputs.fran.overlays.default
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
module = (import ./modules/neovim.nix) inputs;
|
module = (import ./modules/neovim.nix) inputs;
|
||||||
|
|
@ -140,56 +137,21 @@
|
||||||
pkgs = mkPkgs system;
|
pkgs = mkPkgs system;
|
||||||
nvimPkg = wrapperSettings pkgs;
|
nvimPkg = wrapperSettings pkgs;
|
||||||
|
|
||||||
langPkgs = langPackages pkgs;
|
shellPackages = [nvimPkg]
|
||||||
|
++ wrapper.config.catPkgs.always or []
|
||||||
pythonPackages = let
|
++ wrapper.config.catPkgs.python or []
|
||||||
python_packages_fn =
|
++ wrapper.config.catPkgs.r or []
|
||||||
if pkgs ? basePythonPackages
|
++ wrapper.config.catPkgs.julia or []
|
||||||
then ps: pkgs.basePythonPackages ps ++ langPkgs.python
|
++ wrapper.config.catPkgs.markdown or []
|
||||||
else _: langPkgs.python;
|
++ wrapper.config.catPkgs.optional or []
|
||||||
in
|
++ wrapper.config.catPkgs.external or []
|
||||||
with pkgs; [
|
++ wrapper.config.catPkgs.nix or []
|
||||||
(python3.withPackages python_packages_fn)
|
++ wrapper.config.catPkgs.lua or []
|
||||||
nodejs
|
++ wrapper.config.catPkgs.clickhouse or [];
|
||||||
ruff
|
|
||||||
basedpyright
|
|
||||||
uv
|
|
||||||
];
|
|
||||||
|
|
||||||
rPackages = let
|
|
||||||
r_packages = (pkgs.baseRPackages or []) ++ langPkgs.r;
|
|
||||||
in
|
|
||||||
with pkgs; [
|
|
||||||
(rWrapper.override {packages = r_packages;})
|
|
||||||
radianWrapper
|
|
||||||
(quarto.override {extraRPackages = r_packages;})
|
|
||||||
air-formatter
|
|
||||||
yaml-language-server
|
|
||||||
nvimcom
|
|
||||||
rnvimserver
|
|
||||||
];
|
|
||||||
|
|
||||||
juliaPackages = let
|
|
||||||
julia_with_packages = pkgs.julia-bin.withPackages langPkgs.julia;
|
|
||||||
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 = shellPackages;
|
||||||
nativeBuildInputs = pkgs.lib.optionals wrapper.config.cats.optional [ pkgs.devenv ];
|
|
||||||
shellHook = ''
|
shellHook = ''
|
||||||
echo 'I am a NixShell'
|
echo 'I am a NixShell'
|
||||||
export R_HOME=$(R RHOME)
|
export R_HOME=$(R RHOME)
|
||||||
|
|
@ -223,9 +185,10 @@
|
||||||
cat version_output.txt >> $out
|
cat version_output.txt >> $out
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
module-eval =
|
module-eval = let
|
||||||
let _ = wrapper.config;
|
_ = wrapper.config;
|
||||||
in pkgs.runCommand "check-module-eval" {} ''
|
in
|
||||||
|
pkgs.runCommand "check-module-eval" {} ''
|
||||||
echo "Module evaluation successful" > $out
|
echo "Module evaluation successful" > $out
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
|
||||||
109
modules/module/settings/cat-packages.nix
Normal file
109
modules/module/settings/cat-packages.nix
Normal file
|
|
@ -0,0 +1,109 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
maybe = cat: pkgsList:
|
||||||
|
lib.optionals (config.cats.${cat} or false) pkgsList;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.catPkgs = lib.mkOption {
|
||||||
|
type = lib.types.attrsOf (lib.types.listOf lib.types.package);
|
||||||
|
description = "Per-cat package lists, gated by cat toggles. Single source of truth for runtimeDeps and devShells.";
|
||||||
|
};
|
||||||
|
|
||||||
|
config.catPkgs = {
|
||||||
|
always = maybe "always" (with pkgs; [ ]);
|
||||||
|
|
||||||
|
clickhouse = maybe "clickhouse" (with pkgs; [ clickhouse-lts ]);
|
||||||
|
|
||||||
|
external = maybe "external" (with pkgs; [
|
||||||
|
perl
|
||||||
|
ruby
|
||||||
|
shfmt
|
||||||
|
sqlfluff
|
||||||
|
tree-sitter
|
||||||
|
]);
|
||||||
|
|
||||||
|
julia = maybe "julia" [
|
||||||
|
(pkgs.julia-bin.withPackages config.settings.lang_packages.julia)
|
||||||
|
];
|
||||||
|
|
||||||
|
lua = maybe "lua" (with pkgs; [ lua-language-server ]);
|
||||||
|
|
||||||
|
markdown = maybe "markdown" (with pkgs; [
|
||||||
|
python313Packages.pylatexenc
|
||||||
|
quarto
|
||||||
|
zk
|
||||||
|
]);
|
||||||
|
|
||||||
|
nix = maybe "nix" (with pkgs; [
|
||||||
|
alejandra
|
||||||
|
nix-doc
|
||||||
|
nixd
|
||||||
|
]);
|
||||||
|
|
||||||
|
optional = maybe "optional" (with pkgs; [
|
||||||
|
bat
|
||||||
|
broot
|
||||||
|
devenv
|
||||||
|
dust
|
||||||
|
fd
|
||||||
|
fzf
|
||||||
|
gawk
|
||||||
|
gh
|
||||||
|
git
|
||||||
|
hunspell
|
||||||
|
hunspellDicts.de-at
|
||||||
|
hunspellDicts.en-us
|
||||||
|
ispell
|
||||||
|
jq
|
||||||
|
just
|
||||||
|
lazygit
|
||||||
|
man
|
||||||
|
ncdu
|
||||||
|
pigz
|
||||||
|
poppler
|
||||||
|
ripgrep
|
||||||
|
tokei
|
||||||
|
wget
|
||||||
|
yq
|
||||||
|
zathura
|
||||||
|
]);
|
||||||
|
|
||||||
|
python = maybe "python" (let
|
||||||
|
python_packages_fn =
|
||||||
|
if pkgs ? basePythonPackages
|
||||||
|
then ps: pkgs.basePythonPackages ps ++ config.settings.lang_packages.python
|
||||||
|
else _: config.settings.lang_packages.python;
|
||||||
|
python_with_packages = pkgs.python3.withPackages python_packages_fn;
|
||||||
|
in
|
||||||
|
with pkgs; [
|
||||||
|
python_with_packages
|
||||||
|
nodejs
|
||||||
|
ruff
|
||||||
|
basedpyright
|
||||||
|
uv
|
||||||
|
]);
|
||||||
|
|
||||||
|
r = maybe "r" (let
|
||||||
|
r_packages = (pkgs.baseRPackages or [ ]) ++ config.settings.lang_packages.r;
|
||||||
|
in
|
||||||
|
with pkgs; [
|
||||||
|
(rWrapper.override { packages = r_packages; })
|
||||||
|
radianWrapper
|
||||||
|
(quarto.override { extraRPackages = r_packages; })
|
||||||
|
air-formatter
|
||||||
|
yaml-language-server
|
||||||
|
rnvimserver
|
||||||
|
]);
|
||||||
|
|
||||||
|
# cats without packages get empty lists
|
||||||
|
general = [ ];
|
||||||
|
gitPlugins = [ ];
|
||||||
|
treesitterParsers = [ pkgs.tree-sitter ];
|
||||||
|
utils = [ ];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -13,6 +13,7 @@
|
||||||
Set a category to `false` to skip its dependency/plugin specs.
|
Set a category to `false` to skip its dependency/plugin specs.
|
||||||
|
|
||||||
Available categories:
|
Available categories:
|
||||||
|
- always: always-on packages (not gated by a toggle)
|
||||||
- clickhouse: Clickhouse client and tools
|
- clickhouse: Clickhouse client and tools
|
||||||
- external: external tools and integrations
|
- external: external tools and integrations
|
||||||
- general: core Neovim plugins/features
|
- general: core Neovim plugins/features
|
||||||
|
|
@ -30,6 +31,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
config.cats = {
|
config.cats = {
|
||||||
|
always = lib.mkDefault true;
|
||||||
clickhouse = lib.mkDefault false;
|
clickhouse = lib.mkDefault false;
|
||||||
external = lib.mkDefault true;
|
external = lib.mkDefault true;
|
||||||
general = lib.mkDefault true;
|
general = lib.mkDefault true;
|
||||||
|
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
collect_runtime_packages = runtime_deps_type:
|
|
||||||
config.specCollect
|
|
||||||
(acc: spec:
|
|
||||||
let
|
|
||||||
is_enabled = if spec ? enable then spec.enable else true;
|
|
||||||
has_runtime_deps = (spec.runtimeDeps or false) == runtime_deps_type;
|
|
||||||
packages = spec.runtimePackages or [ ];
|
|
||||||
in
|
|
||||||
acc ++ lib.optionals (is_enabled && has_runtime_deps) packages
|
|
||||||
)
|
|
||||||
[ ];
|
|
||||||
|
|
||||||
prefix_packages = collect_runtime_packages "prefix";
|
|
||||||
|
|
||||||
to_path_specs = packages: [
|
|
||||||
{
|
|
||||||
data = [
|
|
||||||
"PATH"
|
|
||||||
":"
|
|
||||||
"${lib.makeBinPath packages}"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
in
|
|
||||||
{
|
|
||||||
config.prefixVar = lib.optionals (prefix_packages != [ ]) (to_path_specs prefix_packages);
|
|
||||||
}
|
|
||||||
|
|
@ -13,133 +13,69 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.external = {
|
config.specs.always = lib.mkIf (config.cats.always or true) {
|
||||||
|
data = lib.mkDefault null;
|
||||||
|
runtimeDeps = "prefix";
|
||||||
|
runtimePkgs = config.catPkgs.always;
|
||||||
|
};
|
||||||
|
|
||||||
|
config.specs.external = lib.mkIf (config.cats.external or true) {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
before = ["INIT_MAIN"];
|
before = ["INIT_MAIN"];
|
||||||
config = ''
|
config = ''
|
||||||
vim.o.shell = "${pkgs.zsh}/bin/zsh"
|
vim.o.shell = "${pkgs.zsh}/bin/zsh"
|
||||||
'';
|
'';
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
runtimePkgs = with pkgs; [
|
runtimePkgs = config.catPkgs.external;
|
||||||
perl
|
|
||||||
ruby
|
|
||||||
shfmt
|
|
||||||
sqlfluff
|
|
||||||
tree-sitter
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
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; [
|
runtimePkgs = config.catPkgs.optional;
|
||||||
bat
|
|
||||||
broot
|
|
||||||
devenv
|
|
||||||
dust
|
|
||||||
fd
|
|
||||||
fzf
|
|
||||||
gawk
|
|
||||||
gh
|
|
||||||
git
|
|
||||||
hunspell
|
|
||||||
hunspellDicts.de-at
|
|
||||||
hunspellDicts.en-us
|
|
||||||
ispell
|
|
||||||
jq
|
|
||||||
just
|
|
||||||
lazygit
|
|
||||||
man
|
|
||||||
ncdu
|
|
||||||
pigz
|
|
||||||
poppler
|
|
||||||
ripgrep
|
|
||||||
tokei
|
|
||||||
wget
|
|
||||||
yq
|
|
||||||
zathura
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
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; [
|
runtimePkgs = config.catPkgs.markdown;
|
||||||
python313Packages.pylatexenc
|
|
||||||
quarto
|
|
||||||
zk
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
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; [
|
runtimePkgs = config.catPkgs.nix;
|
||||||
alejandra
|
|
||||||
nix-doc
|
|
||||||
nixd
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
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; [
|
runtimePkgs = config.catPkgs.lua;
|
||||||
lua-language-server
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
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
|
runtimePkgs = config.catPkgs.python;
|
||||||
python_packages_fn =
|
|
||||||
if pkgs ? basePythonPackages
|
|
||||||
then ps: pkgs.basePythonPackages ps ++ config.settings.lang_packages.python
|
|
||||||
else _: config.settings.lang_packages.python;
|
|
||||||
python_with_packages = pkgs.python3.withPackages python_packages_fn;
|
|
||||||
in
|
|
||||||
with pkgs; [
|
|
||||||
python_with_packages
|
|
||||||
nodejs
|
|
||||||
ruff
|
|
||||||
basedpyright
|
|
||||||
uv
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
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
|
runtimePkgs = config.catPkgs.r;
|
||||||
r_packages = (pkgs.baseRPackages or []) ++ config.settings.lang_packages.r;
|
|
||||||
in
|
|
||||||
with pkgs; [
|
|
||||||
(rWrapper.override {packages = r_packages;})
|
|
||||||
radianWrapper
|
|
||||||
(quarto.override {extraRPackages = r_packages;})
|
|
||||||
air-formatter
|
|
||||||
yaml-language-server
|
|
||||||
updateR
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
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
|
runtimePkgs = config.catPkgs.julia;
|
||||||
julia_with_packages =
|
|
||||||
pkgs.julia-bin.withPackages config.settings.lang_packages.julia;
|
|
||||||
in [julia_with_packages];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
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; [
|
runtimePkgs = config.catPkgs.clickhouse;
|
||||||
clickhouse-lts
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config.runtimePkgs = config.specCollect (acc: v: acc ++ (v.runtimePkgs or [])) [];
|
config.runtimePkgs = config.specCollect (acc: v: acc ++ (v.runtimePkgs or [])) [];
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ inputs:
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
wlib.wrapperModules.neovim
|
wlib.wrapperModules.neovim
|
||||||
|
./module/settings/cat-packages.nix
|
||||||
./module/specs/deps.nix
|
./module/specs/deps.nix
|
||||||
./module/specs/plugins.nix
|
./module/specs/plugins.nix
|
||||||
./module/settings/core.nix
|
./module/settings/core.nix
|
||||||
|
|
@ -16,7 +17,6 @@ inputs:
|
||||||
./module/settings/env.nix
|
./module/settings/env.nix
|
||||||
./module/settings/hosts.nix
|
./module/settings/hosts.nix
|
||||||
./module/settings/lang-packages.nix
|
./module/settings/lang-packages.nix
|
||||||
./module/settings/runtime-path.nix
|
|
||||||
];
|
];
|
||||||
|
|
||||||
options.nvim-lib.neovimPlugins = lib.mkOption {
|
options.nvim-lib.neovimPlugins = lib.mkOption {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue