From 9d95751302377ac74b0bb05e09ef4b5f7831dc15 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Tue, 13 Apr 2021 23:55:31 +0200 Subject: feat(tools/emacs-pkgs): Add new builder for internal packages 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 Reviewed-by: grfn --- third_party/emacs/rcirc/default.nix | 4 ++-- tools/emacs-pkgs/buildEmacsPackage.nix | 34 ++++++++++++++++++++++++++++++ tools/emacs-pkgs/dottime/default.nix | 4 ++-- tools/emacs-pkgs/nix-util/default.nix | 4 ++-- tools/emacs-pkgs/notable/default.nix | 10 ++++++--- tools/emacs-pkgs/term-switcher/default.nix | 12 +++-------- tools/emacs-pkgs/tvl/default.nix | 8 +++---- 7 files changed, 53 insertions(+), 23 deletions(-) create mode 100644 tools/emacs-pkgs/buildEmacsPackage.nix 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 ]); } -- cgit 1.4.1