From 8eb59c601f7061a9da95fd4b07934ef885d24099 Mon Sep 17 00:00:00 2001 From: Charlotte Van Petegem Date: Wed, 6 Sep 2023 14:52:58 +0200 Subject: [PATCH] Add mu4e epkgs patch and use it --- modules/base/emacs/default.nix | 3 +- patches/253438.patch | 142 +++++++++++++++++++++++++++++++++ 2 files changed, 143 insertions(+), 2 deletions(-) create mode 100644 patches/253438.patch diff --git a/modules/base/emacs/default.nix b/modules/base/emacs/default.nix index 1e6cb8f2..b9084c50 100644 --- a/modules/base/emacs/default.nix +++ b/modules/base/emacs/default.nix @@ -18,8 +18,7 @@ config = config.chvp.base.emacs.fullConfig; package = pkgs.emacs-pgtk; alwaysEnsure = true; - # mu4e is included in the mu package and should be used from there - extraEmacsPackages = epkgs: lib.optional config.chvp.graphical.mail.enable (pkgs.mu.override { emacs = pkgs.emacs-pgtk; }); + extraEmacsPackages = epkgs: lib.optional config.chvp.graphical.mail.enable epkgs.mu4e; }; }; }; diff --git a/patches/253438.patch b/patches/253438.patch new file mode 100644 index 00000000..90d54342 --- /dev/null +++ b/patches/253438.patch @@ -0,0 +1,142 @@ +diff --git a/nixos/doc/manual/release-notes/rl-2311.section.md b/nixos/doc/manual/release-notes/rl-2311.section.md +index 3e20cc438969a..f13bfd2f9794d 100644 +--- a/nixos/doc/manual/release-notes/rl-2311.section.md ++++ b/nixos/doc/manual/release-notes/rl-2311.section.md +@@ -79,6 +79,8 @@ + + - `pass` now does not contain `password-store.el`. Users should get `password-store.el` from Emacs lisp package set `emacs.pkgs.password-store`. + ++- `mu` now does not install `mu4e` files by default. Users should get `mu4e` from Emacs lisp package set `emacs.pkgs.mu4e`. ++ + - `mariadb` now defaults to `mariadb_1011` instead of `mariadb_106`, meaning the default version was upgraded from 10.6.x to 10.11.x. See the [upgrade notes](https://mariadb.com/kb/en/upgrading-from-mariadb-10-6-to-mariadb-10-11/) for potential issues. + + - `getent` has been moved from `glibc`'s `bin` output to its own dedicated output, reducing closure size for many dependents. Dependents using the `getent` alias should not be affected; others should move from using `glibc.bin` or `getBin glibc` to `getent` (which also improves compatibility with non-glibc platforms). +diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages.nix +index 5bb88c835610c..0f28ed8f8f028 100644 +--- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages.nix ++++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages.nix +@@ -61,6 +61,8 @@ in + _map = self.map; + }; + ++ mu4e = callPackage ./manual-packages/mu4e { }; ++ + ott-mode = callPackage ./manual-packages/ott-mode { }; + + perl-completion = callPackage ./manual-packages/perl-completion { }; +diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/mu4e/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/mu4e/default.nix +new file mode 100644 +index 0000000000000..81fd973ecbd95 +--- /dev/null ++++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/mu4e/default.nix +@@ -0,0 +1,33 @@ ++{ elpaBuild, mu }: ++ ++let ++ pname = "mu4e"; ++ version = mu.mu4e.version; ++in ++elpaBuild { ++ inherit pname version; ++ ++ src = mu.mu4e; ++ ++ propagatedUserEnvPkgs = [ mu ]; ++ ++ dontUnpack = false; ++ ++ # prepare a multi-file package tar archive according to info ++ # "(elisp) Multi-file Packages" for elpaBuild to install ++ postUnpack = '' ++ pushd mu-*-mu4e ++ local content_directory=${pname}-${version} ++ mkdir $content_directory ++ cp --verbose share/emacs/site-lisp/mu4e/*.el $content_directory/ ++ rm --verbose --force $content_directory/mu4e-autoloads.el ++ cp --verbose share/info/* $content_directory/ ++ src=$PWD/$content_directory.tar ++ tar --create --verbose --file=$src $content_directory ++ popd ++ ''; ++ ++ meta = mu.meta // { ++ description = "A full-featured e-mail client"; ++ }; ++} +diff --git a/pkgs/tools/networking/mu/default.nix b/pkgs/tools/networking/mu/default.nix +index 06083f8e0fae7..a46fc526e6958 100644 +--- a/pkgs/tools/networking/mu/default.nix ++++ b/pkgs/tools/networking/mu/default.nix +@@ -10,12 +10,15 @@ + , gmime3 + , texinfo + , xapian ++, fetchpatch + }: + + stdenv.mkDerivation rec { + pname = "mu"; + version = "1.10.7"; + ++ outputs = [ "out" "mu4e" ]; ++ + src = fetchFromGitHub { + owner = "djcb"; + repo = "mu"; +@@ -23,6 +26,14 @@ stdenv.mkDerivation rec { + hash = "sha256-x1TsyTOK5U6/Y3QInm+XQ7T32X49iwa+4UnaHdiyqCI="; + }; + ++ patches = [ ++ (fetchpatch { ++ name = "add-mu4e-pkg.el"; ++ url = "https://github.com/djcb/mu/commit/00f7053d51105eea0c72151f1a8cf0b6d8478e4e.patch"; ++ hash = "sha256-21c7djmYTcqyyygqByo9vu/GsH8WMYcq8NOAvJsS5AQ="; ++ }) ++ ]; ++ + postPatch = '' + # Fix mu4e-builddir (set it to $out) + substituteInPlace mu4e/mu4e-config.el.in \ +@@ -31,17 +42,23 @@ stdenv.mkDerivation rec { + --replace "/bin/rm" "${coreutils}/bin/rm" + ''; + +- # AOT native-comp, mostly copied from pkgs/build-support/emacs/generic.nix +- postInstall = lib.optionalString (emacs.withNativeCompilation or false) '' +- mkdir -p $out/share/emacs/native-lisp +- export EMACSLOADPATH=$out/share/emacs/site-lisp/mu4e: +- export EMACSNATIVELOADPATH=$out/share/emacs/native-lisp: ++ postInstall = '' ++ rm --verbose $mu4e/share/emacs/site-lisp/mu4e/*.elc ++ ''; + +- find $out/share/emacs -type f -name '*.el' -print0 \ +- | xargs -0 -I {} -n 1 -P $NIX_BUILD_CORES sh -c \ +- "emacs --batch --eval '(setq large-file-warning-threshold nil)' -f batch-native-compile {} || true" +- '' + '' +- emacs --batch -l package --eval "(package-generate-autoloads \"mu4e\" \"$out/share/emacs/site-lisp/mu4e\")" ++ # move only the mu4e info manual ++ # this has to be after preFixup otherwise the info manual may be moved back by _multioutDocs() ++ # we manually move the mu4e info manual instead of setting ++ # outputInfo to mu4e because we do not want to move the mu-guile ++ # info manual (if it exists) ++ postFixup = '' ++ moveToOutput share/info/mu4e.info.gz $mu4e ++ install-info $mu4e/share/info/mu4e.info.gz $mu4e/share/info/dir ++ if [[ -a ''${!outputInfo}/share/info/mu-guile.info.gz ]]; then ++ install-info --delete $mu4e/share/info/mu4e.info.gz ''${!outputInfo}/share/info/dir ++ else ++ rm --verbose --recursive ''${!outputInfo}/share/info ++ fi + ''; + + buildInputs = [ emacs glib gmime3 texinfo xapian ]; +@@ -49,6 +66,7 @@ stdenv.mkDerivation rec { + mesonFlags = [ + "-Dguile=disabled" + "-Dreadline=disabled" ++ "-Dlispdir=${placeholder "mu4e"}/share/emacs/site-lisp" + ]; + + nativeBuildInputs = [ pkg-config meson ninja ];