about summary refs log tree commit diff
path: root/overlays/patches/emacs/overlay/packreq.nix
diff options
context:
space:
mode:
Diffstat (limited to 'overlays/patches/emacs/overlay/packreq.nix')
-rw-r--r--overlays/patches/emacs/overlay/packreq.nix30
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)