doomemacs/README.md

175 lines
6.9 KiB
Markdown
Raw Normal View History

2016-10-06 03:50:34 +08:00
[![Main screenshot](https://raw.githubusercontent.com/hlissner/.emacs.d/screenshots/main.png?raw=true)][sc]
2015-06-14 23:26:03 +08:00
2016-10-06 03:50:34 +08:00
[![MIT](https://img.shields.io/badge/license-MIT-green.svg)](./LICENSE)
2016-10-07 02:20:22 +08:00
[![DOOM v1.3.0](https://img.shields.io/badge/DOOM-v1.3.0-blue.svg)](./init.el)
2016-05-31 09:19:10 +08:00
2016-10-06 03:50:34 +08:00
<a href="http://ultravioletbat.deviantart.com/art/Yay-Evil-111710573">
<img src="https://raw.githubusercontent.com/hlissner/.emacs.d/screenshots/cacochan.png" align="right" />
</a>
2016-08-21 23:23:11 +08:00
2016-10-06 03:50:34 +08:00
This is an Emacs configuration for a stubborn, melodramatic and
shell-dwelling vimmer disappointed with the text-editor status quo.
2016-05-31 09:19:10 +08:00
2016-10-06 03:50:34 +08:00
Doom tries to look and act like modern editors (whatever that will
mean to me on any given day), emulates vim as best it can and strives
to surpass it in any way possible. All to fit my needs as a software
developer, indie game developer, UX designer, scientist and doom
enthusiast.
2016-08-21 23:23:11 +08:00
2016-10-06 23:29:41 +08:00
It was tailored for GUI Emacs 25+ on **OSX 10.11+** and
2016-10-06 03:50:34 +08:00
**Arch Linux 4.7+**. I use [vim] everywhere else.
2016-08-21 23:23:11 +08:00
2016-10-06 03:50:34 +08:00
**NOTE:** you can [find the theme in a separate repo][doom-theme].
2016-05-24 08:56:19 +08:00
2015-06-14 23:26:03 +08:00
## Installation
2016-10-06 03:50:34 +08:00
Depends on [Cask] and make:
2016-09-09 15:00:34 +08:00
2016-10-06 03:50:34 +08:00
```bash
2016-04-06 11:53:38 +08:00
git clone https://github.com/hlissner/.emacs.d ~/.emacs.d
2015-06-14 23:26:03 +08:00
cd ~/.emacs.d
make # installs plugins via cask and generates autoloads
2016-01-24 09:38:12 +08:00
2016-10-06 03:50:34 +08:00
# OPTIONAL
2016-05-31 09:19:10 +08:00
make compile # compiles core and autoloaded files
2016-02-26 22:30:41 +08:00
make snippets # install hlissner/emacs-snippets into private/snippets
```
2016-01-24 09:38:12 +08:00
2016-10-06 03:50:34 +08:00
Run `:bc!` for a more comprehensive byte compile (`:bc` will compile
the current, open *.el file).
For OSX users, I recommend Yukihiro Matsumoto's fork of Emacs, which
you can get through homebrew:
```bash
brew tap railwaycat/emacsmacport
brew install emacs-mac --with-imagemagick --with-modern-icon --HEAD
```
2016-05-31 09:19:10 +08:00
2015-06-14 23:26:03 +08:00
## Features
2016-01-24 09:38:12 +08:00
To get a picture of what's in here, check out:
2015-12-12 16:18:14 +08:00
2016-10-06 03:50:34 +08:00
* **[The Caskfile](Cask)**: lists installed plugins & where they're
configured.
* **[init.el](init.el)**: birds-eye view of loaded modules and load
order.
* **[core/core-modeline.el](core/core-modeline.el)**: my modeline
config.
* **[private/my-bindings.el](private/my-bindings.el)**: most of my
custom keybinds.
* **[private/my-commands.el](private/my-commands.el)**: custom ex
commands.
* **[ext/*.sh](ext/)**: scripts that will set up external
dependencies, such as [irony-mode] or [racer].
2016-08-21 23:23:11 +08:00
See screenshots in the [screenshots branch][sc].
2015-12-12 16:18:14 +08:00
2016-04-06 11:53:38 +08:00
### Highlights
2015-12-12 16:18:14 +08:00
2016-10-06 03:50:34 +08:00
* Strong support for a large selection of languages, including C/C++,
Ruby, Python, PHP, JS, Elisp, Haskell, Lua, Julia, Go, Crystal,
Assembly, Java, Swift, (Ba|z)?sh, Scala, Rust, LaTeX, Processing,
Octave, and more!
* Tamed popup windows with **[shackle]**. e.g. help buffers will
always pop up at the bottom of the frame, and are removed with ESC.
* Workspaces & session persistence with **[workgroups2]**.
2016-08-21 23:23:11 +08:00
* Project and workspace-sensitive buffer navigation and functions
* A vim-like environment with **[evil-mode]**
2016-10-06 03:50:34 +08:00
* vim-seek/vim-sneak functionality with **[evil-snipe]** (2-char
motions)
2016-08-21 23:23:11 +08:00
* [Multiple cursors][sc-multiedit] with **[evil-multiedit]**
* Repeat (most) motions with <kbd>SPC</kbd> and
2016-10-06 03:50:34 +08:00
<kbd>shift</kbd>+<kbd>SPC</kbd> (backwards)
2016-08-21 23:23:11 +08:00
* On-the-fly keybindings with `:[nviom]map`
2016-10-06 03:50:34 +08:00
* Global <kbd>C-x</kbd> omnicompletion (e.g.
<kbd>C-x</kbd>+<kbd>C-f</kbd> for files)
2016-08-21 23:23:11 +08:00
* Fast search utilities:
* Project and buffer navigation with **[ivy]**
* File browser sidebar with **[neotree]**
2016-10-06 03:50:34 +08:00
* Project search (and replace) with **[counsel-ag]** (and
**[wgrep]**)
2016-08-21 23:23:11 +08:00
* Buffer search with **[swiper]**
2016-10-06 03:50:34 +08:00
* REPLs for many languages including Ruby, Python, PHP, JS, Elisp,
Haskell and Lua.
2016-08-21 23:23:11 +08:00
* [Minimalistic diffs in the fringe][sc-diffs] with **[git-gutter-fringe]**.
2016-10-06 03:50:34 +08:00
* Modded **org-mode** to be a modern note-taking/LaTeX/word-processing
platform. (WIP)
* Code debugging interface with **[realgud]** (currently supports gdb,
trepanjs, bashdb and zshdb, working on Python/Ruby support)
* A do-what-I-mean jump-to-definition implementation that either uses
major-mode commands or falls back to **[dumb-jump]**/ctags.
* A [pretty mode-line](core/core-modeline.el) inspired by Atom's. It
includes:
* evil-search/iedit/evil-substitute mode-line integration
* Macro-recording indicator
* Python/ruby version in mode-line (for rbenv/pyenv)
2016-08-21 23:23:11 +08:00
### Other features
* Line numbers + highlight with **[nlinum]**
* On-demand [platform agnostic] shell with **eshell**
* Consistent marker-based code-folding with **hideshow**
* Inline code execution anywhere (once or live) with **[quickrun]**
* Snippet expansion and file templates with **[yasnippet]**
* Completion with **[company-mode]**
* Syntax checking with **[flycheck]**
2016-10-06 03:50:34 +08:00
* Custom O/S interaction commands, like **os-reveal** and
**os-open-in-browser**
2016-09-09 15:00:34 +08:00
* Custom TODO, FIXME and NOTE highlighting and search (`:todo`)
* **big-mode** for presentations and demonstrations (`:big`)
2016-08-21 23:23:11 +08:00
* Tmux integration with `:t` and `:tcd` ex commands
2016-09-09 15:00:34 +08:00
## Troubleshooting
Though this wasn't designed with anyone else's use in mind, I'd be
happy to help anyone out with problems encountered using (or cribbing
from) my config. [Don't hesitate to report bugs](https://github.com/hlissner/.emacs.d/issues/new)!
A few things to keep in mind:
2016-09-10 15:10:51 +08:00
1. **Cask can be flakey, especially with new builds.** If you're
getting odd errors when starting up Emacs, try to run `make
install` again. I've also had cryptic cask errors that I had to
reboot to resolve. YMMV.
2016-09-09 15:00:34 +08:00
2. If you add new functions to any of the autoloaded
2016-09-10 15:10:51 +08:00
`(core|modules)/defuns/*.el` library files, run `make autoloads`
afterwards. `:reload` will reload Emacs' load-path if you have
Emacs open while doing so.
2016-09-09 15:00:34 +08:00
2016-10-06 03:50:34 +08:00
[yay-evil]: http://ultravioletbat.deviantart.com/art/Yay-Evil-111710573
[Cask]: https://github.com/cask/cask
[Homebrew]: http://brew.sh
2016-08-21 23:23:11 +08:00
[auto-yasnippet]: https://melpa.org/#/auto-yasnippet
[company-mode]: https://melpa.org/#/company
[counsel-ag]: https://melpa.org/#/counsel
2016-08-21 23:23:11 +08:00
[dumb-jump]: https://melpa.org/#/dumb-jump
[evil-mode]: https://melpa.org/#/evil
2016-08-21 23:23:11 +08:00
[evil-multiedit]: https://melpa.org/#/evil-multiedit
[evil-snipe]: https://melpa.org/#/evil-snipe
[flycheck]: https://melpa.org/#/flycheck
[git-gutter-fringe]: https://melpa.org/#/git-gutter-fringe
2016-10-06 03:50:34 +08:00
[irony-mode]: https://github.com/Sarcasm/irony-mode
2016-08-21 23:23:11 +08:00
[ivy]: https://melpa.org/#/ivy
[neotree]: https://melpa.org/#/neotree
[nlinum]: http://elpa.gnu.org/packages/nlinum.html
[quickrun]: https://melpa.org/#/quickrun
2016-10-06 03:50:34 +08:00
[racer]: https://github.com/phildawes/racer
2016-08-21 23:23:11 +08:00
[realgud]: https://melpa.org/#/realgud
[repl-toggle]: https://melpa.org/#/repl-toggle
[shackle]: https://melpa.org/#/shackle
2016-08-21 23:23:11 +08:00
[swiper]: https://melpa.org/#/swiper
[wgrep]: https://melpa.org/#/wgrep
2016-10-06 03:50:34 +08:00
[workgroups2]: https://melpa.org/#/workgroups2
2016-08-21 23:23:11 +08:00
[yasnippet]: https://melpa.org/#/yasnippet
2016-06-07 14:21:50 +08:00
2016-08-21 23:23:11 +08:00
[sc]: https://github.com/hlissner/.emacs.d/tree/screenshots
[sc-diffs]: https://github.com/hlissner/.emacs.d/blob/screenshots/git-gutter.png?raw=true
[sc-multiedit]: https://raw.githubusercontent.com/hlissner/evil-multiedit/screenshots/main.gif?raw=true
2016-08-22 02:36:54 +08:00
[vim]: https://github.com/hlissner/.vim
2016-10-06 03:50:34 +08:00
[doom-theme]: https://github.com/hlissner/emacs-doom-theme