           #'(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"))))
+               "d" '(ediff-copy-both-to-C      :wk "Copy both to C")
+               "j" '(ediff-next-difference     :wk "Next difference")
+               "k" '(ediff-previous-difference :wk "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                       :which-key "Switch to buffer")
 "."   '(find-file                              :which-key "Browse files")
 "RET" '(counsel-bookmark                       :which-key "Jump to bookmark")
 "w"   '(:keymap evil-window-map :package evil  :which-key "window")
 "x"   '(scratch-buffer                         :which-key "Pop up scratch buffer")

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

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

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

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

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

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

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

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

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

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

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

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

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

;; Normal state
(general-define-key

(general-define-key
 :keymaps 'evil-window-map
 ;; Navigation
 "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      :wk "Swap window")
 "z"       '(zoom-window-zoom     :wk "Zoom window")
 ;; Undo/redo
 "u"       '(winner-undo          :wk "Undo")
 "C-u"     '(winner-undo          :wk "Undo")
 "C-r"     '(winner-redo          :wk "Redo")
 ;; Delete
 "C-C"     '(ace-delete-window    :wk "Select and delete a window"))

;;;
;; Built-in plugins
