[Stopped] Provide an awesome, out-of-box, literate dotemacs for both newbies and nerds.
Emacs Lisp Makefile
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.


Oh My Emacs


Hey, emacsers,

I’ve been inactive on this project for a long long time, sorry about that since I’m busy on my personal business. And I’m looking for a new maintainer for this project since I’ve switched to spacemacs recently, and I must say that I’m really impressed by the work of spacemacs community.

The reason to switch to spacemacs:

  • Spacemacs is much more faster than oh-my-emacs due to its lazy-loading feature.
  • Spacemacs has the best community among all “dotemacs” project, unfortunately, I don’t have enough time to foster a community for oh-my-emacs.
  • Spacemacs has more packages support, which is called layers in its own words.
  • Spacemacs is driven by helm and evil, two of my favourite and the most powerful packages in emacs world, which is the same as oh-my-emacs.

Among all of the above, however, I still prefer oh-my-emacs’s org-mode based literate documentation. It’s an amazing experimentation and a wonderful journey for literate programming, in a modern way. This is the best part of oh-my-emacs.

And I think it’s better for emacs community to put major focus on one great project, so I think it’s time to end this experimentation. And I may contribute some of the tiny great features of oh-my-emacs to spacemacs, when I have time. If anybody still has some interest in oh-my-emacs and want to be the new maintainer, contact me and we can discuss some internal details.

Thanks. Thanks for all PR and contributions for oh-my-emacs. Happy with you in the last two years.



It is said that Emacs is “a great operating system, lacking only a decent editor”[1].

Yes, it is, it really is. In fact, Emacs has basic process control and management, window and frame management(just like windows manager in modern Linux desktop environment), programming APIs(yeah, elisp to emacs is what syscall and glibc to Linux), comprehensive manuals and documentation. The only limitation with Emacs is your imagination.

You can live in Emacs if you like.

But I won’t do that, since I want to watch video with mplayer, surf the Internet with Firefox/Chrome(not with emacs-w3m), listen to music with amarok. I use Emacs to do what it is good at, namely, text editing. To me, coding and writing.

This project was born one day I want to reorganize my messy .emacs.d. I’ve tried all the famous .emacs.d projects(such as prelude, starter-kit, etc) but none of them works the way I want it to.

Then I found emacs24-starter-kit, I was deeply attracted by its literate way to organize and embed elisp code in org-mode files, I wanted to make some contribution to make it a full-blown hacking environment, but I stopped after I dived into the code a little, since I want:

  • Adapt el-get instead of the builtin package.el, and
  • Have a better completion including auto-complete and various ac-sources projects for various programming languages.

The starter kit projects is just starter’s kit, what I want is a full-blown hacker’s kit. So I start my own project, oh-my-emacs, whose name is inspired by oh-my-zsh.


  • Better default settings with various eye candy, powerline, scrollbar, color-theme, fonts, etc.
  • Adopt el-get as the default package manager for Emacs, instead of the default builtin package.el, say goodbye to ./configure; make; make install and explicitly manually management of load-path. el-get also provides automatic documentation management, customizable user’s recipe support, etc.
  • Self-adapted, only install necessary packages when it satisfies the prerequisities. You need to install clang for auto-complete-clang, for example.
  • Modular, only load necessary packages as you need.
  • Literate, each package has comprehensive documentation or even a tiny tutorial with it, together with necessary web links. Say goodbye to old, out-dated emacs lisp code from Google.
  • Work as expected, completion every where when possible, semantic code completion through auto-complete with various ac backend, helm for minibuffer completion, etc.
  • Full-blown, oh-my-emacs is not another starter kit, it is hacker kit.

Quick Start

Simple enough, first, ensure you have a good network(Chinese users should get rid of GFW when possible to avoid many weird problems during first startup); second, ensure that you have installed the necessary tools pointed out by the Prerequisites sections from oh-my-emacs modules. Basically, you need to install the following packages in you operating system, which is the mandatory prerequisites of ome.org:

Please backup your old .emacs and .emacs.d before you join the journey:

git clone https://github.com/xiaohanyu/oh-my-emacs $HOME/.emacs.d

Then just fire up your Emacs and make a coffee, and you should have a full-blown Emacs OS!


Note that oh-my-emacs enabled evil by default, you can disable it globally by M-x evil-mode, however, I do recommend you enable it and try to adapt, ah, finally the Emacs OS get a good editor, evil.


You may miss the old M-x when you first start with oh-my-emacs, me too, before I fall in love with helm. I highly recommend you to adapt with the helm way. Believe me, helm will bring you lots of surprise.

