diff --git a/pkgs/applications/editors/emacs-modes/melpa-packages.nix b/pkgs/applications/editors/emacs-modes/melpa-packages.nix index 891bb5df5672..16f147695914 100644 --- a/pkgs/applications/editors/emacs-modes/melpa-packages.nix +++ b/pkgs/applications/editors/emacs-modes/melpa-packages.nix @@ -36,10 +36,14 @@ let or unknownFetcher; args = builtins.removeAttrs recipe.fetch [ "tag" ]; src = fetch args; + recipeFile = fetchurl { + url = "https://raw.githubusercontent.com/milkypostman/melpa/${recipe.recipe.commit}/recipes/${name}"; + inherit (recipe.recipe) sha256; + }; in melpaBuild { pname = name; inherit (recipe) version; - inherit src; + inherit recipeFile src; packageRequires = let lookupDep = d: self."${d}" or null; in map lookupDep recipe.deps; diff --git a/pkgs/applications/editors/emacs-modes/melpa-stable-packages.nix b/pkgs/applications/editors/emacs-modes/melpa-stable-packages.nix index 7572c722e33f..2dadbae85358 100644 --- a/pkgs/applications/editors/emacs-modes/melpa-stable-packages.nix +++ b/pkgs/applications/editors/emacs-modes/melpa-stable-packages.nix @@ -38,10 +38,14 @@ let or unknownFetcher; args = builtins.removeAttrs recipe.fetch [ "tag" ]; src = fetch args; + recipeFile = fetchurl { + url = "https://raw.githubusercontent.com/milkypostman/melpa/${recipe.recipe.commit}/recipes/${name}"; + inherit (recipe.recipe) sha256; + }; in melpaBuild { pname = name; inherit (recipe) version; - inherit src; + inherit recipeFile src; packageRequires = let lookupDep = d: self."${d}" or null; in map lookupDep recipe.deps; diff --git a/pkgs/build-support/emacs/melpa.nix b/pkgs/build-support/emacs/melpa.nix index a1f10ad31437..8fd2a00b50a8 100644 --- a/pkgs/build-support/emacs/melpa.nix +++ b/pkgs/build-support/emacs/melpa.nix @@ -8,6 +8,8 @@ with lib; { pname , version +, recipeFile ? null + , files ? null , fileSpecs ? [ "*.el" "*.el.in" "dir" "*.info" "*.texi" "*.texinfo" @@ -43,8 +45,17 @@ import ./generic.nix { inherit lib stdenv emacs texinfo; } ({ runHook preBuild emacs --batch -Q -l $packageBuild -l ${./melpa2nix.el} \ + ${if recipeFile == null + then + '' -f melpa2nix-build-package \ ${pname} ${version} ${targets} + '' + else + '' + -f melpa2nix-build-package-from-recipe \ + ${pname} ${version} ${recipeFile} + ''} runHook postBuild ''; diff --git a/pkgs/build-support/emacs/melpa2nix.el b/pkgs/build-support/emacs/melpa2nix.el index 858ffd7593bf..f1309fc0d57b 100644 --- a/pkgs/build-support/emacs/melpa2nix.el +++ b/pkgs/build-support/emacs/melpa2nix.el @@ -21,6 +21,15 @@ (`(,package ,version . ,files) (melpa2nix-package-build-archive package version files)))) +(defun melpa2nix-build-package-from-recipe () + (if (not noninteractive) + (error "`melpa2nix-build-package' is to be used only with -batch")) + (pcase command-line-args-left + (`(,package ,version ,recipe-file) + (let* ((rcp (cdr (package-build--read-from-file recipe-file))) + (files (package-build--config-file-list rcp))) + (melpa2nix-package-build-archive package version files))))) + (defun melpa2nix-package-build-archive (name version files) "Build a package archive for package NAME." (package-build--message "\n;;; %s\n" name)