5 packageName ? package.meta.mainProgram or (pkgs.lib.getName package),
6 paths ? [ "bin/${packageName}" ],
7 name ? package.name + "-firejailed",
8 firejail ? "/run/wrappers/bin/firejail",
13 # DevelopmentNode: you may have to inherit more attributes.
14 inherit (package) meta passthru;
16 nativeBuildInputs = [ pkgs.makeShellWrapper ];
18 # ExplanationNote: /run/wrappers/ is not yet available
19 # hence disable that check in makeShellWrapper.
20 assertExecutable () { true; }
21 for path in ${pkgs.lib.escapeShellArgs paths}; do
23 # CorrectnessNote: in case the resulting package is called
24 # when building a derivation (eg. in neovim: Generating remote plugin manifest)
25 # /run/wrappers/ does not exist, hence just bypass firejail using a --run.
29 --run "[ -x ${firejail} ] || exec \"${package}/$path\" \"\$@\"" \
30 --add-flags "${pkgs.lib.escapeShellArgs args}" \
31 --add-flags "${package}/$path" \