Email in Emacs Redux

I have moved to reading and responding to all my email in Emacs. I honestly didn’t think I would ever be able to make this jump because of silly things like signatures, HTML email and my address book. But the reality of how I actually use email on a day to day basis is a big part of why this was possible.

As it happens, most of my email work is replying to other people. As an engineer on a product team I start very few email threads, and even fewer with people outside the organization. Thus, the lack of the company standard HTML signature in my outgoing emails is rarely a problem. On the once or twice a month occurrence of needing to send an external-facing email, I can pop open Gmail in a browser and take care of it.

But for quickly replying to folks, parsing tasks into my daypage (more on this later) and saving content to read later, Notmuch has been a dream.

So the cat’s out of the bag. As in my last post about email in Emacs, I use Notmuch along with mbsync for getting email and msmtp to send email. I also host my own email server on a Digital Ocean VPS running mailinabox 1. This makes the configuration with mbsync and msmtp pretty painless.

The other important discovery I made is muchsync 2. This allows me to run the mbsync task for looking for new email on a server in the house that’s always on. Then each other device I want to read and respond to email just runs a `muchsync` task that hits up that server and syncs the state of the notmuch tag database.

The result is delightful. I can clear out my inbox on one machine and find it all cleared up on all the others. Combine that with the ability to quickly respond to email within Emacs, copy links to specific messages and capture them to Org Mode, and archive things I don’t care about, the whole thing is really effective.

One aspect of this is that I have my email setup to default to showing the plaintext version, with a tab-able HTML view powered by eww. This works surprisingly well. As usual, my configuration is in my dotfiles, specifically my `+mail.el` 3 configuration in Doom Emacs.

Check it out and I hope you can get a handle on your email.

In Pursuit of Flow

I don’t make a habit of watch the Olympics. But I remember a moment back in 2018 when I happened to turn on coverage just as they were televising a gold-winning snowboard cross run by Red Gerard1. He blew out all the other riders in his group to take the gold. Silver was significantly behind him. What stood out to me watching him ride, however, was how keyed in he was to the whole thing.

I don’t know how much snowboarders are allowed to practice the cross course before the event, but given that he was on the hill with 9 other riders who didn’t look nearly as keyed in meant there was likely more to what was going on than simple familiarity with a series of cuts, jumps and bombs.

What Gerard was, of course, was in flow. I am not sure if you’ve ever experienced flow, but beyond snowboarder cross, the state of mind is also illustrated in Zhuang Zhou’s philosophical writing from 4th century BCE China. In his seminal work, Zhuang discusses a butcher who, having so mastered his craft, he is not cutting into an animal, but rather his motion guides the blade of the knife through the various cuts he needs to make to perfectly separate the carcass.

Life, it seems to me, is the pursuit of flow. In flow, everything goes from one to the next without deliberate thought of how to achieve a specific end. There is no value judgment on the task achieved. Flow is not about good or bad, it is about the accomplishment of a given task. There is different work to be done to assess value, but once value has been assessed and it’s time to work, we all seek flow, that place where don’t need to know we’re our best selves, but where we simply are our best selves and are doing what we set out to do with as little thought as possible.

Distraction free

I try to keep notifications in my life to a bare minimum. I get tips from friends or co-workers about making sure notifications on my phone are disabled while I sleep. I disable them all the time. The one thing I allow are text messages to vibrate my Garmin watch, and I’m on the fence as to whether this is truly necessary.

There are people who’s professions wont allow this. I get that. But I also know that most people build narratives about getting a late night text about the health of a loved one to justify always getting pinged when Facebook needs your attention, or a new email comes in. These are largely untrue, or at least building a process into your life for events that may never happen.

Instead I’ve made distractions I encounter my own fault. I can’t blame Facebook for pinging me in the middle of focused work. I took control of what I could and my responsibility now is to check for messages when I need to. I check slack quite often, after each chunk of work, emails a few times a day, and social media rarely.

Have you ever thought about the value of all the different notifications in your life? If it not, it may be worthwile to audit all the things that vie for your time. It is your time after all, and with ownership comes responsibility.

Imagining yourself doing

When people say “I can’t do that” most of the time, they’re actually saying “I can’t see myself doing that.” When I started running, a lot of people said they didn’t know how I could run so far, or that they could never do that.

