Variable: projectile-project-groups

projectile-project-groups is a customizable variable defined in projectile.el.

Value

nil

Documentation

Named groups of projects that belong together.

An alist mapping a group name to the list of project directories in it. A project may appear in several groups, and the groups of every one it belongs to are offered together by projectile-switch-sibling-project.

This is the one signal that's never guessed, so it's consulted first. Use it for the projects that belong together for reasons nothing about them can reveal:

  (setq projectile-project-groups
        '(("editor" . ("~/src/editor" "~/src/editor-docs"))
          ("infra" . ("~/src/deploy" "~/src/terraform"))))

To describe a single project's siblings from its own directory, set projectile-project-siblings in its .dir-locals.el instead.

This variable was added, or its default value changed, in projectile version 3.4.0.

Source Code

;; Defined in ~/.emacs.d/elpa/projectile-20260820.1509/projectile.el
;;; Sibling projects
;;
;; Plenty of work spans several repositories: a library and the app using
;; it, a tool and its documentation site, the handful of packages that make
;; up one project.  They're separate projects and should stay that way, but
;; moving between them shouldn't mean going through every project on the
;; machine.  `projectile-switch-sibling-project' offers just the ones
;; related to the project you're in.
;;
;; Which ones those are comes from `projectile-sibling-project-functions',
;; consulted in order, from the most reliable signal to the least:
;;
;;   1. Groups you configured yourself, which are always right.
;;   2. The owner of the upstream remote - the account or organization the
;;      repositories hang off.  This is by far the best of the inferred
;;      signals: it relates projects whose names have nothing in common,
;;      which no amount of looking at directory names ever will.
;;   3. The leading word of the directory name, which is all that's left
;;      for a repository with no remote at all.
;;
;; Inference is a heuristic, so it's bounded: a group covering more than
;; `projectile-sibling-max-group-share' of the known projects is dropped
;; rather than offered.  A group that most of your projects belong to isn't
;; telling you anything - if everything you own lives under one account,
;; "same account" doesn't relate anything to anything.

(defcustom projectile-project-groups nil
  "Named groups of projects that belong together.

An alist mapping a group name to the list of project directories in it.
A project may appear in several groups, and the groups of every one it
belongs to are offered together by
`projectile-switch-sibling-project'.

This is the one signal that's never guessed, so it's consulted first.
Use it for the projects that belong together for reasons nothing about
them can reveal:

  (setq projectile-project-groups
        \\='((\"editor\" . (\"~/src/editor\" \"~/src/editor-docs\"))
          (\"infra\"  . (\"~/src/deploy\" \"~/src/terraform\"))))

To describe a single project's siblings from its own directory, set
`projectile-project-siblings' in its `.dir-locals.el' instead."
  :group 'projectile
  :type '(alist :key-type (string :tag "Group")
                :value-type (repeat directory))
  :package-version '(projectile . "3.4.0"))