Symlinkjoin, which wrapper-manager uses internally, uses xorg.lndir.
It has a problem: it doesn't recurse into symlinks that point to directories, but rather just symlink the symlink itself.
This is what you would expect from this tool, but for the use-case of wrapper-manager it makes it harder for patching files, as you have to "unwind" the nested symlinks to be able to have a mutable directory, instead of a symlink to a directory:
|
# Some derivations have nested symlinks here |
|
if [[ -d $out/share/applications && ! -w $out/share/applications ]]; then |
|
echo "Detected nested symlink, fixing" |
|
temp=$(mktemp -d) |
|
cp -v $out/share/applications/* $temp |
|
rm -vf $out/share/applications |
|
mkdir -pv $out/share/applications |
|
cp -v $temp/* $out/share/applications |
|
fi |
Ideally we would have a lndir clone that can unwind symlinks, maybe only for share/applications/
Symlinkjoin, which wrapper-manager uses internally, uses xorg.lndir.
It has a problem: it doesn't recurse into symlinks that point to directories, but rather just symlink the symlink itself.
This is what you would expect from this tool, but for the use-case of wrapper-manager it makes it harder for patching files, as you have to "unwind" the nested symlinks to be able to have a mutable directory, instead of a symlink to a directory:
wrapper-manager/modules/base.nix
Lines 249 to 257 in f2b0bec
Ideally we would have a lndir clone that can unwind symlinks, maybe only for share/applications/