diff options
Diffstat (limited to 'pkgs/by-name/ne/neovim-unwrapped/package.nix')
-rw-r--r-- | pkgs/by-name/ne/neovim-unwrapped/package.nix | 334 |
1 files changed, 198 insertions, 136 deletions
diff --git a/pkgs/by-name/ne/neovim-unwrapped/package.nix b/pkgs/by-name/ne/neovim-unwrapped/package.nix index c66597da3ae8..fb185d85f646 100644 --- a/pkgs/by-name/ne/neovim-unwrapped/package.nix +++ b/pkgs/by-name/ne/neovim-unwrapped/package.nix @@ -1,80 +1,109 @@ -{ lib, stdenv, fetchFromGitHub, removeReferencesTo, cmake, gettext, msgpack-c, libiconv -, libuv, lua, pkg-config -, unibilium -, libvterm-neovim -, tree-sitter -, fetchurl -, buildPackages -, treesitter-parsers ? import ./treesitter-parsers.nix { inherit fetchurl; } -, CoreServices -, fixDarwinDylibNames -, glibcLocales ? null, procps ? null - -# now defaults to false because some tests can be flaky (clipboard etc), see -# also: https://github.com/neovim/neovim/issues/16233 -, nodejs ? null, fish ? null, python3 ? null +{ + lib, + stdenv, + fetchFromGitHub, + removeReferencesTo, + cmake, + gettext, + msgpack-c, + libuv, + lua, + pkg-config, + unibilium, + libvterm-neovim, + tree-sitter, + fetchurl, + buildPackages, + treesitter-parsers ? import ./treesitter-parsers.nix { inherit fetchurl; }, + fixDarwinDylibNames, + glibcLocales ? null, + procps ? null, + + # now defaults to false because some tests can be flaky (clipboard etc), see + # also: https://github.com/neovim/neovim/issues/16233 + nodejs ? null, + fish ? null, + python3 ? null, }: -stdenv.mkDerivation (finalAttrs: +stdenv.mkDerivation ( + finalAttrs: let - nvim-lpeg-dylib = luapkgs: if stdenv.isDarwin - then (luapkgs.lpeg.overrideAttrs (oa: { - preConfigure = '' - # neovim wants clang .dylib - sed -i makefile -e "s/CC = gcc/CC = clang/" - sed -i makefile -e "s/-bundle/-dynamiclib/" - ''; - preBuild = '' - # there seems to be implicit calls to Makefile from luarocks, we need to - # add a stage to build our dylib - make macosx - mkdir -p $out/lib - mv lpeg.so $out/lib/lpeg.dylib - ''; - nativeBuildInputs = - oa.nativeBuildInputs - ++ ( - lib.optional stdenv.isDarwin fixDarwinDylibNames - ); - })) - else luapkgs.lpeg; - requiredLuaPkgs = ps: (with ps; [ - (nvim-lpeg-dylib ps) - luabitop - mpack - ] ++ lib.optionals finalAttrs.finalPackage.doCheck [ - luv - coxpcall - busted - luafilesystem - penlight - inspect - ] - ); - neovimLuaEnv = lua.withPackages requiredLuaPkgs; - neovimLuaEnvOnBuild = lua.luaOnBuild.withPackages requiredLuaPkgs; - codegenLua = - if lua.luaOnBuild.pkgs.isLuaJIT - then - let deterministicLuajit = - lua.luaOnBuild.override { + nvim-lpeg-dylib = + luapkgs: + if stdenv.hostPlatform.isDarwin then + let + luaLibDir = "$out/lib/lua/${lib.versions.majorMinor luapkgs.lua.luaversion}"; + in + (luapkgs.lpeg.overrideAttrs (oa: { + preConfigure = '' + # neovim wants clang .dylib + substituteInPlace Makefile \ + --replace-fail "CC = gcc" "CC = clang" \ + --replace-fail "-bundle" "-dynamiclib" \ + --replace-fail "lpeg.so" "lpeg.dylib" + ''; + preBuild = '' + # there seems to be implicit calls to Makefile from luarocks, we need to + # add a stage to build our dylib + make macosx + mkdir -p ${luaLibDir} + mv lpeg.dylib ${luaLibDir}/lpeg.dylib + ''; + postInstall = '' + rm -f ${luaLibDir}/lpeg.so + ''; + nativeBuildInputs = + oa.nativeBuildInputs ++ (lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames); + })) + else + luapkgs.lpeg; + requiredLuaPkgs = + ps: + ( + with ps; + [ + (nvim-lpeg-dylib ps) + luabitop + mpack + ] + ++ lib.optionals finalAttrs.finalPackage.doCheck [ + luv + coxpcall + busted + luafilesystem + penlight + inspect + ] + ); + neovimLuaEnv = lua.withPackages requiredLuaPkgs; + neovimLuaEnvOnBuild = lua.luaOnBuild.withPackages requiredLuaPkgs; + codegenLua = + if lua.luaOnBuild.pkgs.isLuaJIT then + let + deterministicLuajit = lua.luaOnBuild.override { deterministicStringIds = true; self = deterministicLuajit; }; - in deterministicLuajit.withPackages(ps: [ ps.mpack (nvim-lpeg-dylib ps) ]) - else lua.luaOnBuild; - + in + deterministicLuajit.withPackages (ps: [ + ps.mpack + (nvim-lpeg-dylib ps) + ]) + else + lua.luaOnBuild; -in { + in + { pname = "neovim-unwrapped"; - version = "0.10.1"; + version = "0.10.2"; __structuredAttrs = true; src = fetchFromGitHub { owner = "neovim"; repo = "neovim"; - rev = "v${finalAttrs.version}"; - hash = "sha256-OsHIacgorYnB/dPbzl1b6rYUzQdhTtsJYLsFLJxregk="; + rev = "refs/tags/v${finalAttrs.version}"; + hash = "sha256-+qjjelYMB3MyjaESfCaGoeBURUzSVh/50uxUqStxIfY="; }; patches = [ @@ -87,26 +116,38 @@ in { dontFixCmake = true; inherit lua; - treesitter-parsers = treesitter-parsers // - { markdown = treesitter-parsers.markdown // { location = "tree-sitter-markdown"; }; } // - { markdown_inline = treesitter-parsers.markdown // { language = "markdown_inline"; location = "tree-sitter-markdown-inline"; }; } - ; - - buildInputs = [ - libuv - libvterm-neovim - # This is actually a c library, hence it's not included in neovimLuaEnv, - # see: - # https://github.com/luarocks/luarocks/issues/1402#issuecomment-1080616570 - # and it's definition at: pkgs/development/lua-modules/overrides.nix - lua.pkgs.libluv - msgpack-c - neovimLuaEnv - tree-sitter - unibilium - ] ++ lib.optionals stdenv.isDarwin [ libiconv CoreServices ] - ++ lib.optionals finalAttrs.finalPackage.doCheck [ glibcLocales procps ] - ; + treesitter-parsers = + treesitter-parsers + // { + markdown = treesitter-parsers.markdown // { + location = "tree-sitter-markdown"; + }; + } + // { + markdown_inline = treesitter-parsers.markdown // { + language = "markdown_inline"; + location = "tree-sitter-markdown-inline"; + }; + }; + + buildInputs = + [ + libuv + libvterm-neovim + # This is actually a c library, hence it's not included in neovimLuaEnv, + # see: + # https://github.com/luarocks/luarocks/issues/1402#issuecomment-1080616570 + # and it's definition at: pkgs/development/lua-modules/overrides.nix + lua.pkgs.libluv + msgpack-c + neovimLuaEnv + tree-sitter + unibilium + ] + ++ lib.optionals finalAttrs.finalPackage.doCheck [ + glibcLocales + procps + ]; doCheck = false; @@ -126,18 +167,23 @@ in { ]; # extra programs test via `make functionaltest` - nativeCheckInputs = let - pyEnv = python3.withPackages(ps: with ps; [ pynvim msgpack ]); - in [ - fish - nodejs - pyEnv # for src/clint.py - ]; + nativeCheckInputs = + let + pyEnv = python3.withPackages ( + ps: with ps; [ + pynvim + msgpack + ] + ); + in + [ + fish + nodejs + pyEnv # for src/clint.py + ]; # nvim --version output retains compilation flags and references to build tools - postPatch = '' - substituteInPlace src/nvim/version.c --replace NVIM_VERSION_CFLAGS ""; - '' + lib.optionalString (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) '' + postPatch = lib.optionalString (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) '' sed -i runtime/CMakeLists.txt \ -e "s|\".*/bin/nvim|\${stdenv.hostPlatform.emulator buildPackages} &|g" sed -i src/nvim/po/CMakeLists.txt \ @@ -147,45 +193,54 @@ in { find "$out" -type f -exec remove-references-to -t ${stdenv.cc} '{}' + ''; # check that the above patching actually works - outputChecks = let - disallowedRequisites = [ stdenv.cc ] ++ lib.optional (lua != codegenLua) codegenLua; - in { - out = { inherit disallowedRequisites; }; - debug = { inherit disallowedRequisites; }; - }; + outputChecks = + let + disallowedRequisites = [ stdenv.cc ] ++ lib.optional (lua != codegenLua) codegenLua; + in + { + out = { + inherit disallowedRequisites; + }; + debug = { + inherit disallowedRequisites; + }; + }; - cmakeFlags = [ - # Don't use downloaded dependencies. At the end of the configurePhase one - # can spot that cmake says this option was "not used by the project". - # That's because all dependencies were found and - # third-party/CMakeLists.txt is not read at all. - "-DUSE_BUNDLED=OFF" - ] - ++ lib.optional (!lua.pkgs.isLuaJIT) "-DPREFER_LUA=ON" - ++ lib.optionals lua.pkgs.isLuaJIT [ - "-DLUAC_PRG=${codegenLua}/bin/luajit -b -s %s -" - "-DLUA_GEN_PRG=${codegenLua}/bin/luajit" - "-DLUA_PRG=${neovimLuaEnvOnBuild}/bin/luajit" - ]; + cmakeFlags = + [ + # Don't use downloaded dependencies. At the end of the configurePhase one + # can spot that cmake says this option was "not used by the project". + # That's because all dependencies were found and + # third-party/CMakeLists.txt is not read at all. + "-DUSE_BUNDLED=OFF" + ] + ++ lib.optional (!lua.pkgs.isLuaJIT) "-DPREFER_LUA=ON" + ++ lib.optionals lua.pkgs.isLuaJIT [ + "-DLUAC_PRG=${codegenLua}/bin/luajit -b -s %s -" + "-DLUA_GEN_PRG=${codegenLua}/bin/luajit" + "-DLUA_PRG=${neovimLuaEnvOnBuild}/bin/luajit" + ]; + + preConfigure = + '' + mkdir -p $out/lib/nvim/parser + '' + + lib.concatStrings ( + lib.mapAttrsToList (language: grammar: '' + ln -s \ + ${ + tree-sitter.buildGrammar { + inherit (grammar) src; + version = "neovim-${finalAttrs.version}"; + language = grammar.language or language; + location = grammar.location or null; + } + }/parser \ + $out/lib/nvim/parser/${language}.so + '') finalAttrs.treesitter-parsers + ); - preConfigure = lib.optionalString stdenv.isDarwin '' - substituteInPlace src/nvim/CMakeLists.txt --replace " util" "" - '' + '' - mkdir -p $out/lib/nvim/parser - '' + lib.concatStrings (lib.mapAttrsToList - (language: grammar: '' - ln -s \ - ${tree-sitter.buildGrammar { - inherit (grammar) src; - version = "neovim-${finalAttrs.version}"; - language = grammar.language or language; - location = grammar.location or null; - }}/parser \ - $out/lib/nvim/parser/${language}.so - '') - finalAttrs.treesitter-parsers); - - shellHook='' + shellHook = '' export VIMRUNTIME=$PWD/runtime ''; @@ -201,15 +256,22 @@ in { modifications to the core source - Improve extensibility with a new plugin architecture ''; - homepage = "https://www.neovim.io"; + homepage = "https://www.neovim.io"; mainProgram = "nvim"; # "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 lib.licenses; [ asl20 vim ]; - maintainers = with lib.maintainers; [ manveru rvolosatovs ]; - platforms = lib.platforms.unix; + license = with lib.licenses; [ + asl20 + vim + ]; + maintainers = with lib.maintainers; [ + manveru + rvolosatovs + ]; + platforms = lib.platforms.unix; }; - }) + } +) |