2017-05-14 00:25:04 +02:00
|
|
|
[][sc]
|
2015-06-14 17:26:03 +02:00
|
|
|
|
2016-10-05 21:50:34 +02:00
|
|
|
[](./LICENSE)
|
2017-05-13 14:42:54 +02:00
|
|
|
[](./init.el)
|
2017-06-06 17:07:27 +02:00
|
|
|
[](https://travis-ci.org/hlissner/.emacs.d)
|
2016-05-30 21:19:10 -04:00
|
|
|
|
2016-10-05 21:50:34 +02: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 17:23:11 +02:00
|
|
|
|
2017-05-29 00:58:12 +02:00
|
|
|
This is an Emacs configuration for a stubborn, shell-dwelling and melodramatic
|
2017-04-08 02:46:20 -04:00
|
|
|
vimmer disappointed with the text-editor status quo.
|
2016-05-30 21:19:10 -04:00
|
|
|
|
2017-05-14 00:25:04 +02:00
|
|
|
Doom tries to: look and act like modern editors (whatever that means to me on
|
|
|
|
any given day), espouse vim's modal philosophy as best it can and strive to
|
|
|
|
surpass vim in any way possible. It fits my needs as a software developer, indie
|
|
|
|
game developer, scientist and doom enthusiast.
|
2016-08-21 17:23:11 +02:00
|
|
|
|
2017-05-29 00:58:12 +02:00
|
|
|
It was written for **Emacs 25.1+** on **MacOS 10.11+** and **Arch Linux 4.7+**.
|
2017-05-14 00:25:04 +02:00
|
|
|
I use [vim] everywhere else.
|
2016-05-23 20:56:19 -04:00
|
|
|
|
2015-06-14 17:26:03 +02:00
|
|
|
## Installation
|
|
|
|
|
2016-10-05 21:50:34 +02:00
|
|
|
```bash
|
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
|
2017-02-20 00:19:12 -05:00
|
|
|
cp init.example.el init.el # maybe edit init.el
|
|
|
|
make install
|
2017-05-20 18:20:54 +02:00
|
|
|
|
2017-05-29 00:58:12 +02:00
|
|
|
# Have problems? Run this to check for common issues with your setup
|
2017-05-20 18:20:54 +02:00
|
|
|
make doctor
|
2016-02-26 09:30:41 -05:00
|
|
|
```
|
2016-01-23 20:38:12 -05:00
|
|
|
|
2017-05-26 01:56:57 +02:00
|
|
|
Once you've tweaked the config to your liking, you may optionally byte-compile
|
|
|
|
it. DOOM is designed to benefit from this. It will boost startup times and make
|
|
|
|
Emacs feel a bit snappier in general.
|
|
|
|
|
|
|
|
```bash
|
2017-06-07 15:59:27 +02:00
|
|
|
make compile # may take a while
|
2017-05-26 01:56:57 +02:00
|
|
|
# or
|
2017-06-07 15:59:27 +02:00
|
|
|
make core # faster alternative; only compiles init.el & core files
|
2017-05-26 01:56:57 +02:00
|
|
|
|
|
|
|
# If you byte-compile, changes to the config won't take effect until you
|
|
|
|
# recompile or delete the byte-compiled files with:
|
|
|
|
make clean
|
|
|
|
```
|
2017-05-25 20:08:50 +02:00
|
|
|
|
|
|
|
## Package Management
|
|
|
|
|
|
|
|
Plugins can be managed from the command line with `make`:
|
2016-10-05 21:50:34 +02:00
|
|
|
|
2017-02-20 12:02:57 -05:00
|
|
|
```bash
|
2017-05-25 20:08:50 +02:00
|
|
|
make install # install missing plugins
|
|
|
|
make update # update installed plugins
|
|
|
|
make autoremove # remove unused plugins
|
|
|
|
# be sure to run install and autoremove after modifying init.el
|
|
|
|
|
|
|
|
# run this if you change autoload files
|
|
|
|
make autoloads
|
|
|
|
|
2017-05-26 01:56:57 +02:00
|
|
|
# this is the equivalent of running all four of the above commands
|
|
|
|
make
|
|
|
|
|
2017-05-25 20:08:50 +02:00
|
|
|
# you can run any make command with DEBUG=1 for extra logging, and YES=1 to
|
|
|
|
# auto-accept confirmation prompts:
|
|
|
|
DEBUG=1 make install
|
|
|
|
YES=1 make update
|
2017-02-20 12:02:57 -05:00
|
|
|
```
|
2016-05-30 21:19:10 -04:00
|
|
|
|
2017-05-29 00:58:12 +02:00
|
|
|
These commands are also available from within Emacs:
|
2017-05-25 20:08:50 +02:00
|
|
|
|
|
|
|
+ `doom/packages-install`
|
|
|
|
+ `doom/packages-update`
|
|
|
|
+ `doom/packages-autoremove`
|
|
|
|
+ `doom/reload-autoloads`
|
2017-05-18 21:34:50 +02:00
|
|
|
|
2017-02-20 00:19:12 -05:00
|
|
|
## Deciphering my emacs.d
|
2015-06-14 17:26:03 +02:00
|
|
|
|
2017-05-26 01:56:57 +02:00
|
|
|
So you want to grok this madness. Here are a few suggestions:
|
2015-12-12 03:18:14 -05:00
|
|
|
|
2017-05-18 21:34:50 +02:00
|
|
|
* **[init.example.el](init.example.el)**: a birds eye view of available modules
|
2017-05-29 00:26:41 +02:00
|
|
|
* **[modules/README.org](modules/README.org)**: a primer into module structure
|
2017-02-20 00:19:12 -05:00
|
|
|
* **[modules/private/hlissner/+bindings.el](modules/private/hlissner/+bindings.el)**:
|
|
|
|
my custom keybinds.
|
|
|
|
* **[modules/private/hlissner/+commands.el](modules/private/hlissner/+commands.el)**:
|
2017-05-26 01:56:57 +02:00
|
|
|
my custom ex-commands (for [evil-mode]).
|
2017-04-08 02:46:20 -04:00
|
|
|
* **[modules/ui](modules/ui)**: the modules that makes my Emacs look the way it
|
|
|
|
does, including [my theme][doom-theme], modeline, dashboard and more.
|
2017-05-18 21:34:50 +02:00
|
|
|
* Find screenshots in the [screenshots branch][sc].
|
2017-02-20 12:02:57 -05:00
|
|
|
|
|
|
|
### Highlights
|
|
|
|
|
2017-05-29 00:58:12 +02:00
|
|
|
* A [popup management system](core/core-popups.el) using **[shackle]** to
|
2017-05-14 00:25:04 +02:00
|
|
|
minimize mental context switching while dealing with temporary or disposable
|
|
|
|
buffers.
|
|
|
|
* Per-project code-style settings with **[editorconfig]**. Let someone else
|
2017-05-29 00:58:12 +02:00
|
|
|
argue about tabs versus spaces (spaces, of course).
|
|
|
|
* Workspaces & session persistence with **[persp-mode]**. Provides tab emulation
|
|
|
|
that vaguely resembles vim's tabs.
|
|
|
|
* Project & workspace-restricted buffer navigation and functions.
|
2017-02-20 00:19:12 -05:00
|
|
|
* A vim-centric environment with **[evil-mode]**
|
|
|
|
* 2-character motions (ala vim-seek/vim-sneak) with **[evil-snipe]**
|
|
|
|
* Sublime Text-esque [multiple cursors][sc-multiedit] with
|
2017-05-14 00:25:04 +02:00
|
|
|
**[evil-mc]** and **[evil-multiedit]**
|
|
|
|
* <kbd>C-x</kbd> omnicompletion in insert mode
|
2017-05-29 00:58:12 +02:00
|
|
|
* A better `:global` with buffer highlighting
|
|
|
|
* A slew of [custom ex commands](modules/private/hlissner/+commands.el)
|
2016-08-21 17:23:11 +02:00
|
|
|
* Fast search utilities:
|
|
|
|
* Project and buffer navigation with **[ivy]**
|
|
|
|
* File browser sidebar with **[neotree]**
|
2017-05-14 00:25:04 +02:00
|
|
|
* Project text search powered by [the silver searcher][ag] and [ripgrep][rg]
|
|
|
|
(see `:ag` and `:rg`)
|
|
|
|
* Project search & replace with **[wgrep]**
|
2017-02-20 00:19:12 -05:00
|
|
|
* Interactive buffer search with **[swiper]**
|
2017-05-25 20:08:50 +02:00
|
|
|
* Inline/live code evaluation (using **[quickrun]**) and REPLs for a variety of
|
|
|
|
languages, including Ruby, Python, PHP, JS, Elisp, Haskell, Lua and more.
|
2016-08-21 17:23:11 +02:00
|
|
|
* [Minimalistic diffs in the fringe][sc-diffs] with **[git-gutter-fringe]**.
|
2017-04-08 02:46:20 -04:00
|
|
|
* A do-what-I-mean jump-to-definition implementation that tries its darnest to
|
|
|
|
find the definition of what you're looking at. It tries major-mode commands,
|
2017-05-29 00:58:12 +02:00
|
|
|
xref (experimental Emacs library), **[dumb-jump]**, ctags (WIP), then
|
|
|
|
**[ripgrep][rg]** or **[the_silver_searcher][ag]**.
|
|
|
|
* Snippets and file-templates with **[yasnippet]** & **[auto-yasnippet]**.
|
|
|
|
* A smarter, perdier, Atom-inspired mode-line that adds:
|
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)
|
2017-05-04 10:57:03 +02:00
|
|
|
* Emacs as an:
|
|
|
|
* Email client (using mu4e & offlineimap)
|
|
|
|
* Presentation app (using org-tree-slides, ox-reveal, +present/big-mode
|
|
|
|
& impatient-mode)
|
|
|
|
* RSS feed reader (using elfeed)
|
|
|
|
* Word Processor (using LaTeX, Org and Markdown)
|
2016-06-07 02:20:50 -04:00
|
|
|
|
2017-05-25 20:08:50 +02:00
|
|
|
## Troubleshooting
|
2016-06-07 02:20:50 -04:00
|
|
|
|
2017-04-08 02:46:20 -04:00
|
|
|
My config wasn't intended for public use, but I'm happy to help you use or crib
|
2017-05-26 01:56:57 +02:00
|
|
|
from it.
|
2017-05-25 20:08:50 +02:00
|
|
|
|
2017-05-26 01:56:57 +02:00
|
|
|
+ If you have questions, drop me a line at henrik@lissner.net.
|
|
|
|
+ If you have issues running or setting up DOOM, use `make doctor` to diagnose
|
|
|
|
any common problems.
|
2017-05-25 20:08:50 +02:00
|
|
|
+ If you still can't make sense of it, run `DEBUG=1 make doctor` and include
|
|
|
|
it [with your bug report][new-issue].
|
|
|
|
|
2017-05-26 01:56:57 +02:00
|
|
|
**And please include steps to reproduce your issue, if possible.**
|
2017-05-25 20:08:50 +02:00
|
|
|
|
|
|
|
## Contributing
|
2016-09-09 09:00:34 +02:00
|
|
|
|
2017-05-26 01:56:57 +02:00
|
|
|
I welcome contributions of any kind: documentation, bug fixes/reports, extra
|
2017-05-25 20:08:50 +02:00
|
|
|
modules, even elisp tips. Really,
|
2017-05-29 00:58:12 +02:00
|
|
|
[don't hesitate to tell me my Elisp-fu sucks][new-issue]! I'm eager to learn.
|
2016-09-09 09:00:34 +02:00
|
|
|
|
|
|
|
|
2017-05-18 21:34:50 +02:00
|
|
|
[ag]: https://github.com/ggreer/the_silver_searcher
|
2017-05-29 00:58:12 +02:00
|
|
|
[auto-yasnippet]: https://melpa.org/#/auto-yasnippet
|
2016-06-07 02:20:50 -04:00
|
|
|
[company-mode]: https://melpa.org/#/company
|
2017-05-04 10:57:03 +02:00
|
|
|
[doom-theme]: https://github.com/hlissner/emacs-doom-theme
|
2016-08-21 17:23:11 +02:00
|
|
|
[dumb-jump]: https://melpa.org/#/dumb-jump
|
2017-05-04 10:57:03 +02:00
|
|
|
[editorconfig]: http://editorconfig.org/
|
2017-05-14 00:25:04 +02:00
|
|
|
[evil-mc]: https://github.com/gabesoft/evil-mc
|
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
|
|
|
|
[git-gutter-fringe]: https://melpa.org/#/git-gutter-fringe
|
|
|
|
[ivy]: https://melpa.org/#/ivy
|
|
|
|
[neotree]: https://melpa.org/#/neotree
|
2017-05-25 20:08:50 +02:00
|
|
|
[new-issue]: https://github.com/hlissner/.emacs.d/issues/new
|
2017-05-04 10:57:03 +02:00
|
|
|
[persp-mode]: https://melpa.org/#/persp-mode
|
2016-06-07 02:20:50 -04:00
|
|
|
[quickrun]: https://melpa.org/#/quickrun
|
2017-05-18 22:59:57 +03:00
|
|
|
[rg]: https://github.com/BurntSushi/ripgrep
|
2017-05-04 10:57:03 +02:00
|
|
|
[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
|
|
|
|
[sc]: https://github.com/hlissner/.emacs.d/tree/screenshots
|
2016-06-07 02:20:50 -04:00
|
|
|
[shackle]: https://melpa.org/#/shackle
|
2016-08-21 17:23:11 +02:00
|
|
|
[swiper]: https://melpa.org/#/swiper
|
2017-05-04 10:57:03 +02:00
|
|
|
[vim]: https://github.com/hlissner/.vim
|
2016-08-21 17:23:11 +02:00
|
|
|
[wgrep]: https://melpa.org/#/wgrep
|
|
|
|
[yasnippet]: https://melpa.org/#/yasnippet
|
2017-05-04 10:57:03 +02:00
|
|
|
[yay-evil]: http://ultravioletbat.deviantart.com/art/Yay-Evil-111710573
|