about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2021-04-13T21·55+0200
committertazjin <mail@tazj.in>2021-04-13T22·56+0000
commit9d95751302377ac74b0bb05e09ef4b5f7831dc15 (patch)
tree6abefaa226513ee1e61331ed01b65884bb7836ed
parentcf5b88173b75052d63d81ed9a3200abc73179e86 (diff)
feat(tools/emacs-pkgs): Add new builder for internal packages r/2503
Adds a new internal builder that makes it possible to override the
`emacsPackages` passed to our Emacs packages, which in turn makes it
possible to inject them into the emacsPackages fixpoint and use them
with features like Emacs native compilation.

Change-Id: I80dad57115c83cf5693ae6ba4e4cf3105d103d5e
Reviewed-on: https://cl.tvl.fyi/c/depot/+/3003
Tested-by: BuildkiteCI
Reviewed-by: adisbladis <adisbladis@gmail.com>
Reviewed-by: grfn <grfn@gws.fyi>
-rw-r--r--third_party/emacs/rcirc/default.nix4
-rw-r--r--tools/emacs-pkgs/buildEmacsPackage.nix34
-rw-r--r--tools/emacs-pkgs/dottime/default.nix4
-rw-r--r--tools/emacs-pkgs/nix-util/default.nix4
-rw-r--r--tools/emacs-pkgs/notable/default.nix10
-rw-r--r--tools/emacs-pkgs/term-switcher/default.nix12
-rw-r--r--tools/emacs-pkgs/tvl/default.nix8
7 files changed, 53 insertions, 23 deletions
diff --git a/third_party/emacs/rcirc/default.nix b/third_party/emacs/rcirc/default.nix
index 9d22c7cd86..f34cbed789 100644
--- a/third_party/emacs/rcirc/default.nix
+++ b/third_party/emacs/rcirc/default.nix
@@ -1,6 +1,6 @@
-{ pkgs, ... }:
+{ depot, ... }:
 
-pkgs.emacsPackages.trivialBuild rec {
+depot.tools.emacs-pkgs.buildEmacsPackage rec {
   pname = "rcirc";
   version = "1";
   src = ./rcirc.el;
diff --git a/tools/emacs-pkgs/buildEmacsPackage.nix b/tools/emacs-pkgs/buildEmacsPackage.nix
new file mode 100644
index 0000000000..160c062613
--- /dev/null
+++ b/tools/emacs-pkgs/buildEmacsPackage.nix
@@ -0,0 +1,34 @@
+# Builder for depot-internal Emacs packages. Packages built using this
+# builder are added into the Emacs packages fixpoint under
+# `emacsPackages.tvlPackages`, which in turn makes it possible to use
+# them with special Emacs features like native compilation.
+#
+# Arguments passed to the builder are the same as
+# emacsPackages.trivialBuild, except:
+#
+# * packageRequires is not used
+#
+# * externalRequires takes a selection function for packages from
+#   emacsPackages
+#
+# * internalRequires takes other depot packages
+{ pkgs, ... }:
+
+buildArgs:
+
+pkgs.callPackage({ emacsPackages }:
+
+let
+  # Select external dependencies from the emacsPackages set
+  externalDeps = (buildArgs.externalRequires or (_: [])) emacsPackages;
+
+  # Override emacsPackages for depot-internal packages
+  internalDeps = map (p: p.override { inherit emacsPackages; })
+                     (buildArgs.internalRequires or []);
+
+  trivialBuildArgs = builtins.removeAttrs buildArgs [
+    "externalRequires" "internalRequires"
+  ] // {
+    packageRequires = externalDeps ++ internalDeps;
+  };
+in emacsPackages.trivialBuild trivialBuildArgs) {}
diff --git a/tools/emacs-pkgs/dottime/default.nix b/tools/emacs-pkgs/dottime/default.nix
index 633aad187e..b819e9c14d 100644
--- a/tools/emacs-pkgs/dottime/default.nix
+++ b/tools/emacs-pkgs/dottime/default.nix
@@ -1,6 +1,6 @@
-{ pkgs, ... }:
+{ depot, ... }:
 
-pkgs.emacsPackages.trivialBuild rec {
+depot.tools.emacs-pkgs.buildEmacsPackage {
   pname = "dottime";
   version = "1.0";
   src = ./dottime.el;
diff --git a/tools/emacs-pkgs/nix-util/default.nix b/tools/emacs-pkgs/nix-util/default.nix
index 2356ad75f2..ffeb1cefad 100644
--- a/tools/emacs-pkgs/nix-util/default.nix
+++ b/tools/emacs-pkgs/nix-util/default.nix
@@ -1,6 +1,6 @@
-{ pkgs, ... }:
+{ depot, ... }:
 
-pkgs.emacsPackages.trivialBuild rec {
+depot.tools.emacs-pkgs.buildEmacsPackage {
   pname = "nix-util";
   version = "1.0";
   src = ./nix-util.el;
diff --git a/tools/emacs-pkgs/notable/default.nix b/tools/emacs-pkgs/notable/default.nix
index 22c906609b..8c6935fe88 100644
--- a/tools/emacs-pkgs/notable/default.nix
+++ b/tools/emacs-pkgs/notable/default.nix
@@ -1,11 +1,15 @@
-{ depot, pkgs, ... }:
+{ depot, ... }:
 
-pkgs.emacsPackages.trivialBuild rec {
+depot.tools.emacs-pkgs.buildEmacsPackage rec {
   pname = "notable";
   version = "1.0";
   src = ./notable.el;
-  packageRequires = with pkgs.emacsPackages; [
+
+  externalRequires = epkgs: with epkgs; [
     f ht s
+  ];
+
+  internalRequires = [
     depot.tools.emacs-pkgs.dottime
   ];
 }
diff --git a/tools/emacs-pkgs/term-switcher/default.nix b/tools/emacs-pkgs/term-switcher/default.nix
index 0c5e4c17cd..e775de5cdb 100644
--- a/tools/emacs-pkgs/term-switcher/default.nix
+++ b/tools/emacs-pkgs/term-switcher/default.nix
@@ -1,14 +1,8 @@
-{ pkgs, ... }:
+{ depot, ... }:
 
-with pkgs.emacsPackages;
-
-melpaBuild rec {
+depot.tools.emacs-pkgs.buildEmacsPackage {
   pname = "term-switcher";
   version = "1.0";
   src = ./term-switcher.el;
-  packageRequires = [ dash ivy s vterm ];
-
-  recipe = builtins.toFile "recipe" ''
-    (term-switcher :fetcher github :repo "tazjin/depot")
-  '';
+  externalRequires = epkgs: with epkgs; [ dash ivy s vterm ];
 }
diff --git a/tools/emacs-pkgs/tvl/default.nix b/tools/emacs-pkgs/tvl/default.nix
index d191c6b6f7..5dcc184bb5 100644
--- a/tools/emacs-pkgs/tvl/default.nix
+++ b/tools/emacs-pkgs/tvl/default.nix
@@ -1,10 +1,8 @@
-{ pkgs, ... }:
+{ depot, ... }:
 
-with pkgs.emacsPackages;
-
-trivialBuild rec {
+depot.tools.emacs-pkgs.buildEmacsPackage {
   pname = "tvl";
   version = "1.0";
   src = ./tvl.el;
-  packageRequires = [ magit s ];
+  externalRequires = (epkgs: with epkgs; [ magit s ]);
 }