              ("TAB"   . nil)
              ("<tab>" . nil)
              ("C-c i" . yas-expand)))
+
+;; Modern code folding
+(use-package origami
+  :config
+  ;; Unbind hide/show mode's ridiculous keybindings
+  (assq-delete-all 'hs-minor-mode minor-mode-map-alist)
+  (bind-keys ("M-0"   . origami-open-all-nodes)
+             ("M-9"   . origami-close-all-nodes)
+             ("C-M-/" . origami-recursively-toggle-node)))
 
 ;; Auto-completion
 (use-package company

(eval-when-compile (require 'use-package))
(require 'bind-key)

;; Unmap extraneous undo-tree mode keys
(assq-delete-all 'undo-tree-mode minor-mode-map-alist)

;; Unbind hide/show mode's ridiculous keybindings
(assq-delete-all 'hs-minor-mode minor-mode-map-alist)

(bind-keys ("M-s f"   . follow-mode)
           ("M-s s"   . align)
           ("M-;"     . comment-dwim-line-or-region)
           ;; Rebind windmove keys
           ("M-s h"   . windmove-left)
           ("M-s l"   . windmove-right)
           ("M-s k"   . windmove-up)
           ("M-s j"   . windmove-down)
           ;; Replace default buffer menu with ibuffer
           ("C-x C-b" . ibuffer)
           ;; Misc
           ("C-x u"   . undo-tree-visualize))

;; Completely unbind annoying abbrev, dabbrev, expand, hippie-expand. These
;; ancient completion commands are just too stupid for this day and age

  (bind-keys ("C-x =" . evil-numbers/inc-at-pt)
             ("C-x -" . evil-numbers/dec-at-pt)))

;; Quick Snippets
(use-package yasnippet
  :delight yas-minor-mode
