data/roles.json

{
  "prompt": {
    "kind": "single",
    "exclusive": true,
    "hook": "Initialize-DFRolePrompt",
    "reserved": { "env": [], "aliases": [], "code": ["Invoke-Expression", "iex", "function:prompt"] },
    "description": "Draws the shell prompt. Only one prompt engine may own the prompt function."
  },
  "project-env": {
    "kind": "single",
    "exclusive": true,
    "hook": "Initialize-DFRoleProjectEnv",
    "reserved": { "env": [], "aliases": [], "code": ["Invoke-Expression", "iex", "LocationChangedAction"] },
    "description": "Loads per-directory environment variables. Two active hooks would fight over the same variables."
  },
  "navigation": {
    "kind": "single",
    "exclusive": true,
    "hook": "Initialize-DFRoleNavigation",
    "reserved": { "env": [], "aliases": [], "code": ["Invoke-Expression", "iex"] },
    "description": "Jumps to frequently used directories. Hooks the prompt to track directory changes."
  },
  "listing": {
    "kind": "single",
    "exclusive": false,
    "hook": "Initialize-DFRoleListing",
    "reserved": { "env": [], "aliases": ["ls", "ll", "la", "tree"], "code": [] },
    "description": "Lists directory contents. The winner defines ls, ll, la and tree."
  },
  "pager": {
    "kind": "single",
    "exclusive": false,
    "hook": "Initialize-DFRolePager",
    "reserved": { "env": ["PAGER"], "aliases": [], "code": [] },
    "description": "Pages long output. The winner sets PAGER, which DotForge's own pager also reads."
  },
  "diff": {
    "kind": "single",
    "exclusive": false,
    "hook": "Initialize-DFRoleDiff",
    "reserved": { "env": ["GIT_PAGER"], "aliases": [], "code": [] },
    "description": "Displays git diffs. The winner sets GIT_PAGER."
  },
  "picker": {
    "kind": "single",
    "exclusive": false,
    "hook": "Initialize-DFRolePicker",
    "requires": "Accepts fzf's command-line options and reads candidates on stdin.",
    "reserved": { "env": ["Picker"], "aliases": [], "code": [] },
    "description": "Fuzzy-picks from a list. The winner sets Picker, which every DotForge picker runs."
  },
  "editor": {
    "kind": "single",
    "exclusive": false,
    "hook": "Initialize-DFRoleEditor",
    "reserved": { "env": ["EDITOR", "VISUAL"], "aliases": [], "code": [] },
    "description": "Edits text files. The winner sets EDITOR and VISUAL."
  },
  "package-manager": {
    "kind": "single",
    "exclusive": false,
    "hook": "Initialize-DFRolePackageManager",
    "emptyMembership": true,
    "reserved": { "env": [], "aliases": [], "code": [] },
    "description": "Installs tools. Install-DFTool tries the winner first, then the others by priority."
  },
  "tab-completion": {
    "kind": "single",
    "exclusive": false,
    "hook": "Initialize-DFRoleTabCompletion",
    "reserved": { "env": [], "aliases": [], "code": ["Set-PSReadLineKeyHandler -Key Tab"] },
    "description": "Owns the Tab key. The winner binds Tab; the others still register their completers."
  },
  "markdown-viewer": { "kind": "category", "description": "Renders Markdown in the terminal." },
  "completion": { "kind": "category", "description": "Adds or improves Tab completion." },
  "grep": { "kind": "category", "description": "Searches file contents." },
  "file-search": { "kind": "category", "description": "Finds files by name." },
  "system-info": { "kind": "category", "description": "Shows system information." },
  "url-fetch": { "kind": "category", "description": "Downloads files and calls HTTP APIs." },
  "version-manager": { "kind": "category", "description": "Installs and switches language runtime versions." },
  "js-runtime": { "kind": "category", "description": "Provides a JavaScript runtime on PATH (node, bun). Tools that need one declare requires: [\"role:js-runtime\"]." },
  "elevator": { "kind": "category", "description": "Runs a command with administrator rights. Install-DFTool runs a manager that needs admin (choco) through it." },
  "python-runtime": { "kind": "category", "description": "Provides a Python runtime on PATH. Tools that need one declare requires: [\"role:python-runtime\"]." },
  "python-package-manager": { "kind": "category", "description": "Installs packages from PyPI. Install-DFTool uses the Defaults choice, else the highest priority (uv, pipx, pip)." },
  "js-package-manager": { "kind": "category", "description": "Installs packages from the npm registry. Install-DFTool uses the Defaults choice, else the highest priority." },
  "rust-package-manager": { "kind": "category", "description": "Installs crates from crates.io." },
  "powershell-package-manager": { "kind": "category", "description": "Installs modules from the PowerShell Gallery." }
}