about summary refs log tree commit diff
path: root/packreq.nix
blob: d7d7dc79aa9cc1ff04fe180aa8ef9ef360dd495d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*
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 ? (epkgs: epkgs)
}:
let
  packages = parse.parsePackagesFromPackageRequires packageElisp;
  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)