anchor.diff:      runHook postUnpack
     '';
   
  -  installPhase = ''
  +  installPhase = let
  +    # SoftMaker/FreeOffice collects some system information upon
  +    # unlocking the product. But in doing so, it attempts to execute
  +    # /bin/ls. If the execve syscall fails, the whole unlock
  +    # procedure fails. This works around that by rewriting /bin/ls
  +    # to the proper path.
  +    #
  +    # SoftMaker Office restarts itself upon some operations, such
  +    # changing the theme and unlocking. Unfortunately, we do not
  +    # have control over its environment then and it will fail
  +    # with an error.
  +    lsIntercept = ''
  +      --set LD_PRELOAD "${libredirect}/lib/libredirect.so" \
  +      --set NIX_REDIRECTS "/bin/ls=${coreutils}/bin/ls"
  +    '';
  +  in ''
       runHook preInstall
   
       mkdir -p $out/share
  
positive.code:     # Wrap rather than symlinking, so that the programs can determine
      # their resource path.
      mkdir -p $out/bin
      makeWrapper $out/share/${pname}${edition}/planmaker $out/bin/${pname}-planmaker
      makeWrapper $out/share/${pname}${edition}/presentations $out/bin/${pname}-presentations
      makeWrapper $out/share/${pname}${edition}/textmaker $out/bin/${pname}-textmaker
  
      for size in 16 32 48 64 96 128 256 512 1024; do
        mkdir -p $out/share/icons/hicolor/''${size}x''${size}/apps
  
negative.code: 
    # Dynamic Libraries
  , curl, libGL, libX11, libXext, libXmu, libXrandr, libXrender
  
    # For fixing up execution of /bin/ls, which is necessary for
    # product unlocking.
  , coreutils, libredirect
  
  , pname, version, edition, suiteName, src, archive
  
  