diff options
Diffstat (limited to 'overlays/patches/emacs/overlay/packreq.nix')
-rw-r--r-- | overlays/patches/emacs/overlay/packreq.nix | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/overlays/patches/emacs/overlay/packreq.nix b/overlays/patches/emacs/overlay/packreq.nix new file mode 100644 index 000000000000..5602ffed446e --- /dev/null +++ b/overlays/patches/emacs/overlay/packreq.nix @@ -0,0 +1,30 @@ +/* +Parse an emacs package file to derive packages from +Package-Requires declarations. +*/ + +{ pkgs }: +let + parse = pkgs.callPackage ./parse.nix { }; +in +{ packageElisp +, extraEmacsPackages ? epkgs: [ ] +, package ? pkgs.emacs +, override ? (self: super: { }) +}: +let + packages = parse.parsePackagesFromPackageRequires packageElisp; + emacsPackages = (pkgs.emacsPackagesFor package).overrideScope' (self: super: + # for backward compatibility: override was a function with one parameter + if builtins.isFunction (override super) + then override self super + else override super + ); + emacsWithPackages = emacsPackages.emacsWithPackages; +in +emacsWithPackages (epkgs: + let + usePkgs = builtins.map (name: epkgs.${name}) packages; + extraPkgs = extraEmacsPackages epkgs; + in + [ epkgs.use-package ] ++ usePkgs ++ extraPkgs) |