411 lines
8.7 KiB
Markdown
411 lines
8.7 KiB
Markdown
# Zellij Layout Examples
|
|
|
|
Collection of layout templates for different use cases and workflows.
|
|
|
|
## Basic Layouts
|
|
|
|
### Single Terminal
|
|
Simple terminal with full screen:
|
|
|
|
```kdl
|
|
layout {
|
|
pane command="bash"
|
|
}
|
|
```
|
|
|
|
### Two Pane Horizontal
|
|
Two panes side by side:
|
|
|
|
```kdl
|
|
layout {
|
|
pane split_direction="horizontal" {
|
|
pane size="50%" command="bash"
|
|
pane size="50%" command="bash"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Two Pane Vertical
|
|
Two panes stacked vertically:
|
|
|
|
```kdl
|
|
layout {
|
|
pane split_direction="vertical" {
|
|
pane size="50%" command="bash"
|
|
pane size="50%" command="bash"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Development Layouts
|
|
|
|
### Development Workspace
|
|
Editor with git and terminal panes:
|
|
|
|
```kdl
|
|
layout {
|
|
default_tab_template {
|
|
pane size=1 borderless=true {
|
|
plugin location="zellij:tab-bar"
|
|
}
|
|
children
|
|
pane size=2 borderless=true {
|
|
plugin location="zellij:status-bar"
|
|
}
|
|
}
|
|
tab name="code" cwd="~/project" focus=true {
|
|
pane command="nvim" size="80%"
|
|
pane size="20%" split_direction="vertical" {
|
|
pane command="git" {
|
|
args "status"
|
|
size="50%"
|
|
}
|
|
pane command="htop"
|
|
}
|
|
}
|
|
tab name="terminal" {
|
|
pane command="bash"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Full Development Setup
|
|
Complete development environment with monitoring:
|
|
|
|
```kdl
|
|
layout {
|
|
default_tab_template {
|
|
pane size=1 borderless=true {
|
|
plugin location="zellij:tab-bar"
|
|
}
|
|
children
|
|
pane size=2 borderless=true {
|
|
plugin location="zellij:status-bar"
|
|
}
|
|
}
|
|
tab name="editor" cwd="~/project" focus=true {
|
|
pane command="nvim" size="70%"
|
|
pane split_direction="horizontal" {
|
|
pane size="50%" split_direction="vertical" {
|
|
pane command="git" {
|
|
args "status"
|
|
cwd "~/project"
|
|
}
|
|
pane command="cargo" {
|
|
args "test"
|
|
cwd "~/project"
|
|
}
|
|
}
|
|
pane command="htop"
|
|
}
|
|
}
|
|
tab name="server" cwd="~/server" {
|
|
pane command="nvim" size="60%"
|
|
pane split_direction="vertical" {
|
|
pane command="tail" {
|
|
args "-f" "log/production.log"
|
|
cwd "~/server"
|
|
size="40%"
|
|
}
|
|
pane command="btop" size="40%"
|
|
}
|
|
}
|
|
tab name="database" {
|
|
pane command="psql" {
|
|
args "-U" "postgres"
|
|
cwd "~/server"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Monitoring Layouts
|
|
|
|
### System Monitoring
|
|
Multiple monitoring tools:
|
|
|
|
```kdl
|
|
layout {
|
|
tab name="monitoring" split_direction="horizontal" {
|
|
pane command="htop"
|
|
pane command="btop"
|
|
pane command="iotop"
|
|
pane command="nethogs"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Resource Monitoring
|
|
CPU, memory, disk, and network monitoring:
|
|
|
|
```kdl
|
|
layout {
|
|
tab name="resources" split_direction="horizontal" {
|
|
pane split_direction="vertical" {
|
|
pane command="htop"
|
|
pane command="df" "-h"
|
|
}
|
|
pane split_direction="vertical" {
|
|
pane command="btop"
|
|
pane command="iotop"
|
|
}
|
|
pane command="nethogs"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Log Monitoring
|
|
Monitor multiple log files:
|
|
|
|
```kdl
|
|
layout {
|
|
tab name="logs" split_direction="horizontal" {
|
|
pane command="tail" {
|
|
args "-f" "/var/log/syslog"
|
|
}
|
|
pane command="tail" {
|
|
args "-f" "/var/log/nginx/access.log"
|
|
}
|
|
pane command="journalctl" {
|
|
args "-f"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Tab Templates
|
|
|
|
### Default Tab Template with Plugins
|
|
Standard tab bar and status bar:
|
|
|
|
```kdl
|
|
layout {
|
|
default_tab_template {
|
|
pane size=1 borderless=true {
|
|
plugin location="zellij:tab-bar"
|
|
}
|
|
children
|
|
pane size=2 borderless=true {
|
|
plugin location="zellij:status-bar"
|
|
}
|
|
}
|
|
// All tabs will use this template unless overridden
|
|
}
|
|
```
|
|
|
|
### Compact Tab Template
|
|
Minimal UI with compact bar:
|
|
|
|
```kdl
|
|
layout {
|
|
default_tab_template {
|
|
pane size=1 borderless=true {
|
|
plugin location="zellij:compact-bar"
|
|
}
|
|
children
|
|
}
|
|
}
|
|
```
|
|
|
|
## Floating Layouts
|
|
|
|
### Swap Floating Layout
|
|
Different arrangements based on pane count:
|
|
|
|
```kdl
|
|
layout {
|
|
swap_floating_layout {
|
|
floating_panes max_panes=1 {
|
|
pane x="25%" y="25%" width="50%" height="50%"
|
|
}
|
|
floating_panes max_panes=2 {
|
|
pane x="10%" y="25%" width="35%" height="50%"
|
|
pane x="55%" y="25%" width="35%" height="50%"
|
|
}
|
|
floating_panes max_panes=3 {
|
|
pane x="0%" y="0%" width="33%" height="50%"
|
|
pane x="33%" y="0%" width="33%" height="50%"
|
|
pane x="66%" y="0%" width="33%" height="50%"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Specific Floating Layout
|
|
Predefined floating pane positions:
|
|
|
|
```kdl
|
|
layout {
|
|
pane {
|
|
x="10%"
|
|
y="20%"
|
|
width="80%"
|
|
height="60%"
|
|
focus=true
|
|
command="nvim"
|
|
}
|
|
pane {
|
|
x="15%"
|
|
y="70%"
|
|
width="70%"
|
|
height="25%"
|
|
command="htop"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Advanced Layouts
|
|
|
|
### Multi-Project Setup
|
|
Work on multiple projects simultaneously:
|
|
|
|
```kdl
|
|
layout {
|
|
tab name="frontend" cwd="~/projects/frontend" {
|
|
pane command="npm" {
|
|
args "start"
|
|
cwd "~/projects/frontend"
|
|
}
|
|
pane command="nvim" {
|
|
cwd "~/projects/frontend"
|
|
}
|
|
}
|
|
tab name="backend" cwd="~/projects/backend" {
|
|
pane command="npm" {
|
|
args "start"
|
|
cwd "~/projects/backend"
|
|
}
|
|
pane command="nvim" {
|
|
cwd "~/projects/backend"
|
|
}
|
|
}
|
|
tab name="docs" cwd="~/projects/docs" {
|
|
pane command="mkdocs" {
|
|
args "serve"
|
|
cwd "~/projects/docs"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Database Layout
|
|
Development with database management:
|
|
|
|
```kdl
|
|
layout {
|
|
tab name="app" cwd="~/project" {
|
|
pane command="npm" {
|
|
args "start"
|
|
size="60%"
|
|
}
|
|
pane split_direction="vertical" {
|
|
pane command="nvim" {
|
|
size="40%"
|
|
}
|
|
pane command="psql" {
|
|
args "-U" "postgres"
|
|
size="60%"
|
|
}
|
|
}
|
|
}
|
|
tab name="database-tools" {
|
|
pane command="pgadmin" {
|
|
size="50%"
|
|
}
|
|
pane command="dbeaver" {
|
|
size="50%"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Special Purpose Layouts
|
|
|
|
### Git Workflow
|
|
Git operations with diff viewer:
|
|
|
|
```kdl
|
|
layout {
|
|
tab name="git" cwd="~/project" {
|
|
pane command="git" {
|
|
args "status"
|
|
size="30%"
|
|
}
|
|
pane command="git" {
|
|
args "log" "--oneline" "-10"
|
|
size="30%"
|
|
}
|
|
pane split_direction="horizontal" {
|
|
pane command="git" {
|
|
args "diff" "--cached"
|
|
size="40%"
|
|
}
|
|
pane command="git" {
|
|
args "diff" "--cached" "HEAD~1"
|
|
size="40%"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Container Development
|
|
Docker and development tools:
|
|
|
|
```kdl
|
|
layout {
|
|
tab name="containers" {
|
|
pane command="docker" {
|
|
args "ps"
|
|
size="40%"
|
|
}
|
|
pane command="docker-compose" {
|
|
args "ps"
|
|
size="30%"
|
|
}
|
|
pane split_direction="vertical" {
|
|
pane command="docker" {
|
|
args "stats"
|
|
size="50%"
|
|
}
|
|
pane command="lazydocker"
|
|
size="50%"
|
|
}
|
|
}
|
|
}
|
|
tab name="k8s" {
|
|
pane command="kubectl" {
|
|
args "get" "pods" "--watch"
|
|
size="50%"
|
|
}
|
|
pane command="k9s" {
|
|
size="50%"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Layout Tips
|
|
|
|
### Size Specifications
|
|
- **Fixed sizes:** `size=10` (exact lines/columns)
|
|
- **Percentage sizes:** `size="50%"` (relative to container)
|
|
- **Mixed sizing:** Use fixed and percentage as needed
|
|
|
|
### Split Directions
|
|
- **Vertical:** `split_direction="vertical"` (stack top to bottom)
|
|
- **Horizontal:** `split_direction="horizontal"` (side by side)
|
|
|
|
### Common Patterns
|
|
1. **Focus on startup:** Add `focus=true` to important panes
|
|
2. **Set working directories:** Use `cwd="/path"` for project-specific panes
|
|
3. **Naming:** Use descriptive tab names for organization
|
|
4. **Templates:** Use `default_tab_template` for consistent UI
|
|
5. **Plugins:** Integrate tab-bar and status-bar for better UX
|
|
|
|
### Best Practices
|
|
- Keep layouts readable with proper indentation
|
|
- Use consistent naming conventions
|
|
- Test layouts before deploying
|
|
- Document custom layouts for team sharing
|
|
- Consider different screen sizes when designing layouts |