There’re two key points for helm beginners:

  • In normal helm, TAB is not used as the traditional completion key. Maybe this is the most whirlwind turnaround with helm since so many packages use TAB for completion. Remember, TAB in helm is used to access the helm action menu. You may wonder, then, how can I do type completion in helm? The answer is, no need to do type completion explicitly. Just type, and helm will lead you to the right place. However, oh-my-emacs has binded TAB to helm-execute-persistent-action for you, which will makes you feel like home. Type C-z for amazing things, and C-SPC to select and do some cool.
  • oh-my-emacs bind the traditional C-x C-f to helm-find-files by default. You should use C-l to go to the precedent directory level instead of DEL.

What’s in oh-my-emacs

Now you know why Emacs is “a great operating system, lacking only a decent editor”.

ome-advancedevilEvil is an extensible vi layer for Emacs.
evil-leaderAdd <leader> shortcuts to Evil.
evil-surroundEmulate Tim Pope’s surround.vim in evil.
expand-regionExpand region increases the selected region by semantic units.
ace-jump-modeA quick cursor location minor mode for emacs
ome-auto-modepuppet-modeA simple mode for editing puppet manifests
wikipedia-modeMode for editing Wikipedia articles off-line
yaml-modeSimple major mode to edit YAML file for emacs
ome-basicflycheckOn-the-fly syntax checking extension
ome-ccxcscopeCscope interface for (X)Emacs
auto-complete-clangAuto-complete sources for Clang. Combine the power of AC, Clang and Yasnippet.
ome-clojureclojure-modeEmacs support for the Clojure language.
ciderCIDER is a Clojure IDE and REPL.
ac-nreplNrepl completion source for Emacs auto-complete package
ome-common-lispslimeSuperior Lisp Interaction Mode for Emacs
ac-slimeEmacs auto-complete plugin for Slime symbols
ome-completionauto-completeThe most intelligent auto-completion extension.
helmEmacs incremental and narrowing framework
popupVisual Popup Interface Library for Emacs
yasnippetYASnippet is a template system for Emacs.
ome-emacs-lispelisp-slime-navSlime-style navigation for Emacs Lisp
ome-experimentallacarteExecute menu items as commands, with completion.
sr-speedbarSame frame speedbar
smooth-scrollingMake emacs scroll smoothly.
hungry-deleteEnables hungry deletion in all modes.
doxymacsDoxymacs is Doxygen + {X}Emacs.
ome-guisolarized-emacsEmacs highlighting using Ethan Schoonover’s Solarized color scheme
powerlinePowerline for Emacs
yascrollYet Another Scroll Bar Mode
ome-javaeclimThis project brings some of the great eclipse features to emacs developers.
ome-miscsrainbow-delimitersColor nested parentheses, brackets, and braces according to their depth.
po-modeMajor mode for GNU gettext PO files
magitIt’s Magit! An Emacs mode for Git.
projectileProject navigation and management library for Emacs
smartparensAutoinsert pairs of defined brackets and wrap regions
emacs-w3mA simple Emacs interface to w3m
quickrunRun commands quickly
diminishAn Emacs package that diminishes the amount of space taken on the mode line by the names of minor modes.
ome-ocamlcaml-modeO’Caml code editing commands for Emacs
tuareg-modeA GOOD Emacs mode to edit Objective Caml code.
ome-orgorg-modeOrg-mode 8.x branch.
htmlizeConvert buffer text and decorations to HTML.
ome-pythonelpyEmacs Python Development Environment
ome-rubyinf-rubyInferior Ruby Mode - ruby process in a buffer.
ome-schemegeiserMake Scheme hacking inside Emacs (even more) fun.
ac-geiserEmacs auto-complete backend for geiser
ome-texauctexAUCTeX is an extensible package for writing and formatting TeX files Emacs.
cdlatex-modea minor mode which re-implements many features also found in the AUCTeX LaTeX mode.
ome-writingmarkdown-modeMajor mode to edit Markdown files in Emacs


Here‘re some screenshots of oh-my-emacs:

  • Startup screen:


  • org-babel from org-mode, auto-complete for emacs lisp:


  • helm-grep to search words in multiple files:


  • auto-complete for C++ QT:


  • auto-complete for python:


  • AUCTeX with outline-minor-mode, helm completion for TeX commands:



  • Emacs Prelude: Prelude is an Emacs distribution that aims to enhance the default Emacs experience.
  • emacs24-starter-kit: A cleaner version of the literate starter kit based on Emacs24.
  • emacs-starter-kit: The Starter Kit provides a more pleasant set of defaults than you get normally with Emacs.
  • graphene: A set of defaults for Emacs, for refugees from GUI text editors.
  • purcell’s emacs.d: An Emacs configuration bundle with batteries included.


  • You need to install emacs24-el in ubuntu, or org-export won’t work. I don’t know why.

Support This Project

I’m just a single guy and I do not have enough time to make this project meet everybody’s needs. So if you want to support this project, you can do in the following ways:

  • Contributing code. I’ve written a basic CONTRIBUTING guide about it. Please do read it before you fire github issue or send me a pull request.


[1] Editor war