From 6248ea64b35aba1960839a2514d7172c2ee8b3af Mon Sep 17 00:00:00 2001 From: ooks-io Date: Fri, 29 Mar 2024 22:30:56 +1300 Subject: [PATCH] feat(zellij): add script layout & modularize layouts --- .../console/multiplexer/zellij/default.nix | 128 ++---------------- .../zellij/layouts/defaultLayout.nix | 60 ++++++++ .../zellij/layouts/flakeLayout.nix | 66 +++++++++ .../zellij/layouts/scriptLayout.nix | 64 +++++++++ 4 files changed, 201 insertions(+), 117 deletions(-) create mode 100644 home/modules/console/multiplexer/zellij/layouts/defaultLayout.nix create mode 100644 home/modules/console/multiplexer/zellij/layouts/flakeLayout.nix create mode 100644 home/modules/console/multiplexer/zellij/layouts/scriptLayout.nix diff --git a/home/modules/console/multiplexer/zellij/default.nix b/home/modules/console/multiplexer/zellij/default.nix index 4b827d1..fd9f295 100644 --- a/home/modules/console/multiplexer/zellij/default.nix +++ b/home/modules/console/multiplexer/zellij/default.nix @@ -11,7 +11,7 @@ in enable = true; settings = { theme = "${colorscheme.slug}"; - default_layout = "base"; + default_layout = "default"; pane_frames = false; themes = { "${colorscheme.slug}" = { @@ -30,6 +30,16 @@ in }; }; }; + + # Layouts + # Default layout + xdg.configFile."zellij/layouts/default.kdl" = import ./layouts/defaultLayout.nix { inherit pkgs config; }; + # Layout for bash scripts + xdg.configFile."zellij/layouts/script.kdl" = import ./layouts/scriptLayout.nix { inherit pkgs config; }; + # Layout for configuring my flake + xdg.configFile."zellij/layouts/flake.kdl" = import ./layouts/flakeLayout.nix { inherit pkgs config; }; + + # Additional keybinds xdg.configFile."zellij/config.kdl".text = /* kdl */ '' keybinds { shared_except "locked" { @@ -45,122 +55,6 @@ in } } ''; - xdg.configFile."zellij/layouts/base.kdl".text = /* kdl */ '' - layout { - default_tab_template { - pane size=2 borderless=true { - plugin location="file:${pkgs.zjstatus}/bin/zjstatus.wasm" { - format_left "{mode}" - format_right "{session} {command_git_branch} {datetime}" - format_center "#[fg=#${colors.base0D},bold] {tabs}" - format_space "" - - border_enabled "true" - border_char "─" - border_format "#[fg=#${colors.base05}]{char}" - border_position "bottom" - - hide_frame_for_single_pane "true" - - mode_normal "#[fg=#${colors.base0D}] " - mode_tmux "#[fg=#${colors.base0E}] " - mode_pane "#[fg=#${colors.base08}] " - mode_tab "#[fg=#${colors.base08}] " - mode_rename_tab "#[fg=#${colors.base08}] " - mode_rename_pane "#[fg=#${colors.base08}] " - mode_session "#[fg=#${colors.base08}] " - mode_locked "#[fg=#${colors.base05}] " - mode_move "#[fg=#${colors.base0B}] " - mode_resize "#[fg=#${colors.base0B}] " - mode_prompt "#[fg=#${colors.base0A}] " - mode_search "#[fg=#${colors.base0A}] " - mode_enter_search "#[fg=#${colors.base0A}] " - - tab_normal "#[bg=#${colors.base01}] {name} " - tab_active "#[bg=#${colors.base02}] {name} " - tab_separator " " - - command_git_branch_command "git rev-parse --abbrev-ref HEAD" - command_git_branch_format "#[fg=#${colors.base0C}] {stdout} " - command_git_branch_interval "10" - command_git_branch_rendermode "static" - - datetime "#[fg=#${colors.base05},bold] {format} " - datetime_format "%I:%M %p" - datetime_timezone "${config.home.sessionVariables.TZ}" - } - } - children - } - - tab name="terminal" focus=true { - pane name="term" cwd="~" focus=true - } - } - ''; - - xdg.configFile."zellij/layouts/flake.kdl".text = /* kdl */ '' - layout { - default_tab_template { - pane size=2 borderless=true { - plugin location="file:${pkgs.zjstatus}/bin/zjstatus.wasm" { - format_left "{mode}" - format_right "{session} {command_git_branch} {datetime}" - format_center "#[fg=#${colors.base0D},bold] {tabs}" - format_space "" - - border_enabled "true" - border_char "─" - border_format "#[fg=#${colors.base05}]{char}" - border_position "bottom" - - hide_frame_for_single_pane "true" - - mode_normal "#[fg=#${colors.base0D}] " - mode_tmux "#[fg=#${colors.base0E}] " - mode_pane "#[fg=#${colors.base08}] " - mode_tab "#[fg=#${colors.base08}] " - mode_rename_tab "#[fg=#${colors.base08}] " - mode_rename_pane "#[fg=#${colors.base08}] " - mode_session "#[fg=#${colors.base08}] " - mode_locked "#[fg=#${colors.base05}] " - mode_move "#[fg=#${colors.base0B}] " - mode_resize "#[fg=#${colors.base0B}] " - mode_prompt "#[fg=#${colors.base0A}] " - mode_search "#[fg=#${colors.base0A}] " - mode_enter_search "#[fg=#${colors.base0A}] " - - tab_normal "#[bg=#${colors.base01}] {name} " - tab_active "#[bg=#${colors.base02}] {name} " - tab_separator " " - - command_git_branch_command "git rev-parse --abbrev-ref HEAD" - command_git_branch_format "#[fg=#${colors.base0C}] {stdout} " - command_git_branch_interval "10" - command_git_branch_rendermode "static" - - datetime "#[fg=#${colors.base05},bold] {format} " - datetime_format "%I:%M %p" - datetime_timezone "${config.home.sessionVariables.TZ}" - } - } - children - } - - 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" - } - } - ''; - home.shellAliases = { - zjf = "zellij --layout flake"; - }; }; } diff --git a/home/modules/console/multiplexer/zellij/layouts/defaultLayout.nix b/home/modules/console/multiplexer/zellij/layouts/defaultLayout.nix new file mode 100644 index 0000000..1130895 --- /dev/null +++ b/home/modules/console/multiplexer/zellij/layouts/defaultLayout.nix @@ -0,0 +1,60 @@ +{ pkgs, config, ... }: + +let + inherit (config.colorscheme) colors; +in + +{ + text = /* kdl */ '' + layout { + default_tab_template { + pane size=2 borderless=true { + plugin location="file:${pkgs.zjstatus}/bin/zjstatus.wasm" { + format_left "{mode}" + format_right "{session} {command_git_branch} {datetime}" + format_center "#[fg=#${colors.base0D},bold] {tabs}" + format_space "" + + border_enabled "true" + border_char "─" + border_format "#[fg=#${colors.base05}]{char}" + border_position "bottom" + + hide_frame_for_single_pane "true" + + mode_normal "#[fg=#${colors.base0D}] " + mode_tmux "#[fg=#${colors.base0E}] " + mode_pane "#[fg=#${colors.base08}] " + mode_tab "#[fg=#${colors.base08}] " + mode_rename_tab "#[fg=#${colors.base08}] " + mode_rename_pane "#[fg=#${colors.base08}] " + mode_session "#[fg=#${colors.base08}] " + mode_locked "#[fg=#${colors.base05}] " + mode_move "#[fg=#${colors.base0B}] " + mode_resize "#[fg=#${colors.base0B}] " + mode_prompt "#[fg=#${colors.base0A}] " + mode_search "#[fg=#${colors.base0A}] " + mode_enter_search "#[fg=#${colors.base0A}] " + + tab_normal "#[bg=#${colors.base01}] {name} " + tab_active "#[bg=#${colors.base02}] {name} " + tab_separator " " + + command_git_branch_command "git rev-parse --abbrev-ref HEAD" + command_git_branch_format "#[fg=#${colors.base0C}] {stdout} " + command_git_branch_interval "10" + command_git_branch_rendermode "static" + + datetime "#[fg=#${colors.base05},bold] {format} " + datetime_format "%I:%M %p" + datetime_timezone "${config.home.sessionVariables.TZ}" + } + } + children + } + tab name="terminal" focus=true { + pane name="term" focus=true + } + } + ''; +} diff --git a/home/modules/console/multiplexer/zellij/layouts/flakeLayout.nix b/home/modules/console/multiplexer/zellij/layouts/flakeLayout.nix new file mode 100644 index 0000000..cdfc3ba --- /dev/null +++ b/home/modules/console/multiplexer/zellij/layouts/flakeLayout.nix @@ -0,0 +1,66 @@ +{ pkgs, config, ... }: + +let + inherit (config.colorscheme) colors; +in + +{ + text = /* kdl */ '' + layout { + default_tab_template { + pane size=2 borderless=true { + plugin location="file:${pkgs.zjstatus}/bin/zjstatus.wasm" { + format_left "{mode}" + format_right "{session} {command_git_branch} {datetime}" + format_center "#[fg=#${colors.base0D},bold] {tabs}" + format_space "" + + border_enabled "true" + border_char "─" + border_format "#[fg=#${colors.base05}]{char}" + border_position "bottom" + + hide_frame_for_single_pane "true" + + mode_normal "#[fg=#${colors.base0D}] " + mode_tmux "#[fg=#${colors.base0E}] " + mode_pane "#[fg=#${colors.base08}] " + mode_tab "#[fg=#${colors.base08}] " + mode_rename_tab "#[fg=#${colors.base08}] " + mode_rename_pane "#[fg=#${colors.base08}] " + mode_session "#[fg=#${colors.base08}] " + mode_locked "#[fg=#${colors.base05}] " + mode_move "#[fg=#${colors.base0B}] " + mode_resize "#[fg=#${colors.base0B}] " + mode_prompt "#[fg=#${colors.base0A}] " + mode_search "#[fg=#${colors.base0A}] " + mode_enter_search "#[fg=#${colors.base0A}] " + + tab_normal "#[bg=#${colors.base01}] {name} " + tab_active "#[bg=#${colors.base02}] {name} " + tab_separator " " + + command_git_branch_command "git rev-parse --abbrev-ref HEAD" + command_git_branch_format "#[fg=#${colors.base0C}] {stdout} " + command_git_branch_interval "10" + command_git_branch_rendermode "static" + + datetime "#[fg=#${colors.base05},bold] {format} " + datetime_format "%I:%M %p" + datetime_timezone "${config.home.sessionVariables.TZ}" + } + } + children + } + 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" + } + } + ''; +} diff --git a/home/modules/console/multiplexer/zellij/layouts/scriptLayout.nix b/home/modules/console/multiplexer/zellij/layouts/scriptLayout.nix new file mode 100644 index 0000000..e6f2991 --- /dev/null +++ b/home/modules/console/multiplexer/zellij/layouts/scriptLayout.nix @@ -0,0 +1,64 @@ +{ pkgs, config, ... }: + +let + inherit (config.colorscheme) colors; +in + +{ +text = /* kdl */ '' + layout { + default_tab_template { + pane size=2 borderless=true { + plugin location="file:${pkgs.zjstatus}/bin/zjstatus.wasm" { + format_left "{mode}" + format_right "{session} {command_git_branch} {datetime}" + format_center "#[fg=#${colors.base0D},bold] {tabs}" + format_space "" + + border_enabled "true" + border_char "─" + border_format "#[fg=#${colors.base05}]{char}" + border_position "bottom" + + hide_frame_for_single_pane "true" + + mode_normal "#[fg=#${colors.base0D}] " + mode_tmux "#[fg=#${colors.base0E}] " + mode_pane "#[fg=#${colors.base08}] " + mode_tab "#[fg=#${colors.base08}] " + mode_rename_tab "#[fg=#${colors.base08}] " + mode_rename_pane "#[fg=#${colors.base08}] " + mode_session "#[fg=#${colors.base08}] " + mode_locked "#[fg=#${colors.base05}] " + mode_move "#[fg=#${colors.base0B}] " + mode_resize "#[fg=#${colors.base0B}] " + mode_prompt "#[fg=#${colors.base0A}] " + mode_search "#[fg=#${colors.base0A}] " + mode_enter_search "#[fg=#${colors.base0A}] " + + tab_normal "#[bg=#${colors.base01}] {name} " + tab_active "#[bg=#${colors.base02}] {name} " + tab_separator " " + + command_git_branch_command "git rev-parse --abbrev-ref HEAD" + command_git_branch_format "#[fg=#${colors.base0C}] {stdout} " + command_git_branch_interval "10" + command_git_branch_rendermode "static" + + datetime "#[fg=#${colors.base05},bold] {format} " + datetime_format "%I:%M %p" + datetime_timezone "${config.home.sessionVariables.TZ}" + } + } + children + } + tab name="edit" focus=true { + pane edit="./" name="edit" focus=true size="85%" borderless=true + pane name="term" focus=false size="15%" borderless=false + } + tab name="git" focus=false { + pane name="git" focus=false command="lazygit" + } + } +''; +}