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 ];