doomemacs/README.md

180 lines
7.2 KiB
Markdown
Raw Normal View History

[![Main screenshot](/../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)
2017-05-13 20:42:54 +08:00
[![DOOM v2.0.2](https://img.shields.io/badge/DOOM-v2.0.2-blue.svg)](./init.el)
2017-04-06 10:01:35 +08:00
[![Build Status](https://travis-ci.org/hlissner/.emacs.d.png?branch=v2)](https://travis-ci.org/hlissner/.emacs.d)
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
2017-05-29 06:58:12 +08:00
This is an Emacs configuration for a stubborn, shell-dwelling and melodramatic
2017-04-08 14:46:20 +08:00
vimmer disappointed with the text-editor status quo.
2016-05-31 09:19:10 +08: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 23:23:11 +08:00
2017-05-29 06:58:12 +08:00
It was written for **Emacs 25.1+** on **MacOS 10.11+** and **Arch Linux 4.7+**.
I use [vim] everywhere else.
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
```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
2017-02-20 13:19:12 +08:00
cp init.example.el init.el # maybe edit init.el
make install
2017-05-21 00:20:54 +08:00
2017-05-29 06:58:12 +08:00
# Have problems? Run this to check for common issues with your setup
2017-05-21 00:20:54 +08:00
make doctor
2016-02-26 22:30:41 +08:00
```
2016-01-24 09:38:12 +08:00
2017-05-26 07:56:57 +08: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
make compile # may take a while
# or
2017-05-29 06:58:12 +08:00
make compile-lite # faster alternative; only compiles core files
2017-05-26 07:56:57 +08: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-26 02:08:50 +08:00
## Package Management
Plugins can be managed from the command line with `make`:
2016-10-06 03:50:34 +08:00
2017-02-21 01:02:57 +08:00
```bash
2017-05-26 02:08:50 +08: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 07:56:57 +08:00
# this is the equivalent of running all four of the above commands
make
2017-05-26 02:08:50 +08: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-21 01:02:57 +08:00
```
2016-05-31 09:19:10 +08:00
2017-05-29 06:58:12 +08:00
These commands are also available from within Emacs:
2017-05-26 02:08:50 +08:00
+ `doom/packages-install`
+ `doom/packages-update`
+ `doom/packages-autoremove`
+ `doom/reload-autoloads`
2017-05-19 03:34:50 +08:00
2017-02-20 13:19:12 +08:00
## Deciphering my emacs.d
2015-06-14 23:26:03 +08:00
2017-05-26 07:56:57 +08:00
So you want to grok this madness. Here are a few suggestions:
2015-12-12 16:18:14 +08:00
2017-05-19 03:34:50 +08:00
* **[init.example.el](init.example.el)**: a birds eye view of available modules
2017-05-29 06:26:41 +08:00
* **[modules/README.org](modules/README.org)**: a primer into module structure
2017-02-20 13:19:12 +08: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 07:56:57 +08:00
my custom ex-commands (for [evil-mode]).
2017-04-08 14:46:20 +08: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-19 03:34:50 +08:00
* Find screenshots in the [screenshots branch][sc].
2017-02-21 01:02:57 +08:00
### Highlights
2017-05-29 06:58:12 +08:00
* A [popup management system](core/core-popups.el) using **[shackle]** to
minimize mental context switching while dealing with temporary or disposable
buffers.
* Per-project code-style settings with **[editorconfig]**. Let someone else
2017-05-29 06:58:12 +08: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 13:19:12 +08: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
**[evil-mc]** and **[evil-multiedit]**
* <kbd>C-x</kbd> omnicompletion in insert mode
2017-05-29 06:58:12 +08:00
* A better `:global` with buffer highlighting
* A slew of [custom ex commands](modules/private/hlissner/+commands.el)
2016-08-21 23:23:11 +08:00
* Fast search utilities:
* Project and buffer navigation with **[ivy]**
* File browser sidebar with **[neotree]**
* Project text search powered by [the silver searcher][ag] and [ripgrep][rg]
(see `:ag` and `:rg`)
* Project search & replace with **[wgrep]**
2017-02-20 13:19:12 +08:00
* Interactive buffer search with **[swiper]**
2017-05-26 02:08:50 +08: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 23:23:11 +08:00
* [Minimalistic diffs in the fringe][sc-diffs] with **[git-gutter-fringe]**.
2017-04-08 14:46:20 +08: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 06:58:12 +08: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:
* evil-search/iedit/evil-substitute mode-line integration
* Macro-recording indicator
* Python/ruby version in mode-line (for rbenv/pyenv)
2017-05-04 16:57:03 +08: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)
2017-05-26 02:08:50 +08:00
## Troubleshooting
2017-04-08 14:46:20 +08:00
My config wasn't intended for public use, but I'm happy to help you use or crib
2017-05-26 07:56:57 +08:00
from it.
2017-05-26 02:08:50 +08:00
2017-05-26 07:56:57 +08: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-26 02:08:50 +08: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 07:56:57 +08:00
**And please include steps to reproduce your issue, if possible.**
2017-05-26 02:08:50 +08:00
## Contributing
2016-09-09 15:00:34 +08:00
2017-05-26 07:56:57 +08:00
I welcome contributions of any kind: documentation, bug fixes/reports, extra
2017-05-26 02:08:50 +08:00
modules, even elisp tips. Really,
2017-05-29 06:58:12 +08:00
[don't hesitate to tell me my Elisp-fu sucks][new-issue]! I'm eager to learn.
2016-09-09 15:00:34 +08:00
2017-05-19 03:34:50 +08:00
[ag]: https://github.com/ggreer/the_silver_searcher
2017-05-29 06:58:12 +08:00
[auto-yasnippet]: https://melpa.org/#/auto-yasnippet
[company-mode]: https://melpa.org/#/company
2017-05-04 16:57:03 +08:00
[doom-theme]: https://github.com/hlissner/emacs-doom-theme
2016-08-21 23:23:11 +08:00
[dumb-jump]: https://melpa.org/#/dumb-jump
2017-05-04 16:57:03 +08:00
[editorconfig]: http://editorconfig.org/
[evil-mc]: https://github.com/gabesoft/evil-mc
[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
[git-gutter-fringe]: https://melpa.org/#/git-gutter-fringe
[ivy]: https://melpa.org/#/ivy
[neotree]: https://melpa.org/#/neotree
2017-05-26 02:08:50 +08:00
[new-issue]: https://github.com/hlissner/.emacs.d/issues/new
2017-05-04 16:57:03 +08:00
[persp-mode]: https://melpa.org/#/persp-mode
[quickrun]: https://melpa.org/#/quickrun
2017-05-19 03:59:57 +08:00
[rg]: https://github.com/BurntSushi/ripgrep
2017-05-04 16:57:03 +08: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
[shackle]: https://melpa.org/#/shackle
2016-08-21 23:23:11 +08:00
[swiper]: https://melpa.org/#/swiper
2017-05-04 16:57:03 +08:00
[vim]: https://github.com/hlissner/.vim
2016-08-21 23:23:11 +08:00
[wgrep]: https://melpa.org/#/wgrep
[yasnippet]: https://melpa.org/#/yasnippet
2017-05-04 16:57:03 +08:00
[yay-evil]: http://ultravioletbat.deviantart.com/art/Yay-Evil-111710573