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 <adisbladis@gmail.com>
Reviewed-by: grfn <grfn@gws.fyi>
This commit is contained in:
Vincent Ambo 2021-04-13 23:55:31 +02:00 committed by tazjin
parent cf5b88173b
commit 9d95751302
7 changed files with 53 additions and 23 deletions

View file

@ -1,6 +1,6 @@
{ pkgs, ... }:
{ depot, ... }:
pkgs.emacsPackages.trivialBuild rec {
depot.tools.emacs-pkgs.buildEmacsPackage rec {
pname = "rcirc";
version = "1";
src = ./rcirc.el;

View file

@ -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) {}

View file

@ -1,6 +1,6 @@
{ pkgs, ... }:
{ depot, ... }:
pkgs.emacsPackages.trivialBuild rec {
depot.tools.emacs-pkgs.buildEmacsPackage {
pname = "dottime";
version = "1.0";
src = ./dottime.el;

View file

@ -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;

View file

@ -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
];
}

View file

@ -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 ];
}

View file

@ -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 ]);
}