This is in preparation for general.el integration coming in 2.1.1. It is
very likely that map! will change (and even more, be split into several
macros). Not much, but change none-the-less. Specifically, the state
keywords (e.g. :nvi, :n, :i) will be removed in favor of a :state
property that takes a list, e.g. (normal visual insert).
In any case, both map! and general are also relatively expensive
compared to define-key and evil-define-key* (and the new define-key!
macro), so use that when we can.
This also means changes to either API won't affect Doom's modules in the
long term.
set! used to aggressively evaluate its arguments (at expansion-time),
even if placed inside an after! block. This causes unavoidable errors if
those arguments use functions/variables that don't exist yet.
Fixes#112
For consistency with other app modules:
+ Refactor out s.el dependency
+ Reorder variables (public then private)
+ Use add-hook! instead of add-hook+lambda
+ Optimization: replace mapcar+closure with cl-loop (reduces allocations)
+ Replace evil-set-initial-state with (set! :evil-state ...), which is
ignored if :feature evil is disabled.