When I started, I didn’t imagine I’d run marathons. I just started with 1 or 2 mile runs. Those 2-mile runs were hard, and sometimes they still are.

Yet being out on the road gets you up on that hill where you have a better view of your future self. One day I saw myself going farther, and then I went farther.

What do you see yourself doing? What steps can you take to get a better vantage point of where you could be? Little steps is all it takes.

Trompe l'oeil

When running, you will sometimes come to a path that, for whatever reason, is difficult to read. While the incline may go up, your eye and, subsequently your mind, says it’s going down. Such visual tricks are called trompe l’oeils, literally “trick of the eye” in French.

Personally, these tricks often have the effect of letting me run harder uphill than I otherwise would, revealing the incredible amount of mental power that goes into distance running. If my mind does not believe I’m going uphill, I run faster, even if I am in fact going uphill. Most people would consider this a cool trick to get you to run faster. Unless you didn’t want to run faster.

In a race, such tricks would be welcome. I am going all-out, pushing myself to the limit to achieve a personal record, or, in rare cases, to actually win the race outright. But in training, such exertions are often unwelcome. Outside of races, pushing yourself as hard as you can go is generally frowned upon. There is no use destroying your capacity to run tomorrow with a hard training run today. Training theory says you should lay down a base of solid, slower running, and save faster, max-heartrate runs for the occasional intense workout.

This, it occurs to me, is a perfect analogy for how we use our ability to reason, and to conversely to simply react. Danny Kahneman would have called this fast thinking and slow thinking. You would expect that in most cases, having a “gut feeling” about something would be great. But in practice, such impulsive decision making often gets us into trouble. Our slow thinking – our ability to reason – ought to be a our base, slow training thinking. This sort of thinking prepares us for moments where we need our fast thinking, or our reactionary thought.

This has sweeping implications for all sorts of personal interactions. I’m quite interested in how this plays into Nate Walker’s ideas of “moral imagination” and radical empathy. You see, most of us are actually not every good at empathyzing. Sympathy comes naturally to a great many people. We can imagine the pain, or anger someone is feeling when we are in the presence of it. But empathy asks us not just to feel someone’s emotional state, but to understand them.

The problem, as I see it, is that, like with running, there are trompe l’oeils all around us. Places where we think we understand why someone is acting the way they are.

“She’s just pissed because I forgot to call last night.”

“He’s still frustrated because he didn’t have time to get coffee this morning”

On the face of it, those very well might be true. Or they might not. When do we know we’re running hard up hill? In most places in life, this is completely unimportant to quickly address someone’s emotional state. Far more important is to be patient, and understanding without necessarily assuming that we can know right now what’s bothering someone, or why they’re doing what they’re doing.

“She struggles with abandonment issues since her father left when she was 8, and while you didn’t call, what upset her most was feeling alone.”

“He was up really late last night stressing about work that was supposed to be done. Not getting cofffee made things worse, but were hardly what cause his foul mood.”

In both of these cases, there are underlying mental states. It requires imagination and trust in our fellow humans to truly empathize in these circumstances. While the road appeared to go down hill, and we were all into bombing down it, the reality is that we burned ourselves out on a training run that tricked us into going up hill. We would have been better served to hold our judgment for a little longer, and asked more questions, and listened more closely. Rarely do we need to exercise empathy quickly, and applying Walker’s “moral imagination” can get us a lot closer to understanding a lot more people, and making all our lives a lot easier.

Nethack

I discovered Nethack for the first time this weekend. Well, I knew it existed for a while, but I had always sort of poked around at it, generally unimpressed. But on Friday there was a lobste.rs post about a speedrun of nethack that totally captured my attention. The runners used the inventory at the start of a randomly generated map to determine which seed was used by the RNG to build the dungeon. From there, they had a general sense of what would work. This resulted in an ascension, as victories are called, of sub 8 minutes. The previous best on the most popular nethack server, nethack.alt.org, was more than 90 minutes. Crazy.

All that to say that reading about their speedrun made me realized how much more there was in nethack. Much more. And now I’m hooked. I also joined the IRC channel for NAO and with IRCCloud I get notifications when I’m done with a game with my final score. It’s actually kind of delightful. Now I need to stop wasting time with it :)

Email in Emacs

I really did try mu4e. Really. But the setup required a custom emacs build on macos, and I am unfortunately constrained to Macs for work at the moment, so it was kind of a non-starter to jump through so many hoops to get it working. And of course, I also highly value resilience, and nothing says unresilient than not being able to successfully build a crucial feature like mail handling into your editor of choice.

