Skip to content

Commit

Permalink
emacs: allow extraConfig to reference extraPackages
Browse files Browse the repository at this point in the history
This fixes the issue described in

  #1758 (comment)
  • Loading branch information
midchildan authored and rycee committed May 25, 2022
1 parent 51ea421 commit 64831f9
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 12 deletions.
20 changes: 10 additions & 10 deletions modules/programs/emacs.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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 ];
Expand Down Expand Up @@ -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;
};
}
20 changes: 18 additions & 2 deletions tests/modules/programs/emacs/extra-config.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 64831f9

Please sign in to comment.