# Settings

> Open the settings tab, edit settings.json, and the full list of settings.

Open Settings from the gear at the bottom of the Projects sidebar, or **rexa: open settings** in the command palette. Settings opens as a tab. <Kbd>⌘</Kbd> <Kbd>F</Kbd> searches every page at once.

## Pages

| Page             | Covers                                                          |
| ---------------- | --------------------------------------------------------------- |
| General          | Appearance and theme, sound, the settings file, floating terminal. |
| Agents           | Launch and resume commands, the new-tab picker, comments.       |
| Git              | Diffs, sync and background fetch.                               |
| Editor           | Editor display and behavior, markdown.                          |
| Terminal         | Padding, copy on select, environment variables, run actions.    |
| Files            | The file tree.                                                  |
| Language servers | One switch per server.                                          |

## settings.json

Every setting lives in `~/.config/rexa/settings.json`. Rexa applies edits to the file as soon as you save it. A key you leave out uses its default, and keys Rexa does not know are kept when it rewrites the file.

**General → File** has **Open settings.json** and **Reset to defaults**. Reset asks first.

<Callout type="caution" title="Plain JSON only">
  The editor accepts comments and trailing commas in `settings.json`, but the loader does not. A file with either is ignored and every setting falls back to its default until you fix it. Rexa shows a banner while the file cannot be read.
</Callout>

```json [~/.config/rexa/settings.json]
{
  "font_size": 14,
  "theme": { "name": "One Dark" },
  "editor": { "vim": true, "tab_size": 2 },
  "git": { "autofetch": true },
  "terminal": { "copy_on_select": true }
}
```

## Appearance

<FieldGroup>
  <Field name="font_size" type="number" default="13.5">Text size for the whole app, 8 to 32. <Kbd>⌘</Kbd> <Kbd>=</Kbd> and <Kbd>⌘</Kbd> <Kbd>-</Kbd> step it by 0.5.</Field>
  <Field name="font_family" type="string" default="'JetBrains Mono'">Any installed monospaced font.</Field>
  <Field name="font_weight" type="number" default="400">100 to 900.</Field>
  <Field name="theme.name" type="string" default="'Deep Space'">Theme to use. See [Themes and extensions](/docs/customize/themes-and-extensions).</Field>
  <Field name="theme.path" type="string">A Zed theme JSON file or theme extension folder.</Field>
  <Field name="theme.overrides" type="object">Zed theme color keys applied on top of the theme.</Field>
  <Field name="focus_marker" type="boolean" default="true">Mark the region that has the keyboard.</Field>
  <Field name="status_bar.hidden" type="string[]">Status bar items to hide, by id, such as `rexa.resource`.</Field>
  <Field name="status_bar.order" type="string[]">Status bar item order, by id.</Field>
</FieldGroup>

## Sound

<FieldGroup>
  <Field name="sound.enabled" type="boolean" default="true">Chime when an agent needs you.</Field>
  <Field name="sound.chime" type="string" default="'attention'">`attention`, `glass`, `submarine`, `tink`, or a path to a sound file.</Field>
</FieldGroup>

## Agents and launching

<FieldGroup>
  <Field name="agents.<id>.launch_command" type="string">Command that starts the agent. Ids: `claude`, `codex`, `cursor`, `opencode`, `pi`.</Field>
  <Field name="agents.<id>.resume_command" type="string">Command that resumes a session. `{session_id}` is replaced.</Field>
  <Field name="launch.default" type="string" default="'console'">What <Kbd>⌘</Kbd> <Kbd>T</Kbd> opens: `console`, `browser`, or an agent id.</Field>
  <Field name="launch.order" type="string[]">Order of rows in the <Kbd>⌘</Kbd> <Kbd>N</Kbd> picker.</Field>
  <Field name="launch.hidden" type="string[]">Rows hidden from the picker.</Field>
  <Field name="comments.target_ring" type="boolean" default="false">Highlight the target terminal when sending comments.</Field>
</FieldGroup>

## Editor