So that occassioned a turn towards notmuch. Oh my, how delightful. At it’s simplest, notmuch is just a xapian-powered tag database for your email. Imagine that, no crazy indexers or long-polling to check for new email. Notmuch just tags and allows you to search your email.

Combined with isync’s mbsync and msmtp, I now have a really functional and resilient email seutp in Emacs. Even more delightful is looking through my tag database and realizing that if I tag things effectively, finding all those board agenda emails for church are just a tag search away.

Of course, such things were always available in Gmail or a mail client. But I was always unimpressed with how slow Thunderbird or Mail.app got with lots of messages. And Google is reading all my messages, so that sucks too.

Combine the ease of syncing and tagging messages, and the fact that they exist in a directory on my computer, synced via Dropbox to all my other computers and my email suddenly mine again, not living on an IMAP server that I hope doesn’t fail me.

Doomed Emacs

After a year or so of dedicating myself to getting Spacemacs setup just right, I made a pretty substanial jump a few weeks ago. I’m now running doom-emacs which provides fewer nice surprises (missing evil-surround shortcuts by default) than spacemacs, but loads much … much faster. The other day I found myself coding while sharing my screen on Zoom and is was painfully obvious what price I was paying for spacemacs not cleaning up after itself and generally lazy loading things leading to less than fast context switching.

I was willing to struggle through some the slower operations for my own sake, but getting caught with other people watching as my editor on a brand new computer struggled to do basic things like searching for symbols in the codebase was embarrassing.

I’m not done with Spacemacs. I still love the idea, and I also believe that half the problem was likely the way I was using it and configuring it. But part of the appeal of spacemacs are the defaults. And it was the defaults that was making it hard to use it on a daily basis.

Another nice aspect of Doom Emacs is that aside from a handful of evil-mode shortcuts, a lot of what you’re encouraged to use are stock emacs keystrokes. That means that I’m not learning some cryptic layer on org mode when I use emacs, I using the default keystrokes that I will find in vanilla emacs. That’s very useful and will hopefully make me a more respectable member of the emacs community, rather than a vim outcast.

Continuous tool improvement

I was reviewing the feeds I subscribe to in elfeed this evening when it occurred to me that a lot of my feeds have to do with Emacs. I will often blow through updates on feeds, making sure to only pickup things that are truly useful. But I discovered an amazingly high signal to noise ratio regarding tips for using Emacs more effectively. This got me thinking about how I couldn’t possible remember all this stuff, so I tossed some of the things I was learning in my learnings.org file to review later. At that point, it dawned on my how important tool choice is, and how important it is to learn how to use your tools effectively and be receptive to learning new things about them.

This could apply equally to any well made tool for any discipline (woodworking, drawing, research), but for me that means Emacs. Not everyone is going to ever need to touch Emacs. For me, I can’t imagine not having it, and everytime I learn something new, I get a little more effective with it.

For reference, tonight I learned how to make all URLs, regardless of buffer, clickable I also learned how to break an org-mode block in two with a single keystroke to insert a comment.

Reading Lists

Oh Goodreads. Your website is a cluttered mess. Your UX hasn’t been improved in years. The only value I derive from keeping my reading list on you is that my friends can see what I’m reading. Which is a neat trick, but since I’ve mostly given up on Facebook too, it not really enough to keep me.

I was an early adopter of Goodreads, but my life has taken a turn towards the personal and the text-based. I use Emacs (via spacemacs) as much as I can. Org-mode might be the single most impressive IDEA rendered into software I’ve ever seen. It simply makes the things I use on a regular basis more powerful and expressive, which is not something I can say for Word, Twitter, or Chrome. Those are merely tools. They don’t amplify my ability to document and create.

Really the post Leaving Goodreads is what convinced me to go, one more time, back to my reading list in org mode. But the killer feature this time around was ox-hugo, which allows me to easily dump Org-mode subtrees into a hugo-powered blog directory. A simple rsync later and I can publish random subtrees, including book reviews!

The whole thing is so elegant, I couldn’t have dreamed up the process if I had tried. The whole thing was truly an evolution of tools, and one that was only possible because each tool, Emacs, spacemacs, org-mode, hugo, ox-hugo, does it’s job so elegantly.