{ melpaBuild , fetchFromGitHub , writeText , pkgs # Elisp dependencies , ctable , deferred , epc , s # Native dependencies , nodejs , python3 , wmctrl , xdotool }: let # TODO: Package nodejs environment pythonEnv = ((python3.withPackages(ps: [ # ps.pyqtwebengine ps.pyqt6 ps.pyqt6-webengine ps.qrcode ps.qtconsole ps.retry ps.pymupdf ps.sexpdata ps.epc # Wrap native dependencies in python env $PATH pkgs.aria2 ])).override { ignoreCollisions = true; }); node = "${nodejs}/bin/node"; pname = "eaf"; version = "20210309.0"; eaf-terminal = fetchFromGitHub { owner = "emacs-eaf"; repo = "eaf-terminal"; rev = "b7ddb82baf9604cb52a83d6e0631e6a5edc415b1"; hash = "sha256-4TRIAcReJs9a91DMKD+puApmSstxYLgLHV300GFDufQ="; }; eaf-browser = fetchFromGitHub { owner = "emacs-eaf"; repo = "eaf-browser"; rev = "9761f7bd22aa69f144a0a032643b0834dde6cb60"; hash = "sha256-jcCn16lXqcq1UcekekJiTfRBjjgaY0Hkz69ycElSzuA="; }; eaf-pdf-viewer = fetchFromGitHub { owner = "emacs-eaf"; repo = "eaf-pdf-viewer"; rev = "0b79e9000551200b6a0d2206de14b87d9ed3c9c9"; hash = "sha256-Co5RWWI0OC1w5JrCVpbwafuEEluh48JDzkMQp5QdIbE="; }; in melpaBuild { inherit pname version; src = fetchFromGitHub { owner = "emacs-eaf"; repo = "emacs-application-framework"; rev = "9bf8caba36e27fafcef5d8e68969a1a8eb5432ed"; sha256 = "sha256-4CPhEO4d66GzD3vOcNyRl6DmRDYiiIeRhX/9RUPZ+PM="; }; dontConfigure = true; dontBuild = true; postPatch = '' substituteInPlace eaf.el \ --replace '"xdotool' '"${xdotool}/bin/xdotool' \ --replace '"wmctrl' '"${wmctrl}' sed -i s#'defcustom eaf-python-command .*'#'defcustom eaf-python-command "${pythonEnv.interpreter}"'# eaf.el mkdir app cp -r ${eaf-terminal} app/terminal cp -r ${eaf-pdf-viewer} app/pdf-viewer cp -r ${eaf-browser} app/browser substituteInPlace app/terminal/buffer.py --replace-warn \ '"node"' \ '"${node}"' ''; installPhase = '' mkdir -p $out/share/emacs/site-lisp/elpa/emacs-$pname-$version cp -rv * $out/share/emacs/site-lisp/elpa/emacs-$pname-$version/ ''; recipe = writeText "recipe" '' (eaf :repo "emacs-eaf/emacs-application-framework" :fetcher github :files ("*") ''; packageRequires = [ ctable deferred epc s ]; }