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.