- Shell 100%
| accounts | ||
| scripts | ||
| .gitignore | ||
| colors.mutt | ||
| mailcap | ||
| neomuttrc | ||
| neomuttrc.common | ||
| neomuttrc.tor | ||
| README.md | ||
neomutt-config
Security-focused NeoMutt configuration with multi-account support and anonymous Usenet posting via a mail2news gateway over Tor.
Full write-up: Posting to Usenet Anonymously with NeoMutt and Mail2News over Tor
Features
- Multi-account IMAP/SMTP (STARTTLS, port 143/587)
- Mail2news via Tor — post to Usenet through a
.onionSMTP gateway, no IP exposed - YubiKey PIV Ed25519 signatures — automatic signing with hardware key (PGP-like clearsign format)
- F7/F9 macro → interactive post script (newsgroup, subject, editor, review, send)
- Ephemeral
.invalidFrom address - No IMAP for the mail2news account — send-only
Requirements
| Package | Purpose |
|---|---|
neomutt |
MUA |
tor |
Tor daemon (127.0.0.1:9050) |
torsocks |
Tor proxy wrapper |
swaks |
SMTP test/send tool |
vim |
Message editor |
yubisigner-cli |
YubiKey PIV signing (optional) |
On Arch:
pacman -S neomutt tor torsocks swaks
On Debian/Ubuntu:
apt install neomutt tor torsocks swaks
YubiKey signing (optional)
For automatic post signing with YubiKey PIV Ed25519:
- Configure YubiKey PIV slot 9c with Ed25519 key (one-time setup)
- Install yubisigner-cli:
cd ~/bin git clone https://git.virebent.art/virebent/yubisigner-cli cd yubisigner-cli go build -o yubisigner-cli main.go - Install
vim-yubisignerwrapper from this repo:mkdir -p ~/bin cp scripts/vim-yubisigner ~/bin/vim-yubisigner chmod +x ~/bin/vim-yubisigner
The mail2news account is pre-configured to use vim-yubisigner as editor, which automatically signs messages with YubiKey after editing.
Installation
git clone https://git.virebent.art/virebent/neomutt-config
cd neomutt-config
mkdir -p ~/.config/neomutt/accounts
cp neomuttrc.common ~/.config/neomutt/neomuttrc.common
cp neomuttrc.tor ~/.config/neomutt/neomuttrc.tor
cp colors.mutt ~/.config/neomutt/colors.mutt
cp mailcap ~/.config/neomutt/mailcap
cp accounts/mail2news ~/.config/neomutt/accounts/mail2news
cp scripts/m2n-prompt.sh ~/.config/neomutt/m2n-prompt.sh
chmod +x ~/.config/neomutt/m2n-prompt.sh
Mail2news usage
Start Tor, then launch NeoMutt through the Tor profile:
torsocks neomutt -F ~/.config/neomutt/neomuttrc.tor
Press F9 from the index or pager. Answer the prompts:
Newsgroup(s): misc.test
Subject: test post
Write your message in the editor, review the draft, send.
The post goes to mail2news@qee4i7sags6phsvb2yodwecfj7noimfhhalsjktsvikrwotxzis3raad.onion,
which forwards to the NNTP server and propagates from there.
Posts are automatically signed with YubiKey PIV Ed25519 in PGP-like clearsign format if vim-yubisigner is configured.
Send directly from the shell (no NeoMutt)
torsocks swaks \
--server qee4i7sags6phsvb2yodwecfj7noimfhhalsjktsvikrwotxzis3raad.onion:25 \
--from nobody@virebent.invalid \
--to mail2news@qee4i7sags6phsvb2yodwecfj7noimfhhalsjktsvikrwotxzis3raad.onion \
--header "Newsgroups: misc.test" \
--header "Subject: test post" \
--body "This is a test."
File layout
~/.config/neomutt/
├── neomuttrc # main profile (clearnet accounts)
├── neomuttrc.common # shared UI/GPG/sidebar settings
├── neomuttrc.tor # Tor profile — sources mail2news account, F9 macro
├── colors.mutt # color theme
├── mailcap # MIME handlers
├── m2n-prompt.sh # mail2news posting script (called by F9)
└── accounts/
├── account1 # example IMAP/SMTP account
├── account2
├── account3
└── mail2news # send-only, onion SMTP, ephemeral From
Keybindings
| Key | Action |
|---|---|
| F2 | Switch to account 1 |
| F3 | Switch to account 2 |
| F4 | Switch to account 3 |
| F9 | Post to Usenet |
| B | Toggle sidebar |
Gateway address
The mail2news gateway on virebent.art accepts unauthenticated SMTP on port 25
and forwards to Peanny NNTP (peannyjkqwqfynd24p6dszvtchkq7hfkwymi5by5y332wmosy5dwfaqd.onion) over Tor. No registration required.
SMTP/mail2news onion:
qee4i7sags6phsvb2yodwecfj7noimfhhalsjktsvikrwotxzis3raad.onion:25