configuring-zed.md

 1# Configuring Zed
 2
 3Zed is designed to be configured: we want to fit your workflow and preferences exactly. We provide default settings that are designed to be a comfortable starting point for as many people as possible, but we hope you will enjoy tweaking it to make it feel incredible.
 4
 5In addition to the settings described here, you may also want to change your [theme](./themes.md), configure your [key bindings](./key-bindings.md), set up [tasks](./tasks.md) or install [extensions](https://github.com/zed-industries/extensions).
 6
 7## Settings Editor
 8
 9You can browse through many of the supported settings via the Settings Editor, which can be opened with the {#kb zed::OpenSettings} keybinding, or through the `zed: open settings` action in the command palette. Through it, you can customize your local, user settings as well as project settings.
10
11> Note that not all settings that Zed supports are available through the Settings Editor yet.
12> Some more intricate ones, such as language formatters, can only be changed through the JSON settings file {#kb zed::OpenSettingsFile}.
13
14## User Settings File
15
16<!--
17TBD: Settings files. Rewrite with "remote settings" in mind (e.g. `local settings` on the remote host).
18Consider renaming `zed: Open Local Settings` to `zed: Open Project Settings`.
19
20TBD: Add settings documentation about how settings are merged as overlays. E.g. project>local>default. Note how settings that are maps are merged, but settings that are arrays are replaced and must include the defaults.
21-->
22
23Your settings JSON file can be opened with {#kb zed::OpenSettingsFile}.
24By default it is located at `~/.config/zed/settings.json`, though if you have `XDG_CONFIG_HOME` in your environment on Linux it will be at `$XDG_CONFIG_HOME/zed/settings.json` instead.
25
26Whatever you have added to your user settings file gets merged with any local configuration inside your projects.
27
28### Default Settings
29
30In the Settings Editor, the values you see set are the default ones.
31You can also verify them in JSON by running {#action zed::OpenDefaultSettings} from the command palette.
32
33Extensions that provide language servers may also provide default settings for those language servers.
34
35## Project Settings File
36
37Similarly to user files, you can open your project settings file by running {#action zed::OpenProjectSettings} from the command palette.
38This will create a `.zed` directory containing`.zed/settings.json`.
39
40Although most projects will only need one settings file at the root, you can add more local settings files for subdirectories as needed.
41Not all settings can be set in local files, just those that impact the behavior of the editor and language tooling.
42For example you can set `tab_size`, `formatter` etc. but not `theme`, `vim_mode` and similar.
43
44The syntax for configuration files is a super-set of JSON that allows `//` comments.
45
46## Per-release Channel Overrides
47
48Zed reads the same `settings.json` across all release channels (Stable, Preview or Nightly).
49However, you can scope overrides to a specific channel by adding top-level `stable`, `preview`, `nightly` or `dev` objects.
50They are merged into the base configuration with settings from these keys taking precedence upon launching the specified build. For example:
51
52```json [settings]
53{
54  "theme": "sunset",
55  "vim_mode": false,
56  "nightly": {
57    "theme": "cave-light",
58    "vim_mode": true
59  },
60  "preview": {
61    "theme": "zed-dark"
62  }
63}
64```
65
66With this configuration, Stable keeps all base preferences, Preview switches to `zed-dark`, and Nightly enables Vim mode with a different theme.
67
68Changing settings in the Settings Editor will always apply the change across all channels.
69
70## All Settings Reference
71
72For a complete list of all available settings, see the [All Settings](./reference/all-settings.md) reference.