Skip to main content

12 · Settings & Keyboard

Status: ✅ Implemented · Scope: v1 · Engineering: ../spec.md

Settings​

The Settings tab (activity bar → ⚙) is searchable and grouped: Appearance, Editor, Git, Terminal, Commit message, Advanced. Each setting shows its scope (User / Workspace) and offers "copy to workspace"; edits apply live — no restart.

Where settings live​

FileScopeNotes
settings.json in the app's user-data folderUser (this machine)Main file; hand-editable with autocomplete via JSON schema
<workspace>/.gitreedesk/settings.jsonWorkspace overridesCommittable; overrides the user file per key
<dir>/.gitreedesk/terminal.jsonDirectory subtreeTerminal profiles + quick commands (page 11)
keybindings.json in the app's user-data folderUserShortcut overrides (below)
<workspace>/.gitreedesk/workspace.jsonWorkspaceDiscovery & groups only (page 01)

Resolution order: workspace > user (per key); per-repo overrides live in the workspace file under a repos map.

Settings reference (excerpt)​

{
"appearance": { "theme": "system", "density": "comfortable" }, // theme: system | light | dark
"locale": "en", // en | zh-Hans
"git": {
"path": null, // null = auto-detect; set for custom Git installs
"concurrency": 6, // parallel Git processes
"pollIntervalSec": 60, // fallback polling when watchers are unhealthy
"defaultPullStrategy": "ff-only", // ff-only | merge | rebase
"untrackedStrategy": "normal" // normal | all (per-repo override supported)
},
"graph": { "windowSize": 10000 }, // commits a graph loads before it stops (1 000 – 200 000)
"commitMessage": {
"provider": "offline", // offline | openai-compatible
"baseUrl": null, "model": null, "temperature": 0.2
},
"editor": { "fontSize": 13, "fontFamily": null, "tabSize": 2, "insertSpaces": true, "wordWrap": false, "minimap": false },
"terminal": { "defaultProfile": null }
}

Per-repository overrides (in workspace settings):

"repos": {
"backend/api-server": { "pullStrategy": "rebase" },
"website/marketing-site": { "untrackedStrategy": "all" }
}

Keyboard​

Everything is reachable in the command palette (Ctrl/Cmd+Shift+P) — typing filters actions; context-dependent actions appear only when applicable.

Default shortcuts (complete v1 set)​

Windows / LinuxmacOSAction
Ctrl+Shift+P⇧⌘PCommand palette
Ctrl+P⌘PQuick open file
Ctrl+R⌘RGo to repository
Ctrl+Shift+G⇧⌘GFocus Source Control
Ctrl+`⌃`Toggle terminal panel
Ctrl+Enter⌘⏎Commit staged
SpaceSpaceStage/unstage the selected file (contextual in Source Control; not a remappable binding)
Ctrl+Shift+F⇧⌘FFetch current repository (in Repos view: selected repositories)
F2F2Rename the focused file or folder in Explorer
DeleteDeleteMove the focused file or folder in Explorer to the trash
EnterEnterOpen a file / toggle a tree row; in the graph: commit details (contextual, not remappable)
Alt+← / Alt+→⌥← / ⌥→Editor navigation history
EscEscClose the topmost transient UI (never closes an editor tab)

Customizing​

  • keybindings.json overrides any registered command (the contextual keys above are not part of that set). A "Keyboard Shortcuts" tab (command palette → "Open keyboard shortcuts") lists defaults plus overrides and detects conflicts when you bind an already-used combination.
  • Shortcut overrides are per user (not per workspace) in v1. [Later]

Theme & language​

  • Theme: system (default, follows the OS live), light, dark — switchable from the status bar or command palette.
  • Language: en (default) and zh-Hans ship with v1; switching applies instantly without restart. All user-visible text (including dialogs, badges, tooltips) is translated — no half-English screens.