The Exec paths in these files already refer to absolute paths, infact, /gnu/store paths Thus the regex: ("^Exec=([^/[:blank:]\r\n]*)(.*)$" _ binary rest) with binary = empty string and rest = everything after Exec= Why? The second subexpression [^/[:blank:]\r\n]* is bound to binary, but it means anything that is a series of anything that is not /, space, or newline. absolute paths start with /, so it matches nothing (empty string), and continues to call (which ""). I notice this phase hasn't been edited in 5 years and has other issues, for example: 1. patch-dot-desktop-files only searches the output of the package for paths, not the inputs. This means for example xfce4-settings fails to patch references to exo-open in desktop files. The code should be remade to be more /correct/, and handle all unexpected inputs. In this case the phase is accidentally doing the right thing by failing in a harmless way and correctly not patching the files, but emitting a warning.