{ osConfig, lib, hozen, ... }: let inherit (hozen) color; inherit (osConfig.ooknet) console; inherit (osConfig.ooknet.host) admin; inherit (lib) mkIf; cfg = osConfig.ooknet.console.tools.zellij; in { imports = [./options.nix]; config = mkIf (cfg.enable || console.multiplexer == "zellij") { programs.zellij = { enable = true; settings = { theme = "${color.slug}"; default_shell = "${admin.shell}"; default_layout = "default"; pane_frames = false; scrollback_editor = "${console.editor}"; themes = { "${color.slug}" = { fg = "#${color.base05}"; bg = "#${color.base00}"; black = "#${color.base00}"; red = "#${color.base08}"; green = "#${color.base0B}"; yellow = "#${color.base0A}"; blue = "#${color.base0D}"; magenta = "#${color.base0E}"; cyan = "#${color.base0C}"; white = "#${color.base05}"; orange = "#${color.base09}"; }; }; }; # layout configurations layouts = { default = { tabs = #kdl '' tab name="terminal" focus=true { pane name="term" focus=true } ''; }; flake = { tabs = # kdl '' tab name="terminal" focus=true { pane name="term" cwd="$FLAKE" focus=true } tab name="editor" { pane name="edit" edit="$FLAKE" } tab name="git" { pane name="git" cwd="$FLAKE" command="lazygit" } ''; }; }; # keybind configuration extraSettings = # kdl '' keybinds clear-defaults=true { shared_except "locked" { bind "Alt 1" { GoToTab 1; } bind "Alt 2" { GoToTab 2; } bind "Alt 3" { GoToTab 3; } bind "Alt 4" { GoToTab 4; } bind "Alt 5" { GoToTab 5; } bind "Alt 6" { GoToTab 6; } bind "Alt 7" { GoToTab 7; } bind "Alt 8" { GoToTab 8; } bind "Alt 9" { GoToTab 9; } bind "Alt -" { Resize "Decrease" ; } bind "Alt =" { Resize "Increase" ; } } locked { bind "Alt g" { SwitchToMode "Normal" ; } } resize { bind "Alt r" { SwitchToMode "Normal" ; } bind "h" "Left" { Resize "Increase Left" ; } bind "j" "Down" { Resize "Increase Down" ; } bind "k" "Up" { Resize "Increase Up" ; } bind "l" "Right" { Resize "Increase Right" ; } } pane { bind "Alt p" { SwitchToMode "Normal" ; } bind "c" { Clear ; } bind "e" { TogglePaneEmbedOrFloating ; SwitchToMode "Normal" ; } bind "f" { ToggleFocusFullscreen ; SwitchToMode "Normal" ; } bind "j" "Down" { NewPane "Down" ; SwitchToMode "Normal" ; } bind "l" "Right" { NewPane "Right" ; SwitchToMode "Normal" ; } bind "n" { NewPane ; SwitchToMode "Normal" ; } bind "p" { SwitchFocus ; SwitchToMode "Normal" ; } bind "r" { SwitchToMode "RenamePane" ; PaneNameInput 0 ; } bind "w" { ToggleFloatingPanes ; SwitchToMode "Normal" ; } bind "x" { CloseFocus ; SwitchToMode "Normal" ; } bind "z" { TogglePaneFrames ; SwitchToMode "Normal" ; } } move { bind "Alt m" { SwitchToMode "Normal"; } bind "h" "Left" { MovePane "Left" ; } bind "j" "Down" { MovePane "Down" ; } bind "k" "Up" { MovePane "Up" ; } bind "l" "Right" { MovePane "Right" ; } } tab { bind "Alt t" { SwitchToMode "Normal" ; } bind "b" { BreakPane; SwitchToMode "Normal" ; } bind "h" { MoveTab "Left" ; } bind "l" { MoveTab "Right" ; } bind "n" { NewTab ; SwitchToMode "Normal" ; } bind "r" { SwitchToMode "RenameTab" ; TabNameInput 0 ; } bind "x" { CloseTab ; SwitchToMode "Normal" ; } bind "1" { GoToTab 1 ; SwitchToMode "Normal" ; } bind "2" { GoToTab 2 ; SwitchToMode "Normal" ; } bind "3" { GoToTab 3 ; SwitchToMode "Normal" ; } bind "4" { GoToTab 4 ; SwitchToMode "Normal" ; } bind "5" { GoToTab 5 ; SwitchToMode "Normal" ; } bind "6" { GoToTab 6 ; SwitchToMode "Normal" ; } bind "7" { GoToTab 7 ; SwitchToMode "Normal" ; } bind "8" { GoToTab 8 ; SwitchToMode "Normal" ; } bind "9" { GoToTab 9 ; SwitchToMode "Normal" ; } } scroll { bind "Alt s" { SwitchToMode "Normal" ; } bind "e" { EditScrollback; SwitchToMode "Normal" ; } bind "d" { HalfPageScrollDown ; } bind "u" { HalfPageScrollUp ; } bind "j" "Down" { ScrollDown ; } bind "k" "Up" { ScrollUp ; } bind "Home" { ScrollToTop ; SwitchToMode "Normal" ; } bind "End" { ScrollToBottom ; SwitchToMode "Normal" ; } bind "PageDown" { PageScrollDown ; } bind "PageUp" { PageScrollUp ; } bind "s" { SwitchToMode "EnterSearch" ; SearchInput 0 ; } } search { bind "Alt s" { SwitchToMode "Normal" ; } bind "n" { Search "down" ; } bind "p" { Search "up" ; } bind "c" { SearchToggleOption "CaseSensitivity" ; } bind "w" { SearchToggleOption "Wrap" ; } bind "o" { SearchToggleOption "WholeWord" ; } } entersearch { bind "Alt c" "Esc" { SwitchToMode "Scroll" ; } bind "Enter" { SwitchToMode "Search" ; } } renametab { bind "Alt c" { SwitchToMode "Normal" ; } bind "Esc" { UndoRenameTab ; SwitchToMode "Tab" ; } } renamepane { bind "Alt c" { SwitchToMode "Normal"; } bind "Esc" { UndoRenamePane; SwitchToMode "Pane"; } } session { bind "Alt o" { SwitchToMode "Normal" ; } bind "d" { Detach ; } bind "w" { LaunchOrFocusPlugin "session-manager" { floating true move_to_focused_tab true }; SwitchToMode "Normal" } } shared_except "locked" { bind "Alt g" { SwitchToMode "Locked" ; } bind "Alt q" { Quit ; } bind "Alt h" "Alt Left" { MoveFocusOrTab "Left" ; } bind "Alt l" "Alt Right" { MoveFocusOrTab "Right" ; } bind "Alt j" "Alt Down" { MoveFocus "Down" ; } bind "Alt k" "Alt Up" { MoveFocus "Up" ; } bind "Alt [" { PreviousSwapLayout ; } bind "Alt ]" { NextSwapLayout ; } } shared_except "normal" "locked" { bind "Enter" "Esc" { SwitchToMode "Normal" ; } } shared_except "pane" "locked" { bind "Alt p" { SwitchToMode "Pane" ; } } shared_except "resize" "locked" { bind "Alt r" { SwitchToMode "Resize" ; } } shared_except "scroll" "locked" { bind "Alt s" { SwitchToMode "Scroll" ; } } shared_except "session" "locked" { bind "Alt o" { SwitchToMode "Session" ; } } shared_except "tab" "locked" { bind "Alt t" { SwitchToMode "Tab" ; } } shared_except "move" "locked" { bind "Alt m" { SwitchToMode "Move" ; } } } ''; }; }; }