From ee9bc405b9a231ca88ee13cc2da91f9080cb12ec Mon Sep 17 00:00:00 2001 From: Timo Kaufmann Date: Sat, 5 Jan 2019 13:51:05 +0100 Subject: [PATCH 1/2] neovim-qt: wrap in separate derivation This makes it possible to swap out the (wrapped) neovim without recompiling neovim-qt. In particular, the user can use `neovim.override` to configure their neovim and then use that same configuration for neovim-qt, without having to give up binary caching. --- pkgs/applications/editors/neovim/qt.nix | 116 +++++++++++++----------- 1 file changed, 64 insertions(+), 52 deletions(-) diff --git a/pkgs/applications/editors/neovim/qt.nix b/pkgs/applications/editors/neovim/qt.nix index 315a51256f28..d562557ae005 100644 --- a/pkgs/applications/editors/neovim/qt.nix +++ b/pkgs/applications/editors/neovim/qt.nix @@ -1,62 +1,74 @@ { stdenv, fetchFromGitHub, cmake, doxygen, makeWrapper , msgpack, neovim, pythonPackages, qtbase }: -stdenv.mkDerivation rec { - name = "neovim-qt-${version}"; - version = "0.2.11"; +let + unwrapped = stdenv.mkDerivation rec { + pname = "neovim-qt-unwrapped"; + version = "0.2.11"; - src = fetchFromGitHub { - owner = "equalsraf"; - repo = "neovim-qt"; - rev = "v${version}"; - sha256 = "0pc1adxc89p2rdvb6nxyqr9sjzqz9zw2dg7a4ardxsl3a8jga1wh"; + src = fetchFromGitHub { + owner = "equalsraf"; + repo = "neovim-qt"; + rev = "v${version}"; + sha256 = "0pc1adxc89p2rdvb6nxyqr9sjzqz9zw2dg7a4ardxsl3a8jga1wh"; + }; + + cmakeFlags = [ + "-DUSE_SYSTEM_MSGPACK=1" + ]; + + buildInputs = [ + neovim.unwrapped # only used to generate help tags at build time + qtbase + ] ++ (with pythonPackages; [ + jinja2 python msgpack + ]); + + nativeBuildInputs = [ cmake doxygen makeWrapper ]; + + enableParallelBuilding = true; + + preCheck = '' + # The GUI tests require a running X server, disable them + sed -i ../test/CMakeLists.txt \ + -e '/^add_xtest_gui/d' + ''; + + doCheck = true; + + meta = with stdenv.lib; { + description = "Neovim client library and GUI, in Qt5"; + license = licenses.isc; + maintainers = with maintainers; [ peterhoeg ]; + inherit (neovim.meta) platforms; + inherit version; + }; }; +in + stdenv.mkDerivation { + pname = "neovim-qt"; + version = unwrapped.version; + buildCommand = if stdenv.isDarwin then '' + mkdir -p $out/Applications + cp -r ${unwrapped}/bin/nvim-qt.app $out/Applications - cmakeFlags = [ - "-DUSE_SYSTEM_MSGPACK=1" - ]; + chmod -R a+w "$out/Applications/nvim-qt.app/Contents/MacOS" + wrapProgram "$out/Applications/nvim-qt.app/Contents/MacOS/nvim-qt" \ + --prefix PATH : "${neovim}/bin" + '' else '' + makeWrapper '${unwrapped}/bin/nvim-qt' "$out/bin/nvim-qt" \ + --prefix PATH : "${neovim}/bin" + ''; - buildInputs = with pythonPackages; [ - neovim qtbase msgpack - ] ++ (with pythonPackages; [ - jinja2 msgpack python - ]); + preferLocalBuild = true; - nativeBuildInputs = [ cmake doxygen makeWrapper ]; + nativeBuildInputs = [ + makeWrapper + ]; - enableParallelBuilding = true; + passthru = { + inherit unwrapped; + }; - preConfigure = '' - # we rip out a number of tests that fail in the build env - # the GUI tests will never work but the others should - they did before neovim 0.2.0 - # was released - sed -i test/CMakeLists.txt \ - -e '/^add_xtest_gui/d' \ - -e '/tst_neovimobject/d' \ - -e '/tst_neovimconnector/d' \ - -e '/tst_callallmethods/d' \ - -e '/tst_encoding/d' - ''; - - doCheck = true; - - postInstall = if stdenv.isDarwin then '' - mkdir -p $out/Applications - mv $out/bin/nvim-qt.app $out/Applications - rmdir $out/bin || : - - wrapProgram "$out/Applications/nvim-qt.app/Contents/MacOS/nvim-qt" \ - --prefix PATH : "${neovim}/bin" - '' else '' - wrapProgram "$out/bin/nvim-qt" \ - --prefix PATH : "${neovim}/bin" - ''; - - meta = with stdenv.lib; { - description = "Neovim client library and GUI, in Qt5"; - license = licenses.isc; - maintainers = with maintainers; [ peterhoeg ]; - inherit (neovim.meta) platforms; - inherit version; - }; -} + inherit (unwrapped) meta; + } From c52c4a00a28ce89562b00e77ba66f32393b079a3 Mon Sep 17 00:00:00 2001 From: Timo Kaufmann Date: Sat, 5 Jan 2019 13:58:00 +0100 Subject: [PATCH 2/2] doc: add neovim-qt configuration --- doc/languages-frameworks/vim.section.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/doc/languages-frameworks/vim.section.md b/doc/languages-frameworks/vim.section.md index 6ed60028ae20..e4c486a0e52e 100644 --- a/doc/languages-frameworks/vim.section.md +++ b/doc/languages-frameworks/vim.section.md @@ -46,6 +46,21 @@ neovim.override { } ``` +If you want to use `neovim-qt` as a graphical editor, you can configure it by overriding neovim in an overlay +or passing it an overridden neovimn: + +``` +neovim-qt.override { + neovim = neovim.override { + configure = { + customRC = '' + # your custom configuration + ''; + }; + }; +} +``` + ## Managing plugins with Vim packages To store you plugins in Vim packages (the native vim plugin manager, see `:help packages`) the following example can be used: