2016-05-23 20:56:19 -04:00
|
|
|
[](./LICENSE)
|
2015-06-14 17:26:03 +02:00
|
|
|
|
2016-05-30 21:19:10 -04:00
|
|
|
[](http://ultravioletbat.deviantart.com/art/Yay-Evil-111710573)
|
|
|
|
|
2016-08-21 20:36:54 +02:00
|
|
|
This is an Emacs configuration for a stubborn, melodramatic and shell-dwelling
|
|
|
|
vimmer disappointed with the text-editor status quo.
|
2016-08-21 17:23:11 +02:00
|
|
|
|
2016-08-21 20:36:54 +02: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 gamedev, designer,
|
|
|
|
scientist and doom enthusiast.
|
2016-05-30 21:19:10 -04:00
|
|
|
|
2016-08-21 20:36:54 +02:00
|
|
|
It was tailored for Emacs 25+ on OSX 10.11+. I use [vim] everywhere else.
|
2016-08-21 17:23:11 +02:00
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
**NOTE:** you can [find the theme in a separate repo](https://github.com/hlissner/emacs-doom-theme).
|
2016-05-23 20:56:19 -04:00
|
|
|
|
2015-06-14 17:26:03 +02:00
|
|
|
## Installation
|
|
|
|
|
2016-06-09 00:38:32 -04:00
|
|
|
```bash
|
2016-09-09 09:00:34 +02:00
|
|
|
# Ensure homebrew is up to date
|
|
|
|
brew update && brew upgrade
|
|
|
|
|
2016-06-09 00:37:38 -04:00
|
|
|
# Install cask + emacs
|
2015-09-30 13:52:30 -04:00
|
|
|
brew install cask
|
2016-06-09 00:37:38 -04:00
|
|
|
brew tap railwaycat/emacsmacport
|
|
|
|
brew install emacs-mac --with-imagemagick --with-modern-icon --HEAD
|
|
|
|
|
|
|
|
# Install this emacs.d
|
2016-04-05 23:53:38 -04:00
|
|
|
git clone https://github.com/hlissner/.emacs.d ~/.emacs.d
|
2015-06-14 17:26:03 +02:00
|
|
|
cd ~/.emacs.d
|
|
|
|
make # installs plugins via cask and generates autoloads
|
2016-01-23 20:38:12 -05:00
|
|
|
|
2016-05-24 23:38:19 -04:00
|
|
|
# Optional
|
2016-05-30 21:19:10 -04:00
|
|
|
make compile # compiles core and autoloaded files
|
2016-02-26 09:30:41 -05:00
|
|
|
make snippets # install hlissner/emacs-snippets into private/snippets
|
|
|
|
```
|
2016-01-23 20:38:12 -05:00
|
|
|
|
2016-05-30 21:19:10 -04:00
|
|
|
For a more comprehensive byte compile, run `:bc!` (`:bc` will compile the
|
|
|
|
current *.el file).
|
|
|
|
|
2015-06-14 17:26:03 +02:00
|
|
|
## Features
|
|
|
|
|
2016-01-23 20:38:12 -05:00
|
|
|
To get a picture of what's in here, check out:
|
2015-12-12 03:18:14 -05:00
|
|
|
|
2016-05-20 22:37:30 -04:00
|
|
|
* **[The Caskfile](Cask)**: lists installed plugins and where they're configured.
|
|
|
|
* **[init.el](init.el)**: lists all loaded modules
|
2016-09-09 09:00:34 +02:00
|
|
|
* **[core/core-modeline.el](core/core-modeline.el)**: my modeline config
|
2016-05-20 22:37:30 -04:00
|
|
|
* **[private/my-bindings.el](private/my-bindings.el)**: most of the custom keybinds
|
|
|
|
* **[private/my-commands.el](private/my-commands.el)**: available custom ex commands
|
2016-08-21 17:23:11 +02:00
|
|
|
* **[ext/*.sh](ext/)**: scripts for external dependency setup (e.g. irony-mode)
|
|
|
|
|
|
|
|
See screenshots in the [screenshots branch][sc].
|
2015-12-12 03:18:14 -05:00
|
|
|
|
2016-04-05 23:53:38 -04:00
|
|
|
### Highlights
|
2015-12-12 03:18:14 -05:00
|
|
|
|
2016-08-21 17:23:11 +02:00
|
|
|
* Tamed popup windows with **[shackle]**; see `def-popup!` and `shackle-rules`.
|
|
|
|
e.g. help buffers will always pop up at the bottom of the frame, and are
|
|
|
|
removed with ESC.
|
|
|
|
* Workspaces & session persistence with **[workgroups2]**
|
|
|
|
* Project and workspace-sensitive buffer navigation and functions
|
|
|
|
* A vim-like environment with **[evil-mode]**
|
|
|
|
* vim-seek/vim-sneak functionality with **[evil-snipe]** (provides 2-char motions)
|
|
|
|
* [Multiple cursors][sc-multiedit] with **[evil-multiedit]**
|
|
|
|
* Repeat (most) motions with <kbd>SPC</kbd> and
|
|
|
|
<kbd>shift</kbd>+<kbd>SPC</kbd>
|
|
|
|
* On-the-fly keybindings with `:[nviom]map`
|
|
|
|
* Global <kbd>C-x</kbd> omnicompletion (e.g. <kbd>C-x</kbd>+<kbd>C-f</kbd> for
|
|
|
|
files)
|
|
|
|
* Fast search utilities:
|
|
|
|
* Project and buffer navigation with **[ivy]**
|
|
|
|
* File browser sidebar with **[neotree]**
|
|
|
|
* Project search (and replace) with **[counsel-ag]** and **[wgrep]**
|
|
|
|
* Buffer search with **[swiper]**
|
|
|
|
* REPLs for many languages including Ruby, Python, PHP, JS, Elisp, Haskell and
|
|
|
|
Lua.
|
|
|
|
* [Minimalistic diffs in the fringe][sc-diffs] with **[git-gutter-fringe]**.
|
|
|
|
* 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.
|
2016-09-09 09:00:34 +02:00
|
|
|
* A [pretty mode-line](core/core-modeline.el) with:
|
2016-06-07 02:20:50 -04:00
|
|
|
* evil-search/iedit/evil-substitute mode-line integration
|
2016-08-28 23:02:13 +02:00
|
|
|
* Macro-recording indicator
|
|
|
|
* Python/ruby version in mode-line (for rbenv/pyenv)
|
2016-06-07 02:20:50 -04:00
|
|
|
|
|
|
|
|
2016-08-21 17:23:11 +02: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]**
|
|
|
|
* Custom O/S interaction commands, like **os-reveal** and **os-open-in-browser**
|
2016-09-09 09:00:34 +02:00
|
|
|
* Custom TODO, FIXME and NOTE highlighting and search (`:todo`)
|
|
|
|
* **big-mode** for presentations and demonstrations (`:big`)
|
2016-08-21 17:23:11 +02:00
|
|
|
* Tmux integration with `:t` and `:tcd` ex commands
|
|
|
|
|
|
|
|
|
2016-09-09 09:00:34 +02: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:
|
|
|
|
|
|
|
|
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.
|
|
|
|
2. If you add new functions to any of the autoloaded
|
|
|
|
`(core|modules)/defuns/*.el` library files, `make autoloads` must
|
|
|
|
be run afterwards. `:reload` will reload Emacs' load-path if you're
|
|
|
|
running Emacs while doing so.
|
|
|
|
|
|
|
|
|
2016-08-21 17:23:11 +02:00
|
|
|
[auto-yasnippet]: https://melpa.org/#/auto-yasnippet
|
2016-06-07 02:20:50 -04:00
|
|
|
[company-mode]: https://melpa.org/#/company
|
|
|
|
[counsel-ag]: https://melpa.org/#/counsel
|
2016-08-21 17:23:11 +02:00
|
|
|
[dumb-jump]: https://melpa.org/#/dumb-jump
|
2016-06-07 02:20:50 -04:00
|
|
|
[evil-mode]: https://melpa.org/#/evil
|
2016-08-21 17:23:11 +02: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
|
|
|
|
[ivy]: https://melpa.org/#/ivy
|
|
|
|
[neotree]: https://melpa.org/#/neotree
|
|
|
|
[nlinum]: http://elpa.gnu.org/packages/nlinum.html
|
2016-06-07 02:20:50 -04:00
|
|
|
[quickrun]: https://melpa.org/#/quickrun
|
2016-08-21 17:23:11 +02:00
|
|
|
[realgud]: https://melpa.org/#/realgud
|
2016-06-07 02:20:50 -04:00
|
|
|
[repl-toggle]: https://melpa.org/#/repl-toggle
|
|
|
|
[shackle]: https://melpa.org/#/shackle
|
2016-08-21 17:23:11 +02:00
|
|
|
[swiper]: https://melpa.org/#/swiper
|
|
|
|
[workgroups2]: https://melpa.org/#/workgroups2
|
|
|
|
[wgrep]: https://melpa.org/#/wgrep
|
|
|
|
[yasnippet]: https://melpa.org/#/yasnippet
|
2016-06-07 02:21:50 -04:00
|
|
|
|
2016-08-21 17:23:11 +02: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-21 20:36:54 +02:00
|
|
|
[vim]: https://github.com/hlissner/.vim
|
2016-06-07 02:21:50 -04:00
|
|
|
|