emacs-overlay/packreq.nix
Lin Jian d16c6c1fb2
Use overrideScope' for override
This fixes an issue that override cannot override packages which are
the dependencies of usePkgs and not in usePkgs.

This also preserves backward compatibility of override.  The hash of
the generated Emacs package from emacsWithPackagesFromUsePackage does
not change after this patch is applied using the old style override.
2023-04-11 12:23:43 +08:00

30 lines
831 B
Nix

/*
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)