From 8e70725077f750d8cc46611d6427dd0aa85a7e6e Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Wed, 7 Feb 2018 15:27:05 +0100 Subject: [PATCH] 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 { ... } ``` --- pkgs/misc/vim-plugins/vim-utils.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkgs/misc/vim-plugins/vim-utils.nix b/pkgs/misc/vim-plugins/vim-utils.nix index 23749fd4ce60..e11419846aeb 100644 --- a/pkgs/misc/vim-plugins/vim-utils.nix +++ b/pkgs/misc/vim-plugins/vim-utils.nix @@ -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 {