{ ... }: { perSystem = { pkgs, ... }: let zen-appimage = pkgs.appimageTools.wrapType2 rec { pname = "zen-browser"; version = "1.19.1b"; src = pkgs.fetchurl { url = "https://github.com/zen-browser/desktop/releases/download/${version}/zen-x86_64.AppImage"; hash = "sha256-h3lza2C+SxptpcX897Uf/nM8dNILUBXScSNQZlvSIQg="; }; extraInstallCommands = let contents = pkgs.appimageTools.extract { inherit pname version src; }; in '' desktop_file=$(find ${contents} -name "*.desktop" | head -n1) if [ -n "$desktop_file" ]; then install -m 444 -D "$desktop_file" "$out/share/applications/${pname}.desktop" # The desktop file uses 'zen' as the binary name substituteInPlace "$out/share/applications/${pname}.desktop" \ --replace 'Exec=zen' 'Exec=${pname}' fi if [ -d ${contents}/usr/share/icons ]; then cp -r ${contents}/usr/share/icons $out/share fi # Also provide 'zen' binary since some apps expect it ln -s $out/bin/${pname} $out/bin/zen ''; }; in { packages.zen-browser = pkgs.symlinkJoin { name = "zen-browser"; paths = [ zen-appimage ]; buildInputs = [ pkgs.makeWrapper ]; postBuild = '' wrapProgram $out/bin/zen-browser \ --prefix PATH : ${pkgs.lib.makeBinPath [ pkgs.ffmpeg ]} wrapProgram $out/bin/zen \ --prefix PATH : ${pkgs.lib.makeBinPath [ pkgs.ffmpeg ]} ''; }; }; }