diff --git a/modules/programs/emacs.nix b/modules/programs/emacs.nix index 4e69c55b0..4253cb3b9 100644 --- a/modules/programs/emacs.nix +++ b/modules/programs/emacs.nix @@ -13,11 +13,15 @@ let emacsWithPackages = emacsPackages.emacsWithPackages; - createConfPackage = epkgs: - epkgs.trivialBuild { - pname = "default"; - src = pkgs.writeText "default.el" cfg.extraConfig; - }; + extraPackages = epkgs: + let + packages = cfg.extraPackages epkgs; + userConfig = epkgs.trivialBuild { + pname = "default"; + src = pkgs.writeText "default.el" cfg.extraConfig; + packageRequires = packages; + }; + in packages ++ optional (cfg.extraConfig != "") userConfig; in { meta.maintainers = [ maintainers.rycee ]; @@ -91,10 +95,6 @@ in { config = mkIf cfg.enable { home.packages = [ cfg.finalPackage ]; - programs.emacs = { - finalPackage = emacsWithPackages cfg.extraPackages; - extraPackages = epkgs: - optional (cfg.extraConfig != "") (createConfPackage epkgs); - }; + programs.emacs.finalPackage = emacsWithPackages extraPackages; }; } diff --git a/tests/modules/programs/emacs/extra-config.nix b/tests/modules/programs/emacs/extra-config.nix index de8a5ee1a..52e83de5c 100644 --- a/tests/modules/programs/emacs/extra-config.nix +++ b/tests/modules/programs/emacs/extra-config.nix @@ -5,16 +5,32 @@ let testScript = pkgs.writeText "test.el" '' ;; Emacs won't automatically load default.el when --script is specified (load "default") - (kill-emacs (if (eq hm 'home-manager) 0 1)) + (let* ((test-load-config (eq hm 'home-manager)) + (test-load-package (eq (hm-test-fn) 'success)) + (is-ok (and test-load-config test-load-package))) + (kill-emacs (if is-ok 0 1))) ''; emacsBin = "${config.programs.emacs.finalPackage}/bin/emacs"; + mkTestPackage = epkgs: + epkgs.trivialBuild { + pname = "hm-test"; + src = pkgs.writeText "hm-test.el" '' + (defun hm-test-fn () 'success) + (provide 'hm-test) + ''; + }; + in lib.mkIf config.test.enableBig { programs.emacs = { enable = true; package = pkgs.emacs-nox; - extraConfig = "(setq hm 'home-manager)"; + extraConfig = '' + (require 'hm-test) + (setq hm 'home-manager) + ''; + extraPackages = epkgs: [ (mkTestPackage epkgs) ]; }; # running emacs with --script would enable headless mode