On Tue 15/04/2025 05:25, Bjorn Ketelaars wrote: > Diff below updates notmuch to 0.39. Overview on changes can be found at > https://nmbug.notmuchmail.org/nmweb/show/87cyei9cap.fsf%40tethera.net. > Main change is that the legacy python bindings are no longer supported. > These bindings have been deprecated since 2020. As of this release they > are no longer built or tested, and patches for them will no longer be > accepted. > > Changes to the port: > - Drop notmuch/py-notmuch as python bindings are no longer supported. > There are no consumers for this, so this should be no issue. > - No need any more to split up notmuch into notmuch/notmuch and > notmuch/py-notmuch. From now on notmuch lives in notmuch. > - @pkgpath markers have been set in all of the subpackages. > > Testing: > - No new failing regression tests. > - Run tested on amd64 > - Checked that 'pkg_add -u' works. > > > I have a separate diff for changes to notmuch consumers (LDEP in > mail/aerc and mail/neomutt) as well as a quirk. > > Comments / OK?
Anyone? Diff enclosed again for your convenience. diff --git Makefile Makefile index cf76796a7f2..ecacfe41d29 100644 --- Makefile +++ Makefile @@ -1,5 +1,107 @@ -SUBDIR = -SUBDIR += notmuch -SUBDIR += py-notmuch +COMMENT-main = mail indexer, tagger and threader +COMMENT-emacs = Emacs bindings for notmuch +COMMENT-mutt = Mutt integration for notmuch -.include <bsd.port.subdir.mk> +V = 0.39 +DISTNAME = notmuch-$V +PKGNAME-main = notmuch-${V} +PKGNAME-emacs = notmuch-emacs-${V} +PKGNAME-mutt = notmuch-mutt-${V} + +SHARED_LIBS += notmuch 1.2 + +CATEGORIES = mail databases + +HOMEPAGE = https://notmuchmail.org/ + +# GPLv3+ +PERMIT_PACKAGE = Yes + +MULTI_PACKAGES = -main -emacs -mutt +DEBUG_PACKAGES = -main + +WANTLIB-main += ${COMPILER_LIBCXX} c glib-2.0 gmime-3.0 gobject-2.0 +WANTLIB-main += talloc xapian z + +SITES = ${HOMEPAGE}releases/ + +EXTRACT_SUFX = .tar.xz + +COMPILER= base-clang ports-gcc + +MODULES = lang/python +MODPY_RUNDEP = No +MODPY_PYTEST = Yes + +LIB_DEPENDS = databases/xapian-core \ + devel/libtalloc \ + mail/gmime30 + +RUN_DEPENDS-emacs = devel/desktop-file-utils \ + databases/xapian-core \ + editors/emacs \ + ${FULLPKGNAME-main}:${FULLPKGPATH-main} + +RUN_DEPENDS-mutt = devel/p5-Term-ReadLine-Gnu \ + mail/p5-Mail-Box \ + mail/p5-Mail-Tools \ + devel/p5-Devel-GlobalDestruction \ + ${FULLPKGNAME-main}:${FULLPKGPATH-main} + +# this builds, though does not currently install, cffi-based Python +# bindings using its own Makefile rather than the standard ports +# Python build infra. +BUILD_DEPENDS = devel/doxygen \ + devel/py-cffi \ + devel/py-setuptools \ + editors/emacs,gtk3 \ + security/gnupg>=2.2.23p1 \ + shells/bash \ + shells/bash-completion \ + textproc/py-sphinx + +TEST_DEPENDS = archivers/gtar \ + devel/gdb \ + misc/dtach \ + sysutils/coreutils \ + ${FULLPKGNAME-main}:${FULLPKGPATH-main} + +USE_GMAKE = Yes + +CONFIGURE_STYLE = simple +CONFIGURE_ARGS = --mandir=${PREFIX}/man \ + --infodir=${PREFIX}/info \ + --sysconfdir=${SYSCONFDIR} \ + --bashcompletiondir=${PREFIX}/share/notmuch/bash_completion.d +CONFIGURE_ENV = PYTHON=${MODPY_BIN} + +MAKE_FLAGS = V=1 +MAKE_ENV = LIBnotmuch_MAJOR=${LIBnotmuch_VERSION:R} \ + LIBnotmuch_MINOR=${LIBnotmuch_VERSION:E} +TEST_FLAGS = V=1 \ + NOTMUCH_TEST_SERIALIZE=1 \ + TEST_CFLAGS="-O0 -g -I${LOCALBASE}/include -L${LOCALBASE}/lib" + +TEST_TARGET = test + +EXAMPLES_DIR = ${PREFIX}/share/examples/notmuch + +post-extract: + cd ${WRKSRC}/test; [ -r test-lib-OPENBSD.sh ] || \ + cp test-lib-FREEBSD.sh test-lib-OPENBSD.sh + +post-install: + rm ${PREFIX}/man/man1/notmuch-setup.1.gz + gunzip ${PREFIX}/man/*/*gz + ln -s notmuch.1 ${PREFIX}/man/man1/notmuch-setup.1 + + cd ${WRKBUILD}/contrib/notmuch-mutt && \ + ${SETENV} ${MAKE_ENV} ${MAKE_PROGRAM} \ + ${ALL_FAKE_FLAGS} ${FAKE_TARGET} + ${INSTALL_DATA_DIR} ${EXAMPLES_DIR}/mutt + mv ${WRKINST}/etc/Muttrc.d/notmuch-mutt.rc ${EXAMPLES_DIR}/mutt/ + rmdir ${WRKINST}/etc/Muttrc.d + ${INSTALL_DATA} ${WRKSRC}/contrib/notmuch-mutt/README \ + ${EXAMPLES_DIR}/mutt/ + +.include <bsd.port.mk> diff --git distinfo distinfo new file mode 100644 index 00000000000..981646e9359 --- /dev/null +++ distinfo @@ -0,0 +1,2 @@ +SHA256 (notmuch-0.39.tar.xz) = uIuwKnbEa62NMT/Su0+OOSmLUfZvy+swTZ+Aw+73BOM= +SIZE (notmuch-0.39.tar.xz) = 811448 diff --git patches/patch-emacs_Makefile_local patches/patch-emacs_Makefile_local new file mode 100644 index 00000000000..c63d549b9c7 --- /dev/null +++ patches/patch-emacs_Makefile_local @@ -0,0 +1,11 @@ +Index: emacs/Makefile.local +--- emacs/Makefile.local.orig ++++ emacs/Makefile.local +@@ -126,7 +126,6 @@ endif + ifeq ($(WITH_DESKTOP),1) + mkdir -p "$(DESTDIR)$(desktop_dir)" + desktop-file-install --mode 0644 --dir "$(DESTDIR)$(desktop_dir)" $(emacs_mua_desktop) +- -update-desktop-database "$(DESTDIR)$(desktop_dir)" + endif + + CLEAN := $(CLEAN) $(emacs_bytecode) $(dir)/notmuch-version.el $(dir)/notmuch-pkg.el \ diff --git patches/patch-lib_Makefile_local patches/patch-lib_Makefile_local new file mode 100644 index 00000000000..2a8192ebae3 --- /dev/null +++ patches/patch-lib_Makefile_local @@ -0,0 +1,50 @@ +patch out -soname argument to ld +use OpenBSD-defined major and minor +NB: on upgrade, check lib/notmuch.sym + +Index: lib/Makefile.local +--- lib/Makefile.local.orig ++++ lib/Makefile.local +@@ -16,12 +16,16 @@ LIBNAME = libnotmuch.$(LIBNOTMUCH_VERSION_MAJOR).$(LIB + LIBRARY_LINK_FLAG = -dynamiclib -install_name $(libdir)/$(SONAME) -compatibility_version $(LIBNOTMUCH_VERSION_MAJOR).$(LIBNOTMUCH_VERSION_MINOR) -current_version $(LIBNOTMUCH_VERSION_MAJOR).$(LIBNOTMUCH_VERSION_MINOR).$(LIBNOTMUCH_VERSION_RELEASE) + else + LIBRARY_SUFFIX = so ++ifeq ($(PLATFORM),OPENBSD) ++LINKER_NAME = libnotmuch.$(LIBRARY_SUFFIX).${LIBnotmuch_MAJOR}.${LIBnotmuch_MINOR} ++SONAME = $(LINKER_NAME) ++LIBNAME = $(SONAME) ++LIBRARY_LINK_FLAG = -shared -Wl,--version-script=$(srcdir)/$(lib)/notmuch.sym $(NO_UNDEFINED_LDFLAGS) -lc ++else + LINKER_NAME = libnotmuch.$(LIBRARY_SUFFIX) + SONAME = $(LINKER_NAME).$(LIBNOTMUCH_VERSION_MAJOR) + LIBNAME = $(SONAME).$(LIBNOTMUCH_VERSION_MINOR).$(LIBNOTMUCH_VERSION_RELEASE) + LIBRARY_LINK_FLAG = -shared -Wl,--version-script=$(srcdir)/$(lib)/notmuch.sym,-soname=$(SONAME) $(NO_UNDEFINED_LDFLAGS) +-ifeq ($(PLATFORM),OPENBSD) +-LIBRARY_LINK_FLAG += -lc + endif + ifeq ($(LIBDIR_IN_LDCONFIG),1) + ifeq ($(DESTDIR),) +@@ -76,19 +80,23 @@ $(dir)/libnotmuch.a: $(libnotmuch_modules) + $(dir)/$(LIBNAME): $(libnotmuch_modules) util/libnotmuch_util.a parse-time-string/libparse-time-string.a + $(call quiet,CXX $(CXXFLAGS)) $(libnotmuch_modules) $(FINAL_LIBNOTMUCH_LDFLAGS) $(LIBRARY_LINK_FLAG) -o $@ util/libnotmuch_util.a parse-time-string/libparse-time-string.a + ++ifneq ($(SONAME),$(LINKER_NAME)) + $(dir)/$(SONAME): $(dir)/$(LIBNAME) + ln -sf $(LIBNAME) $@ + + $(dir)/$(LINKER_NAME): $(dir)/$(SONAME) + ln -sf $(LIBNAME) $@ ++endif + + install: install-$(dir) + + install-$(dir): $(dir)/$(LIBNAME) + mkdir -p "$(DESTDIR)$(libdir)/" + install -m0644 "$(lib)/$(LIBNAME)" "$(DESTDIR)$(libdir)/" ++ifneq ($(SONAME),$(LINKER_NAME)) + ln -sf $(LIBNAME) "$(DESTDIR)$(libdir)/$(SONAME)" + ln -sf $(LIBNAME) "$(DESTDIR)$(libdir)/$(LINKER_NAME)" ++endif + mkdir -p "$(DESTDIR)$(includedir)" + install -m0644 "$(srcdir)/$(lib)/notmuch.h" "$(DESTDIR)$(includedir)/" + $(LIBRARY_INSTALL_POST_COMMAND) diff --git patches/patch-test_Makefile_local patches/patch-test_Makefile_local new file mode 100644 index 00000000000..d7089a92583 --- /dev/null +++ patches/patch-test_Makefile_local @@ -0,0 +1,14 @@ +Fix relative path linking issue + +Index: test/Makefile.local +--- test/Makefile.local.orig ++++ test/Makefile.local +@@ -32,7 +32,7 @@ $(dir)/random-corpus: $(random_corpus_deps) + $(dir)/smtp-dummy: $(smtp_dummy_modules) + $(call quiet,CC) $^ -o $@ $(LDFLAGS) + +-$(dir)/symbol-test: $(dir)/symbol-test.o lib/$(LINKER_NAME) ++$(dir)/symbol-test: $(dir)/symbol-test.o + $(call quiet,CXX) $^ -o $@ $(LDFLAGS) -Llib -lnotmuch $(XAPIAN_LDFLAGS) + + $(dir)/parse-time: $(dir)/parse-time.o parse-time-string/parse-time-string.o diff --git patches/patch-test_T210-raw_sh patches/patch-test_T210-raw_sh new file mode 100644 index 00000000000..d842822dae4 --- /dev/null +++ patches/patch-test_T210-raw_sh @@ -0,0 +1,16 @@ +Index: test/T210-raw.sh +--- test/T210-raw.sh.orig ++++ test/T210-raw.sh +@@ -69,10 +69,10 @@ ID=87r2ecrr6x....@zephyr.silentflame.com + test_begin_subtest "raw content, duplicate files" + rm -f OUTPUT.raw + for dup in {1..5}; do +- notmuch show --format=raw --duplicate=${dup} --format=raw id:${ID} | md5sum | cut -f1 -d' ' >> OUTPUT.raw ++ notmuch show --format=raw --duplicate=${dup} --format=raw id:${ID} | gmd5sum | cut -f1 -d' ' >> OUTPUT.raw + done + sort OUTPUT.raw > OUTPUT +-notmuch search --output=files id:${ID} | xargs md5sum | cut -f1 -d ' ' | sort > EXPECTED ++notmuch search --output=files id:${ID} | xargs gmd5sum | cut -f1 -d ' ' | sort > EXPECTED + test_expect_equal_file_nonempty EXPECTED OUTPUT + + test_done diff --git patches/patch-test_T360-symbol-hiding_sh patches/patch-test_T360-symbol-hiding_sh new file mode 100644 index 00000000000..c26f3880d3b --- /dev/null +++ patches/patch-test_T360-symbol-hiding_sh @@ -0,0 +1,12 @@ +Index: test/T360-symbol-hiding.sh +--- test/T360-symbol-hiding.sh.orig ++++ test/T360-symbol-hiding.sh +@@ -30,7 +30,7 @@ test_begin_subtest 'checking output' + test_expect_equal "$result" "$output" + + test_begin_subtest 'comparing existing to exported symbols' +-readelf -Ws $NOTMUCH_BUILDDIR/lib/libnotmuch.so | sed -e 's/\[[^]]*\]//' |\ ++readelf -Ws $NOTMUCH_BUILDDIR/lib/libnotmuch.so* | sed -e 's/\[[^]]*\]//' |\ + awk '$4 == "FUNC" && $5 == "GLOBAL" && $7 != "UND" {print $8}' | sort -u > ACTUAL + sed -n 's/^\(notmuch_[a-zA-Z0-9_]*\)[[:blank:]]*(.*/\1/p' $NOTMUCH_SRCDIR/lib/notmuch.h | sort -u > EXPORTED + test_expect_equal_file EXPORTED ACTUAL diff --git patches/patch-test_T400-hooks_sh patches/patch-test_T400-hooks_sh new file mode 100644 index 00000000000..88800bb62ee --- /dev/null +++ patches/patch-test_T400-hooks_sh @@ -0,0 +1,12 @@ +Index: test/T400-hooks.sh +--- test/T400-hooks.sh.orig ++++ test/T400-hooks.sh +@@ -208,7 +208,7 @@ EOF + generate_message '[subject]="add msg in new"' + NOTMUCH_NEW + notmuch search id:$id1 or id:$gen_msg_id | notmuch_search_sanitize > OUTPUT +- cat <<EOF | sed s'/^[ \t]*//' > EXPECTED ++ cat <<EOF | sed s'/^[ ]*//' > EXPECTED + thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; add msg in pre-new (inbox unread) + thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; add msg in new (inbox unread) + EOF diff --git patches/patch-test_test-lib-OPENBSD_sh patches/patch-test_test-lib-OPENBSD_sh new file mode 100644 index 00000000000..62b93eb1c73 --- /dev/null +++ patches/patch-test_test-lib-OPENBSD_sh @@ -0,0 +1,13 @@ +Index: test/test-lib-OPENBSD.sh +--- test/test-lib-OPENBSD.sh.orig ++++ test/test-lib-OPENBSD.sh +@@ -4,6 +4,8 @@ if command -v gdate >/dev/null + date () { gdate "$@"; } + base64 () { gbase64 "$@"; } + wc () { gwc "$@"; } +- sed () { gsed "$@"; } ++ stat () { gstat "$@"; } + sha256sum () { gsha256sum "$@"; } + fi ++gdb () { egdb "$@"; } ++tar () { gtar "$@"; } diff --git patches/patch-test_test-lib_sh patches/patch-test_test-lib_sh new file mode 100644 index 00000000000..fb5bd00c79d --- /dev/null +++ patches/patch-test_test-lib_sh @@ -0,0 +1,15 @@ +Our ld code does not ignore empty elements in the list, which results in errors. +Removing the append logic fixes this + +Index: test/test-lib.sh +--- test/test-lib.sh.orig ++++ test/test-lib.sh +@@ -944,7 +944,7 @@ notmuch_with_shim () { + base_name=$1 + shift + shim_file="${base_name}.so" +- LD_PRELOAD=${LD_PRELOAD:+:$LD_PRELOAD}:./${shim_file} $notmuch_cmd "$@" ++ LD_PRELOAD=./${shim_file} notmuch-shared "$@" + } + + # Creates a script that counts how much time it is executed and calls diff --git patches/patch-test_test-vars_sh patches/patch-test_test-vars_sh new file mode 100644 index 00000000000..c388c0f12be --- /dev/null +++ patches/patch-test_test-vars_sh @@ -0,0 +1,13 @@ +We don't have libdl. + +Index: test/test-vars.sh +--- test/test-vars.sh.orig ++++ test/test-vars.sh +@@ -33,7 +33,6 @@ TEST_GDB=${TEST_GDB:-gdb} + TEST_CC=${TEST_CC:-cc} + TEST_CFLAGS=${TEST_CFLAGS:-"-g -O0"} + TEST_SHIM_CFLAGS=${TEST_SHIM_CFLAGS:-"-fpic -shared"} +-TEST_SHIM_LDFLAGS=${TEST_SHIM_LDFLAGS:-"-ldl"} + + # Protect ourselves from common misconfiguration to export + # CDPATH into the environment diff --git pkg/DESCR-emacs pkg/DESCR-emacs new file mode 100644 index 00000000000..927b0d25822 --- /dev/null +++ pkg/DESCR-emacs @@ -0,0 +1 @@ +The necessary runtime to run notmuch inside Emacs. diff --git pkg/DESCR-main pkg/DESCR-main new file mode 100644 index 00000000000..3e79cb913ec --- /dev/null +++ pkg/DESCR-main @@ -0,0 +1,9 @@ +Notmuch is a mail indexing program providing a fast tag-based email +reader with global search to use within a text editor. + +"Notmuch is not much of an email program. It doesn't receive messages +(no POP or IMAP suport). It doesn't send messages (no mail composer, +no network code at all). And for what it does do (email search) +that work is provided by an external library, Xapian. So if Notmuch +provides no user interface and Xapian does all the heavy lifting, +then what's left here? Not much." diff --git pkg/DESCR-mutt pkg/DESCR-mutt new file mode 100644 index 00000000000..30d0b6fc6c7 --- /dev/null +++ pkg/DESCR-mutt @@ -0,0 +1,9 @@ +notmuch-mutt provide integration among the Mutt mail user agent and the Notmuch +mail indexer. + +notmuch-mutt offer two main integration features. The first one is the ability +of stating a search query interactively and then jump to a fresh Maildir +containing its search results only. The second one is the ability to +reconstruct threads on the fly starting from the currently highlighted mail, +which comes handy when a thread has been split across different maildirs, +archived, or the like. diff --git pkg/PLIST-emacs pkg/PLIST-emacs new file mode 100644 index 00000000000..bdfcb16c441 --- /dev/null +++ pkg/PLIST-emacs @@ -0,0 +1,50 @@ +@pkgpath mail/notmuch/notmuch,-emacs +bin/notmuch-emacs-mua +@info info/notmuch-emacs-mua.info +@info info/notmuch-emacs.info +@man man/man1/notmuch-emacs-mua.1 +share/applications/notmuch-emacs-mua.desktop +share/emacs/site-lisp/coolj.el +share/emacs/site-lisp/coolj.elc +share/emacs/site-lisp/notmuch-address.el +share/emacs/site-lisp/notmuch-address.elc +share/emacs/site-lisp/notmuch-company.el +share/emacs/site-lisp/notmuch-company.elc +share/emacs/site-lisp/notmuch-compat.el +share/emacs/site-lisp/notmuch-compat.elc +share/emacs/site-lisp/notmuch-crypto.el +share/emacs/site-lisp/notmuch-crypto.elc +share/emacs/site-lisp/notmuch-draft.el +share/emacs/site-lisp/notmuch-draft.elc +share/emacs/site-lisp/notmuch-hello.el +share/emacs/site-lisp/notmuch-hello.elc +share/emacs/site-lisp/notmuch-jump.el +share/emacs/site-lisp/notmuch-jump.elc +share/emacs/site-lisp/notmuch-lib.el +share/emacs/site-lisp/notmuch-lib.elc +share/emacs/site-lisp/notmuch-logo.svg +share/emacs/site-lisp/notmuch-maildir-fcc.el +share/emacs/site-lisp/notmuch-maildir-fcc.elc +share/emacs/site-lisp/notmuch-message.el +share/emacs/site-lisp/notmuch-message.elc +share/emacs/site-lisp/notmuch-mua.el +share/emacs/site-lisp/notmuch-mua.elc +share/emacs/site-lisp/notmuch-parser.el +share/emacs/site-lisp/notmuch-parser.elc +share/emacs/site-lisp/notmuch-print.el +share/emacs/site-lisp/notmuch-print.elc +share/emacs/site-lisp/notmuch-query.el +share/emacs/site-lisp/notmuch-query.elc +share/emacs/site-lisp/notmuch-show.el +share/emacs/site-lisp/notmuch-show.elc +share/emacs/site-lisp/notmuch-tag.el +share/emacs/site-lisp/notmuch-tag.elc +share/emacs/site-lisp/notmuch-tree.el +share/emacs/site-lisp/notmuch-tree.elc +share/emacs/site-lisp/notmuch-version.el +share/emacs/site-lisp/notmuch-version.elc +share/emacs/site-lisp/notmuch-wash.el +share/emacs/site-lisp/notmuch-wash.elc +share/emacs/site-lisp/notmuch.el +share/emacs/site-lisp/notmuch.elc +@tag update-desktop-database diff --git pkg/PLIST-main pkg/PLIST-main new file mode 100644 index 00000000000..5118bbebdb1 --- /dev/null +++ pkg/PLIST-main @@ -0,0 +1,57 @@ +@pkgpath mail/notmuch/notmuch,-main +@bin bin/notmuch +include/notmuch.h +@info info/nmbug.info +@info info/notmuch-address.info +@info info/notmuch-compact.info +@info info/notmuch-config.info +@info info/notmuch-count.info +@info info/notmuch-dump.info +@info info/notmuch-git.info +@info info/notmuch-hooks.info +@info info/notmuch-insert.info +@info info/notmuch-new.info +@info info/notmuch-properties.info +@info info/notmuch-reindex.info +@info info/notmuch-reply.info +@info info/notmuch-restore.info +@info info/notmuch-search-terms.info +@info info/notmuch-search.info +@info info/notmuch-setup.info +@info info/notmuch-sexp-queries.info +@info info/notmuch-show.info +@info info/notmuch-tag.info +@info info/notmuch.info +@lib lib/libnotmuch.so.${LIBnotmuch_VERSION} +@man man/man1/nmbug.1 +@man man/man1/notmuch-address.1 +@man man/man1/notmuch-compact.1 +@man man/man1/notmuch-config.1 +@man man/man1/notmuch-count.1 +@man man/man1/notmuch-dump.1 +@man man/man1/notmuch-git.1 +@man man/man1/notmuch-insert.1 +@man man/man1/notmuch-new.1 +@man man/man1/notmuch-reindex.1 +@man man/man1/notmuch-reply.1 +@man man/man1/notmuch-restore.1 +@man man/man1/notmuch-search.1 +@man man/man1/notmuch-setup.1 +@man man/man1/notmuch-show.1 +@man man/man1/notmuch-tag.1 +@man man/man1/notmuch.1 +@man man/man3/notmuch.3 +@man man/man5/notmuch-hooks.5 +@man man/man7/notmuch-properties.7 +@man man/man7/notmuch-search-terms.7 +@man man/man7/notmuch-sexp-queries.7 +share/applications/ +share/emacs/ +share/emacs/site-lisp/ +share/notmuch/ +share/notmuch/bash_completion.d/ +share/notmuch/bash_completion.d/notmuch +share/zsh/ +share/zsh/site-functions/ +share/zsh/site-functions/_email-notmuch +share/zsh/site-functions/_notmuch diff --git pkg/PLIST-mutt pkg/PLIST-mutt new file mode 100644 index 00000000000..e801deefabb --- /dev/null +++ pkg/PLIST-mutt @@ -0,0 +1,7 @@ +@pkgpath mail/notmuch/notmuch,-mutt +bin/notmuch-mutt +@man man/man1/notmuch-mutt.1 +share/examples/notmuch/ +share/examples/notmuch/mutt/ +share/examples/notmuch/mutt/README +share/examples/notmuch/mutt/notmuch-mutt.rc