configuring_zed.md

   1# Configuring Zed
   2
   3## Folder-specific settings
   4
   5Folder-specific settings are used to override Zed's global settings for files within a specific directory in the project panel. To get started, create a `.zed` subdirectory and add a `settings.json` within it. It should be noted that folder-specific settings don't need to live only a project's root, but can be defined at multiple levels in the project hierarchy. In setups like this, Zed will find the configuration nearest to the file you are working in and apply those settings to it. In most cases, this level of flexibility won't be needed and a single configuration for all files in a project is all that is required; the `Zed > Settings > Open Local Settings` menu action is built for this case. Running this action will look for a `.zed/settings.json` file at the root of the first top-level directory in your project panel. If it does not exist, it will create it.
   6
   7The following global settings can be overridden with a folder-specific configuration:
   8
   9- `copilot`
  10- `enable_language_server`
  11- `ensure_final_newline_on_save`
  12- `format_on_save`
  13- `formatter`
  14- `hard_tabs`
  15- `language_overrides`
  16- `preferred_line_length`
  17- `remove_trailing_whitespace_on_save`
  18- `soft_wrap`
  19- `tab_size`
  20- `show_copilot_suggestions`
  21- `show_whitespaces`
  22
  23_See the Global settings section for details about these settings_
  24
  25## Global settings
  26
  27To get started with editing Zed's global settings, open `~/.config/zed/settings.json` via `⌘` + `,`, the command palette (`zed: open settings`), or the `Zed > Settings > Open Settings` application menu item.
  28
  29Here are all the currently available settings.
  30
  31## Active Pane Magnification
  32
  33- Description: Scale by which to zoom the active pane. When set to `1.0`, the active pane has the same size as others, but when set to a larger value, the active pane takes up more space.
  34- Setting: `active_pane_magnification`
  35- Default: `1.0`
  36
  37**Options**
  38
  39`float` values
  40
  41## Autosave
  42
  43- Description: When to automatically save edited buffers.
  44- Setting: `autosave`
  45- Default: `off`
  46
  47**Options**
  48
  491. To disable autosave, set it to `off`
  50
  51```json
  52{
  53  "autosave": "off"
  54}
  55```
  56
  572. To autosave when focus changes, use `on_focus_change`:
  58
  59```json
  60{
  61  "autosave": "on_focus_change"
  62}
  63```
  64
  653. To autosave when the active window changes, use `on_window_change`:
  66
  67```json
  68{
  69  "autosave": "on_window_change"
  70}
  71```
  72
  734. To autosave after an inactivity period, use `after_delay`:
  74
  75```json
  76{
  77  "autosave": {
  78    "after_delay": {
  79      "milliseconds": 1000
  80    }
  81  }
  82}
  83```
  84
  85## Auto Update
  86
  87- Description: Whether or not to automatically check for updates.
  88- Setting: `auto_update`
  89- Default: `true`
  90
  91**Options**
  92
  93`boolean` values
  94
  95## Buffer Font Family
  96
  97- Description: The name of a font to use for rendering text in the editor.
  98- Setting: `buffer_font_family`
  99- Default: `Zed Mono`
 100
 101**Options**
 102
 103The name of any font family installed on the user's system
 104
 105## Buffer Font Features
 106
 107- Description: The OpenType features to enable for text in the editor.
 108- Setting: `buffer_font_features`
 109- Default: `null`
 110
 111**Options**
 112
 113Zed supports a subset of OpenType features that can be enabled or disabled for a given buffer or terminal font. The following [OpenType features](https://en.wikipedia.org/wiki/List_of_typographic_features) can be enabled or disabled too: `calt`, `case`, `cpsp`, `frac`, `liga`, `onum`, `ordn`, `pnum`, `ss01`, `ss02`, `ss03`, `ss04`, `ss05`, `ss06`, `ss07`, `ss08`, `ss09`, `ss10`, `ss11`, `ss12`, `ss13`, `ss14`, `ss15`, `ss16`, `ss17`, `ss18`, `ss19`, `ss20`, `subs`, `sups`, `swsh`, `titl`, `tnum`, `zero`.
 114
 115For example, to disable ligatures for a given font you can add the following to your settings:
 116
 117```json
 118{
 119  "buffer_font_features": {
 120    "calt": false
 121  }
 122}
 123```
 124
 125## Buffer Font Size
 126
 127- Description: The default font size for text in the editor.
 128- Setting: `buffer_font_size`
 129- Default: `15`
 130
 131**Options**
 132
 133`integer` values
 134
 135## Confirm Quit
 136
 137- Description: Whether or not to prompt the user to confirm before closing the application.
 138- Setting: `confirm_quit`
 139- Default: `false`
 140
 141**Options**
 142
 143`boolean` values
 144
 145## Copilot
 146
 147- Description: Copilot-specific settings.
 148- Setting: `copilot`
 149- Default:
 150
 151```json
 152"copilot": {
 153  "disabled_globs": [
 154    ".env"
 155  ]
 156}
 157```
 158
 159**Options**
 160
 161### Disabled Globs
 162
 163- Description: The set of glob patterns for which Copilot should be disabled in any matching file.
 164- Setting: `disabled_globs`
 165- Default: [".env"]
 166
 167**Options**
 168
 169List of `string` values
 170
 171## Cursor Blink
 172
 173- Description: Whether or not the cursor blinks.
 174- Setting: `cursor_blink`
 175- Default: `true`
 176
 177**Options**
 178
 179`boolean` values
 180
 181## Default Dock Anchor
 182
 183- Description: The default anchor for new docks.
 184- Setting: `default_dock_anchor`
 185- Default: `bottom`
 186
 187**Options**
 188
 1891. Position the dock attached to the bottom of the workspace: `bottom`
 1902. Position the dock to the right of the workspace like a side panel: `right`
 1913. Position the dock full screen over the entire workspace: `expanded`
 192
 193## Editor Toolbar
 194
 195- Description: Whether or not to show various elements in the editor toolbar.
 196- Setting: `toolbar`
 197- Default:
 198
 199```json
 200"toolbar": {
 201  "breadcrumbs": true,
 202  "quick_actions": true
 203},
 204```
 205
 206**Options**
 207
 208Each option controls displaying of a particular toolbar element. If all elements are hidden, the editor toolbar is not displayed.
 209
 210## Enable Language Server
 211
 212- Description: Whether or not to use language servers to provide code intelligence.
 213- Setting: `enable_language_server`
 214- Default: `true`
 215
 216**Options**
 217
 218`boolean` values
 219
 220## Ensure Final Newline On Save
 221
 222- Description: Whether or not to ensure there's a single newline at the end of a buffer when saving it.
 223- Setting: `ensure_final_newline_on_save`
 224- Default: `true`
 225
 226**Options**
 227
 228`boolean` values
 229
 230## LSP
 231
 232- Description: Configuration for language servers.
 233- Setting: `lsp`
 234- Default: `null`
 235
 236**Options**
 237
 238The following settings can be overridden for specific language servers:
 239
 240- `initialization_options`
 241
 242To override settings for a language, add an entry for that language server's name to the `lsp` value. Example:
 243
 244```json
 245"lsp": {
 246  "rust-analyzer": {
 247    "initialization_options": {
 248      "check": {
 249        "command": "clippy" // rust-analyzer.check.command (default: "check")
 250      }
 251    }
 252  }
 253}
 254```
 255
 256## Format On Save
 257
 258- Description: Whether or not to perform a buffer format before saving.
 259- Setting: `format_on_save`
 260- Default: `on`
 261
 262**Options**
 263
 2641. `on`, enables format on save obeying `formatter` setting:
 265
 266```json
 267{
 268  "format_on_save": "on"
 269}
 270```
 271
 2722. `off`, disables format on save:
 273
 274```json
 275{
 276  "format_on_save": "off"
 277}
 278```
 279
 280## Formatter
 281
 282- Description: How to perform a buffer format.
 283- Setting: `formatter`
 284- Default: `language_server`
 285
 286**Options**
 287
 2881. To use the current language server, use `"language_server"`:
 289
 290```json
 291{
 292  "formatter": "language_server"
 293}
 294```
 295
 2962. Or to use an external command, use `"external"`. Specify the name of the formatting program to run, and an array of arguments to pass to the program. The buffer's text will be passed to the program on stdin, and the formatted output should be written to stdout. For example, the following command would strip trailing spaces using [`sed(1)`](https://linux.die.net/man/1/sed):
 297
 298```json
 299{
 300  "formatter": {
 301    "external": {
 302      "command": "sed",
 303      "arguments": ["-e", "s/ *$//"]
 304    }
 305  }
 306}
 307```
 308
 3093. Or to use code actions provided by the connected language servers, use `"code_actions"` (requires Zed `0.130.x`):
 310
 311```json
 312{
 313  "formatter": {
 314    "code_actions": {
 315      // Use ESLint's --fix:
 316      "source.fixAll.eslint": true,
 317      // Organize imports on save:
 318      "source.organizeImports": true
 319    }
 320  }
 321}
 322```
 323
 324## Code Actions On Format
 325
 326- Description: The code actions to perform with the primary language server when formatting the buffer.
 327- Setting: `code_actions_on_format`
 328- Default: `{}`, except for Go it's `{ "source.organizeImports": true }`
 329
 330**Examples**
 331
 3321. Organize imports on format in TypeScript and TSX buffers:
 333
 334```json
 335{
 336  "languages": {
 337    "TypeScript": {
 338      "code_actions_on_format": {
 339        "source.organizeImports": true
 340      }
 341    },
 342    "TSX": {
 343      "code_actions_on_format": {
 344        "source.organizeImports": true
 345      }
 346    }
 347  }
 348}
 349```
 350
 3512. Run ESLint `fixAll` code action when formatting (requires Zed `0.125.0`):
 352
 353```json
 354{
 355  "languages": {
 356    "JavaScript": {
 357      "code_actions_on_format": {
 358        "source.fixAll.eslint": true
 359      }
 360    }
 361  }
 362}
 363```
 364
 3653. Run only a single ESLint rule when using `fixAll` (requires Zed `0.125.0`):
 366
 367```json
 368{
 369  "languages": {
 370    "JavaScript": {
 371      "code_actions_on_format": {
 372        "source.fixAll.eslint": true
 373      }
 374    }
 375  },
 376  "lsp": {
 377    "eslint": {
 378      "settings": {
 379        "codeActionOnSave": {
 380          "rules": ["import/order"]
 381        }
 382      }
 383    }
 384  }
 385}
 386```
 387
 388## Auto close
 389
 390- Description: Whether or not to automatically type closing characters for you.
 391- Setting: `use_autoclose`
 392- Default: `true`
 393
 394**Options**
 395
 396`boolean` values
 397
 398## Always Treat Brackets As Autoclosed
 399
 400- Description: Controls how the editor handles the autoclosed characters.
 401- Setting: `always_treat_brackets_as_autoclosed`
 402- Default: `false`
 403
 404**Options**
 405
 406`boolean` values
 407
 408**Example**
 409
 410If the setting is set to `true`:
 411
 4121. Enter in the editor: `)))`
 4132. Move the cursor to the start: `^)))`
 4143. Enter again: `)))`
 415
 416The result is still `)))` and not `))))))`, which is what it would be by default.
 417
 418## File Types
 419
 420- Setting: `file_types`
 421- Description: Configure how Zed selects a language for a file based on its filename or extension.
 422- Default: `{}`
 423
 424**Examples**
 425
 426To interpret all `.c` files as C++, and files called `MyLockFile` as TOML:
 427
 428```json
 429{
 430  "file_types": {
 431    "C++": ["c"],
 432    "TOML": ["MyLockFile"]
 433  }
 434}
 435```
 436
 437## Git
 438
 439- Description: Configuration for git-related features.
 440- Setting: `git`
 441- Default:
 442
 443```json
 444"git": {
 445  "git_gutter": "tracked_files"
 446},
 447```
 448
 449### Git Gutter
 450
 451- Description: Whether or not to show the git gutter.
 452- Setting: `git_gutter`
 453- Default: `tracked_files`
 454
 455**Options**
 456
 4571. Show git gutter in tracked files
 458
 459```json
 460{
 461  "git_gutter": "tracked_files"
 462}
 463```
 464
 4652. Hide git gutter
 466
 467```json
 468{
 469  "git_gutter": "hide"
 470}
 471```
 472
 473## Hard Tabs
 474
 475- Description: Whether to indent lines using tab characters or multiple spaces.
 476- Setting: `hard_tabs`
 477- Default: `false`
 478
 479**Options**
 480
 481`boolean` values
 482
 483## Hover Popover Enabled
 484
 485- Description: Whether or not to show the informational hover box when moving the mouse over symbols in the editor.
 486- Setting: `hover_popover_enabled`
 487- Default: `true`
 488
 489**Options**
 490
 491`boolean` values
 492
 493## Inlay hints
 494
 495- Description: Configuration for displaying extra text with hints in the editor.
 496- Setting: `inlay_hints`
 497- Default:
 498
 499```json
 500"inlay_hints": {
 501  "enabled": false,
 502  "show_type_hints": true,
 503  "show_parameter_hints": true,
 504  "show_other_hints": true,
 505  "edit_debounce_ms": 700,
 506  "scroll_debounce_ms": 50
 507}
 508```
 509
 510**Options**
 511
 512Inlay hints querying consists of two parts: editor (client) and LSP server.
 513With the inlay settings above are changed to enable the hints, editor will start to query certain types of hints and react on LSP hint refresh request from the server.
 514At this point, the server may or may not return hints depending on its implementation, further configuration might be needed, refer to the corresponding LSP server documentation.
 515
 516The following languages have inlay hints preconfigured by Zed:
 517
 518- [Go](https://docs.zed.dev/languages/go)
 519- [Rust](https://docs.zed.dev/languages/rust)
 520- [Svelte](https://docs.zed.dev/languages/svelte)
 521- [Typescript](https://docs.zed.dev/languages/typescript)
 522
 523Use the `lsp` section for the server configuration. Examples are provided in the corresponding language documentation.
 524
 525Hints are not instantly queried in Zed, two kinds of debounces are used, either may be set to 0 to be disabled.
 526Settings-related hint updates are not debounced.
 527
 528## Journal
 529
 530- Description: Configuration for the journal.
 531- Setting: `journal`
 532- Default:
 533
 534```json
 535"journal": {
 536  "path": "~",
 537  "hour_format": "hour12"
 538}
 539```
 540
 541### Path
 542
 543- Description: The path of the directory where journal entries are stored.
 544- Setting: `path`
 545- Default: `~`
 546
 547**Options**
 548
 549`string` values
 550
 551### Hour Format
 552
 553- Description: The format to use for displaying hours in the journal.
 554- Setting: `hour_format`
 555- Default: `hour12`
 556
 557**Options**
 558
 5591. 12-hour format:
 560
 561```json
 562{
 563  "hour_format": "hour12"
 564}
 565```
 566
 5672. 24-hour format:
 568
 569```json
 570{
 571  "hour_format": "hour24"
 572}
 573```
 574
 575## Language Overrides
 576
 577- Description: Configuration overrides for specific languages.
 578- Setting: `language_overrides`
 579- Default: `null`
 580
 581**Options**
 582
 583To override settings for a language, add an entry for that languages name to the `language_overrides` value. Example:
 584
 585```json
 586"language_overrides": {
 587  "C": {
 588    "format_on_save": "off",
 589    "preferred_line_length": 64,
 590    "soft_wrap": "preferred_line_length"
 591  },
 592  "JSON": {
 593    "tab_size": 4
 594  }
 595}
 596```
 597
 598The following settings can be overridden for each specific language:
 599
 600- `enable_language_server`
 601- `ensure_final_newline_on_save`
 602- `format_on_save`
 603- `formatter`
 604- `hard_tabs`
 605- `preferred_line_length`
 606- `remove_trailing_whitespace_on_save`
 607- `show_copilot_suggestions`
 608- `show_whitespaces`
 609- `soft_wrap`
 610- `tab_size`
 611- `use_autoclose`
 612- `always_treat_brackets_as_autoclosed`
 613
 614These values take in the same options as the root-level settings with the same name.
 615
 616## Preferred Line Length
 617
 618- Description: The column at which to soft-wrap lines, for buffers where soft-wrap is enabled.
 619- Setting: `preferred_line_length`
 620- Default: `80`
 621
 622**Options**
 623
 624`integer` values
 625
 626## Projects Online By Default
 627
 628- Description: Whether or not to show the online projects view by default.
 629- Setting: `projects_online_by_default`
 630- Default: `true`
 631
 632**Options**
 633
 634`boolean` values
 635
 636## Remove Trailing Whitespace On Save
 637
 638- Description: Whether or not to remove any trailing whitespace from lines of a buffer before saving it.
 639- Setting: `remove_trailing_whitespace_on_save`
 640- Default: `true`
 641
 642**Options**
 643
 644`boolean` values
 645
 646## Show Call Status Icon
 647
 648- Description: Whether or not to show the call status icon in the status bar.
 649- Setting: `show_call_status_icon`
 650- Default: `true`
 651
 652**Options**
 653
 654`boolean` values
 655
 656## Show Completions On Input
 657
 658- Description: Whether or not to show completions as you type.
 659- Setting: `show_completions_on_input`
 660- Default: `true`
 661
 662**Options**
 663
 664`boolean` values
 665
 666## Show Completion Documentation
 667
 668- Description: Whether to display inline and alongside documentation for items in the completions menu.
 669- Setting: `show_completion_documentation`
 670- Default: `true`
 671
 672**Options**
 673
 674`boolean` values
 675
 676## Completion Documentation Debounce Delay
 677
 678- Description: The debounce delay before re-querying the language server for completion documentation when not included in original completion list.
 679- Setting: `completion_documentation_secondary_query_debounce`
 680- Default: `300` ms
 681
 682**Options**
 683
 684`integer` values
 685
 686## Show Copilot Suggestions
 687
 688- Description: Whether or not to show Copilot suggestions as you type or wait for a `copilot::Toggle`.
 689- Setting: `show_copilot_suggestions`
 690- Default: `true`
 691
 692**Options**
 693
 694`boolean` values
 695
 696## Show Whitespaces
 697
 698- Description: Whether or not to show render whitespace characters in the editor.
 699- Setting: `show_whitespaces`
 700- Default: `selection`
 701
 702**Options**
 703
 7041. `all`
 7052. `selection`
 7063. `none`
 707
 708## Soft Wrap
 709
 710- Description: Whether or not to automatically wrap lines of text to fit editor / preferred width.
 711- Setting: `soft_wrap`
 712- Default: `none`
 713
 714**Options**
 715
 7161. `editor_width`
 7172. `preferred_line_length`
 7183. `none`
 719
 720## Tab Size
 721
 722- Description: The number of spaces to use for each tab character.
 723- Setting: `tab_size`
 724- Default: `4`
 725
 726**Options**
 727
 728`integer` values
 729
 730## Telemetry
 731
 732- Description: Control what info is collected by Zed.
 733- Setting: `telemetry`
 734- Default:
 735
 736```json
 737"telemetry": {
 738  "diagnostics": true,
 739  "metrics": true
 740},
 741```
 742
 743**Options**
 744
 745### Diagnostics
 746
 747- Description: Setting for sending debug-related data, such as crash reports.
 748- Setting: `diagnostics`
 749- Default: `true`
 750
 751**Options**
 752
 753`boolean` values
 754
 755### Metrics
 756
 757- Description: Setting for sending anonymized usage data, such what languages you're using Zed with.
 758- Setting: `metrics`
 759- Default: `true`
 760
 761**Options**
 762
 763`boolean` values
 764
 765## Terminal
 766
 767- Description: Configuration for the terminal.
 768- Setting: `terminal`
 769- Default:
 770
 771```json
 772"terminal": {
 773  "alternate_scroll": "off",
 774  "blinking": "terminal_controlled",
 775  "copy_on_select": false,
 776  "env": {},
 777  "font_family": null,
 778  "font_features": null,
 779  "font_size": null,
 780  "option_as_meta": false,
 781  "shell": {},
 782  "toolbar": {
 783    "title": true
 784  },
 785  "working_directory": "current_project_directory"
 786}
 787```
 788
 789### Alternate Scroll
 790
 791- Description: Set whether Alternate Scroll mode (DECSET code: `?1007`) is active by default. Alternate Scroll mode converts mouse scroll events into up / down key presses when in the alternate screen (e.g. when running applications like vim or less). The terminal can still set and unset this mode with ANSI escape codes.
 792- Setting: `alternate_scroll`
 793- Default: `off`
 794
 795**Options**
 796
 7971. Default alternate scroll mode to on
 798
 799```json
 800{
 801  "alternate_scroll": "on"
 802}
 803```
 804
 8052. Default alternate scroll mode to off
 806
 807```json
 808{
 809  "alternate_scroll": "off"
 810}
 811```
 812
 813### Blinking
 814
 815- Description: Set the cursor blinking behavior in the terminal
 816- Setting: `blinking`
 817- Default: `terminal_controlled`
 818
 819**Options**
 820
 8211. Never blink the cursor, ignore the terminal mode
 822
 823```json
 824{
 825  "blinking": "off"
 826}
 827```
 828
 8292. Default the cursor blink to off, but allow the terminal to turn blinking on
 830
 831```json
 832{
 833  "blinking": "terminal_controlled"
 834}
 835```
 836
 8373. Always blink the cursor, ignore the terminal mode
 838
 839```json
 840"blinking": "on",
 841```
 842
 843### Copy On Select
 844
 845- Description: Whether or not selecting text in the terminal will automatically copy to the system clipboard.
 846- Setting: `copy_on_select`
 847- Default: `false`
 848
 849**Options**
 850
 851`boolean` values
 852
 853### Env
 854
 855- Description: Any key-value pairs added to this object will be added to the terminal's environment. Keys must be unique, use `:` to separate multiple values in a single variable
 856- Setting: `env`
 857- Default: `{}`
 858
 859**Example**
 860
 861```json
 862"env": {
 863  "ZED": "1",
 864  "KEY": "value1:value2"
 865}
 866```
 867
 868### Font Size
 869
 870- Description: What font size to use for the terminal. When not set defaults to matching the editor's font size
 871- Setting: `font_size`
 872- Default: `null`
 873
 874**Options**
 875
 876`integer` values
 877
 878### Font Family
 879
 880- Description: What font to use for the terminal. When not set, defaults to matching the editor's font.
 881- Setting: `font_family`
 882- Default: `null`
 883
 884**Options**
 885
 886The name of any font family installed on the user's system
 887
 888### Font Features
 889
 890- Description: What font features to use for the terminal. When not set, defaults to matching the editor's font features.
 891- Setting: `font_features`
 892- Default: `null`
 893
 894**Options**
 895
 896See Buffer Font Features
 897
 898### Option As Meta
 899
 900- Description: Re-interprets the option keys to act like a 'meta' key, like in Emacs.
 901- Setting: `option_as_meta`
 902- Default: `true`
 903
 904**Options**
 905
 906`boolean` values
 907
 908### Shell
 909
 910- Description: What shell to use when launching the terminal.
 911- Setting: `shell`
 912- Default: `system`
 913
 914**Options**
 915
 9161. Use the system's default terminal configuration (usually the `/etc/passwd` file).
 917
 918```json
 919{
 920  "shell": "system"
 921}
 922```
 923
 9242. A program to launch:
 925
 926```json
 927"shell": {
 928    "program": "sh"
 929}
 930```
 931
 9323. A program with arguments:
 933
 934```json
 935"shell": {
 936  "with_arguments": {
 937    "program": "/bin/bash",
 938    "args": ["--login"]
 939  }
 940}
 941```
 942
 943## Terminal Toolbar
 944
 945- Description: Whether or not to show various elements in the terminal toolbar. It only affects terminals placed in the editor pane.
 946- Setting: `toolbar`
 947- Default:
 948
 949```json
 950"toolbar": {
 951  "title": true,
 952},
 953```
 954
 955**Options**
 956
 957At the moment, only the `title` option is available, it controls displaying of the terminal title that can be changed via `PROMPT_COMMAND`. If the title is hidden, the terminal toolbar is not displayed.
 958
 959### Working Directory
 960
 961- Description: What working directory to use when launching the terminal.
 962- Setting: `working_directory`
 963- Default: `"current_project_directory"`
 964
 965**Options**
 966
 9671. Use the current file's project directory. Will Fallback to the first project directory strategy if unsuccessful
 968
 969```json
 970{
 971  "working_directory": "current_project_directory"
 972}
 973```
 974
 9752. Use the first project in this workspace's directory. Will fallback to using this platform's home directory.
 976
 977```json
 978{
 979  "working_directory": "first_project_directory"
 980}
 981```
 982
 9833. Always use this platform's home directory (if we can find it)
 984
 985```json
 986{
 987  "working_directory": "always_home"
 988}
 989```
 990
 9914. Always use a specific directory. This value will be shell expanded. If this path is not a valid directory the terminal will default to this platform's home directory.
 992
 993```json
 994"working_directory": {
 995  "always": {
 996    "directory": "~/zed/projects/"
 997  }
 998}
 999```
1000
1001## Theme
1002
1003- Description: The theme setting can be specified in two forms - either as the name of a theme or as an object containing the `mode`, `dark`, and `light` themes for the Zed UI.
1004- Setting: `theme`
1005- Default: `One Dark`
1006
1007### Theme Object
1008
1009- Description: Specify the theme using an object that includes the `mode`, `dark`, and `light` themes.
1010- Setting: `theme`
1011- Default:
1012
1013```json
1014"theme": {
1015  "mode": "dark",
1016  "dark": "One Dark",
1017  "light": "One Light"
1018},
1019```
1020
1021### Mode
1022
1023- Description: Specify theme mode.
1024- Setting: `mode`
1025- Default: `dark`
1026
1027**Options**
1028
10291. Set the theme to dark mode
1030
1031```json
1032{
1033  "mode": "dark"
1034}
1035```
1036
10372. Set the theme to light mode
1038
1039```json
1040{
1041  "mode": "light"
1042}
1043```
1044
10453. Set the theme to system mode
1046
1047```json
1048{
1049  "mode": "system"
1050}
1051```
1052
1053### Dark
1054
1055- Description: The name of the dark Zed theme to use for the UI.
1056- Setting: `dark`
1057- Default: `One Dark`
1058
1059**Options**
1060
1061Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
1062
1063### Light
1064
1065- Description: The name of the light Zed theme to use for the UI.
1066- Setting: `light`
1067- Default: `One Light`
1068
1069**Options**
1070
1071Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
1072
1073## Vim
1074
1075- Description: Whether or not to enable vim mode (work in progress).
1076- Setting: `vim_mode`
1077- Default: `false`
1078
1079## Project Panel
1080
1081- Description: Customise project panel
1082- Setting: `project_panel`
1083- Default:
1084
1085```json
1086"project_panel": {
1087  "dock": "left",
1088  "git_status": true,
1089  "default_width": "N/A - width in pixels"
1090},
1091```
1092
1093### Dock
1094
1095- Description: Control the position of the dock
1096- Setting: `dock`
1097- Default: `left`
1098
1099**Options**
1100
11011. Default dock position to left
1102
1103```json
1104{
1105  "dock": "left"
1106}
1107```
1108
11092. Default dock position to right
1110
1111```json
1112{
1113  "dock": "right"
1114}
1115```
1116
1117### Git Status
1118
1119- Description: Indicates newly created and updated files
1120- Setting: `git_status`
1121- Default: `true`
1122
11231. Default enable git status
1124
1125```json
1126{
1127  "git_status": true
1128}
1129```
1130
11312. Default disable git status
1132
1133```json
1134{
1135  "git_status": false
1136}
1137```
1138
1139### Default Width
1140
1141- Description: Customise default width taken by project panel
1142- Setting: `default_width`
1143- Default: N/A width in pixels (eg: 420)
1144
1145**Options**
1146
1147`boolean` values
1148
1149## An example configuration:
1150
1151```json
1152// ~/.config/zed/settings.json
1153{
1154  "theme": "cave-light",
1155  "tab_size": 2,
1156  "preferred_line_length": 80,
1157  "soft_wrap": "none",
1158
1159  "buffer_font_size": 18,
1160  "buffer_font_family": "Zed Mono",
1161
1162  "autosave": "on_focus_change",
1163  "format_on_save": "off",
1164  "vim_mode": false,
1165  "projects_online_by_default": true,
1166  "terminal": {
1167    "font_family": "FiraCode Nerd Font Mono",
1168    "blinking": "off"
1169  },
1170  "language_overrides": {
1171    "C": {
1172      "format_on_save": "language_server",
1173      "preferred_line_length": 64,
1174      "soft_wrap": "preferred_line_length"
1175    }
1176  }
1177}
1178```