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```