                   :prompt helm-global-prompt
                   :candidate-number-limit helm-company-candidate-number-limit)))))
 
-    (progn ; helm hacks
+    (after "projectile"
+      (use-package helm-projectile
+        :config
+        (setq projectile-switch-project-action 'helm-projectile))
+
       ;; Don't show the project name in the prompts; I already know.
       (defun projectile-prepend-project-name (string)
         (format helm-global-prompt string))
 
+      ;; All this for a smaller prompt (it was redundant with helm headers)
+      (defmacro helm-projectile-command (command source prompt)
+        `(defun ,(intern (concat "helm-projectile-" command)) (&optional arg)
+           (interactive "P")
+           (if (projectile-project-p)
+               (projectile-maybe-invalidate-cache arg))
+           (let ((helm-ff-transformer-show-only-basename nil)
+                 ;; for consistency, we should just let Projectile take care of ignored files
+                 (helm-boring-file-regexp-list nil))
+             (helm :sources ,source
+                   :buffer "*helm projectile*"
+                   :prompt helm-global-prompt))))
+
+      (helm-projectile-command "switch-project" 'helm-source-projectile-projects helm-global-prompt)
+      (helm-projectile-command "find-file" helm-source-projectile-files-and-dired-list helm-global-prompt)
+      (helm-projectile-command "find-file-in-known-projects" 'helm-source-projectile-files-in-all-projects-list helm-global-prompt)
+      (helm-projectile-command "find-file-dwim" 'helm-source-projectile-files-dwim-list helm-global-prompt)
+      (helm-projectile-command "find-dir" helm-source-projectile-directories-and-dired-list helm-global-prompt)
+      (helm-projectile-command "recentf" 'helm-source-projectile-recentf-list helm-global-prompt)
+      (helm-projectile-command "switch-to-buffer" 'helm-source-projectile-buffers-list helm-global-prompt))
+
+    (progn ; helm hacks
       ;; No persistent header
       (defadvice helm-display-mode-line (after undisplay-header activate)
         (setq header-line-format nil))

                  (propertize (concat " " hlstr hlend) 'face 'helm-header))))
        (when force (force-mode-line-update))))

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    (progn ; popwin
      (push '("^\\*helm.*\\*$" :position bottom :regexp t :height 18)
            popwin:special-display-config))

      (evil-define-command my:helm-recentf (&optional bang)
        :repeat nil
        (interactive "<!>")
        (if bang (helm-recentf) (helm-projectile-recentf))))

    (bind helm-map
          "C-w"        'evil-delete-backward-word
          "C-u"        'helm-delete-minibuffer-contents
          "C-r"        'evil-ex-paste-from-register ; Evil registers in helm! Glorious!
          [escape]     'helm-keyboard-quit)))
