From c8b82d46ba36851fc6ef2710397091b88ae71bdd Mon Sep 17 00:00:00 2001 From: Marien Zwart Date: Sat, 4 May 2024 22:48:11 +1000 Subject: [PATCH] Use emacs-overlay directly, not as overlay Slight hack to avoid instantiating an additional nixpkgs unnecessarily. --- flake.nix | 21 ++++++++++++++------- home-manager.nix | 6 ++++-- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/flake.nix b/flake.nix index 1cce51f..0faaa3b 100644 --- a/flake.nix +++ b/flake.nix @@ -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; diff --git a/home-manager.nix b/home-manager.nix index db8bf11..589bea0 100644 --- a/home-manager.nix +++ b/home-manager.nix @@ -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