Files
zellij/zellij-utils/assets/config/default.kdl
T
Aram Drevekenin b1033be2a3 Improved mouse handling (#5697)
* configurable mouse bindings

* feat(bars): reorder tabs with mouse drag, clickable status-bar shortcuts with hover effects

* fix tests

* add pr
2026-10-09 11:59:23 +02:00

578 lines
19 KiB
KDL

// Keybindings come from a preset: a file in the "keybinds" folder next to this file, or one of
// the presets built into Zellij ("default" and "unlock-first"). Print a built-in preset with
// "zellij setup --dump-keybinds <name>".
// "primary", "secondary" and "unlock" set the leader keys of presets that use them.
// If a leader key is empty or two of them are equal, Zellij warns and uses the default preset.
// Keybindings that come from a layout are shown in the settings screen but cannot be edited there.
// Bindings inside the block are applied on top of the preset. To replace the preset
// completely, add clear-defaults=true to the block.
// For a single session, "zellij options --keybinds-preset <name>" (and --keybinds-primary,
// --keybinds-secondary, --keybinds-unlock) choose a preset without changing this file.
//
// keybinds preset="default" primary="Ctrl" secondary="Alt" {
// normal {
// bind "Alt y" { NewTab; }
// }
// }
// Plugin aliases - can be used to change the implementation of Zellij
// changing these requires a restart to take effect
// Built-in aliases cannot be deleted: this block can only add to or override them
// (removing an override brings back the built-in one)
plugins {
tab-bar location="zellij:bars" {
role "tab-bar"
}
status-bar location="zellij:bars" {
role "status-bar"
}
strider location="zellij:strider"
compact-bar location="zellij:bars" {
role "compact-bar"
}
session-manager location="zellij:session-manager"
welcome-screen location="zellij:session-manager" {
welcome_screen true
}
filepicker location="zellij:strider" {
cwd "/"
}
configuration location="zellij:configuration"
plugin-manager location="zellij:plugin-manager"
about location="zellij:about"
context-menu location="zellij:context-menu"
prompt location="zellij:prompt"
}
// Plugins to load in the background when a new session starts
// (Requires restart)
load_plugins {
"zellij:bars" {
role "link"
}
// "file:/path/to/my-plugin.wasm"
// "https://example.com/my-plugin.wasm"
}
// Right-click menu items, per clicked target: "pane", "tab", "bar" (tab bar or status bar background)
// "common" items are added to the end of every menu
// Actions ending in "ByPaneId"/"ById"/"ByTabId" apply to the clicked pane or tab when no id is given
// Add clear-defaults=true to the block or to a section to replace the default items
// Without clear-defaults, a section changes the default items:
// item "Label" { ... } replaces the item with that label, or adds it at the end
// item "Label" after="Other" { ... } places the item after "Other" (before="Other" places it before)
// separator after="Other" adds a separator after (or before=) "Other"
// remove "Label" removes the item with that label
// Unknown labels are ignored by remove and place the item at the end with after/before
// An empty "context_menu clear-defaults=true {}" leaves the menu empty, so it never opens,
// but right clicks are still taken by Zellij; use "context_menu_enabled false" to turn the menu off
context_menu {
pane {
item "New pane" { NewPane; }
item "New floating pane" { NewFloatingPane; }
separator
item "Fullscreen" { ToggleFocusFullscreenByPaneId; }
item "Float / Embed" { TogglePaneEmbedOrFloatingByPaneId; }
item "Rename pane" { StartRenamePaneByPaneId; }
item "Add to group" { TogglePaneInGroupByPaneId; }
separator
item "Close pane" { CloseFocusByPaneId; }
}
tab {
item "New tab" { NewTab; }
item "Rename tab" { StartRenameTabByTabId; }
item "Move tab left" { MoveTabByTabId "left"; }
item "Move tab right" { MoveTabByTabId "right"; }
item "Move tab to start" { MoveTabToPosition "start"; }
item "Move tab to end" { MoveTabToPosition "end"; }
separator
item "Close tab" { CloseTabById; }
}
bar {
item "New pane" { NewPane; }
item "New tab" { NewTab; }
}
common {
item "Settings…" {
LaunchOrFocusPlugin "configuration" {
floating true
move_to_focused_tab true
}
}
item "Session manager" {
LaunchOrFocusPlugin "session-manager" {
floating true
move_to_focused_tab true
}
}
item "Detach" { Detach; }
}
}
// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
// eg. when terminal window with an active zellij session is closed
// (Requires restart)
// Options:
// - detach (Default)
// - quit
//
// on_force_close "quit"
// Choose how to handle a nested Zellij session detected running inside a pane
// Options:
// - ask (Default - prompt with a modal to zoom in or control on focus)
// - fullscreen (always zoom into the nested session)
// - descend (always control the nested session on focus)
// - never (never prompt or descend; do it manually)
//
// nested_session_handling "ask"
// Send a request for a simplified ui (without arrow fonts) to plugins
// Options:
// - true
// - false (Default)
//
// simplified_ui true
// Choose the path to the default shell that zellij will use for opening new panes
// Default: $SHELL
//
// default_shell "fish"
// Choose the path to override cwd that zellij will use for opening new panes
//
// default_cwd ""
// Toggle between having pane frames around the panes
// Options:
// - true (default)
// - false
//
// pane_frames true
// Set the pane frame style when pane_frames is enabled
// Options:
// - titles (default - draw a title above each pane)
// - full (draw a full frame around each pane)
// - none (equivalent to pane_frames false)
//
// pane_frame_style "titles"
// Configure the look of the pane frame borders
//
// ui {
// pane_frames {
// // round the corners of single-line borders
// rounded_corners true
// // line style for all four sides of tiled pane frames
// // one of: single, double, heavy, dashed, heavy_dashed
// border_style "single"
// // per-side overrides, eg. a double top border with single sides
// border_top "double"
// border_right "single"
// border_bottom "single"
// border_left "single"
// // when two neighbouring panes disagree about a shared grid line
// // (pane frames off), that line falls back to border_style above
// // the same keys prefixed with "floating_" apply to floating panes,
// // they default to the values above
// floating_border_style "double"
// floating_border_top "double"
// floating_border_right "double"
// floating_border_bottom "double"
// floating_border_left "double"
// floating_border_rounded_corners false
// }
// }
// Toggle between having Zellij lay out panes according to a predefined set of layouts whenever possible
// Options:
// - true (default)
// - false
//
// auto_layout true
// Whether sessions should be serialized to the cache folder (including their tabs/panes, cwds and running commands) so that they can later be resurrected
// (Requires restart)
// Options:
// - true (default)
// - false
//
// session_serialization false
// Whether pane viewports are serialized along with the session, default is false
// (Requires restart)
// Options:
// - true
// - false (default)
//
// serialize_pane_viewport true
// Scrollback lines to serialize along with the pane viewport when serializing sessions, 0
// defaults to the scrollback size. If this number is higher than the scrollback size, it will
// also default to the scrollback size. This does nothing if `serialize_pane_viewport` is not true.
// (Requires restart)
//
// scrollback_lines_to_serialize 10000
// Define color themes for Zellij
// For more examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes
// Once these themes are defined, one of them should to be selected in the "theme" section of this file
// Built-in themes and themes from theme_dir are read-only in the settings screen (copy one to edit it)
//
// themes {
// dracula {
// fg 248 248 242
// bg 40 42 54
// red 255 85 85
// green 80 250 123
// yellow 241 250 140
// blue 98 114 164
// magenta 255 121 198
// orange 255 184 108
// cyan 139 233 253
// black 0 0 0
// white 255 255 255
// }
// }
// Choose the theme that is specified in the themes section.
// Default: default
//
// theme "default"
// Themes to use when the host terminal reports a dark or light color palette.
// Both must be set for automatic switching to take place, otherwise `theme`
// remains authoritative. Until the host terminal reports (or if it never does),
// the dark theme is used.
//
// theme_dark "nightfox"
// theme_light "dayfox"
// Pin the session to a dark or light appearance, ignoring what the host
// terminal reports. Resolved before the first render. When unset, the host
// terminal decides.
// Options: dark, light
//
// explicit_theme_hue "dark"
// The name of the default layout to load on startup
// Default: "default"
// (Requires restart)
//
// default_layout "compact"
// Choose the mode that zellij uses when starting up and returns to after actions.
// Changes apply to the running session without a restart.
// Default: normal
//
// default_mode "locked"
// Toggle enabling the mouse mode.
// On certain configurations, or terminals this could
// potentially interfere with copying text.
// (Requires restart)
// Options:
// - true (default)
// - false
//
// mouse_mode false
// Configure the scroll back buffer size
// This is the number of lines zellij stores for each pane in the scroll back
// buffer. Excess number of lines are discarded in a FIFO fashion.
// (Requires restart)
// Valid values: positive integers
// Default value: 10000
//
// scroll_buffer_size 10000
// Provide a command to execute when copying text. The text will be piped to
// the stdin of the program to perform the copy. This can be used with
// terminal emulators which do not support the OSC 52 ANSI control sequence
// that will be used by default if this option is not set.
// Examples:
//
// copy_command "xclip -selection clipboard" // x11
// copy_command "wl-copy" // wayland
// copy_command "pbcopy" // osx
// Choose the destination for copied text
// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
// Does not apply when using copy_command.
// Options:
// - system (default)
// - primary
//
// copy_clipboard "primary"
// Enable or disable automatic copy (and clear) of selection when releasing mouse
// Default: true
//
// copy_on_select false
// Path to the default editor to use to edit pane scrollbuffer
// Default: $EDITOR or $VISUAL
//
// scrollback_editor "/usr/bin/vim"
// When attaching to an existing session with other users,
// should the session be mirrored (true)
// or should each user have their own cursor (false)
// (Requires restart)
// Default: false
//
// mirror_session true
// The folder in which Zellij will look for layouts
//
// layout_dir "/path/to/my/layout_dir"
// The folder in which Zellij will look for themes
// Changes apply to the running session without a restart.
// Themes from this folder are read-only in the settings screen (copy one to edit it)
//
// theme_dir "/path/to/my/theme_dir"
// The folder in which Zellij will look for keybinding presets
// Default: a "keybinds" folder in the config directory
//
// keybinds_dir "/path/to/my/keybinds_dir"
// Enable or disable the rendering of styled and colored underlines (undercurl).
// May need to be disabled for certain unsupported terminals
// (Requires restart)
// Default: true
//
// styled_underlines false
// Enable or disable writing of session metadata to disk (if disabled, other sessions might not know
// metadata info on this session)
// (Requires restart)
// Default: false
//
// disable_session_metadata true
// Enable or disable support for the enhanced Kitty Keyboard Protocol (the host terminal must also support it)
// (Requires restart)
// Default: true (if the host terminal supports it)
//
// support_kitty_keyboard_protocol false
// Enable or disable support for the Kitty Graphics Protocol, used to display images (the host terminal must also support it)
// (Requires restart)
// Default: true (if the host terminal supports it)
//
// support_kitty_graphics_protocol false
// Whether to make sure a local web server is running when a new Zellij session starts.
// This web server will allow creating new sessions and attaching to existing ones that have
// opted in to being shared in the browser.
// When enabled, navigate to http://127.0.0.1:8082
// (Requires restart)
//
// Note: a local web server can still be manually started from within a Zellij session or from the CLI.
// If this is not desired, one can use a version of Zellij compiled without
// `web_server_capability`
//
// Possible values:
// - true
// - false
// Default: false
//
// web_server true
// Whether to allow sessions started in the terminal to be shared through a local web server, assuming one is
// running (see the `web_server` option for more details).
// (Requires restart)
//
// Note: This is an administrative separation and not intended as a security measure.
//
// Possible values:
// - "on" (allow web sharing through the local web server if it
// is online)
// - "off" (do not allow web sharing unless sessions explicitly opt-in to it)
// - "disabled" (do not allow web sharing and do not permit sessions started in the terminal to opt-in to it)
// Default: "off"
//
// web_sharing "on"
// The ip address the web server should listen on when it starts
// Default: "127.0.0.1"
// (Requires restart)
//
// web_server_ip "127.0.0.1"
// A path to a certificate file to be used when setting up the web client to serve the
// connection over HTTPs
// (Requires restart)
//
// web_server_cert "/path/to/my/cert.pem"
// A path to a key file to be used when setting up the web client to serve the
// connection over HTTPs
// (Requires restart)
//
// web_server_key "/path/to/my/key.pem"
// Whether to enforce https connections to the web server when it is bound to localhost
// (127.0.0.0/8)
// (Requires restart)
//
// Note: https is enforced when bound to non-local interfaces, unless
// dangerously_allow_web_serving_without_a_certificate is set
//
// Default: false
//
// enforce_https_for_localhost true
// DANGEROUS: allow the web server to serve plain, unencrypted HTTP when bound to a
// non-local interface without web_server_cert and web_server_key.
// Anyone on the network can read and tamper with the traffic, including login tokens.
// Only use behind a trusted TLS-terminating proxy or on a fully trusted network.
// Does not override enforce_https_for_localhost.
// Default: false
// (Requires restart)
//
// dangerously_allow_web_serving_without_a_certificate true
// The port the web server should listen on when it starts
// Default: 8082
// (Requires restart)
//
// web_server_port 8082
// Whether to stack panes when resizing beyond a certain size
// Default: true
//
// stacked_resize false
// Whether to let programs running inside panes read the paste buffer (clipboard)
// with the OSC 52 escape sequence. When enabled, any program in any pane -
// including one running on a remote machine over SSH - can read the clipboard
// without the user being asked.
// Default: false
//
// dangerously_enable_paste_buffer_read true
// Whether stacked panes display as a list with the expanded pane pinned to the bottom
// Default: true
//
// stacked_pane_list false
// Whether to show release notes on first version run
// (Requires restart)
// Default: true
//
// show_release_notes false
// Whether to enable mouse hover effects and pane grouping functionality
// Default: true
//
// advanced_mouse_actions false
// Whether Ctrl+ScrollWheel resizes panes
// Default: true
//
// mouse_scroll_resize false
// Whether scrolling a pane implicitly enters and exits Scroll mode
// Default: true
//
// scroll_mode_sync false
// Whether to enable mouse hover visual effects (frame highlight and help text)
// Default: true
//
// mouse_hover_effects false
// Whether to show mouse hover help-text tips (resize help and group shortcuts)
// Default: true
//
// mouse_hover_tips false
// Whether triple-clicking inside command output marked by the shell (OSC 133) selects
// the command and its output instead of the logical line
// Default: true
//
// osc133_command_selection false
// Characters that terminate a word when double-clicking to select it
// whitespace is always a separator and need not be listed here
// Default: "[]{}<>()"
//
// word_separators "[]{}<>()"
// Whether to output OSC8 hyperlink sequences
// (Requires restart)
// Default: true
//
// osc8_hyperlinks false
// A command to run (will be wrapped with sh -c and provided the RESURRECT_COMMAND env variable)
// after Zellij attempts to discover a command inside a pane when resurrecting sessions, the STDOUT
// of this command will be used instead of the discovered RESURRECT_COMMAND
// can be useful for removing wrappers around commands
// Note: be sure to escape backslashes and similar characters properly
//
// post_command_discovery_hook "echo $RESURRECT_COMMAND | sed <your_regex_here>"
// Number of async worker tasks to spawn per active client.
// (Requires restart)
//
// Allocating few tasks may result in resource contention and lags. Small values (around 4) should
// typically work best. Set to 0 to use the number of (physical) CPU cores.
// NOTE: This only applies to web clients at the moment.
// client_async_worker_tasks 4
// How often (in seconds) sessions are saved to disk so they can be resurrected
// (Requires restart)
// Default: 60
//
// serialization_interval 60
// Whether to show a startup tip when a new session starts
// (Requires restart)
// Default: true
//
// show_startup_tips false
// Whether to flash pane and tab frames (and add a [!] suffix) when a terminal bell rings
// Default: true
//
// visual_bell false
// Whether hovering the mouse over a pane focuses it
// Default: false
//
// focus_follows_mouse true
// Whether the click that focuses a pane is also sent to the program running in it
// Default: false
//
// mouse_click_through true
// Whether a right click opens the right-click menu
// When off, right clicks go to the focused pane only and Alt + right click clears the pane group
// Plugins can still open the menu through their API
// Default: true
//
// context_menu_enabled false
// How notifications from programs inside Zellij are passed to the outer terminal
// Options:
// - auto (Default - pick the best protocol the terminal supports)
// - osc9
// - osc99
// - bell
// - off
//
// host_notification_protocol "auto"
// Settings for the web client (font, font_size, cursor_blink, cursor_style, ...)
// (Requires restart)
web_client {
font "monospace"
}