<FieldGroup>
  <Field name="editor.vim" type="boolean" default="false">Vim mode.</Field>
  <Field name="editor.tab_size" type="number" default="4">Spaces per indent.</Field>
  <Field name="editor.soft_wrap" type="boolean" default="false">Wrap long lines in code.</Field>
  <Field name="editor.markdown_soft_wrap" type="boolean" default="true">Wrap long lines in markdown source.</Field>
  <Field name="editor.line_numbers" type="boolean" default="true">Line numbers.</Field>
  <Field name="editor.indent_guides" type="boolean" default="true">Indent guides.</Field>
  <Field name="editor.highlight_active_line" type="boolean" default="true">Highlight the cursor's line.</Field>
  <Field name="editor.render_whitespace" type="boolean" default="false">Show spaces and tabs.</Field>
  <Field name="editor.syntax" type="boolean" default="true">Syntax highlighting.</Field>
  <Field name="editor.multi_cursor_modifier" type="'alt' | 'cmd'" default="'alt'">Modifier that adds a cursor on click.</Field>
  <Field name="editor.inline_blame" type="boolean" default="true">Blame for the cursor's line.</Field>
  <Field name="editor.which_key" type="boolean" default="false">Show what can follow a partly typed chord.</Field>
  <Field name="editor.gutter_width" type="number" default="64">Gutter width in pixels.</Field>
  <Field name="markdown.outline" type="boolean" default="false">Outline beside markdown previews.</Field>
  <Field name="markdown.diagram_scale" type="number" default="1.0">Mermaid diagram size, 0.75 to 2.0.</Field>
</FieldGroup>

## Terminal

<FieldGroup>
  <Field name="terminal.padding" type="number" default="0">Space around the terminal grid, 0 to 32 pixels.</Field>
  <Field name="terminal.copy_on_select" type="boolean" default="false">Copy a selection without <Kbd>⌘</Kbd> <Kbd>C</Kbd>.</Field>
  <Field name="terminal.env" type="object">Variables exported into every new terminal, run and agent.</Field>
  <Field name="run.mode" type="'background' | 'reuse' | 'new'" default="'background'">Where [actions](/docs/reference/project-config#actions) send their output.</Field>
  <Field name="floating.width" type="number" default="520">Floating terminal width.</Field>
  <Field name="floating.height" type="number" default="320">Floating terminal height.</Field>
  <Field name="floating.position" type="string" default="'bottom-right'">One of nine anchors, such as `top-left` or `center`.</Field>
  <Field name="floating.offsetX" type="number" default="8">Horizontal distance from the anchor.</Field>
  <Field name="floating.offsetY" type="number" default="24">Vertical distance from the anchor.</Field>
</FieldGroup>

## Git

<FieldGroup>
  <Field name="git.status_view" type="'grouped' | 'list' | 'tree'" default="'grouped'">Layout of the Changes list.</Field>
  <Field name="git.diff_layout_tab" type="'split' | 'inline'" default="'split'">Layout for new diffs.</Field>
  <Field name="git.focus_first_change" type="boolean" default="true">Open diffs at the first change.</Field>
  <Field name="git.collapse_unchanged" type="boolean" default="false">Hide unchanged regions in diffs.</Field>
  <Field name="git.confirm_sync" type="boolean" default="true">Ask before Sync.</Field>
  <Field name="git.rebase_when_sync" type="boolean" default="false">Rebase instead of merge when pulling.</Field>
  <Field name="git.autofetch" type="boolean" default="false">Fetch in the background.</Field>
  <Field name="git.autofetch_period" type="number" default="180">Seconds between fetches, at least 30.</Field>
  <Field name="git.remote_status" type="boolean" default="true">Ahead/behind counts and pull request state in the sidebar.</Field>
</FieldGroup>

## Files

<FieldGroup>
  <Field name="files.respect_gitignore" type="boolean" default="true">Hide ignored files.</Field>
  <Field name="files.git_status" type="boolean" default="true">Git status letters.</Field>
  <Field name="files.auto_fold" type="boolean" default="true">Fold single-child folder chains.</Field>
  <Field name="files.indent_guides" type="boolean" default="true">Indent guides.</Field>
  <Field name="files.sticky_headers" type="boolean" default="false">Pin parent folders while scrolling.</Field>
  <Field name="files.search_nested_worktrees" type="boolean" default="false">Include nested worktrees in quick open.</Field>
</FieldGroup>

## Language servers

<FieldGroup>
  <Field name="lsp.enabled_servers" type="string[]">Servers to run. JSON runs by default.</Field>
  <Field name="lsp.disabled_servers" type="string[]">Servers to keep off.</Field>
  <Field name="lsp.servers" type="object">Custom servers, or replacements for built-in ones by name.</Field>
  <Field name="lsp.toolchains" type="object">Toolchain per language, such as `{ "node": "20.11.0" }`.</Field>
  <Field name="lsp.builtin" type="boolean" default="true">Use the built-in server list.</Field>
</FieldGroup>

See [Language servers](/docs/workspace/language-servers).

## Resources

`resources.<kind>` sets warning and critical budgets for the [resource monitor](/docs/reference/resource-monitor).
