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"))