This commit is contained in:
elwrcl committed 2026-09-07 03:44:32 +03:00
1 parent ed173a0af2
commit ec8d0d2432
4 files changed
+97 -22

No files matched your search

@@ -9,29 +9,34 @@
runtimeInputs = [ runtimeInputs = [
config.programs.zellij.finalPackage config.programs.zellij.finalPackage
pkgs.coreutils pkgs.coreutils
pkgs.gnugrep pkgs.gawk
]; ];
text = '' text = ''
case "''${1:-}" in case "''${1:-}" in
-h | --help) -h | --help)
echo "usage: ide [directory]" echo "usage: ide [directory]"
echo echo
echo "opens re-attaches to a Zellij session named after the" echo "opens re-attaches to a Zellij session named after the"
echo "directory, running Helix in the 'ide' layout." echo "directory, running Helix in the 'ide' layout."
exit 0 exit 0
;; ;;
esac esac
cd "''${1:-.}" cd "''${1:-.}"
session=$(basename "$PWD") session=$(basename "$PWD")
session=$(printf '%s' "$session" | tr -c 'A-Za-z0-9._-' '-') session=$(printf '%s' "$session" | tr -c 'A-Za-z0-9._-' '-')
if zellij list-sessions --short 2>/dev/null | grep -qx "$session"; then if zellij list-sessions --no-formatting 2>/dev/null |
exec zellij attach "$session" awk -v s="$session" '$1 == s && $0 !~ /EXITED/ { hit = 1 } END { exit !hit }'; then
fi exec zellij attach "$session"
fi
exec zellij --session "$session" --new-session-with-layout ide # Drop any dead session squatting on the name so the layout is rebuilt
# from scratch rather than resurrected.
zellij delete-session "$session" >/dev/null 2>&1 || true
exec zellij --session "$session" --new-session-with-layout ide
''; '';
}) })
]; ];
@@ -18,6 +18,11 @@
} }
} }
bind "Alt h" { MoveFocusOrTab "Left"; }
bind "Alt l" { MoveFocusOrTab "Right"; }
bind "Alt k" { MoveFocus "Up"; }
bind "Alt j" { MoveFocus "Down"; }
// tabs // tabs
bind "Alt t" { NewTab; } bind "Alt t" { NewTab; }
bind "Alt 1" { GoToTab 1; } bind "Alt 1" { GoToTab 1; }
@@ -65,6 +70,7 @@
// tabs // tabs
bind "c" { NewTab; SwitchToMode "Normal"; } bind "c" { NewTab; SwitchToMode "Normal"; }
bind "," { SwitchToMode "RenameTab"; TabNameInput 0; } bind "," { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "." { SwitchToMode "RenamePane"; PaneNameInput 0; }
bind "X" { CloseTab; SwitchToMode "Normal"; } bind "X" { CloseTab; SwitchToMode "Normal"; }
bind "p" { GoToPreviousTab; SwitchToMode "Normal"; } bind "p" { GoToPreviousTab; SwitchToMode "Normal"; }
bind "b" { BreakPane; SwitchToMode "Normal"; } bind "b" { BreakPane; SwitchToMode "Normal"; }
@@ -81,6 +87,7 @@
// sub-modes // sub-modes
bind "r" { SwitchToMode "Resize"; } bind "r" { SwitchToMode "Resize"; }
bind "Ctrl l" { SwitchToMode "Locked"; }
bind "[" { SwitchToMode "Scroll"; } bind "[" { SwitchToMode "Scroll"; }
bind "/" { SwitchToMode "EnterSearch"; SearchInput 0; } bind "/" { SwitchToMode "EnterSearch"; SearchInput 0; }
@@ -1,20 +1,66 @@
{ ... }: { ... }:
{ {
flake.homeModules.home-zellij-layout-ide = flake.homeModules.home-zellij-layout-ide =
{ ... }: {
config,
lib,
pkgs,
...
}:
let
p = config.elars.theme.palette;
c = hex: "#${hex}";
bg = c p.base00;
bgAlt = c p.base01;
dim = c p.base03;
muted = c p.base04;
accent = c p.accent;
mode =
key: background: label:
''mode_${key} "#[bg=${background},fg=${bg},bold] ${label} "'';
modes = lib.concatStringsSep "\n " [
(mode "normal" (c p.base0B) "NORMAL")
(mode "tmux" (c p.base09) "ZELLIJ")
(mode "locked" dim "LOCKED")
(mode "resize" (c p.base0D) "RESIZE")
(mode "scroll" (c p.base0C) "SCROLL")
(mode "search" (c p.base0C) "SEARCH")
(mode "entersearch" (c p.base0C) "SEARCH")
(mode "renametab" (c p.base0E) "RENAME")
(mode "renamepane" (c p.base0E) "RENAME")
];
in
{ {
programs.zellij.layouts.ide = '' programs.zellij.layouts.ide = ''
layout { layout {
default_tab_template { default_tab_template {
pane size=1 borderless=true { pane size=1 borderless=true {
plugin location="zellij:compact-bar" plugin location="file:${pkgs.zellijPlugins.zjstatus}" {
format_left "{mode}#[bg=${bgAlt},fg=${accent},bold] {session} #[bg=${bg}] {tabs}"
format_right "#[bg=${bg},fg=${dim}]{swap_layout} {datetime}"
format_space "#[bg=${bg}]"
border_enabled "false"
hide_frame_for_single_pane "false"
${modes}
tab_normal "#[bg=${bgAlt},fg=${muted}] {index} {name} "
tab_active "#[bg=${accent},fg=${bg},bold] {index} {name} "
datetime "#[bg=${bg},fg=${muted},bold] {format} "
datetime_format "%H:%M"
datetime_timezone "Europe/Istanbul"
}
} }
children children
} }
tab name="edit" focus=true { tab name="edit" focus=true {
pane split_direction="vertical" { pane split_direction="vertical" {
pane size="20%" name="files" command="hx-sidebar" close_on_exit=true { pane size=40 name="files" command="hx-sidebar" close_on_exit=true {
args "." args "."
} }
pane focus=true command="hx" close_on_exit=true pane focus=true command="hx" close_on_exit=true
@@ -29,6 +75,24 @@
} }
} }
} }
swap_tiled_layout name="vertical" {
tab {
pane split_direction="vertical" { children; }
}
}
swap_tiled_layout name="horizontal" {
tab {
pane split_direction="horizontal" { children; }
}
}
swap_tiled_layout name="stacked" {
tab {
pane stacked=true { children; }
}
}
} }
''; '';
}; };
+1 -2
View File
@@ -21,8 +21,7 @@
stacked_resize = true; stacked_resize = true;
scroll_buffer_size = 50000; scroll_buffer_size = 50000;
scrollback_editor = "hx"; scrollback_editor = "hx";
session_serialization = true; session_serialization = false;
serialize_pane_viewport = true;
on_force_close = "detach"; on_force_close = "detach";
show_startup_tips = false; show_startup_tips = false;
show_release_notes = false; show_release_notes = false;