Add emacsWithPackagesFromPackageRequires

This provides a mechanism for creating an Emacs closure that contains
the runtime dependencies for a given Emacs package source file, by
inspecting its Package-Requires header.
This commit is contained in:
Steve Purcell 2020-06-20 15:24:47 +12:00
parent 49597c2218
commit 8439afbe1e
5 changed files with 115 additions and 26 deletions

26
packreq.nix Normal file
View file

@ -0,0 +1,26 @@
/*
Parse an emacs package file to derive packages from
Package-Requires declarations.
*/
{ pkgs }:
let
parse = pkgs.callPackage ./parse.nix { };
in
{ packageFile
, extraEmacsPackages ? epkgs: [ ]
, package ? pkgs.emacs
, override ? (epkgs: epkgs)
}:
let
packages = parse.parsePackagesFromPackageRequires packageFile;
emacsPackages = pkgs.emacsPackagesGen package;
emacsWithPackages = emacsPackages.emacsWithPackages;
in
emacsWithPackages (epkgs:
let
overriden = override epkgs;
usePkgs = builtins.map (name: overriden.${name}) packages;
extraPkgs = extraEmacsPackages overriden;
in
[ overriden.use-package ] ++ usePkgs ++ extraPkgs)