about summary refs log tree commit diff
path: root/elisp.nix
diff options
context:
space:
mode:
Diffstat (limited to 'elisp.nix')
-rw-r--r--elisp.nix10
1 files changed, 8 insertions, 2 deletions
diff --git a/elisp.nix b/elisp.nix
index ec330c6ce4ad..269c40e691ba 100644
--- a/elisp.nix
+++ b/elisp.nix
@@ -9,19 +9,25 @@ let
   parse = pkgs.callPackage ./parse.nix {};
 in {
   config,
+  alwaysEnsure ? false, # emulate `use-package-always-ensure` behavior
   extraEmacsPackages ? epkgs: [],
   package ? pkgs.emacs,
   override ? (epkgs: epkgs)
 }:
   let
-    packages = parse.parsePackagesFromUsePackage config;
+    packages = parse.parsePackagesFromUsePackage config alwaysEnsure;
     emacsPackages = pkgs.emacsPackagesGen package;
     emacsWithPackages = emacsPackages.emacsWithPackages;
+    mkPackageError = name:
+      let
+        errorFun = if alwaysEnsure then builtins.trace else throw;
+      in
+        errorFun "Emacs package ${name}, declared wanted with use-package, not found." null;
   in
     emacsWithPackages (epkgs:
       let
         overridden = override epkgs;
-        usePkgs = builtins.map (name: overridden.${name}) packages;
+        usePkgs = map (name: overridden.${name} or (mkPackageError name)) packages;
         extraPkgs = extraEmacsPackages overridden;
       in
         [ overridden.use-package ] ++ usePkgs ++ extraPkgs)