|
@@ -0,0 +1,314 @@
|
|
|
|
|
+{ isDarwin
|
|
|
|
|
+, ...
|
|
|
|
|
+}:
|
|
|
|
|
+let
|
|
|
|
|
+ convertAction = action:
|
|
|
|
|
+ if builtins.isString action then
|
|
|
|
|
+ { "${action}" = { _args = [ ]; }; }
|
|
|
|
|
+ else
|
|
|
|
|
+ let
|
|
|
|
|
+ name = builtins.head action;
|
|
|
|
|
+ in
|
|
|
|
|
+ if name == "LaunchOrFocusPlugin" then
|
|
|
|
|
+ {
|
|
|
|
|
+ "${name}" = {
|
|
|
|
|
+ _args = builtins.tail action;
|
|
|
|
|
+ _children = [
|
|
|
|
|
+ { floating = { _args = [ true ]; }; }
|
|
|
|
|
+ { move_to_focused_tab = { _args = [ true ]; }; }
|
|
|
|
|
+ ];
|
|
|
|
|
+ };
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ { "${name}" = { _args = builtins.tail action; }; };
|
|
|
|
|
+
|
|
|
|
|
+ convertBinding = binding:
|
|
|
|
|
+ let
|
|
|
|
|
+ key = builtins.head binding;
|
|
|
|
|
+ actions = builtins.elemAt binding 1;
|
|
|
|
|
+ in
|
|
|
|
|
+ {
|
|
|
|
|
+ bind = {
|
|
|
|
|
+ _args = [ key ];
|
|
|
|
|
+ _children = map convertAction actions;
|
|
|
|
|
+ };
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ convert = bindings:
|
|
|
|
|
+ { _children = map convertBinding bindings; };
|
|
|
|
|
+
|
|
|
|
|
+ mode = mode: [ "SwitchToMode" mode ];
|
|
|
|
|
+in
|
|
|
|
|
+{
|
|
|
|
|
+ programs.zellij = {
|
|
|
|
|
+ enable = true;
|
|
|
|
|
+ settings = {
|
|
|
|
|
+ theme = "kanagawa";
|
|
|
|
|
+ pane_frames = false;
|
|
|
|
|
+ default_mode = "locked";
|
|
|
|
|
+ default_shell = "fish";
|
|
|
|
|
+ copy_command = if isDarwin then "pbcopy" else "wl-copy";
|
|
|
|
|
+
|
|
|
|
|
+ keybinds = {
|
|
|
|
|
+ _props.clear-defaults = true;
|
|
|
|
|
+ _children = [
|
|
|
|
|
+ {
|
|
|
|
|
+ locked = convert [
|
|
|
|
|
+ [ "Ctrl g" [ (mode "normal") ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ pane = convert [
|
|
|
|
|
+ [ "h" [ [ "MoveFocus" "left" ] ] ]
|
|
|
|
|
+ [ "j" [ [ "MoveFocus" "down" ] ] ]
|
|
|
|
|
+ [ "k" [ [ "MoveFocus" "up" ] ] ]
|
|
|
|
|
+ [ "l" [ [ "MoveFocus" "right" ] ] ]
|
|
|
|
|
+ [ "c" [ [ "SwitchToMode" "renamepane" ] [ "PaneNameInput" 0 ] ] ]
|
|
|
|
|
+ [ "d" [ [ "NewPane" "down" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "e" [ [ "TogglePaneEmbedOrFloating" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "f" [ [ "ToggleFocusFullscreen" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "i" [ [ "TogglePanePinned" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "n" [ [ "NewPane" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "p" [ (mode "normal") ] ]
|
|
|
|
|
+ [ "r" [ [ "NewPane" "right" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "w" [ [ "ToggleFloatingPanes" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "x" [ [ "CloseFocus" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "z" [ [ "TogglePaneFrames" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "tab" [ [ "SwitchFocus" ] ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ tab = convert [
|
|
|
|
|
+ [ "h" [ [ "GoToPreviousTab" ] ] ]
|
|
|
|
|
+ [ "j" [ [ "GoToNextTab" ] ] ]
|
|
|
|
|
+ [ "k" [ [ "GoToPreviousTab" ] ] ]
|
|
|
|
|
+ [ "l" [ [ "GoToNextTab" ] ] ]
|
|
|
|
|
+ [ "1" [ [ "GoToTab" 1 ] (mode "locked") ] ]
|
|
|
|
|
+ [ "2" [ [ "GoToTab" 2 ] (mode "locked") ] ]
|
|
|
|
|
+ [ "3" [ [ "GoToTab" 3 ] (mode "locked") ] ]
|
|
|
|
|
+ [ "4" [ [ "GoToTab" 4 ] (mode "locked") ] ]
|
|
|
|
|
+ [ "5" [ [ "GoToTab" 5 ] (mode "locked") ] ]
|
|
|
|
|
+ [ "6" [ [ "GoToTab" 6 ] (mode "locked") ] ]
|
|
|
|
|
+ [ "7" [ [ "GoToTab" 7 ] (mode "locked") ] ]
|
|
|
|
|
+ [ "8" [ [ "GoToTab" 8 ] (mode "locked") ] ]
|
|
|
|
|
+ [ "9" [ [ "GoToTab" 9 ] (mode "locked") ] ]
|
|
|
|
|
+ [ "[" [ [ "BreakPaneLeft" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "]" [ [ "BreakPaneRight" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "b" [ [ "BreakPane" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "n" [ [ "NewTab" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "r" [ (mode "renametab") [ "TabNameInput" 0 ] ] ]
|
|
|
|
|
+ [ "s" [ [ "ToggleActiveSyncTab" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "t" [ (mode "normal") ] ]
|
|
|
|
|
+ [ "x" [ [ "CloseTab" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "tab" [ [ "ToggleTab" ] ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ resize = convert [
|
|
|
|
|
+ [ "h" [ [ "Resize" "Increase left" ] ] ]
|
|
|
|
|
+ [ "j" [ [ "Resize" "Increase down" ] ] ]
|
|
|
|
|
+ [ "k" [ [ "Resize" "Increase up" ] ] ]
|
|
|
|
|
+ [ "l" [ [ "Resize" "Increase right" ] ] ]
|
|
|
|
|
+ [ "+" [ [ "Resize" "Increase" ] ] ]
|
|
|
|
|
+ [ "-" [ [ "Resize" "Decrease" ] ] ]
|
|
|
|
|
+ [ "=" [ [ "Resize" "Increase" ] ] ]
|
|
|
|
|
+ [ "H" [ [ "Resize" "Decrease left" ] ] ]
|
|
|
|
|
+ [ "J" [ [ "Resize" "Decrease down" ] ] ]
|
|
|
|
|
+ [ "K" [ [ "Resize" "Decrease up" ] ] ]
|
|
|
|
|
+ [ "L" [ [ "Resize" "Decrease right" ] ] ]
|
|
|
|
|
+ [ "r" [ (mode "normal") ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ move = convert [
|
|
|
|
|
+ [ "h" [ [ "MovePane" "left" ] ] ]
|
|
|
|
|
+ [ "j" [ [ "MovePane" "down" ] ] ]
|
|
|
|
|
+ [ "k" [ [ "MovePane" "up" ] ] ]
|
|
|
|
|
+ [ "l" [ [ "MovePane" "right" ] ] ]
|
|
|
|
|
+ [ "m" [ (mode "normal") ] ]
|
|
|
|
|
+ [ "n" [ [ "MovePane" ] ] ]
|
|
|
|
|
+ [ "p" [ [ "MovePaneBackwards" ] ] ]
|
|
|
|
|
+ [ "tab" [ [ "MovePane" ] ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ scroll = convert [
|
|
|
|
|
+ [ "e" [ [ "EditScrollback" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "f" [ (mode "entersearch") [ "SearchInput" 0 ] ] ]
|
|
|
|
|
+ [ "Alt h" [ [ "MoveFocusOrTab" "left" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "Alt j" [ [ "MoveFocus" "down" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "Alt k" [ [ "MoveFocus" "up" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "Alt l" [ [ "MoveFocusOrTab" "right" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "s" [ (mode "normal") ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ search = convert [
|
|
|
|
|
+ [ "c" [ [ "SearchToggleOption" "CaseSensitivity" ] ] ]
|
|
|
|
|
+ [ "n" [ [ "Search" "down" ] ] ]
|
|
|
|
|
+ [ "o" [ [ "SearchToggleOption" "WholeWord" ] ] ]
|
|
|
|
|
+ [ "p" [ [ "Search" "up" ] ] ]
|
|
|
|
|
+ [ "w" [ [ "SearchToggleOption" "Wrap" ] ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ session = convert [
|
|
|
|
|
+ [ "a" [ [ "LaunchOrFocusPlugin" "zellij:about" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "c" [ [ "LaunchOrFocusPlugin" "configuration" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "d" [ [ "Detach" ] ] ]
|
|
|
|
|
+ [ "o" [ (mode "normal") ] ]
|
|
|
|
|
+ [ "p" [ [ "LaunchOrFocusPlugin" "plugin-manager" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "w" [ [ "LaunchOrFocusPlugin" "session-manager" ] (mode "locked") ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ shared_among = {
|
|
|
|
|
+ _args = [ "normal" "locked" ];
|
|
|
|
|
+ } // convert [
|
|
|
|
|
+ [ "Ctrl h" [ [ "MoveFocusOrTab" "left" ] ] ]
|
|
|
|
|
+ [ "Ctrl j" [ [ "MoveFocus" "down" ] ] ]
|
|
|
|
|
+ [ "Ctrl k" [ [ "MoveFocus" "up" ] ] ]
|
|
|
|
|
+ [ "Ctrl l" [ [ "MoveFocusOrTab" "right" ] ] ]
|
|
|
|
|
+ [ "Alt +" [ [ "Resize" "Increase" ] ] ]
|
|
|
|
|
+ [ "Alt -" [ [ "Resize" "Decrease" ] ] ]
|
|
|
|
|
+ [ "Alt =" [ [ "Resize" "Increase" ] ] ]
|
|
|
|
|
+ [ "Alt [" [ [ "PreviousSwapLayout" ] ] ]
|
|
|
|
|
+ [ "Alt ]" [ [ "NextSwapLayout" ] ] ]
|
|
|
|
|
+ [ "Alt f" [ [ "ToggleFloatingPanes" ] ] ]
|
|
|
|
|
+ [ "Alt n" [ [ "NewPane" ] ] ]
|
|
|
|
|
+ [ "Alt o" [ [ "MoveTab" "right" ] ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ shared_except = {
|
|
|
|
|
+ _args = [ "locked" "renametab" "renamepane" ];
|
|
|
|
|
+ } // convert [
|
|
|
|
|
+ [ "Ctrl g" [ (mode "locked") ] ]
|
|
|
|
|
+ [ "Ctrl q" [ [ "Quit" ] ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ shared_except = {
|
|
|
|
|
+ _args = [ "locked" "entersearch" ];
|
|
|
|
|
+ } // convert [
|
|
|
|
|
+ [ "enter" [ (mode "locked") ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ shared_except = {
|
|
|
|
|
+ _args = [ "locked" "entersearch" "renametab" "renamepane" ];
|
|
|
|
|
+ } // convert [
|
|
|
|
|
+ [ "enter" [ (mode "locked") ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ shared_except = {
|
|
|
|
|
+ _args = [ "locked" "entersearch" "renametab" "renamepane" "move" ];
|
|
|
|
|
+ } // convert [
|
|
|
|
|
+ [ "m" [ (mode "move") ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ shared_except = {
|
|
|
|
|
+ _args = [ "locked" "entersearch" "search" "renametab" "renamepane" "session" ];
|
|
|
|
|
+ } // convert [
|
|
|
|
|
+ [ "o" [ (mode "session") ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ shared_except = {
|
|
|
|
|
+ _args = [ "locked" "tab" "entersearch" "renametab" "renamepane" ];
|
|
|
|
|
+ } // convert [
|
|
|
|
|
+ [ "t" [ (mode "tab") ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ shared_except = {
|
|
|
|
|
+ _args = [ "locked" "tab" "scroll" "entersearch" "renametab" "renamepane" ];
|
|
|
|
|
+ } // convert [
|
|
|
|
|
+ [ "s" [ (mode "scroll") ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ shared_among = {
|
|
|
|
|
+ _args = [ "normal" "resize" "tab" "scroll" "prompt" "tmux" ];
|
|
|
|
|
+ } // convert [
|
|
|
|
|
+ [ "p" [ (mode "pane") ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ shared_except = {
|
|
|
|
|
+ _args = [ "locked" "resize" "pane" "tab" "entersearch" "renametab" "renamepane" ];
|
|
|
|
|
+ } // convert [
|
|
|
|
|
+ [ "r" [ (mode "resize") ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ shared_among = {
|
|
|
|
|
+ _args = [ "scroll" "search" ];
|
|
|
|
|
+ } // convert [
|
|
|
|
|
+ [ "PageDown" [ [ "PageScrollDown" ] ] ]
|
|
|
|
|
+ [ "PageUp" [ [ "PageScrollUp" ] ] ]
|
|
|
|
|
+ [ "Ctrl b" [ [ "PageScrollUp" ] ] ]
|
|
|
|
|
+ [ "Ctrl c" [ [ "ScrollToBottom" ] (mode "locked") ] ]
|
|
|
|
|
+ [ "d" [ [ "HalfPageScrollDown" ] ] ]
|
|
|
|
|
+ [ "Ctrl f" [ [ "PageScrollDown" ] ] ]
|
|
|
|
|
+ [ "h" [ [ "PageScrollUp" ] ] ]
|
|
|
|
|
+ [ "j" [ [ "ScrollDown" ] ] ]
|
|
|
|
|
+ [ "k" [ [ "ScrollUp" ] ] ]
|
|
|
|
|
+ [ "l" [ [ "PageScrollDown" ] ] ]
|
|
|
|
|
+ [ "u" [ [ "HalfPageScrollUp" ] ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ "entersearch" = convert [
|
|
|
|
|
+ [ "Ctrl c" [ (mode "scroll") ] ]
|
|
|
|
|
+ [ "esc" [ (mode "scroll") ] ]
|
|
|
|
|
+ [ "enter" [ (mode "search") ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ "renametab" = convert [
|
|
|
|
|
+ [ "esc" [ [ "UndoRenameTab" ] (mode "tab") ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ "shared_among" = {
|
|
|
|
|
+ _args = [ "renametab" "renamepane" ];
|
|
|
|
|
+ } // convert [
|
|
|
|
|
+ [ "Ctrl c" [ (mode "locked") ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ "renamepane" = convert [
|
|
|
|
|
+ [ "esc" [ [ "UndoRenamePane" ] (mode "pane") ] ]
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ ];
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ plugins._children = [
|
|
|
|
|
+ { about._props.location = "zellij:about"; }
|
|
|
|
|
+ { compact-bar._props.location = "zellij:compact-bar"; }
|
|
|
|
|
+ { configuration._props.location = "zellij:configuration"; }
|
|
|
|
|
+ {
|
|
|
|
|
+ filepicker = {
|
|
|
|
|
+ _props.location = "zellij:strider";
|
|
|
|
|
+ _children = [{ cwd._args = [ "/" ]; }];
|
|
|
|
|
+ };
|
|
|
|
|
+ }
|
|
|
|
|
+ { plugin-manager._props.location = "zellij:plugin-manager"; }
|
|
|
|
|
+ { session-manager._props.location = "zellij:session-manager"; }
|
|
|
|
|
+ { status-bar._props.location = "zellij:status-bar"; }
|
|
|
|
|
+ { strider._props.location = "zellij:strider"; }
|
|
|
|
|
+ { tab-bar._props.location = "zellij:tab-bar"; }
|
|
|
|
|
+ {
|
|
|
|
|
+ welcome-screen = {
|
|
|
|
|
+ _props.location = "zellij:session-manager";
|
|
|
|
|
+ _children = [{ welcome_screen._args = [ true ]; }];
|
|
|
|
|
+ };
|
|
|
|
|
+ }
|
|
|
|
|
+ ];
|
|
|
|
|
+ };
|
|
|
|
|
+ };
|
|
|
|
|
+}
|