A split terminal in the style of tmux/omarchy, built on zellij: a file explorer on the left, an editor in the center, an AI agent on the right, and a terminal at the bottom — all with the Dracula theme (plus 4 more swappable themes). It runs inside any true-color terminal, and can install + auto-theme one for you (Ghostty, WezTerm, kitty, Alacritty).
┌──────────────────────── tab-bar ────────────────────────┐
│ files │ editor │ agent │
│ (yazi) │ (nvim/helix/…) │ (claude/agy/…) │
├───────────────┴────────────────────┴─────────────────────┤
│ terminal │
├──────────────────────── status-bar ─────────────────────┤
Press Enter on a file in yazi and it opens in the center editor, with focus jumping straight to that pane.
| Tool | Role | Required |
|---|---|---|
| zellij | Multiplexer (splits the screen) | ✅ |
| yazi | File explorer (left pane) | ✅ |
| nvim / helix / micro / vim | Editor (center pane) | at least one |
| an AI agent (CLI) | Right pane — see Agents | at least one |
| A true-color terminal | See Terminals — optional install/theming | recommended |
| JetBrainsMono Nerd Font | Icons in yazi/lualine | manual (how) |
Terminal: divvy runs inside zellij, so it works in any terminal — but for the themes to look right you need true color. Apple Terminal only gives 256 colors. divvy can install and auto-theme Ghostty / WezTerm / kitty / Alacritty for you (see Terminals).
git clone https://github.com/jairyara/divvy ~/divvy
cd ~/divvy
./install.sh # guided: you pick what to install (not everything)The installer is interactive: the core (zellij + yazi) is required, and you choose editors, terminals, and agents with checkbox menus (space to toggle, ↑/↓ to move, Enter to confirm). It detects what's already installed and skips it. The Nerd Font is a manual step — the installer prints how at the end (see Nerd Font).
It tries your system package manager first — brew (macOS/Linux), apt, dnf,
pacman, zypper, or apk. If a tool isn't packaged for your system, it downloads the
official prebuilt binary into ~/.local/bin, so you never have to install things by hand.
No prompts (flags):
./install.sh --minimal # core + nvim, nothing else
./install.sh --all # everything
./install.sh --editors "helix nvim" --terminals "ghostty kitty" --agents "codex" --yes
./install.sh --dry-run # show what it would do, without installing
BINDIR=/usr/local/bin ./install.sh # change where the symlinks go| Flag | What it does |
|---|---|
--minimal |
core + nvim only |
--all |
editors, all terminals, and agents |
--editors "..." |
list of editors (nvim helix micro vim) |
--terminals "..." |
terminals to install/theme (ghostty wezterm kitty alacritty) |
--agents "..." |
agents to install (codex opencode aider goose agy) |
--keifu / --no-keifu |
install (or skip) keifu, the Alt+g git graph modal (on by default) |
--yes |
no confirmation · --dry-run simulates |
divvy # nvim + claude (defaults)
divvy -e helix -a agy # helix + antigravity
divvy --editor micro --agent claude
divvy --theme nord # set theme and launch
divvy --list # show editors, agents, and themes
divvy --helpnvim is the default editor: it runs as a server, so every file you open from yazi piles up as a tab (bufferline). It ships with LSP and doesn't clash with zellij (
:wto save,:qto close). helix/micro/vim open one file at a time (no socket) →-e helix.
| Flag | Values | Default |
|---|---|---|
-e, --editor |
nvim · helix · micro · vim |
nvim |
-a, --agent |
any command (see Agents) | claude |
-t, --theme |
dracula · catppuccin · tokyonight · gruvbox · nord |
— |
--dry-run |
generate the layout and print it (don't launch) | |
-l, --list / -h, --help |
They change the whole stack at once (zellij + ghostty + helix + micro + nvim):
divvy-theme nord # just change the theme
divvy --theme nord # change and launchThemes: dracula · catppuccin · tokyonight · gruvbox · nord.
After changing the theme: relaunch divvy (zellij/editors). Terminals update too: Ghostty
Cmd+Shift+R· WezTerm / kitty / Alacritty reload automatically.
divvy runs inside zellij, so it works in any true-color terminal — you don't have to
install a new one. If you want, the installer can set one up and divvy-theme will keep it in
sync with the rest of the stack:
| Terminal | Auto-install | Auto-theme | Notes |
|---|---|---|---|
| Ghostty | ✅ | ✅ | Recommended. Built-in themes; reload with Cmd+Shift+R. |
| WezTerm | ✅ | ✅ | Built-in color schemes; live reload. |
| kitty | ✅ | ✅ | Bundled theme files; reloads on SIGUSR1. |
| Alacritty | ✅ | ✅ | Bundled theme files; live config reload. |
| any other (WezTerm-less) | — | — | Works fine; just won't be auto-themed. |
divvy never overwrites an existing terminal config — it only writes a starter config when none exists, and
divvy-themerewrites just the theme line/file.
./install.sh --terminals "ghostty wezterm kitty alacritty"Icons in yazi and the status line need a Nerd Font. Install one yourself (divvy's terminal
configs already point to JetBrainsMono Nerd Font):
# macOS
brew install --cask font-jetbrains-mono-nerd-font
# Linux — download + install manually
curl -fLO https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.zip
unzip JetBrainsMono.zip -d ~/.local/share/fonts && fc-cache -fThen select JetBrainsMono Nerd Font in your terminal's font settings. Without it, icons show as boxes (everything else still works).
The right pane runs any command you pass with -a, so you can use whichever agent you
prefer (and pay for). Suggested ones:
| Agent | -a |
Install |
|---|---|---|
| Claude Code | claude |
npm i -g @anthropic-ai/claude-code · curl -fsSL https://claude.ai/install.sh | sh |
| OpenAI Codex | codex |
brew install --cask codex · npm i -g @openai/codex |
| opencode | opencode |
brew install opencode · npm i -g opencode-ai |
| aider | aider |
brew install aider · pipx install aider-chat |
| goose | goose |
brew install block-goose-cli |
| Antigravity | agy |
curl -fsSL https://antigravity.google/cli/install.sh | sh |
divvy -a codex # OpenAI Codex
divvy -a agy # Antigravity
divvy -a my-agent # any command of yoursIf the command isn't installed, divvy warns you and the pane shows the error (it doesn't break the rest).
Press Alt+g anywhere in divvy to pop open keifu
— a git commit-graph TUI — in a floating pane, like a modal you open to consult history and
then dismiss. It runs in the repo you launched divvy from, so you see that project's tree
without leaving your editor. Quit keifu with q or Esc and the floating pane closes.
keifu is optional (the installer asks; on by default). If it isn't installed, Alt+g shows
a short note on how to get it. Install it any time:
brew install trasta298/tap/keifu # macOS
cargo install keifu # any platform
./install.sh --keifu # or re-run the installer (fetches a prebuilt binary)keifu draws the graph with Unicode (no image protocol), so it works in the floating pane in any terminal. It's a viewer — it isn't tied to
divvy-theme; branch colors are keifu's own. Tip: while it's open, zellij'sAlt+fhides/shows floating panes without closing keifu.
| Action | Key |
|---|---|
| Jump to a specific pane | Alt + 1 files · 2 editor · 3 agent · 4 terminal (recommended) |
| Git graph modal | Alt + g — opens keifu floating; q/Esc closes it |
| Zen / maximize focused pane | Alt + z — fullscreen the focused pane, hide the rest; Alt + z again restores |
| Move between panes | Alt + arrows · Alt + h/j/k/l |
| Fullscreen the pane | Ctrl p → f |
| New tab | Ctrl t → n · switch: Ctrl t → arrows |
| Scroll mode (see old output) | Ctrl s (exit with Esc) |
| Resize pane | Ctrl n → arrows |
| Quit | Ctrl q |
In yazi (left pane): ↑/↓ navigate, → enter, ← go up, Enter open in the editor.
| Script | Role |
|---|---|
divvy |
Reads the flags → generates .runtime/layout.kdl → launches zellij |
divvy-edit |
Runs the center editor |
divvy-open |
What yazi calls on Enter (sends the file to the editor) |
divvy-theme |
Changes the theme across all tools |
divvy-git |
Launches keifu (the Alt+g git graph modal); tells you how to install it if missing |
yazi → editor integration:
- nvim: starts as a server (
--listen); yazi sends files over a socket → they open as buffers, live. The smoothest one. Includes LSP (completion, go-to-definition, diagnostics via mason) + treesitter + theme. - helix / micro / vim: no socket; yazi sends the path over a FIFO. You open a file and edit it; to open another one from yazi, close the current one first. (helix ships with built-in LSP.)
Only text/code goes to the editor; images, PDFs, and video open with the system app. Sockets/FIFOs are named per zellij session, so you can run several divvy windows at once without them stepping on each other.
The file explorer shows each file's git status as a colored letter next to its name (via the
official git.yazi plugin, bundled in
yazi/plugins/):
| Mark | Meaning | Color |
|---|---|---|
? |
new / untracked | green |
A |
added (staged) | green |
M |
modified | yellow |
D |
deleted | red |
U |
updated / conflict | red |
Directories bubble up the status of what's inside them. Tweak the colors/letters in
yazi/theme.toml ([git] section).
| Action | Key |
|---|---|
| Next / previous tab | Tab / Shift+Tab |
| Close tab | :q or <leader>x (leader = space) — does not close nvim |
| Save and close tab | :wq |
| Quit nvim entirely | :qa (or :q! to force) |
| Go to definition / references | gd / gr |
| Documentation | K |
| Rename / code action | <leader>rn / <leader>ca |
| Jump between errors | [d / ]d |
| Completion | Ctrl-space (accept with Ctrl-y) |
| Next / previous git change | ]h / [h |
| Preview a change | <leader>hp |
| Revert a change (hunk) | <leader>hr |
| Revert all changes in the file | <leader>hR |
| Who changed this line (blame) | <leader>hb |
Git changes in the editor: modified/added/deleted lines are marked in the gutter (via gitsigns in nvim), so you can review a diff at a glance and revert a hunk with
<leader>hr— handy before committing. helix and micro show the diff gutter too (built-in), and vim gets it via a small nativesignscript (no plugins). Reverting a hunk is nvim-only.
Configs (all inside the project, they don't touch your ~/.config):
.config/nvim/init.lua · helix/config.toml · micro/settings.json · vim/vimrc ·
yazi/{yazi.toml,init.lua,theme.toml}.
| OS | Status |
|---|---|
| macOS | ✅ |
| Linux | ✅ (installer and symlink path change; the script adapts itself) |
| Windows |
divvy: command not found(or a tool "installed but not on PATH"):~/.local/binisn't on yourPATHfor this shell yet. The installer adds it to your shell rc, so it works in new terminals. To enable it in the current one, runsource ~/.zshrc(or~/.bashrc), or add this line to your shell config by hand:export PATH="$HOME/.local/bin:$PATH"
- Weird colors: your terminal lacks true color → use Ghostty/WezTerm/Alacritty.
Alt+arrows don't move focus: in Apple Terminal enable "Use Option as Meta"; in Ghostty it's already on (macos-option-as-alt).Ctrl+1..4doesn't jump panes: most terminals don't sendCtrl+number uniquely (Ctrl+2=NUL,Ctrl+3=ESC…). UseAlt+1..4, which is reliable.- A file opened from yazi doesn't show up / yazi "hangs" on Enter: this was a modal nvim
prompt (swap file or "Press ENTER") freezing the server. It's mitigated now; if it comes
back, run
divvy-cleanand relaunchdivvy. - Icons show as boxes: install a Nerd Font and select it in your terminal.
- The agent pane shows an error: that agent isn't installed (
opencodeisn't there by default). - micro:
Ctrl+S/Ctrl+Qdon't work (zellij captures them: search and quit). Before editing, pressCtrl+g(locks zellij → all keys go to micro), save/close normally, thenCtrl+gagain to navigate.
See CHANGELOG.md (Español) for the version history.
Thanks to everyone who helps make divvy better!
Want to help? See CONTRIBUTING.md.
MIT © 2026 Jair Yara
