fix(alot): stop shipping real mail identity as the tracked default

alot/config was symlinked directly into ~/.config/alot, and mail-notmuch.sh
wrote real account details straight back into that tracked repo file — so a
fresh clone/deployment inherited a real name/email/maildir path as alot's
configured identity by default, and any re-run of the install risked
committing real PII back into the repo.

alot/config is now a template with placeholder identity (bindings unchanged).
shell-setup.sh seeds it into ~/.config/alot/config via a one-time copy
instead of a symlink, and mail-notmuch.sh writes real account details into
that local copy only — never back into the tracked file.

No password was ever involved: msmtp/mbsync credentials live in
~/.msmtprc/~/.mbsyncrc, which were never tracked in the repo, in the current
tree or anywhere in git history (verified via git log -p across all history).
main
Amir Alexander Abdelbaki 2026-07-30 16:30:02 +02:00
parent c16a17f10b
commit 4afba5d3ea
3 changed files with 28 additions and 12 deletions

View File

@ -1,10 +1,15 @@
# [accounts] is intentionally a placeholder: this file is a TEMPLATE, seeded
# (copied, not symlinked) into ~/.config/alot/config by shell-setup.sh. Real
# account details are written into that local copy by mail-notmuch.sh, never
# back into this tracked file — so a fresh clone never ships (or auto-uses)
# anyone's real mail identity.
[accounts] [accounts]
[[main]] [[main]]
realname = amir alexander abdelbaki realname = Your Name
address = amir@abdelbaki.eu address = you@example.com
sendmail_command = msmtp -a main sendmail_command = msmtp -a main
sent_box = maildir:///home/themiro/Mail/Sent sent_box = maildir:///home/you/Mail/Sent
draft_box = maildir:///home/themiro/Mail/Drafts draft_box = maildir:///home/you/Mail/Drafts
[bindings] [bindings]
[[search]] [[search]]

View File

@ -128,10 +128,15 @@ EOF
chmod +x "$MAILDIR/.notmuch/hooks/post-new" chmod +x "$MAILDIR/.notmuch/hooks/post-new"
# ── alot ────────────────────────────────────────────────────────────────────── # ── alot ──────────────────────────────────────────────────────────────────────
# The bindings section lives in ~/Dotfiles/alot/config (symlinked by shell-setup.sh). # Real account details go into the LOCAL runtime config, never into the
# Write only the account block, which contains machine-specific paths/identity. # tracked ~/Dotfiles/alot/config template — that file is seeded (copied) into
log "Writing account details into ~/Dotfiles/alot/config..." # place by shell-setup.sh and ships only placeholder identity, so a fresh
ALOT_CFG="$HOME/Dotfiles/alot/config" # clone never carries anyone's real mail account by default. Seed it here too
# in case this module runs standalone before shell-setup.sh has.
ALOT_CFG="$HOME/.config/alot/config"
mkdir -p "$(dirname "$ALOT_CFG")"
[[ -f "$ALOT_CFG" ]] || cp "$HOME/Dotfiles/alot/config" "$ALOT_CFG"
log "Writing account details into ~/.config/alot/config..."
# Use an inline Python script to splice the [accounts] block into the existing # Use an inline Python script to splice the [accounts] block into the existing
# config file. sed struggles with multi-line replacements; Python's re.sub with # config file. sed struggles with multi-line replacements; Python's re.sub with
# re.DOTALL handles the entire block atomically and overwrites any prior values. # re.DOTALL handles the entire block atomically and overwrites any prior values.

View File

@ -17,7 +17,8 @@
# ║ ~/.config/starship.toml — symlink to repo ║ # ║ ~/.config/starship.toml — symlink to repo ║
# ║ ~/.config/nvim/ — symlink to repo/nvim/ ║ # ║ ~/.config/nvim/ — symlink to repo/nvim/ ║
# ║ ~/.config/micro/ — copy from repo/micro/ (plugin state needs cp)║ # ║ ~/.config/micro/ — copy from repo/micro/ (plugin state needs cp)║
# ║ ~/.config/alot/ — symlink for email client config ║ # ║ ~/.config/alot/config — seeded copy (not symlink): keeps real mail ║
# ║ identity out of the tracked repo file, see alot/config comment ║
# ║ ~/.config/yazi/ — symlink for file manager config ║ # ║ ~/.config/yazi/ — symlink for file manager config ║
# ║ ~/Pictures/fflogo.svg — logo asset ║ # ║ ~/Pictures/fflogo.svg — logo asset ║
# ╚══════════════════════════════════════════════════════════════════════════════╝ # ╚══════════════════════════════════════════════════════════════════════════════╝
@ -196,9 +197,14 @@ ln -sf ~/Dotfiles/nvim ~/.config/nvim
log "Syncing neovim plugins (lazy.nvim)..." log "Syncing neovim plugins (lazy.nvim)..."
nvim --headless "+Lazy! sync" +qa 2>/dev/null || true nvim --headless "+Lazy! sync" +qa 2>/dev/null || true
# alot email client config — symlink # alot email client config — seeded copy, NOT a symlink. alot/config in the
rm -rf ~/.config/alot # repo is a template with placeholder account details (bindings are real);
ln -sf ~/Dotfiles/alot ~/.config/alot # mail-notmuch.sh later writes real account info into the local copy only, so
# a fresh clone never ships or auto-adopts anyone's real mail identity. Only
# seed on first install: never overwrite an existing local config (that would
# clobber real account details written by mail-notmuch.sh on a later re-run).
mkdir -p ~/.config/alot
[[ -f ~/.config/alot/config ]] || cp ~/Dotfiles/alot/config ~/.config/alot/config
# yazi file manager config — symlink # yazi file manager config — symlink
rm -rf ~/.config/yazi rm -rf ~/.config/yazi