vimUtils.buildVimPlugin: don't copy the build directory with dontUnpack

With dontUnpack there is no source directory to install from, so
installPhase copied $NIX_BUILD_TOP instead: env-vars, .attrs.json, and
.attrs.sh ended up in the plugin and pulled the whole stdenv into its
closure. Skip the copy in that case and leave installing files to the
caller's phases. Plugins that unpack keep an identical installPhase.

Fixes #508465
This commit is contained in:
Austin Horstman
2026-09-28 15:21:57 -05:00
parent 9f5db2a673
commit c01530f7d9
2 changed files with 21 additions and 1 deletions

View File

@@ -43,7 +43,7 @@
target=$out/${rtpPath}/${path}
mkdir -p $out/${rtpPath}
cp -r . $target
${lib.optionalString (!(attrs.dontUnpack or false)) "cp -r . $target"}
runHook postInstall
'';

View File

@@ -25,6 +25,26 @@ lib.recurseIntoAttrs {
vimrcConfig.packages.myVimPackage.start = with vimPlugins; [ vim-nix ];
};
test_vim_plugin_dont_unpack =
let
plugin = vimUtils.buildVimPlugin {
pname = "vim-plugin-dont-unpack-test";
version = "0";
src = pkgs.writeText "probe.vim" "";
dontUnpack = true;
buildPhase = ''
install -D "$src" "$out/colors/probe.vim"
'';
};
in
pkgs.runCommand "vim-plugin-dont-unpack-test" { } ''
test -f ${plugin}/colors/probe.vim
for file in env-vars .attrs.json .attrs.sh; do
test ! -e ${plugin}/"$file"
done
mkdir -p "$out"
'';
# test that all vimPlugins have `passthru.vimPlugin = true`
test-all-plugins-have-vimPlugin-true =
let