by purcell

purcell /emacs.d

An Emacs configuration bundle with batteries included

5.6K Stars 1.9K Forks Last release: Not found BSD 2-Clause "Simplified" License 3.1K Commits 0 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

Build Status Support me

A reasonable Emacs config

This is my emacs configuration tree, continually used and tweaked since 2000, and it may be a good starting point for other Emacs users, especially web developers. These days it's somewhat geared towards OS X, but it is known to also work on Linux and Windows.

Emacs itself comes with support for many programming languages. This config adds improved defaults and extended support for the following, listed in the approximate order of how much I use them, from most to least:

  • Haskell / Purescript / Elm
  • Ruby / Ruby on Rails
  • SQL
  • Javascript / Typescript / Coffeescript
  • HTML / HAML / Markdown / Textile / ERB
  • Common Lisp (with Slime)
  • Python
  • Rust
  • Clojure (with Cider and nRepl)
  • PHP
  • Erlang

In particular, there's a nice config for autocompletion with company, and flycheck is used to immediately highlight syntax errors in Ruby, Python, Javascript, Haskell and a number of other languages.

Supported Emacs versions

The config should run on Emacs 24.5 or greater and is designed to degrade smoothly - see the CI build - but note that much newer versions are required for an increasing number of key packages, so to get full functionality you should use the latest Emacs version available to you.

Some Windows users might need to follow these instructions to get TLS (ie. SSL) support included in their Emacs.

Other requirements

To make the most of the programming language-specific support in this config, further programs will likely be required, particularly those that flycheck uses to provide on-the-fly syntax checking.


To install, clone this repo to

, i.e. ensure that the
contained in this repo ends up at
git clone https://github.com/purcell/emacs.d.git ~/.emacs.d

Upon starting up Emacs for the first time, further third-party packages will be automatically downloaded and installed. If you encounter any errors at that stage, try restarting Emacs, and possibly running

M-x package-refresh-contents
before doing so.


Update the config with

git pull
. You'll probably also want/need to update the third-party packages regularly too:

M-x package-list-packages, then U followed by x.

You should usually restart Emacs after pulling changes or updating packages so that they can take effect. Emacs should usually restore your working buffers when you restart due to this configuration's use of the


Changing themes and adding your own customization

To add your own customization, use M-x customize, M-x customize-themes etc. and/or create a file

which looks like this:
... your code here ...

(provide 'init-local)

If you need initialisation code which executes earlier in the startup process, you can also create an


If you plan to customize things more extensively, you should probably just fork the repo and hack away at the config to make it your own! Remember to regularly merge in changes from this repo, so that your config remains compatible with the latest package and Emacs versions.

Please note that I cannot provide support for customised versions of this configuration.

Similar configs

You might also want to check out


Support / issues

If you hit any problems, please first ensure that you are using the latest version of this code, and that you have updated your packages to the most recent available versions (see "Updates" above). If you still experience problems, go ahead and file an issue on the github project.

-Steve Purcell

πŸ’ Support this project and my other Open Source work

πŸ’Ό LinkedIn profile

✍ sanityinc.com

🐦 @sanityinc

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.