Skip to main content

How I Atom (for prose)

5 min read

Summary: The packages, prose linters, and configuration tweaks I use to turn the Atom text editor into a powerful Markdown writing environment.

Heads up! This post is archived and here for historical purposes. It may no longer be accurate or reflect my views. Proceed at your own risk.
Table of contents

Inspired by @sroberts’ “How I Atom” post, I thought I’d share a bit about my own computering environment. I’ve been using Atom as my day-to-day text editor (and probably the single most used app after my web browser) since the day I joined GitHub, nearly four years ago, and about a year before it was publicly released.

Atom is a simple, hackable text editor, but what makes Atom so powerful is its extensibility and its ecosystem. Some 5,000 community-contributed packages (and counting) extend Atom’s functionality, and you can customize Atom’s behavior using just HTML, CSS, and JavaScript.

First and foremost, I’m a developer. While these days I may only occasionally write more than a few lines of code at any given time, over the years, I’ve grown accustomed to developer tools and developer workflows for all sorts of knowledge work, even if now, the majority of my time in Atom is spent authoring Markdown and prose. It’s natural then, that I use a developer-centric text editor for the majority of my work, even if it’s authoring English, and not say, Ruby.

Spending so much time in Atom, I’ve taken a great deal of care to shape every facet of my writing environment, and I’d like to share both some of the tweaks I’ve made, and how I manage them:

Atom packages I use

I highly recommend taking a look at the packages @sroberts mentioned, if you haven’t already, as I used most of them every day. Beyond that:

Quality of life

These packages shave seconds (sometimes minutes) off your day, and given their small size (and overhead), really set Atom apart from other text editors:

  • atom-alignment: Have a bunch of -s, :s, or =s that your type-A mind can’t stand to see vertically unaligned? Banish them with a single keystroke.
  • highlight-selected: This one’s hard to appreciate until you actually use it (or until it’s missing). Double-click a word to highlight all its uses in the current buffer. Useful for manual find-and-replace operations.
  • theme-switcher: Switch between dark and light themes, helpful if you ever work outside.

Markdown

I use a number of Markdown-specific packages. Here are a few:

  • atomic-chrome: One of my favorite Atom plugins. If you’re in a textarea in Google Chrome, click the menu icon to open that textarea as an Atom editor, complete with all of Atom’s bells and whistles.
  • markdown-lists: If you’re in the middle of a Markdown list and hit return, it inserts the bullet on the next line for you.
  • markdown-table-formatter: If you create a Markdown table, on save, it aligns the columns such that the table is both human and machine readable.
  • wordcount: Exactly what it sounds like, it adds a word (and character) count to the gutter. Useful for composing conference abstracts, Tweets, basically anything with a set limit.

Linters

A linter is an automated script that goes through the current file and highlights deviations from predefined stylistic rules, the way a word processor flags spelling or grammar mistakes. I can’t recommend them enough.

Chances are, there’s a linter available for your language of choice, including prose. Whether you’re learning the language or a veteran, the contextual hints it gives you will improve whatever it is you’re writing.

Prose linters

I credit a few prose-specific linters with improving my day-to-day writing:

  • linter-write-good: A grammar linter, Write Good checks all sorts of things, like falses, passive voice, and unnecessarily wordy phrases.
  • linter-markdown: This linter, based on remark, lints Markdown formatting, ensuring things like headings are surrounded by whitespace and bulleted lists are consistent.
  • linter-alex: Alex checks your writing for biased or insensitive language.
  • linter-just-say-no: Discourages you from using hedge words that weaken the impact of your writing.

How I manage Atom

When I set up a new machine, among the first things I do is symlink ~/.atom/config.cson and ~/.atom/keymap.cson to copies versioned as part of my dotfiles. If that’s beyond your technical prowess (or willingness), or you need to keep secrets in your Atom config (like API keys), you can use something like Mackup to sync the config files via Dropbox. Since Atom stores its config as nearly human-readable .cson files, it’s easy to version settings and keep them in sync across machines. If you’re really interested, since my dotfiles are open source, you can even browse my Atom config.

You may also notice that I have a packages.txt file in my Atom config, with each plugin I want to use listed on its own line. While not a standard implementation, to be sure, Atom does come bundled with its own Atom Package Manager (APM), which can be fed a list of package files, via the apm install --packages-file packages.txt command, to install a list of desired packages. You can even create that list from your existing plugins with this one-liner.

Working largely in prose, I can’t imagine using a more traditional word processor over something that, when customized, is more powerful and more purpose built. I can’t count the number of times I’ve pasted in text I’m proofreading and implemented the automated suggestions (or written ad hoc rules to check for my own style nits).

That’s how I Atom, but there are a bajillion packages (and workflows) out there. What packages do you use that you can’t live without? How do you Atom?

Keep reading

Ben Balter

I'm Ben Balter, and I write here about developer platforms, product and engineering leadership, open source, and showing your work. I spent over a decade building developer platforms at GitHub. For five years I was a product manager for trust and safety, shipping 500+ features and the API endpoints behind them to 50M+ developers. I also led a bottom-up rewrite of GitHub Pages and wrote the open source library behind GitHub's license detection, and my open source projects have hundreds of millions of downloads. I wrote Open and Async, the playbook for remote and distributed teams, and shipped a Model Context Protocol (MCP) server alongside it so agents can query it directly. More about the author

Follow along: Bluesky LinkedIn

Originally published December 23, 2016 View revision history

This page is open source Help improve this article on GitHub

Keyboard shortcuts

Search

  • / or ⌘ K Open search
  • ↓ or j ↑ or k Move through results
  • Enter Open the selected result
  • Esc Close search

Go to

  • g then h Home
  • g then p All posts

This page

  • y Copy link to this page
  • ? Show this list