Skip to main content

Overview

Jarvis provides fully customizable keyboard shortcuts for all major actions. Keybindings are defined in the [keybinds] section of config.toml using a simple modifier+key format.
Keybinds are validated for uniqueness—duplicate bindings will produce a validation error.

Keybind Format

Basic Format

Modifier+Key
Where Modifier is one of:
  • Cmd (macOS Command / Windows Super)
  • Option (macOS Option / Windows Alt)
  • Control (Ctrl)
  • Shift

Multiple Modifiers

Cmd+Shift+G
Option+Control+T

Double Press

Escape+Escape
Special keys like Tab, Escape, Enter, Space, and arrow keys can be used as the key portion.

Default Keybindings

Voice & Assistant

push_to_talk
string
default:"Option+Period"
Activate push-to-talk for voice input
open_assistant
string
default:"Cmd+G"
Open the AI assistant panel

Panel Management

new_panel
string
default:"Cmd+T"
Open a new terminal panel
close_panel
string
default:"Escape+Escape"
Close the current panel (double press Escape)
close_pane
string
default:"Cmd+W"
Close the current pane

Focus Navigation

focus_panel_1
string
default:"Cmd+1"
Focus panel 1
focus_panel_2
string
default:"Cmd+2"
Focus panel 2
focus_panel_3
string
default:"Cmd+3"
Focus panel 3
focus_panel_4
string
default:"Cmd+4"
Focus panel 4
focus_panel_5
string
default:"Cmd+5"
Focus panel 5
cycle_panels
string
default:"Tab"
Cycle to the next panel
cycle_panels_reverse
string
default:"Shift+Tab"
Cycle to the previous panel

Splitting & Tiling

split_vertical
string
default:"Cmd+D"
Split the current pane vertically (top/bottom)
split_horizontal
string
default:"Cmd+Shift+D"
Split the current pane horizontally (left/right)

Window & UI

toggle_fullscreen
string
default:"Cmd+F"
Toggle fullscreen mode
open_settings
string
default:"Cmd+,"
Open settings panel
open_chat
string
default:"Cmd+J"
Open chat panel
command_palette
string
default:"Cmd+Shift+P"
Open the command palette

Clipboard

copy
string
default:"Cmd+C"
Copy selection to clipboard
paste
string
default:"Cmd+V"
Paste from clipboard

Customizing Keybindings

Example: Custom Keybinds

config.toml
[keybinds]
push_to_talk = "Control+Space"
new_panel = "Cmd+N"
close_panel = "Cmd+W"
toggle_fullscreen = "Cmd+Enter"
command_palette = "Cmd+K"

Example: Vim-Style Navigation

config.toml
[keybinds]
cycle_panels = "Cmd+L"
cycle_panels_reverse = "Cmd+H"
split_vertical = "Cmd+S"
split_horizontal = "Cmd+V"

Example: Alternative Layouts

config.toml
[keybinds]
# Use Control instead of Cmd for cross-platform consistency
new_panel = "Control+T"
close_panel = "Control+W"
focus_panel_1 = "Control+1"
focus_panel_2 = "Control+2"
focus_panel_3 = "Control+3"

Keybind Validation

Jarvis validates keybindings to ensure no conflicts:
If two different actions share the same key combination, you’ll see a validation error:
ConfigError::ValidationError: duplicate keybind 'Cmd+G': assigned to both 'open_assistant' and 'push_to_talk'
The error message shows:
  • The conflicting key combination
  • Both action names that share the binding
All keybind values are checked for duplicates during config validation. The previous valid config remains in effect if validation fails.

Complete Keybind Reference

Here’s the full list of customizable keybindings:
[keybinds]
push_to_talk = "Option+Period"
open_assistant = "Cmd+G"
new_panel = "Cmd+T"
close_panel = "Escape+Escape"
toggle_fullscreen = "Cmd+F"
open_settings = "Cmd+,"
open_chat = "Cmd+J"
focus_panel_1 = "Cmd+1"
focus_panel_2 = "Cmd+2"
focus_panel_3 = "Cmd+3"
focus_panel_4 = "Cmd+4"
focus_panel_5 = "Cmd+5"
cycle_panels = "Tab"
cycle_panels_reverse = "Shift+Tab"
split_vertical = "Cmd+D"
split_horizontal = "Cmd+Shift+D"
close_pane = "Cmd+W"
command_palette = "Cmd+Shift+P"
copy = "Cmd+C"
paste = "Cmd+V"

Platform Differences

macOS

  • Cmd maps to the Command (⌘) key
  • Option maps to the Option (⌥) key
  • Control maps to Control (⌃)

Windows & Linux

  • Cmd maps to the Super/Windows key
  • Option maps to Alt
  • Control maps to Ctrl
For cross-platform configs, consider using Control instead of Cmd to maintain consistency across operating systems.

Advanced: Keybind API

Accessing Keybinds Programmatically

use jarvis_config::keybinds::all_keybinds;

let config = load_config()?;
let binds = all_keybinds(&config.keybinds);

for (name, binding) in binds {
    println!("{name}: {binding}");
}

Validating Keybinds

use jarvis_config::keybinds::validate_no_duplicates;

let config = load_config()?;
validate_no_duplicates(&config.keybinds)?;

KeybindConfig Structure

pub struct KeybindConfig {
    pub push_to_talk: String,
    pub open_assistant: String,
    pub new_panel: String,
    pub close_panel: String,
    pub toggle_fullscreen: String,
    pub open_settings: String,
    pub open_chat: String,
    pub focus_panel_1: String,
    pub focus_panel_2: String,
    pub focus_panel_3: String,
    pub focus_panel_4: String,
    pub focus_panel_5: String,
    pub cycle_panels: String,
    pub cycle_panels_reverse: String,
    pub split_vertical: String,
    pub split_horizontal: String,
    pub close_pane: String,
    pub command_palette: String,
    pub copy: String,
    pub paste: String,
}

Troubleshooting

Check:
  • Key combination is correctly formatted (e.g., Cmd+T, not CMD+t)
  • No conflicting global system shortcuts
  • Modifier keys match your platform (Cmd for macOS, Control for cross-platform)
Search your config for the duplicate key combination and assign one of the actions to a different binding.
Some special characters may need escaping in TOML strings:
# Use quotes for special characters
my_keybind = "Cmd+,"  # Works for comma

Examples by Use Case

Developer Workflow

config.toml
[keybinds]
# Quick panel creation and navigation
new_panel = "Cmd+T"
close_panel = "Cmd+W"
cycle_panels = "Cmd+Tab"
cycle_panels_reverse = "Cmd+Shift+Tab"

# Splitting for side-by-side code review
split_horizontal = "Cmd+\\"
split_vertical = "Cmd+-"

# Quick access to assistant
open_assistant = "Cmd+K"

Streamer Setup

config.toml
[keybinds]
# One-handed operations
push_to_talk = "F1"
open_chat = "F2"
toggle_fullscreen = "F11"

# Minimal panel management
new_panel = "Control+N"
close_panel = "Control+W"

Vim User

config.toml
[keybinds]
# Vim-inspired navigation
cycle_panels = "Cmd+L"
cycle_panels_reverse = "Cmd+H"

# Consistent with vim splits
split_vertical = "Cmd+S"
split_horizontal = "Cmd+Shift+S"

# Leader-based commands
command_palette = "Space+Space"
open_assistant = "Space+A"