visual-customization.md

  1# Visual Customization
  2
  3Various aspects of Zed's visual layout can be configured via Zed settings.json which you can access via {#action zed::OpenSettings} ({#kb zed::OpenSettings}).
  4
  5See [Configuring Zed](./configuring-zed.md) for additional information and other non-visual settings.
  6
  7## Themes
  8
  9Use may install zed extensions providing [Themes](./themes.md) and [Icon Themes](./icon-themes.md) via {#action zed::Extensions} from the command palette or menu.
 10
 11You can preview/choose amongsts your installed themes and icon themes with {#action theme_selector::Toggle} ({#kb theme_selector::Toggle}) and ({#action icon_theme_selector::Toggle}) which will modify the following settings:
 12
 13```json
 14{
 15  "theme": "One Dark",
 16  "icon_theme": "Zed (Default)"
 17}
 18```
 19
 20If you would like to use distinct themes for light mode/dark mode that can be set with:
 21
 22```json
 23{
 24  "theme": {
 25    "dark": "One Dark"
 26    "light": "One Light",
 27    // Mode to use (dark, light) or "system" to follow the OS's light/dark mode (default)
 28    "mode": "system",
 29  },
 30  "icon_theme": {
 31    "dark": "Zed (Default)"
 32    "light": "Zed (Default)",
 33    // Mode to use (dark, light) or "system" to follow the OS's light/dark mode (default)
 34    "mode": "system",
 35  }
 36}
 37```
 38
 39## Fonts
 40
 41```json
 42  // UI Font. Use ".SystemUIFont" to use the default system font (SF Pro on macOS)
 43  "ui_font_family": "Zed Plex Sans",
 44  "ui_font_weight": 400, // Font weight in standard CSS units from 100 to 900.
 45  "ui_font_size": 16,
 46
 47  // Buffer Font - Used by editor buffers
 48  "buffer_font_family": "Zed Plex Mono",  // Font name for editor buffers
 49  "buffer_font_size": 15,                 // Font size for editor buffers
 50  "buffer_font_weight": 400,              // Font weight in CSS units [100-900]
 51  // Line height "comfortable" (1.618), "standard" (1.3) or custom: `{ "custom": 2 }`
 52  "buffer_line_height": "comfortable",
 53
 54  // Terminal Font Settings
 55  "terminal": {
 56    "font_family": "Zed Plex Mono",
 57    "font_size": 15,
 58    // Terminal line height: comfortable (1.618), standard(1.3) or `{ "custom": 2 }`
 59    "line_height": "comfortable",
 60  },
 61
 62  // Agent Panel Font Settings
 63  "agent_font_size": 15
 64```
 65
 66### Font ligatures
 67
 68By default Zed enable font ligatures which will visually combines certain adjacent characters.
 69
 70For example `=>` will be displayed as `→` and `!=` will be `≠`. This is purely cosmetic and the individual characters remain unchanged.
 71
 72To disable this behavior use:
 73
 74```json
 75{
 76  "buffer_font_features": {
 77    "calt": false // Disable ligatures
 78  }
 79}
 80```
 81
 82### Status Bar
 83
 84```json
 85{
 86  // Whether to show full labels in line indicator or short ones
 87  //   - `short`: "2 s, 15 l, 32 c"
 88  //   - `long`: "2 selections, 15 lines, 32 characters"
 89  "line_indicator_format": "long"
 90
 91  // Individual status bar icons can be hidden:
 92  // "project_panel": {"button": false },
 93  // "outline_panel": {"button": false },
 94  // "collaboration_panel": {"button": false },
 95  // "chat_panel": {"button": "never" },
 96  // "git_panel": {"button": false },
 97  // "notification_panel": {"button": false },
 98  // "agent": {"button": false },
 99  // "debugger": {"button": false },
100  // "diagnostics": {"button": false },
101  // "search": {"button": false },
102}
103```
104
105### Titlebar
106
107```json
108  // Control which items are shown/hidden in the title bar
109  "title_bar": {
110    "show_branch_icon": false,      // Show/hide branch icon beside branch switcher
111    "show_branch_name": true,       // Show/hide branch name
112    "show_project_items": true,     // Show/hide project host and name
113    "show_onboarding_banner": true, // Show/hide onboarding banners
114    "show_user_picture": true,      // Show/hide user avatar
115    "show_sign_in": true            // Show/hide sign-in button
116  },
117```
118
119## Workspace
120
121```json
122{
123  // Force usage of Zed build in path prompts (file and directory pickers)
124  // instead of OS native pickers (false).
125  "use_system_path_prompts": true,
126  // Force usage of Zed built in confirmation prompts ("Do you want to save?")
127  // instead of OS native prompts (false). On linux this is ignored (always false).
128  "use_system_prompts": true,
129
130  // Whether to use the system provided dialogs for Open and Save As (true) or
131  // Zed's built-in keyboard-first pickers (false)
132  "use_system_path_prompts": true,
133
134  // Active pane styling settings.
135  "active_pane_modifiers": {
136    // Inset border size of the active pane, in pixels.
137    "border_size": 0.0,
138    // Opacity of the inactive panes. 0 means transparent, 1 means opaque.
139    "inactive_opacity": 1.0
140  },
141
142  // Layout mode of the bottom dock: contained, full, left_aligned, right_aligned
143  "bottom_dock_layout": "contained",
144
145  // Whether to resize all the panels in a dock when resizing the dock.
146  // Can be a combination of "left", "right" and "bottom".
147  "resize_all_panels_in_dock": ["left"]
148}
149```
150
151<!--
152TBD: Centered layout related settings
153```json
154    "centered_layout": {
155    // The relative width of the left padding of the central pane from the
156    // workspace when the centered layout is used.
157    "left_padding": 0.2,
158    // The relative width of the right padding of the central pane from the
159    // workspace when the centered layout is used.
160    "right_padding": 0.2
161    },
162```
163-->
164
165## Editor
166
167```json
168  // Whether the cursor blinks in the editor.
169  "cursor_blink": true,
170
171  // Cursor shape for the default editor: bar, block, underline, hollow
172  "cursor_shape": null,
173
174  // Highlight the current line in the editor: none, gutter, line, all
175  "current_line_highlight": "all",
176
177  // When does the mouse cursor hide: never, on_typing, on_typing_and_movement
178  "hide_mouse": "on_typing_and_movement",
179
180  // Whether to highlight all occurrences of the selected text in an editor.
181  "selection_highlight": true,
182
183  // Visually show tabs and spaces  (none, all, selection, boundary, trailing)
184  "show_whitespaces": "selection",
185
186  "unnecessary_code_fade": 0.3, // How much to fade out unused code.
187
188  // Hide the values of in variables from visual display in private files
189  "redact_private_values": false,
190
191  // Soft-wrap and rulers
192  "soft_wrap": "none",          // none, editor_width, preferred_line_length, bounded
193  "preferred_line_length": 80,  // Column to soft-wrap
194  "show_wrap_guides": true,     // Show/hide wrap guides (vertical rulers)
195  "wrap_guides": [],            // Where to position wrap_guides (character counts)
196
197  // Gutter Settings
198  "gutter": {
199    "line_numbers": true,         // Show/hide line numbers in the gutter.
200    "runnables": true,            // Show/hide runnables buttons in the gutter.
201    "breakpoints": true,          // Show/hide show breakpoints in the gutter.
202    "folds": true,                // Show/hide show fold buttons in the gutter.
203    "min_line_number_digits": 4   // Reserve space for N digit line numbers
204  },
205  "relative_line_numbers": false, // Show relative line numbers in gutter
206
207  // Indent guides
208  "indent_guides": {
209    "enabled": true,
210    "line_width": 1,                  // Width of guides in pixels [1-10]
211    "active_line_width": 1,           // Width of active guide in pixels [1-10]
212    "coloring": "fixed",              // disabled, fixed, indent_aware
213    "background_coloring": "disabled" // disabled, indent_aware
214  }
215```
216
217### Git Blame {#editor-blame}
218
219```json
220  "git": {
221    "inline_blame": {
222      "enabled": true,             // Show/hide inline blame
223      "delay": 0,                  // Show after delay (ms)
224      "min_column": 0,             // Minimum column to inline display blame
225      "show_commit_summary": false // Show/hide commit summary
226    },
227    "hunk_style": "staged_hollow"  // staged_hollow, unstaged_hollow
228  }
229```
230
231### Editor Toolbar
232
233```json
234  // Editor toolbar related settings
235  "toolbar": {
236    "breadcrumbs": true, // Whether to show breadcrumbs.
237    "quick_actions": true, // Whether to show quick action buttons.
238    "selections_menu": true, // Whether to show the Selections menu
239    "agent_review": true, // Whether to show agent review buttons
240    "code_actions": false // Whether to show code action buttons
241  }
242```
243
244### Editor Scrollbar and Minimap {#editor-scrollbar}
245
246```json
247  // Scrollbar related settings
248  "scrollbar": {
249    // When to show the scrollbar in the editor (auto, system, always, never)
250    "show": "auto",
251    "cursors": true,          // Show cursor positions in the scrollbar.
252    "git_diff": true,         // Show git diff indicators in the scrollbar.
253    "search_results": true,   // Show buffer search results in the scrollbar.
254    "selected_text": true,    // Show selected text occurrences in the scrollbar.
255    "selected_symbol": true,  // Show selected symbol occurrences in the scrollbar.
256    "diagnostics": "all",     // Show diagnostics (none, error, warning, information, all)
257    "axes": {
258      "horizontal": true,     // Show/hide the horizontal scrollbar
259      "vertical": true        // Show/hide the vertical scrollbar
260    }
261  },
262
263  // Minimap related settings
264  "minimap": {
265    "show": "never",                // When to show (auto, always, never)
266    "display_in": "active_editor",  // Where to show (active_editor, all_editor)
267    "thumb": "always",              // When to show thumb (always, hover)
268    "thumb_border": "left_open",    // Thumb border (left_open, right_open, full, none)
269    "max_width_columns": 80         // Maximum width of minimap
270    "current_line_highlight": null  // Highlight current line (null, line, gutter)
271  },
272
273  // Control Editor scroll beyond the last line: off, one_page, vertical_scroll_margin
274  "scroll_beyond_last_line": "one_page",
275  // Lines to keep above/below the cursor when scrolling with the keyboard
276  "vertical_scroll_margin": 3,
277  // The number of characters to keep on either side when scrolling with the mouse
278  "horizontal_scroll_margin": 5,
279  // Scroll sensitivity multiplier
280  "scroll_sensitivity": 1.0,
281  // Scroll sensitivity multiplier for fast scrolling (hold alt while scrolling)
282  "fast_scroll_sensitivity": 4.0,
283```
284
285### Editor Tabs
286
287```json
288  // Maximum number of tabs per pane. Unset for unlimited.
289  "max_tabs": null,
290
291  // Customize the tab bar appearance
292  "tab_bar": {
293    "show": true,                     // Show/hide the tab bar
294    "show_nav_history_buttons": true, // Show/hide history buttons on tab bar
295    "show_tab_bar_buttons": true      // Show hide buttons (new, split, zoom)
296  },
297  "tabs": {
298    "git_status": false,              // Color to show git status
299    "close_position": "right",        // Close button position (left, right, hidden)
300    "show_close_button": "hover",     // Close button shown (hover, always, hidden)
301    "file_icons": false,              // Icon showing file type
302    // Show diagnostics in file icon (off, errors, all). Requires file_icons=true
303    "show_diagnostics": "off"
304  }
305```
306
307### Multibuffer
308
309```json
310{
311  // The default number of lines to expand excerpts in the multibuffer by.
312  "expand_excerpt_lines": 5
313}
314```
315
316### Editor Completions, Snippets, Actions, Diagnostics {#editor-lsp}
317
318```json
319  "snippet_sort_order": "inline",        // Snippets completions: top, inline, bottom
320  "show_completions_on_input": true,     // Show completions while typing
321  "show_completion_documentation": true, // Show documentation in completions
322  "auto_signature_help": false,          // Show method signatures inside parentheses
323
324  // Whether to show the signature help after completion or a bracket pair inserted.
325  // If `auto_signature_help` is enabled, this setting will be treated as enabled also.
326  "show_signature_help_after_edits": false,
327
328  // Whether to show code action button at start of buffer line.
329  "inline_code_actions": true,
330
331  // Which level to use to filter out diagnostics displayed in the editor:
332  "diagnostics_max_severity": null,      // off, error, warning, info, hint, null (all)
333
334  // How to render LSP `textDocument/documentColor` colors in the editor.
335  "lsp_document_colors": "inlay",        // none, inlay, border, background
336```
337
338### Edit Predictions {#editor-ai}
339
340```json
341  "edit_predictions": {
342    "mode": "eager",                // Automatically show (eager) or hold-alt (subtle)
343    "enabled_in_text_threads": true // Show/hide predictions in agent text threads
344  },
345  "show_edit_predictions": true     // Show/hide predictions in editor
346```
347
348### Editor Inlay Hints
349
350```json
351{
352  "inlay_hints": {
353    "enabled": false,
354    // Toggle certain types of hints on and off, all switched on by default.
355    "show_type_hints": true,
356    "show_parameter_hints": true,
357    "show_other_hints": true,
358
359    // Whether to show a background for inlay hints (theme `hint.background`)
360    "show_background": false, //
361
362    // Time to wait after editing before requesting hints (0 to disable debounce)
363    "edit_debounce_ms": 700,
364    // Time to wait after scrolling before requesting hints (0 to disable debounce)
365    "scroll_debounce_ms": 50,
366
367    // A set of modifiers which, when pressed, will toggle the visibility of inlay hints.
368    "toggle_on_modifiers_press": {
369      "control": false,
370      "shift": false,
371      "alt": false,
372      "platform": false,
373      "function": false
374    }
375  }
376}
377```
378
379## File Finder
380
381```json
382  // File Finder Settings
383  "file_finder": {
384    "file_icons": true,         // Show/hide file icons
385    "modal_max_width": "small", // Horizontal size: small, medium, large, xlarge, full
386    "git_status": true,         // Show the git status for each entry
387    "include_ignored": null     // gitignored files in results: true, false, null
388  },
389```
390
391## Project Panel
392
393Project panel can be shown/hidden with {#action project_panel::ToggleFocus} ({#kb project_panel::ToggleFocus}) or with {#action pane::RevealInProjectPanel} ({#kb pane::RevealInProjectPanel}).
394
395```json
396  // Project Panel Settings
397  "project_panel": {
398    "button": true,                 // Show/hide button in the status bar
399    "default_width": 240,           // Default panel width
400    "dock": "left",                 // Position of the dock (left, right)
401    "entry_spacing": "comfortable", // Vertical spacing (comfortable, standard)
402    "file_icons": true,             // Show/hide file icons
403    "folder_icons": true,           // Show/hide folder icons
404    "git_status": true,             // Indicate new/updated files
405    "indent_size": 20,              // Pixels for each successive indent
406    "auto_reveal_entries": true,    // Show file in panel when activating its buffer
407    "auto_fold_dirs": true,         // Fold dirs with single subdir
408    "scrollbar": {                  // Project panel scrollbar settings
409      "show": null                  // Show/hide: (auto, system, always, never)
410    },
411    "show_diagnostics": "all",      //
412    // Settings related to indent guides in the project panel.
413    "indent_guides": {
414      // When to show indent guides in the project panel. (always, never)
415      "show": "always"
416    },
417    // Whether to hide the root entry when only one folder is open in the window.
418    "hide_root": false
419  }.
420```
421
422## Agent Panel
423
424```json
425  "agent": {
426    "version": "2",
427    "enabled": true,        // Enable/disable the agent
428    "button": true,         // Show/hide the icon in the status bar
429    "dock": "right",        // Where to dock: left, right, bottom
430    "default_width": 640,   // Default width (left/right docked)
431    "default_height": 320,  // Default height (bottom dockeed)
432  },
433  "agent_font_size": 16
434```
435
436See [Zed AI Documentation](./ai/overview.md) for additional non-visual AI settings.
437
438## Terminal Panel
439
440```json
441  // Terminal Panel Settings
442  "terminal": {
443    "dock": "bottom",                   // Where to dock: left, right, bottom
444    "button": true,                     // Show/hide status bar icon
445    "default_width": 640,               // Default width (left/right docked)
446    "default_height": 320,              // Default height (bottom dockeed)
447
448    // Set the cursor blinking behavior in the terminal (on, off, terminal_controlled)
449    "blinking": "terminal_controlled",
450    // Default cursor shape for the terminal (block, bar, underline, hollow)
451    "cursor_shape": "block",
452
453    // Environment variables to add to terminal's process environment
454    "env": {
455      // "KEY": "value"
456    },
457
458    // Terminal scrollbar
459    "scrollbar": {
460      "show": null                       // Show/hide: (auto, system, always, never)
461    },
462    // Terminal Font Settings
463    "font_family": "Zed Plex Mono",
464    "font_size": 15,
465    "font_weight": 400,
466    // Terminal line height: comfortable (1.618), standard(1.3) or `{ "custom": 2 }`
467    "line_height": "comfortable",
468
469    "max_scroll_history_lines": 10000,   // Scrollback history (0=disable, max=100000)
470  }
471```
472
473See [Terminal settings](./configuring-zed.md#terminal) for additional non-visual customization options.
474
475### Other Panels
476
477```json
478  // Git Panel
479  "git_panel": {
480    "button": true,               // Show/hide status bar icon
481    "dock": "left",               // Where to dock: left, right
482    "default_width": 360,         // Default width of the git panel.
483    "status_style": "icon",       // label_color, icon
484    "sort_by_path": false,        // Sort by path (false) or status (true)
485    "scrollbar": {
486      "show": null                // Show/hide: (auto, system, always, never)
487    }
488  },
489
490  // Debugger Panel
491  "debugger": {
492    "dock": "bottom",             // Where to dock: left, right, bottom
493    "button": true                // Show/hide status bar icon
494  },
495
496  // Outline Panel
497  "outline_panel": {
498    "button": true,               // Show/hide status bar icon
499    "default_width": 300,         // Default width of the git panel
500    "dock": "left",               // Where to dock: left, right
501    "file_icons": true,           // Show/hide file_icons
502    "folder_icons": true,         // Show file_icons (true), chevrons (false) for dirs
503    "git_status": true,           // Show git status
504    "indent_size": 20,            // Indentation for nested items (pixels)
505    "indent_guides": {
506      "show": "always"            // Show indent guides (always, never)
507    },
508    "auto_reveal_entries": true,  // Show file in panel when activating its buffer
509    "auto_fold_dirs": true,       // Fold dirs with single subdir
510    "scrollbar": {                // Project panel scrollbar settings
511      "show": null                // Show/hide: (auto, system, always, never)
512    }
513  }
514```
515
516## Collaboration Panels
517
518```json
519{
520  // Collaboration Panel
521  "collaboration_panel": {
522    "button": true,               // Show/hide status bar icon
523    "dock": "left",               // Where to dock: left, right
524    "default_width": 240          // Default width of the collaboration panel.
525  },
526  "show_call_status_icon": true,  // Shown call status in the OS status bar.
527
528  // Chat Panel
529  "chat_panel": {
530    "button": "when_in_call",     // status bar icon (true, false, when_in_call)
531    "dock": "right",              // Where to dock: left, right
532    "default_width": 240          // Default width of the chat panel
533  },
534
535  // Notification Panel
536  "notification_panel": {
537    // Whether to show the notification panel button in the status bar.
538    "button": true,
539    // Where to dock the notification panel. Can be 'left' or 'right'.
540    "dock": "right",
541    // Default width of the notification panel.
542    "default_width": 380
543  }
544```