 (general-define-key
  :keymaps 'evil-window-map
  ;; Navigation
- "C-w"     '(ace-window           :which-key "Select a window")
- "B"       '(switch-to-minibuffer :which-key "Switch to minibuffer")
- "TAB"     '(neotree|window       :which-key "Switch to NeoTree")
- [backtab] '(neotree|toggle       :which-key "Toggle NeoTree")
+ "C-w"     '(ace-window           :wk "Select a window")
+ "B"       '(switch-to-minibuffer :wk "Switch to minibuffer")
+ "TAB"     '(neotree|window       :wk "Switch to NeoTree")
+ [backtab] '(neotree|toggle       :wk "Toggle NeoTree")
  ;; Swapping
- "C-S-w"   '(ace-swap-window      :which-key "Swap window")
- "z"       '(zoom-window-zoom     :which-key "Zoom window")
+ "C-S-w"   '(ace-swap-window      :wk "Swap window")
+ "z"       '(zoom-window-zoom     :wk "Zoom window")
  ;; Undo/redo
- "u"       '(winner-undo          :which-key "Undo")
- "C-u"     '(winner-undo          :which-key "Undo")
- "C-r"     '(winner-redo          :which-key "Redo")
+ "u"       '(winner-undo          :wk "Undo")
+ "C-u"     '(winner-undo          :wk "Undo")
+ "C-r"     '(winner-redo          :wk "Redo")
  ;; Delete
- "C-C"     '(ace-delete-window    :which-key "Select and delete a window"))
+ "C-C"     '(ace-delete-window    :wk "Select and delete a window"))
 
 ;;;
 ;; Built-in plugins

          #'(lambda ()
              (general-define-key
               :keymaps 'ediff-mode-map
               "d" '(ediff-copy-both-to-C      :which-key "Copy both to C")
               "j" '(ediff-next-difference     :which-key "Next difference")
               "k" '(ediff-previous-difference :which-key "Previous difference"))))

;; eww
(general-define-key

 "SPC" (general-predicate-dispatch #'projectile-switch-project
         :docstring "Find file in project or switch project"
         (projectile-project-p) #'projectile-find-file)
 ","   '(switch-to-buffer                       :wk "Switch to buffer")
 "."   '(find-file                              :wk "Browse files")
 "RET" '(counsel-bookmark                       :wk "Jump to bookmark")
 "w"   '(:keymap evil-window-map :package evil  :wk "window")
 "x"   '(scratch-buffer                         :wk "Pop up scratch buffer")

 "["   '(:ignore t :wk "previous...")
 "[ b" '(previous-buffer                        :wk "Buffer")
 "[ d" '(diff-hl-previous-hunk                  :wk "Diff Hunk")
 "[ t" '(hl-todo-previous                       :wk "Todo")
 "[ e" '(previous-error                         :wk "Error")
 "[ w" '(persp-prev                             :wk "Workspace")
 "[ h" '(smart-backward                         :wk "Smart jump")
 "[ s" '(evil-prev-flyspell-error               :wk "Spelling error")
 "[ S" '(flyspell-correct-previous-word-generic :wk "Spelling correction")

 "]"   '(:ignore t :wk "next...")
 "] b" '(next-buffer                            :wk "Buffer")
 "] d" '(diff-hl-next-hunk                      :wk "Diff Hunk")
 "] t" '(hl-todo-next                           :wk "Todo")
 "] e" '(next-error                             :wk "Error")
 "] w" '(persp-next                             :wk "Workspace")
 "] h" '(smart-forward                          :wk "Smart jump")
 "] s" '(evil-next-flyspell-error               :wk "Spelling error")
 "] S" '(flyspell-correct-word-generic          :wk "Spelling correction")

 "/"   '(:ignore t :wk "search")
 "/ /" '(swiper                :wk "Swiper")
 "/ i" '(imenu                 :wk "Imenu")
 "/ I" '(imenu-anywhere        :wk "Imenu across buffers")
 "/ g" '(counsel-rg            :wk "Grep files")
 "/ G" '(counsel-projectile-rg :wk "Grep project files")

 "TAB" '(:ignore t :wk "workspace")
 "TAB ." '(persp-switch :wk "Switch workspace")

 "b"   '(:ignore t :wk "buffer")
 "b f" '(list-flycheck-errors :wk "Pop up flycheck errors")
 "b n" '(evil-buffer-new      :wk "New empty buffer")
 "b b" '(switch-to-buffer     :wk "Switch buffer")
 "b k" '(kill-buffer          :wk "Kill buffer")
 "b o" '(kill-other-buffers   :wk "Kill other buffers")
 "b s" '(save-buffer          :wk "Save buffer")
 "b x" '(scratch-buffer       :wk "Pop up scratch buffer")
 "b z" '(bury-buffer          :wk "Bury buffer")
 "b ]" '(next-buffer          :wk "Next buffer")
 "b [" '(previous-buffer      :wk "Previous buffer")
 "b S" '(sudo-edit            :wk "Sudo edit this file")

 "c"   '(:ignore t :wk "code")
 "c c" '(editorconfig-apply   :wk "Apply editorconfig")
 "c x" '(flycheck-list-errors :wk "List errors")
 "c e" '(eval-buffer          :wk "Evaluate buffer")
 "c d" '(evil-goto-definition :wk "Jump to definition")
 "c p" '(source-peek          :wk "Peek definition")
 "c r" '(eval|repl            :wk "Open REPL")

 "f"   '(:ignore t :wk "file")
 "f ." '(find-file                              :wk "Find file")
 "f /" '(projectile-find-file                   :wk "Find file in project")
 "f ?" '(counsel-file-jump                      :wk "Find file here")
 "f a" '(projectile-find-other-file             :wk "Find other file")
 "f c" '(editorconfig-find-current-editorconfig :wk "Open project editorconfig")
 "f g" '(counsel-rg                             :wk "Grep files")
 "f G" '(counsel-projectile-rg                  :wk "Grep project files")
 "f r" '(recentf                                :wk "Recent files")
 "f R" '(projectile-recentf                     :wk "Recent project files")

 "g"   '(:ignore t :wk "git")
 "g s" '(magit-status                :wk "Status")
 "g l" '(magit-log-buffer-file       :wk "Log")
 "g b" '(magit-blame                 :wk "Blame")
 "g t" '(git-timemachine-toggle      :wk "Time machine")
 "g r" '(diff-hl-revert-hunk         :wk "Revert hunk")
 "g ]" '(diff-hl-next-hunk           :wk "Next hunk")
 "g [" '(diff-hl-previous-hunk       :wk "Previous hunk")
 "g p" '(magit-pull                  :wk "Pull")
 "g c" '(magit-clone                 :wk "Clone")
 "g B" '(vcs/git-browse              :wk "Browse")
 "g I" '(vcs/git-browse-issues       :wk "Browse issues")
 "g m" '(git-messenger:popup-message :wk "Popup message")

 "h" '(:ignore t :wk "help")
 "h h" '(:keymap help-map)
 "h a" '(apropos              :wk "Apropos")
 "h l" '(find-library         :wk "Find library")
 "h f" '(describe-function    :wk "Describe function")
 "h k" '(describe-key         :wk "Describe key")
 "h c" '(describe-char        :wk "Describe char")
 "h M" '(describe-mode        :wk "Describe mode")
 "h v" '(describe-variable    :wk "Describe variable")
 "h F" '(describe-face        :wk "Describe face")
 "h '" '(what-cursor-position :wk "What face")
 "h i" '(info                 :wk "Info")

 "o" '(:ignore t :wk "open")
 "o c" '(calendar           :wk "Calendar")
 "o C" '(display-time-world :wk "World Time")
 "o d" '(deft               :wk "Notes")
 "o n" '(neotree|toggle     :wk "NeoTree")
 "o N" '(neotree|window     :wk "NeoTree Window")
 "o t" '(eshell             :wk "Terminal")
 "o T" '(ansi-term          :wk "ANSI Terminal")
 "o w" '(eww                :wk "Browser")

 "=" '(:ignore t :wk "diff")
 "= b" '(ediff-buffers          :wk "Buffers")
 "= B" '(ediff-buffers3         :wk "Buffers (3-way)")
 "= c" '(compare-windows        :wk "Compare windows")
 "= =" '(ediff-files            :wk "Files")
 "= f" '(ediff-files            :wk "Files")
 "= F" '(ediff-files3           :wk "Files (3-way)")
 "= r" '(ediff-revision         :wk "Compare versions")
 "= p" '(ediff-patch-file       :wk "Patch file")
 "= P" '(ediff-patch-buffer     :wk "Patch buffer")
 "= l" '(ediff-regions-linewise :wk "Linewise")
 "= w" '(ediff-regions-wordwise :wk "Wordwise")

 "~" '(:ignore t :wk "toggle")
 "~ a" '(goto-address-mode           :wk "Clickable links")
 "~ c" '(color-identifiers-toggle    :wk "Colorize identifiers")
 "~ C" '(rainbow-mode                :wk "Colorize color values")
 "~ d" '(toggle-debug-on-error       :wk "Debug on error")
 "~ e" '(eldoc-overlay-mode          :wk "Eldoc inline")
 "~ f" '(hs-minor-mode               :wk "Code folding")
 "~ F" '(flycheck-mode               :wk "Syntax checker")
 "~ g" '(indent-guide-mode           :wk "Indent guides")
 "~ h" '(hl-line-mode                :wk "Line highlight")
 "~ i" '(aggressive-indent-mode      :wk "Automatic indentation")
 "~ l" '(toggle-display-line-numbers :wk "Line numbers")
 "~ L" '(coverlay-toggle-overlays    :wk "Coverage overlays")
 "~ r" '(ruler-mode                  :wk "Ruler")
 "~ R" '(my|start-spray              :wk "Speed-reading")
 "~ s" '(flyspell-mode               :wk "Spell-checking")
 "~ S" '(subword-mode                :wk "Subword")
 "~ v" '(variable-pitch-mode         :wk "Fixed-width/variable-width font")
 "~ w" '(whitespace-mode             :wk "Display white-space characters")
 "~ W" '(auto-fill-mode              :wk "Automatic line-wrapping")

 "q" '(:ignore t :wk "quit")
 "q q" '(evil-save-and-quit :wk "Quit"))

;; Normal state
(general-define-key
