Skip to content
An Emacs configuration for the stubborn martian vimmer
Branch: master
Clone or download
hlissner Merge branch 'develop'
* develop: (145 commits)
  v2.0.9 bump
  tools/neotree: refresh pane when jumping to it
  Fix doom module file templates when emacs.d is a symlink
  Update changelog
  ibuffer-use-other-window = t (hand off to popup system)
  Improve docstring for doom-real-buffer-functions
  Conform unit test macros to naming scheme
  Move doom*quit-window to core-editor
  feature/snippets: use default yas-snippet-dirs (harmless)
  lang/org: wrap smartparens config in after!
  Fix file template for Doom module readmes
  Fix some file-templates not being inserted
  lang/cc: fix irony-mode complaining in non-C modes, like php-mode
  Update & reformat module readmes for v2.0.9
  Minor, general refactor & comment updates
  +jump/documentation: always prompt for provider with online fallback
  core-projects: refactor projectile var init
  Refactor doom/info
  Fix interactive usage of doom//byte-compile-core
  Fix async package functions not running from right cwd
Latest commit 5dacbb7 Jan 1, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Add issue/pr templates Dec 31, 2017
bin doom-doctor: minor refactor Dec 31, 2017
core v2.0.9 bump Jan 2, 2018
.gitignore Add modules/private to gitignore Dec 24, 2017
.travis.yml Update changelog Jan 1, 2018
LICENSE Update license Jan 6, 2017
Makefile Fix ERT not running properly on make test Dec 10, 2017 Change CHANGELOG link in readme to develop branch Dec 18, 2017
init.example.el Add private/default Dec 23, 2017

Release tag Master Build Status Develop Build Status MIT

Main screenshot

Wiki | Screenshots | Troubleshooting | FAQ | Changelog

It is a story as old as time. A stubborn, shell-dwelling, and melodramatic vimmer -- envious of the features of modern text editors -- spirals into despair before finally succumbing to the dark side. This is his config.

Doom strives to be fast, fabulous and hacker friendly. It is tailored for neckbeards with blue belts or better in command-line-fu, Elisp and git.

Doom only supports Emacs >= 25.1, and is tested on Arch Linux 4.7+ and MacOS 10.11. YMMV on other platforms.

Quick start

git clone ~/.emacs.d
cd ~/.emacs.d
cp init.example.el init.el  # maybe edit init.el
make install

Don't forget to run make every time you modify init.el!

Visit the wiki for a more detailed guide on installing, customizing and grokking Doom.

Feature highlights

  • A fast, organized and opinionated Emacs configuration with a command line interface.
  • A custom, declarative package management system that combines package.el, use-package and quelpa, allowing you to manage packages from the command line and install packages from sources other than ELPA.
  • A popup management system (powered by shackle) that minimizes the presence and footprint of temporary and/or disposable buffers.
  • A vim-like experience with evil-mode, including ports for several vim plugins, C-x omnicompletion and a slew of custom ex commands.
  • Integration with editorconfig. Let someone else argue about tabs and spaces. (spaces, duh).
  • Code completion for many languages, powered by company-mode (some languages may have external dependencies).
  • Project-awareness powered by projectile, with tools and an API to navigate and manage projects and their files.
  • Fast project search (and replace) utilities, powered by the_silver_searcher, ripgrep and wgrep, with integration for ivy (the default), helm and ido.
  • Isolated and persistent workspaces powered by persp-mode. Also substitutes for vim tabs.
  • Inline/live code evaluation (using quickrun), including REPLs for a variety of languages.


Found a problem? Here are some things to try:

  • Run make install to ensure all plugins are installed.
  • void-function or void-variable errors could signal an out-of-date autoloads file. Run make autoloads or M-x doom//reload-autoloads to update it.
  • Scan for common OS/environment issues with make doctor.
  • Never debug byte-compiled code. It will interfere in subtle ways. Clean up *.elc files with make clean or M-x doom//clean-byte-compiled-files.
  • Check the FAQ to see if your issue is mentioned.
  • Check the relevant module's, if one exists. There may be extra steps to getting certain features to work.

If all else has failed, file a bug report.


Doom (and my Emacs work in general) is a labor of love and incurable madness, done on my spare time. It wasn't intended for public use, but I enjoy making Doom a resource for others.

If you'd like to support my efforts, I welcome contributions of any kind:

  • I love pull requests and bug reports. Elisp pointers are especially welcome. Seriously, don't hesitate to tell me my Elisp-fu sucks!
  • Talk to me about Emacs workflow, ideas or tooling. Or talk to me about gamedev, or pixel art, or anime, or programming, or the weather, or band camp. Whatever. I don't mind. Holler at
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.