vim_configurable: enable overrides

Sometimes it's needed to override parts of `vim_configurable`, for
instance when using ENSIME (http://ensime.github.io/), in this case you
need a Python interpreter and the modules `sexpdata` and
`websocket_client`.

However overriding `vim_configurable` is quite hard as we run
`vimUtils.makeCustomizable` over the default comming from
`configurable.nix`. Therefore it's necessary to copy the code from
`all-packages.nix` and alter the parts you need: https://nixos.org/nix-dev/2017-April/023364.html

In order to simplify overriding `vim_configurable` I added an
`override` and an `overrideAttrs` function to `vimutils.makeCustomizable`
to ensure that the customization capabilities won't be lost after
altering the derivation.

Now it's possible to write expressions like this without evaluation
failures:

```
with pkgs;

let
  vimPy3 = vim_configurable.override {
    python = python3;
  };
in vimPy3.customize { ... }
```
This commit is contained in:
Maximilian Bosch 2018-02-07 15:27:05 +01:00
parent 5e8ae8d597
commit 8e70725077
No known key found for this signature in database
GPG Key ID: 091DBF4D1FC46B8E

View File

@ -325,11 +325,14 @@ rec {
# add a customize option to a vim derivation
makeCustomizable = vim: vim // {
customize = {name, vimrcConfig}: vimWithRC {
customize = { name, vimrcConfig }: vimWithRC {
vimExecutable = "${vim}/bin/vim";
inherit name;
vimrcFile = vimrcFile vimrcConfig;
};
override = f: makeCustomizable (vim.override f);
overrideAttrs = f: makeCustomizable (vim.overrideAttrs f);
};
pluginnames2Nix = {name, namefiles} : vim_configurable.customize {