mirror of
https://github.com/nix-community/emacs-overlay.git
synced 2025-12-06 02:40:25 -08:00
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.
30 lines
831 B
Nix
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)
|