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"; } // } }