theme "rose-pine-moon";
on_force_close "detach"
pane_frames false
default_layout "basic"
default_mode "locked"
scroll_buffer_size 20000
copy_clipboard "primary" // primary or system, default is system
copy_on_select true
plugins {
tab-bar { path "tab-bar"; }
status-bar { path "status-bar"; }
strider { path "strider"; }
compact-bar { path "compact-bar"; }
}
// These keybindings mostly override everything about the default keybindings in an attempt
// to mimic the best parts of the Doom Emacs / Spacemacs keybindings style.
//
// The keybindings are meant to be mnemonic as possible.
//
// I'm referring to "panes" as "windows".
// For most of these modes I'm thinking of them as mnemonic key namespaces that take you to
// an action. For example, to move one pane to the left: `prefix` -> `w` -> `h`
// where `prefix` is the keybinding to get from "locked" mode into "normal" mode
// `w` takes you from "normal" mode into "pane" mode, then `h` moves panes and terminates the action.
// Once in "pane" mode ther are some non-terminating actions available, and I'm thinking of those as
// "transient" states that allow you to do a bunch of repeated actions in a row before exciting with `Esc`.
// I was introduced to this concept in Spacemacs.
// That's the overall strategy with these keybindings. This strategy is super easy to remember for me, and
// does seem to reduce wrist strain (the dreaded RSI :scream:)
// it would be super cool to define custom modes, maybe i could make an attempt at that
// https://github.com/zellij-org/zellij/issues/248
keybinds {
normal clear-defaults=true {
bind "Esc" { SwitchToMode "locked"; } // TODO rm when shared or shared_except works
bind "Enter" { SwitchToMode "locked"; }
bind "r" { SwitchToMode "resize"; }
bind "w" { SwitchToMode "pane"; }
bind "Tab" { SwitchToMode "tab"; }
bind "g" { SwitchToMode "session"; }
bind "?" { SwitchToMode "scroll"; }
bind "Alt h" { MoveFocus "Left"; }
bind "Alt j" { MoveFocus "Down"; }
bind "Alt k" { MoveFocus "Up"; }
bind "Alt l" { MoveFocus "Right"; }
bind "1" { GoToTab 1; SwitchToMode "locked";}
bind "2" { GoToTab 2; SwitchToMode "locked";}
bind "3" { GoToTab 3; SwitchToMode "locked";}
bind "4" { GoToTab 4; SwitchToMode "locked";}
bind "5" { GoToTab 5; SwitchToMode "locked";}
bind "6" { GoToTab 6; SwitchToMode "locked";}
bind "7" { GoToTab 7; SwitchToMode "locked";}
bind "9" { GoToTab 9; SwitchToMode "locked";}
bind "Ctrl [" { PreviousSwapLayout; }
bind "Ctrl ]" { NextSwapLayout; }
}
pane clear-defaults=true {
bind "Esc" { SwitchToMode "locked"; } // TODO rm when shared or shared_except works
bind "Alt m" { MovePane "Left"; }
bind "Alt n" { MovePane "Down"; }
bind "Alt e" { MovePane "Up"; }
bind "Alt i" { MovePane "Right"; }
bind "m" { MoveFocus "Left"; SwitchToMode "locked"; }
bind "n" { MoveFocus "Down"; SwitchToMode "locked"; }
bind "e" { MoveFocus "Up"; SwitchToMode "locked"; }
bind "i" { MoveFocus "Right"; SwitchToMode "locked"; }
bind "h" { NewPane; SwitchToMode "locked"; }
bind "d" { CloseFocus; SwitchToMode "locked"; }
bind "f" { ToggleFocusFullscreen; SwitchToMode "locked"; }
bind "F" { TogglePaneEmbedOrFloating; ToggleFocusFullscreen; SwitchToMode "locked"; }
bind "N" { NewPane "Down"; SwitchToMode "locked"; }
bind "I" { NewPane "Right"; SwitchToMode "locked"; }
bind "z" { TogglePaneFrames; SwitchToMode "locked"; }
// for pop and popping out a tiled window into a floating window
bind "p" { ToggleFloatingPanes; SwitchToMode "locked"; }
bind "P" { TogglePaneEmbedOrFloating; SwitchToMode "locked"; }
// bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0;}
}
resize clear-defaults=true {
bind "Esc" { SwitchToMode "locked"; } // TODO rm when shared or shared_except works
bind "m" { Resize "Left"; }
bind "n" { Resize "Down"; }
bind "e" { Resize "Up"; }
bind "i" { Resize "Right"; }
bind "M" { Resize "Decrease Left"; }
bind "N" { Resize "Decrease Down"; }
bind "E" { Resize "Decrease Up"; }
bind "I" { Resize "Decrease Right"; }
bind "+" { Resize "Increase"; }
bind "-" { Resize "Decrease"; }
}
tab clear-defaults=true {
bind "Esc" { SwitchToMode "locked"; } // TODO rm when shared or shared_except works
bind "r" { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "m" "e" "[" { GoToPreviousTab; }
bind "i" "n" "]" { GoToNextTab; }
bind "n" { NewTab; SwitchToMode "renametab"; TabNameInput 0; }
bind "d" { CloseTab; SwitchToMode "locked"; }
// bind "s" { ToggleActiveSyncTab; SwitchToMode "locked"; }
bind "1" { GoToTab 1; SwitchToMode "locked"; }
bind "2" { GoToTab 2; SwitchToMode "locked"; }
bind "3" { GoToTab 3; SwitchToMode "locked"; }
bind "4" { GoToTab 4; SwitchToMode "locked"; }
bind "5" { GoToTab 5; SwitchToMode "locked"; }
bind "6" { GoToTab 6; SwitchToMode "locked"; }
bind "7" { GoToTab 7; SwitchToMode "locked"; }
bind "8" { GoToTab 8; SwitchToMode "locked"; }
bind "9" { GoToTab 9; SwitchToMode "locked"; }
bind "Tab" { ToggleTab; SwitchToMode "locked"; }
}
renametab clear-defaults=true {
bind "Esc" { UndoRenameTab; SwitchToMode "locked"; }
bind "Enter" { SwitchToMode "locked"; }
}
// I'm stealing this `session` mode for a `git` namespace
session clear-defaults=true {
bind "Esc" { SwitchToMode "locked"; } // TODO rm when shared or shared_except works
bind "g" {
Run "gitui" {
direction "up"
close-on-exit true
name "gitui"
};
ToggleFocusFullscreen;
SwitchToMode "locked";
}
}
scroll clear-defaults=true {
bind "Esc" { ScrollToBottom; SwitchToMode "locked"; }
bind "Alt /" { SwitchToMode "EnterSearch"; SearchInput 0; }
bind "e" { EditScrollback; SwitchToMode "Normal"; }
bind "n" { ScrollDown; }
bind "e" { ScrollUp; }
bind "[" { PageScrollUp; }
bind "]" { PageScrollDown; }
bind "{" { HalfPageScrollUp; }
bind "}" { HalfPageScrollDown; }
}
entersearch clear-defaults=true {
bind "Ctrl c" "Esc" { SwitchToMode "scroll"; }
bind "Enter" { SwitchToMode "Search"; }
}
search clear-defaults=true {
bind "Esc" { ScrollToBottom; SwitchToMode "locked"; }
bind "n" { Search "down"; }
bind "N" "p" { Search "up"; }
bind "C" { SearchToggleOption "CaseSensitivity"; }
bind "W" { SearchToggleOption "Wrap"; }
bind "O" { SearchToggleOption "WholeWord"; }
bind "y" { Copy; }
}
// locked is the mode meant to be used most of the time, e.g. when actually doing work
// TODO make my default layout start in locked mode
locked clear-defaults=true {
bind "Alt m" { SwitchToMode "normal"; }
bind "Alt q" { Detach; }
bind "Alt Q" { Quit; }
}
// FIXME shared_except does not seem to work, I'm not sure if I'm doing something wrong.
// shared_except "locked" {
// bind "Esc" { SwitchToMode "locked"; }
// }
}