   (setq projectile-enable-caching t)
   (setq projectile-switch-project-action 'projectile-dired))
 
+;; Helm projectile. I'm surprised I didn't install this before.
+(use-package helm-projectile
+  :ensure t
+  :config
+  (helm-projectile-on)
+  (setq projectile-completion-system 'helm))
+
+;; Helm is very cool for everything. So is counsel/avy/etc...
+;; However: Helm is __terrible__ when dealing with file handling. Whether it be finding a file
+;; (especially a directory), or worse, saving a file. Helm is a pain in the ass
+;; So we'll use counsel to save and load files.
+;; On the other hand. No package is better for occur/grep than helm.
+(use-package counsel-projectile
+  :ensure t
+  :after (counsel projectile helm-projectile)
+  :config
+  (define-key projectile-mode-map [remap projectile-find-file] #'counsel-projectile-find-file)
+  (define-key projectile-mode-map [remap projectile-find-dir] #'counsel-projectile-find-dir))
 
 ;; Flycheck. What's an editor without error checking?
 (use-package flycheck

(use-package helm
  :ensure t
  :bind
  (("C-S-m" . helm-mini))
  :config
  (progn
    (helm-mode 1)

  :init
  (global-set-key (kbd "C-x o") 'ace-window))

(use-package ivy
  :ensure t)

;; Projectile, for projects
(use-package projectile
  :ensure t
