(use-package projectile :ensure t :config (setq ;; projectile-enable-caching t projectile-generic-command "rg --files -0" ) (projectile-register-project-type 'clojure '("project.clj") :compile "lein uberjar" :test-dir "src/test/") (projectile-register-project-type 'lisp '("*.asd")) (projectile-register-project-type 'npm '("package.json") :compile "npm install" :test "npm test" :run "npm start" :test-suffix ".spec") (define-key evil-normal-state-map "gf" 'project-aware-ffap) (projectile-mode 1) ) (use-package org-projectile :ensure t :after projectile company :config (progn (org-projectile-per-project) (setq org-agenda-skip-unavailable-files t) (setq org-projectile-per-project-filepath "notes/README.org") (setq org-agenda-files (append org-agenda-files (org-projectile-todo-files))) (push (org-projectile-project-todo-entry) org-capture-templates) (define-key projectile-mode-map (kbd "C-c c") 'org-capture)) :ensure t) (use-package projectile-ripgrep :ensure t :after projectile) (use-package treemacs-projectile :after treemacs projectile :ensure t) (use-package org-projectile-helm :ensure t :after org-projectile helm helm-org :config (define-key projectile-mode-map (kbd "C-c n p") 'org-projectile-helm-template-or-project)) (use-package helm-projectile :after helm projectile :ensure t :config (evil-define-key 'normal 'global (kbd "<leader>f") 'helm-projectile) (evil-define-key 'normal 'global (kbd "<leader>S") 'helm-projectile-rg) (evil-define-key 'normal 'global (kbd "<leader>h") 'helm-projectile-find-file-dwim)) (defun more-than-one-project-file-p () (= (length (projectile-select-files (projectile-current-project-files))) 1)) (defun global-find-known-file ()) (defun helm-find-known-file (&optional arg) "Use projectile with Helm for finding files in project With a prefix ARG invalidates the cache first." (interactive "P") (let ((projectile-enable-caching t)) (if (projectile-project-p) (projectile-maybe-invalidate-cache arg) (unless t (error "You're not in a project")))) (let ((helm-ff-transformer-show-only-basename nil) (helm-boring-file-regexp-list nil)) (helm :sources 'helm-source-projectile-files-in-all-projects-list :buffer (concat "*helm projectile: " (projectile-project-name) "*") :truncate-lines helm-projectile-truncate-lines :prompt (projectile-prepend-project-name "Find file in projects: ")))) (defun project-aware-ffap (&rest args) (interactive "F") (apply (if (and (projectile-project-p) (more-than-one-project-file-p)) 'helm-projectile-find-file-dwim 'find-file-at-point) args)) (defun edit-init-el () (interactive) (let ((default-directory *dotfiles-repo*)) (helm-projectile-find-file))) (defun helm-projectile-rg () "Projectile version of `helm-rg'." (interactive) (if (require 'helm-rg nil t) (if (projectile-project-p) (let ((helm-rg-prepend-file-name-line-at-top-of-matches nil) (helm-rg-include-file-on-every-match-line t)) (helm-rg (helm-projectile-rg--region-selection) nil (list (projectile-project-root)))) (error "You're not in a project")) (when (yes-or-no-p "`helm-rg' is not installed. Install? ") (condition-case nil (progn (package-install 'helm-rg) (helm-projectile-rg)) (error "`helm-rg' is not available. Is MELPA in your `package-archives'?")))))