Go to file
Henrik Lissner 4daa9271a0
Introduce general.el & rewrite map!
+ Now uses an overriding keymap for leader keys, so that it is always
  available, even outside of normal/visual states. In insert/emacs
  states, or in sessions where evil is absent, an alternative prefix is
  used for leader/localleader keys. See these variables:
  + doom-leader-prefix
  + doom-leader-alt-prefix
  + doom-localleader-prefix
  + doom-localleader-alt-prefix
+ Keybinds now support alternative prefixes through the new :alt-prefix
  property. This is useful for non-evil users and non-normal evil
  states. By default, this is M-SPC (leader) and M-SPC m (localleader).
+ Removed +evil-commands flag from config/default (moved to
  feature/evil/+commands.el).
+ config/default/+bindings.el has been split into
  config/default/+{evil,emacs}-bindings.el, which one is loaded depends
  on whether evil is present or not. The latter is blank, but will soon
  be populated with a keybinding scheme for non-evil users (perhaps
  inspired by #641).
+ The define-key! macro has been replaced; it is now an alias for
  general-def.
+ Added unmap! as an alias for general-unbind.
+ The following modifier key conventions are now enforced for
  consistency, across all OSes:
    alt/option      = meta
    windows/command = super
  It used to be
    alt/option      = alt
    windows/command = meta
  Many of the default keybinds have been updated to reflect this switch,
  but it is likely to affect personal meta/super keybinds!

The map! macro has also been rewritten to use general-define-key. Here
is what has been changed:

+ map! no longer works with characters, e.g. (map! ?x #'do-something) is
  no longer supported. Keys must be kbd-able strings like "C-c x" or
  vectors like [?C-c ?x].
+ The :map and :map* properties are now the same thing. If specified
  keymaps aren't defined when binding keys, it is automatically
  deferred.
+ The way you bind local keybinds has changed:

    ;; Don't do this
    (map! :l "a" #'func-a
          :l "b" #'func-b)
    ;; Do this
    (map! :map 'local "a" #'func-a
                      "b" #'func-b)

+ map! now supports the following new blocks:
  + (:if COND THEN-FORM ELSE-FORM...)
  + (:alt-prefix PREFIX KEYS...) -- this prefix will be used for
    non-normal evil states. Equivalent to :non-normal-prefix in general.
+ The way you declare a which-key label for a prefix key has changed:

    ;; before
    (map! :desc "label" :prefix "a" ...)
    ;; now
    (map! :prefix ("a" . "label") ...)

+ It used to be that map! supported binding a key to a key sequence,
  like so:

    (map! "a" [?x])  ; pressing a is like pressing x

  This functionality was removed *temporarily* while I figure out the
  implementation.

Addresses: #448, #814, #860
Mentioned in: #940
2018-12-22 04:14:43 -05:00
.github
bin bin/doom: demote missing -p path error to warning 2018-10-21 20:01:09 -04:00
core Introduce general.el & rewrite map! 2018-12-22 04:14:43 -05:00
modules Introduce general.el & rewrite map! 2018-12-22 04:14:43 -05:00
.gitignore Add .directory to .gitignore #841 2018-08-27 21:33:00 +02:00
.travis.yml Use -y flag instead of piping yes to doom compile 2018-09-12 23:03:23 +01:00
early-init.el Fix wrong-type-arg error on menu-bar-open 2018-09-28 21:13:27 -04:00
init.el Restore startup optimizations on after-init-hook 2018-12-06 17:45:50 -05:00
init.example.el Introduce general.el & rewrite map! 2018-12-22 04:14:43 -05:00
init.test.el Add :ui popup to init.test.el 2018-06-23 23:23:23 +02:00
LICENSE
Makefile Double quote doom binary location 2018-07-14 19:21:16 +01:00
README.md Fix popup link in readme 2018-12-06 17:40:08 +11:00

Current release build status (master) build status (develop) Chat on discord Main screenshot


Wiki | Screenshots | Troubleshooting | FAQ | Changelog


It is a story as old as time. A stubborn, shell-dwelling, and melodramatic vimmer -- envious of the features of modern text editors -- spirals into despair before finally succumbing to the dark side. This is his config.

Doom strives to be fast, fabulous and hacker friendly. It is tailored for neckbeards with blue belts or better in command-line-fu, Elisp and git.

Doom only supports Emacs >= 25.1, and is tested on Arch Linux 4.7+ and MacOS 10.11. YMMV on other platforms.


Quick start

git clone https://github.com/hlissner/doom-emacs ~/.emacs.d
cd ~/.emacs.d
make quickstart

Don't forget to run make each time you modify init.el or update Doom!

Visit the wiki for a more detailed guide on installing, customizing and grokking Doom.

Feature highlights

  • A fast, organized and opinionated Emacs configuration with a command line interface.
  • A custom, declarative package management system that combines package.el, use-package and quelpa, allowing you to manage packages from the command line and install packages from sources other than ELPA.
  • A popup management system (powered by shackle) that minimizes the presence and footprint of temporary and/or disposable buffers.
  • A vim-like experience with evil-mode, including ports for several vim plugins, C-x omnicompletion and a slew of custom ex commands.
  • Integration with editorconfig. Let someone else argue about tabs and spaces. (spaces, duh).
  • Code completion for many languages, powered by company-mode (some languages may have external dependencies).
  • Project-awareness powered by projectile, with tools and an API to navigate and manage projects and their files.
  • Fast project search (and replace) utilities, powered by the_silver_searcher, ripgrep and wgrep, with integration for ivy (the default), helm and ido.
  • Isolated and persistent workspaces powered by persp-mode. Also substitutes for vim tabs.
  • Inline/live code evaluation (using quickrun), including REPLs for a variety of languages.

Troubleshooting

Found a problem? Here are some things to try:

  • Run make install to ensure all plugins are installed.
  • void-function or void-variable errors could signal an out-of-date autoloads file. Run make autoloads or M-x doom//reload-autoloads to update it.
  • Scan for common OS/environment issues with make doctor.
  • Never debug byte-compiled code. It will interfere in subtle ways. Clean up *.elc files with make clean or M-x doom//clean-byte-compiled-files.
  • Check the FAQ to see if your issue is mentioned.
  • Check the relevant module's README.org, if one exists. There may be extra steps to getting certain features to work.

If all else has failed, file a bug report.

Contribute

Doom (and my Emacs work in general) is a labor of love and incurable madness, done on my spare time. It wasn't intended for public use, but I enjoy making Doom a resource for others.

If you'd like to support my efforts, I welcome contributions of any kind:

  • I love pull requests and bug reports. Elisp pointers are especially welcome. Seriously, don't hesitate to tell me my Elisp-fu sucks!
  • Talk to me about Emacs workflow, ideas or tooling. Or talk to me about gamedev, or pixel art, or anime, or programming, or the weather, or band camp. Whatever. I don't mind. Holler at henrik@lissner.net.