From fe4b632478a9f03a39602f1fb6a2d99a17be490e Mon Sep 17 00:00:00 2001 From: Marien Zwart Date: Sat, 11 May 2024 20:35:42 +1000 Subject: [PATCH] Refactor flake / home-manager common code Avoids having the emacs-overlay hack in two places. --- flake.nix | 42 ++++++++++++++++++++---------------------- home-manager.nix | 7 ++----- 2 files changed, 22 insertions(+), 27 deletions(-) diff --git a/flake.nix b/flake.nix index 1c6b003..60d6042 100644 --- a/flake.nix +++ b/flake.nix @@ -35,24 +35,29 @@ eachSystem = nixpkgs.lib.genAttrs (import systems); in f: eachSystem (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; + doomFromPackages = pkgs: args: let + # 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. + inherit (emacs-overlay.overlays.package {} pkgs) emacsPackagesFor; + mergedArgs = args // { + inherit emacsPackagesFor; + doomSource = doomemacs; + }; + in + pkgs.callPackages self mergedArgs; in { packages = perSystemPackages (pkgs: let common = { - doomSource = doomemacs; # TODO: drop after NixOS 24.05 release. emacs = pkgs.emacs29; doomLocalDir = "~/.local/share/nix-doom-unstraightened"; - emacsPackagesFor = emacsPackagesForFromOverlay pkgs; }; - mkDoom = args: (pkgs.callPackages self (common // args)).doomEmacs; + mkDoom = args: (doomFromPackages pkgs (common // args)).doomEmacs; in { doom-minimal = mkDoom { doomDir = ./doomdirs/minimal; }; doom-full = mkDoom { @@ -65,19 +70,12 @@ profileName = ""; }; }); - overlays.default = final: prev: - let - callPackages = args: (final.callPackages self ({ - doomSource = doomemacs; - emacsPackagesFor = emacsPackagesForFromOverlay final; - } // args)); - in { - doomEmacs = args: (callPackages args).doomEmacs; - emacsWithDoom = args: (callPackages args).emacsWithDoom; - }; + overlays.default = final: prev: { + doomEmacs = args: (doomFromPackages final args).doomEmacs; + emacsWithDoom = args: (doomFromPackages final args).emacsWithDoom; + }; hmModule = import ./home-manager.nix { - doomSource = doomemacs; - emacsOverlay = emacs-overlay.overlays.package; + inherit doomFromPackages; }; }; } diff --git a/home-manager.nix b/home-manager.nix index 36aac3f..a438366 100644 --- a/home-manager.nix +++ b/home-manager.nix @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -{ doomSource, emacsOverlay }: +{ doomFromPackages }: { config, options, lib, pkgs, ... }: let @@ -99,10 +99,7 @@ in { config = mkIf cfg.enable (mkMerge [ (let - # Hack to avoid pkgs.extend (see flake.nix). - inherit (emacsOverlay {} pkgs) emacsPackagesFor; - doomPackages = pkgs.callPackages ./. { - inherit doomSource emacsPackagesFor; + doomPackages = doomFromPackages pkgs { inherit (cfg) emacs doomDir doomLocalDir profileName noProfileHack; }; in