      :desc "Open REPL"                 :n  "r" #'+eval/repl
                                        :v  "r" #'+eval:repl)
 
+   (:desc "file" :prefix "f"
+     :desc "File file"             :n  "."  #'find-file
+     :desc "Sudo find file"        :n  ">"  #'doom/sudo-find-file
+     :desc "Find file in project"  :n  "/"  #'projectile-find-file
+     :desc "Find file from here"   :n  "?"  #'counsel-file-jump
+     :desc "Find other file"       :n  "a"  #'projectile-find-other-file
+     :desc "Find file in dotfiles" :n  "d"  #'+hlissner/find-in-dotfiles
+     :desc "Browse dotfiles"       :n  "D"  #'+hlissner/browse-dotfiles
+     :desc "Find file in emacs.d"  :n  "e"  #'+hlissner/find-in-emacsd
+     :desc "Browse emacs.d"        :n  "E"  #'+hlissner/browse-emacsd
+     :desc "Recent files"          :n  "r"  #'recentf
+     :desc "Recent project files"  :n  "R"  #'projectile-recentf
+     :desc "Yank filename"         :n  "y"  #'+hlissner/yank-buffer-filename)
+
+   (:desc "git" :prefix "g"
+     :desc "Git status"        :n  "s" #'magit-status
+     :desc "Git blame"         :n  "b" #'magit-blame
+     :desc "Git time machine"  :n  "t" #'git-timemachine-toggle
+     :desc "Git revert hunk"   :n  "r" #'git-gutter:revert-hunk
+     :desc "List gists"        :n  "g" #'+gist:list
+     :desc "Next hunk"         :nv "]" #'git-gutter:next-hunk
+     :desc "Previous hunk"     :nv "[" #'git-gutter:previous-hunk)
+
+   (:desc "help" :prefix "h"
+     :n "h" help-map
+     :desc "Reload theme"          :n "R" #'+doom/reset-theme
+     :desc "Toggle Emacs log"      :n "m" #'doom/popup-toggle-messages
+     :desc "Find library"          :n "l" #'find-library
+     :desc "Command log"           :n "L" #'global-command-log-mode
+     :desc "Describe function"     :n "f" #'describe-function
+     :desc "Describe key"          :n "k" #'describe-key
+     :desc "Describe char"         :n "c" #'describe-char
+     :desc "Describe mode"         :n "m" #'describe-mode
+     :desc "Describe variable"     :n "v" #'describe-variable
+     :desc "Describe face"         :n "F" #'describe-face
+     :desc "Describe DOOM setting" :n "s" #'doom/describe-setting
+     :desc "Describe DOOM module"  :n "d" #'doom/describe-module
+     :desc "What face"             :n "." #'doom/what-face
+     :desc "What minor modes"      :n "M" #'doom/what-minor-mode
+     :desc "Info"                  :n "i" #'info)
+
+   (:desc "insert" :prefix "i"
+     :desc "From kill-ring" :nv "y" #'counsel-yank-pop
+     :desc "From snippet"   :nv "s" #'yas-insert-snippet)
+
+   (:desc "notes" :prefix "n"
+     :desc "Find file in notes"    :n "n" #'+hlissner/find-in-notes
+     :desc "Browse notes"          :n "N" #'+hlissner/browse-notes
+     :desc "Org capture"           :n "x" #'+org/capture
+     :desc "Browse mode notes"     :n "m" #'+org/browse-notes-for-major-mode
+     :desc "Browse project notes"  :n "p" #'+org/browse-notes-for-project)
+
    (:desc "open" :prefix "o"
-     :desc "Default browser"     :n  "o" #'browse-url-of-file
+     :desc "Default browser"     :n  "b" #'browse-url-of-file
      :desc "Debugger"            :n  "d" #'+debug/open
      :desc "REPL"                :n  "r" #'+eval/repl
                                  :v  "r" #'+eval:repl


;; evil-easymotion
(after! evil-easymotion
  (let ((prefix (concat doom-leader-key " s")))
    ;; NOTE `evilem-default-keybinds' unsets all other keys on the prefix (in
    ;; motion state)
    (evilem-default-keybindings prefix)

     :desc "Spelling error"      :nv "s" #'evil-next-flyspell-error
     :desc "Spelling correction" :n  "S" #'flyspell-correct-word-generic)

   (:desc "search" :prefix "/"
     :desc "Swiper"                :nv "/" #'swiper
     :desc "Imenu"                 :nv "i" #'imenu
     :desc "Imenu across buffers"  :nv "I" #'imenu-anywhere)

   (:desc "workspace" :prefix "TAB"
     :desc "Display tab bar"          :n "TAB" #'+workspace/display
