       (apply comment-dwim args)))
   (advice-add 'comment-dwim :around 'comment-dwim-advice))
 
-(use-package bind-key)
-
 ;; I hate X mouse bindings
 (when (and (display-graphic-p)
            (not (memq (window-system) '(x))))
-  (bind-key "<mouse-3>" 'mouse-buffer-menu))
+  (global-set-key (kbd "<mouse-3>") 'mouse-buffer-menu))
 
 ;; tab-bar mode can't be used on macOS, so rebinding it to something useful.
-(bind-key "C-x t" 'display-time-world)
+(global-set-key (kbd "C-x t") 'display-time-world)
 
 ;; Completely unbind annoying abbrev, dabbrev, expand, hippie-expand. These
 ;; ancient completion commands are just too stupid for this day and age
-(unbind-key "M-'")
-(unbind-key "M-/")
-(unbind-key "C-x '")
+(global-unset-key (kbd "M-'"))
+(global-unset-key (kbd "M-/"))
+(global-unset-key (kbd "C-x '"))
 ;; Always use M-g prefix to jump between errors
-(unbind-key "C-x `")
+(global-unset-key (kbd "C-x `"))
 ;; Must there be 4 bindings to undo?
-(unbind-key "C-x u")
-(unbind-key "C-_")
-(unbind-key "C-/")
-(unbind-key "s-z")
+(global-unset-key (kbd "C-x u"))
+(global-unset-key (kbd "C-_"))
+(global-unset-key (kbd "C-/"))
+(global-unset-key (kbd "s-z"))
 
 ;; Bind useful things to keys
-(bind-keys ("<backtab>" . align)
-           ("C-x f"     . follow-mode)
-           ;; Replace default buffer menu with ibuffer
-           ("C-x C-b"   . ibuffer)
-           ("C-t"       . transpose-sexps)
-           ("M-:"       . ielm)
-           ("C-x ^"     . nil)
-           ("C-{"       . enlarge-window)
-           ("C-}"       . shrink-window)
-           ("C-c l"     . browse-url-at-point)
-           ("C-c n l"   . org-store-link)
-           ("C-c n a"   . org-agenda)
-           ("C-c n c"   . org-capture))
+(pcase-dolist (`(,key . ,command)
+               `(("<backtab>" . align)
+                 ("C-x f"     . follow-mode)
+                 ;; Replace default buffer menu with ibuffer
+                 ("C-x C-b"   . ibuffer)
+                 ("C-t"       . transpose-sexps)
+                 ("M-:"       . ielm)
+                 ("C-x ^"     . nil)
+                 ("C-{"       . enlarge-window)
+                 ("C-}"       . shrink-window)
+                 ("C-c l"     . browse-url-at-point)
+                 ("C-c n l"   . org-store-link)
+                 ("C-c n a"   . org-agenda)
+                 ("C-c n c"   . org-capture)))
+  (global-set-key (kbd key) command))
 
 ;; Replace zap-to-char with the hidden zap-up-to-char
 (autoload 'zap-up-to-char "misc")

  :interpreter ("node" . js2-mode)
  :config
  (when (fboundp 'sp-kill-whole-line)
    (bind-key "C-k" 'sp-kill-whole-line js2-mode-map)))

(use-package rjsx-mode
  :mode ("\\.jsx?\\'" "\\.mjs\\'"))

(use-package json-mode
  :config
  (unbind-key "C-c C-f" json-mode-map)
  (add-hook 'json-mode-hook (lambda ()
                              (when (not (key-binding "C-c f"))
                                (bind-key "C-c f" 'json-pretty-print-buffer 'json-mode-map)))))

(use-package polymode
  ;; :after rjsx-mode

                                                 (lsp--workspace-server-id lsp--cur-workspace))))))))
                    (if (or yarn-pnp-p (executable-find "yarn"))
                        (progn
                          (define-key (derived-mode-map-name mode) (kbd "C-c f") 'yarn-eslint-format-buffer)
                          (yarn-eslint-format-on-save-mode))
                      (progn
                        (define-key (derived-mode-map-name mode) (kbd "C-c f") 'eslint-format-buffer)
                        (eslint-format-on-save-mode))))
                   ((eq formatter 'prettier)
                    (use-package prettier
                      :delight
                      :config
                      (prettier-mode)
                      (define-key (derived-mode-map-name mode) (kbd "C-c f") 'prettier-prettify)))))))))

;; Node
(add-hook 'js-mode-hook
