Use emacs-overlay directly, not as overlay

Slight hack to avoid instantiating an additional nixpkgs unnecessarily.
This commit is contained in:
Marien Zwart 2024-05-04 22:48:11 +10:00
parent 0dd5a3d425
commit c8b82d46ba
No known key found for this signature in database
2 changed files with 18 additions and 9 deletions

View file

@ -30,6 +30,13 @@
outputs = { doomemacs, nixpkgs, emacs-overlay, ... }: let
systems = [ "x86_64-linux" ];
perSystemPackages = f: nixpkgs.lib.genAttrs systems (system: f nixpkgs.legacyPackages.${system});
# Hack to avoid pkgs.extend having to instantiate an additional nixpkgs.
#
# We need emacsPackagesFor from the overlay, but neither the overlay itself
# (it only uses "super", not "self") nor us actually needs anything overlaid
# on nixpkgs. So we can call the overlay and pass emacsPackagesFor through
# directly instead of having pkgs.callPackage do it.
emacsPackagesForFromOverlay = pkgs: (emacs-overlay.overlays.package {} pkgs).emacsPackagesFor;
in {
packages = perSystemPackages (pkgs:
let
@ -38,25 +45,25 @@
# TODO: drop after NixOS 24.05 release.
emacs = pkgs.emacs29;
doomLocalDir = "~/.local/share/nix-doom-unstraightened";
emacsPackagesFor = emacsPackagesForFromOverlay pkgs;
};
pkgsWithEmacsOverlay = pkgs.extend emacs-overlay.overlays.package;
in {
# Current Doom + NixOS 23.11 requires emacs-overlay: Doom pins
# emacs-fish-completion, which moved from gitlab to github recently
# enough stable nixpkgs pulls it from the wrong source.
doom-minimal = (pkgsWithEmacsOverlay.callPackages ./doom.nix (common // { doomDir = ./doomdirs/minimal; })).doomEmacs;
doom-full = (pkgsWithEmacsOverlay.callPackages ./doom.nix (common // { full = true; doomDir = ./doomdirs/minimal; })).doomEmacs;
doom-example = (pkgsWithEmacsOverlay.callPackages ./doom.nix (common // { doomDir = ./doomdirs/example; })).doomEmacs;
doom-example-without-loader = (pkgsWithEmacsOverlay.callPackages ./doom.nix (common // {
doom-minimal = (pkgs.callPackages ./doom.nix (common // { doomDir = ./doomdirs/minimal; })).doomEmacs;
doom-full = (pkgs.callPackages ./doom.nix (common // { full = true; doomDir = ./doomdirs/minimal; })).doomEmacs;
doom-example = (pkgs.callPackages ./doom.nix (common // { doomDir = ./doomdirs/example; })).doomEmacs;
doom-example-without-loader = (pkgs.callPackages ./doom.nix (common // {
doomDir = ./doomdirs/example;
profileName = "";
})).doomEmacs;
});
overlays.default = final: prev:
let
pkgs = final.extend emacs-overlay.overlays.package;
callPackages = args: (pkgs.callPackages ./doom.nix ({
callPackages = args: (final.callPackages ./doom.nix ({
doomSource = doomemacs;
emacsPackagesFor = emacsPackagesForFromOverlay final;
} // args));
in {
doomEmacs = args: (callPackages args).doomEmacs;

View file

@ -99,8 +99,10 @@ in {
config = mkIf cfg.enable (mkMerge [
(let
doomPackages = (pkgs.extend emacsOverlay).callPackages ./doom.nix {
inherit doomSource;
# Hack to avoid pkgs.extend (see flake.nix).
emacsPackagesFor = (emacsOverlay {} pkgs).emacsPackagesFor;
doomPackages = pkgs.callPackages ./doom.nix {
inherit doomSource emacsPackagesFor;
inherit (cfg) emacs doomDir doomLocalDir profileName noProfileHack;
};
in