Getting back at it @martinthebad
c64.jpg ─ □ ✕
thank you
bannerz.sys ─ □ ✕
libre culture open source it all make art encrypt everything junkerz
nav.exe ─ □ ✕
20260522 Getting back into it...

Kernel Mailing List Setup neomutt + lei + b4

So here I am now, behind the terminal. I've been away from the keyboard for around 12 months now. I recently got brave enough to open the laptop and start coding again. doing a few Hackerranks to get the head thinking in algorithms again. I've been missing all the updates to lkml so I got neomutt working with some new tools. for pulling out patches from the mailing list.

So I couldn't help but notice this: flipper one and so I'll be checking in on the rk3576 patches. Then gotta decide which SBC to get, and getting up to speed with linux-rockchip over the coming weeks. Loads to do so watch this space for updates.

What was installed

sudo dnf install b4 neomutt lei
  • b4 kernel patch tool: fetches, applies, and sends patch series
  • neomutt terminal mail client (aliased as mutt)
  • lei Local Email Interface (from public-inbox); pulls mail from lore.kernel.org into local Maildir

Directory structure created

~/Mail/
├── rk3576/          # RK3576-tagged patches (rockchip + media lists, 3 months)
├── linux-rockchip/  # full linux-rockchip list (1 month)
├── linux-s390/      # s390 list (1 month)
├── kvm/             # KVM list (1 month)
└── lkml/            # LKML (3 days firehose, keep window short)

lei setup

Add lore.kernel.org remotes (done once)

lei add-external https://lore.kernel.org/linux-s390/
lei add-external https://lore.kernel.org/kvm/
lei add-external https://lore.kernel.org/linux-kernel/
lei add-external https://lore.kernel.org/linux-rockchip/
lei add-external https://lore.kernel.org/linux-media/

Create saved searches (done once)

lei q -o ~/Mail/linux-s390 --threads --save \
  '(l:linux-s390.vger.kernel.org) AND rt:1.month.ago..'

lei q -o ~/Mail/kvm --threads --save \
  '(l:kvm.vger.kernel.org) AND rt:1.month.ago..'

lei q -o ~/Mail/lkml --threads --save \
  '(l:linux-kernel.vger.kernel.org) AND rt:3.days.ago..'

lei q -o ~/Mail/linux-rockchip --threads --save \
  '(l:linux-rockchip.lists.infradead.org) AND rt:1.month.ago..'

# RK3576-specific: subject-filtered across rockchip + media lists
lei q -o ~/Mail/rk3576 --threads --save \
  '(l:linux-rockchip.lists.infradead.org OR l:linux-media.vger.kernel.org) AND (s:rk3576 OR s:RK3576) AND rt:3.months.ago..'

Daily refresh

lei up --all          # refresh every saved search
lei up ~/Mail/rk3576  # refresh just one

Put in cron for automation: 0 * * * * lei up --all

I did not do this, but you can if you want to. I prefer to just pull the thread when I want to check out what's new.

Query syntax quick reference

  • l:list.address list address (dots not @)
  • rt:1.month.ago.. received time window (open-ended = up to now)
  • s:keyword subject contains keyword
  • AND / OR boolean operators
  • lei ls-search list all saved searches
  • lei ls-external list configured remotes

neomutt config (~/.muttrc)

Key settings explained: I didn't really like doing some of the defaults so put together something saner. This may yet need more refinement, if anybody got any tips on this, give me a shout!

set mbox_type = Maildir        # lei produces Maildir, not mbox
set folder    = ~/Mail         # root of all mailboxes
set spoolfile = ~/Mail/rk3576  # which mailbox opens by default

set sort     = threads         # group messages into threads essential for patches
set sort_aux = last-date-received
set collapse_all               # start with threads collapsed

set pager_stop = yes           # don't auto-advance to next message at end of page
unset markers                  # no + markers on wrapped lines (patches look cleaner)

Keybindings configured

Key Action
j / k next / previous thread
J / K next / previous single message
[ / ] previous / next thread
n next unread thread
<space> (index) jump to next unread mailbox
<space> (pager) page down through message
g / G first / last entry
Ctrl+N / Ctrl+P next / previous mailbox in sidebar
Ctrl+O open highlighted mailbox in sidebar
d delete (asks for confirmation)
q back / quit
h show full headers (find Message-ID for b4)

Reload config without restarting

From within neomutt: :source ~/.muttrc

b4 working with patches

Pull and apply a patch series

# find message-id: open message in neomutt, press h, look at Message-ID: header
# e.g. 20260420-rk3576-pwm-v5-0-ae7cfbbe5427@collabora.com

# download latest revision as ready-to-apply mbox (folds in Reviewed-by etc.)
b4 am <message-id>
git am ./v5_series-name.mbx

# fetch and apply in one step
b4 shazam <message-id>

Compare revisions (review what changed v4 → v5)

b4 diff <message-id>

Send your own patches

b4 prep -n my-feature -f origin/master   # start a tracked series
# ... write commits ...
b4 prep --edit-cover                     # write cover letter
b4 prep --auto-to-cc                     # fill To:/Cc: via get_maintainer.pl
b4 send --dry-run                        # preview
b4 send                                  # send

Find maintainers for a file/patch

./scripts/get_maintainer.pl <file-or-patch>
./scripts/get_maintainer.pl arch/s390/

Kernel list etiquette (enforced, not optional)

  • Plain text only no HTML
  • Reply inline/interleaved, trim quoted text, never top-post
  • Wrap prose at 72–75 columns
  • Patches sent in-reply-to the cover letter (b4 handles this)
  • One logical change per patch; explain the why in the commit message
  • So that's it for now anyway. See you around here another time.

Tune in next time. Same Bat time. Same Bat channel
gb.log
Guestbook
rollin.ini ─ □ ✕
solarpunk.bat ─ □ ✕
garden wizard