From d80640d01eeb84907e36ff4af33add9081eda17c Mon Sep 17 00:00:00 2001 From: Elvis Claros Castro Date: Sat, 26 Sep 2026 19:26:33 -0300 Subject: wa-cli: WhatsApp from the terminal, with a neomutt Maildir bridge --- contrib/hooks/wamail | 16 ++++++++++++++++ contrib/neomutt/wa-default.muttrc | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100755 contrib/hooks/wamail create mode 100644 contrib/neomutt/wa-default.muttrc (limited to 'contrib') diff --git a/contrib/hooks/wamail b/contrib/hooks/wamail new file mode 100755 index 0000000..192589b --- /dev/null +++ b/contrib/hooks/wamail @@ -0,0 +1,16 @@ +#!/bin/sh +# wa-cli -> wamail hook: real-time delivery to the neomutt Maildir. +# Install: ln -s /path/to/wa-cli/contrib/hooks/wamail ~/.config/wa-cli/hooks/all.d/50-wamail +# The daemon runs hooks one at a time, in order; wamail has its own lock against the timer. +case "$1" in + message_create|unread_count|chat_archived) ;; + message_revoke_everyone) + stanza=$(jq -r '.data.message.stanzaId // empty') + [ -n "$stanza" ] && exec "$HOME/.local/bin/wamail" revoked "$WA_CLI_ACCOUNT" "$stanza" + exit 0 ;; + *) exit 0 ;; +esac +chat=$(jq -r '.data.chatId // .data.message.chatId // .data.chat.id // .data.id // empty') +case "$chat" in + *@c.us|*@g.us|*@lid) exec "$HOME/.local/bin/wamail" sync "$WA_CLI_ACCOUNT" --chat "$chat" --quiet ;; +esac diff --git a/contrib/neomutt/wa-default.muttrc b/contrib/neomutt/wa-default.muttrc new file mode 100644 index 0000000..39f2062 --- /dev/null +++ b/contrib/neomutt/wa-default.muttrc @@ -0,0 +1,36 @@ +# vim: filetype=muttrc +# WhatsApp account through wamail (wa-cli): one Maildir folder per chat in ~/Mail/whatsapp. +# Real-time delivery through the daemon hook (wa-daemon@default) + the wamail-sync systemd timer. +# +# Read = mark read on WhatsApp · flag = star · delete = local only +# Reply: keep the quote (> ...) for a quoted reply; delete it for a normal message. + +source ~/.config/neomutt/switch.muttrc + +set realname = "WhatsApp" +set from = "5491125555635@c.us" +set use_from = yes + +set mbox_type = Maildir +set folder = ~/Mail/whatsapp +set postponed = +Drafts # borradores locales +unset trash # delete = remove the local copy (does not delete on WhatsApp) +set copy = no # sent messages come back through the chat +set sendmail = "~/.local/bin/wamail send default" +set header_cache = ~/.cache/neomutt/whatsapp +set mail_check = 5 +set query_command = "~/.local/bin/wamail query default '%s'" + +# One mailbox per chat (WhatsApp order), spoolfile = most recent chat, alternates: +# generated by `wamail sync`. +source ~/.cache/wamail/default/mailboxes.muttrc + +# Ask whether to quote when replying (default no) and no Cc. The "." send-hook restores +# the settings values for the mail accounts. +send-hook . 'set include askcc' +send-hook '~t "@(c.us|g.us|lid)$"' 'set include=ask-no; unset askcc' + +macro index gG "~/.local/bin/wamail sync defaultsource ~/.config/neomutt/accounts/wa/default.muttrc" "WhatsApp: sincronizar ahora" +macro index,pager gA "unset pipe_decode~/.local/bin/wamail archive defaultset pipe_decodesource ~/.config/neomutt/accounts/wa/default.muttrc" "WhatsApp: archive/unarchive the chat" +macro index,pager gR "unset pipe_decode~/.local/bin/wamail react defaultset pipe_decode" "WhatsApp: react to the message" +macro index,pager gX "unset pipe_decode~/.local/bin/wamail delete defaultset pipe_decode" "WhatsApp: delete message (everyone / me)" -- cgit v1.2.3