mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-01-02 11:03:57 +00:00
dcab427908
This allows vim plugins to specify python dependencies required at runtime, and they will be added to the python environment.
188 lines
6.2 KiB
Nix
188 lines
6.2 KiB
Nix
{ stdenv, fetchFromGitHub, cmake, gettext, libmsgpack, libtermkey
|
|
, libtool, libuv, luajit, luaPackages, ncurses, perl, pkgconfig
|
|
, unibilium, makeWrapper, vimUtils, xsel, gperf
|
|
|
|
, withPython ? true, pythonPackages, extraPythonPackages ? []
|
|
, withPython3 ? true, python3Packages, extraPython3Packages ? []
|
|
, withJemalloc ? true, jemalloc
|
|
, withRuby ? true, bundlerEnv
|
|
|
|
, withPyGUI ? false
|
|
, vimAlias ? false
|
|
, configure ? null
|
|
}:
|
|
|
|
with stdenv.lib;
|
|
|
|
let
|
|
|
|
# Note: this is NOT the libvterm already in nixpkgs, but some NIH silliness:
|
|
neovimLibvterm = stdenv.mkDerivation rec {
|
|
name = "neovim-libvterm-${version}";
|
|
version = "2016-10-07";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "neovim";
|
|
repo = "libvterm";
|
|
rev = "11682793d84668057c5aedc3d7f8071bb54eaf2c";
|
|
sha256 = "0pd90yx6xsagrqjipi26sxri1l4wdnx23ziad1zbxnqx9njxa7g3";
|
|
};
|
|
|
|
buildInputs = [ perl ];
|
|
nativeBuildInputs = [ libtool ];
|
|
|
|
makeFlags = [ "PREFIX=$(out)" ]
|
|
++ stdenv.lib.optional stdenv.isDarwin "LIBTOOL=${libtool}/bin/libtool";
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
meta = {
|
|
description = "VT220/xterm/ECMA-48 terminal emulator library";
|
|
homepage = http://www.leonerd.org.uk/code/libvterm/;
|
|
license = licenses.mit;
|
|
maintainers = with maintainers; [ nckx garbas ];
|
|
platforms = platforms.unix;
|
|
};
|
|
};
|
|
|
|
rubyEnv = bundlerEnv {
|
|
name = "neovim-ruby-env";
|
|
gemdir = ./ruby_provider;
|
|
};
|
|
|
|
rubyWrapper = ''--suffix PATH : \"${rubyEnv}/bin\" '' +
|
|
''--suffix GEM_HOME : \"${rubyEnv}/${rubyEnv.ruby.gemPath}\" '';
|
|
|
|
pluginPythonPackages = builtins.concatLists
|
|
(map ({ pythonDependencies ? [], ...}: pythonDependencies)
|
|
(vimUtils.requiredPlugins configure));
|
|
pythonEnv = pythonPackages.python.buildEnv.override {
|
|
extraLibs = (
|
|
if withPyGUI
|
|
then [ pythonPackages.neovim_gui ]
|
|
else [ pythonPackages.neovim ]
|
|
) ++ extraPythonPackages ++ pluginPythonPackages;
|
|
ignoreCollisions = true;
|
|
};
|
|
pythonWrapper = ''--cmd \"let g:python_host_prog='$out/bin/nvim-python'\" '';
|
|
|
|
pluginPython3Packages = builtins.concatLists
|
|
(map ({ python3Dependencies ? [], ...}: python3Dependencies)
|
|
(vimUtils.requiredPlugins configure));
|
|
python3Env = python3Packages.python.buildEnv.override {
|
|
extraLibs = [ python3Packages.neovim ] ++ extraPython3Packages ++ pluginPython3Packages;
|
|
ignoreCollisions = true;
|
|
};
|
|
python3Wrapper = ''--cmd \"let g:python3_host_prog='$out/bin/nvim-python3'\" '';
|
|
pythonFlags = optionalString (withPython || withPython3) ''--add-flags "${
|
|
(optionalString withPython pythonWrapper) +
|
|
(optionalString withPython3 python3Wrapper)
|
|
}"'';
|
|
|
|
neovim = stdenv.mkDerivation rec {
|
|
name = "neovim-${version}";
|
|
version = "0.1.7";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "neovim";
|
|
repo = "neovim";
|
|
rev = "v${version}";
|
|
sha256 = "0bk0raxlb1xsqyw9pmqmxvcq5szqhimidrasnvzrci84gld8cwz4";
|
|
};
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
buildInputs = [
|
|
libtermkey
|
|
libuv
|
|
libmsgpack
|
|
ncurses
|
|
neovimLibvterm
|
|
unibilium
|
|
luajit
|
|
luaPackages.lua
|
|
gperf
|
|
] ++ optional withJemalloc jemalloc
|
|
++ lualibs;
|
|
|
|
nativeBuildInputs = [
|
|
cmake
|
|
gettext
|
|
makeWrapper
|
|
pkgconfig
|
|
];
|
|
|
|
LUA_PATH = stdenv.lib.concatStringsSep ";" (map luaPackages.getLuaPath lualibs);
|
|
LUA_CPATH = stdenv.lib.concatStringsSep ";" (map luaPackages.getLuaCPath lualibs);
|
|
|
|
lualibs = [ luaPackages.mpack luaPackages.lpeg luaPackages.luabitop ];
|
|
|
|
cmakeFlags = [
|
|
"-DLUA_PRG=${luaPackages.lua}/bin/lua"
|
|
];
|
|
|
|
# triggers on buffer overflow bug while running tests
|
|
hardeningDisable = [ "fortify" ];
|
|
|
|
preConfigure = stdenv.lib.optionalString stdenv.isDarwin ''
|
|
export DYLD_LIBRARY_PATH=${jemalloc}/lib
|
|
substituteInPlace src/nvim/CMakeLists.txt --replace " util" ""
|
|
'';
|
|
|
|
postInstall = stdenv.lib.optionalString stdenv.isDarwin ''
|
|
echo patching $out/bin/nvim
|
|
install_name_tool -change libjemalloc.1.dylib \
|
|
${jemalloc}/lib/libjemalloc.1.dylib \
|
|
$out/bin/nvim
|
|
sed -i -e "s|'xsel|'${xsel}/bin/xsel|" $out/share/nvim/runtime/autoload/provider/clipboard.vim
|
|
'' + optionalString withPython ''
|
|
ln -s ${pythonEnv}/bin/python $out/bin/nvim-python
|
|
'' + optionalString withPyGUI ''
|
|
makeWrapper "${pythonEnv}/bin/pynvim" "$out/bin/pynvim" \
|
|
--prefix PATH : "$out/bin"
|
|
'' + optionalString withPython3 ''
|
|
ln -s ${python3Env}/bin/python3 $out/bin/nvim-python3
|
|
'' + optionalString (withPython || withPython3 || withRuby) ''
|
|
wrapProgram $out/bin/nvim ${rubyWrapper + pythonFlags}
|
|
'';
|
|
|
|
meta = {
|
|
description = "Vim text editor fork focused on extensibility and agility";
|
|
longDescription = ''
|
|
Neovim is a project that seeks to aggressively refactor Vim in order to:
|
|
- Simplify maintenance and encourage contributions
|
|
- Split the work between multiple developers
|
|
- Enable the implementation of new/modern user interfaces without any
|
|
modifications to the core source
|
|
- Improve extensibility with a new plugin architecture
|
|
'';
|
|
homepage = https://www.neovim.io;
|
|
# "Contributions committed before b17d96 by authors who did not sign the
|
|
# Contributor License Agreement (CLA) remain under the Vim license.
|
|
# Contributions committed after b17d96 are licensed under Apache 2.0 unless
|
|
# those contributions were copied from Vim (identified in the commit logs
|
|
# by the vim-patch token). See LICENSE for details."
|
|
license = with licenses; [ asl20 vim ];
|
|
maintainers = with maintainers; [ manveru garbas ];
|
|
platforms = platforms.unix;
|
|
};
|
|
};
|
|
|
|
in if (vimAlias == false && configure == null) then neovim else stdenv.mkDerivation {
|
|
name = "neovim-${neovim.version}-configured";
|
|
inherit (neovim) version meta;
|
|
|
|
nativeBuildInputs = [ makeWrapper ];
|
|
|
|
buildCommand = ''
|
|
mkdir -p $out/bin
|
|
for item in ${neovim}/bin/*; do
|
|
ln -s $item $out/bin/
|
|
done
|
|
'' + optionalString vimAlias ''
|
|
ln -s $out/bin/nvim $out/bin/vim
|
|
'' + optionalString (configure != null) ''
|
|
wrapProgram $out/bin/nvim --add-flags "-u ${vimUtils.vimrcFile configure}"
|
|
'';
|
|
}
|