The repo keeps one maintained static preview
Yazelix is a workspace-focused terminal environment built around Yazi, Zellij, and Helix, with first-class Neovim support too
The supported product in this branch is the trimmed v15 Yazelix
Yazelix now uses the managed yazelix.toml config surface, with the normal flake surface provided by the packaged yazelix runtime plus the top-level Home Manager module, while repo work uses the flake maintainer shell defined in maintainer_shell.nix
- A narrower workspace product instead of a package-and-environment manager glued onto one
- One supported line again:
v15is live,v14is historical and unsupported - First-party Ghostty on Linux and macOS, with WezTerm, Kitty, Alacritty, and Foot still supported when you provide them on
PATH - Fast popup and popup-menu panes with explicit managed identity
- Three built-in sidebar-aware workspace shapes, managed sidebar/editor routing, and a fixed packaged runtime toolset
- No runtime-local
devenv, noyazelix_packs.toml, noyazelix packsoryzx packs, no automatic config migrations, and noyzx refresh
v15.0 is the trimmed non-Rust reboot: 15.5% fewer code lines than the historical peak, a much clearer product boundary, a slimmer runtime and command surface, notably faster popup/menu panes, and room for selective Rust in v15.x where it clearly pays for itself, while v16 remains the Rust-forward release target
yzx launch: Open Yazelix in a managed terminal windowyzx enter: Start Yazelix in the current terminalyzx env: Enter the Yazelix tool environment without the UIyzx popup: CLI entrypoint for the managed popup pane, usuallylazygit; most users trigger the same toggle withAlt+t, and closing it reruns the Yazi sidebar refresh path so git state stays currentyzx menu --popup: CLI entrypoint for the popup command palette; most users trigger the same toggle withAlt+Shift+Myzx update upstream: Upgrade the Yazelix package that owns the current runtime in the default Nix profileyzx update home_manager: Refresh the owning Home Manager flake input, then print thehome-manager switchstep
- Zellij orchestrates the workspace, with Yazi as a managed sidebar and your chosen editor in the managed
editorpane - Toggle focus between the sidebar and editor with
Ctrl+y, and toggle the sidebar itself withAlt+y - Switch between the built-in sidebar-aware workspace shapes and other workspace layouts; see Layouts
- When you open something from the sidebar with Helix or Neovim, Yazelix targets the managed
editorpane through the pane orchestrator instead of relying on pane scanning heuristics yzx revealis the stable editor-integration surface for jumping the current file back into the managed sidebarAlt+ttoggles the managed popup pane and refreshes the Yazi sidebar git view when that popup closes, whileAlt+Shift+Mtoggles the popup command menu on the same fast floating-pane path
Yazelix is a reproducible terminal IDE that integrates Yazi + Zellij + Helix, delivering a consistent, fast "superterminal" locally or over SSH with zero manual setup through smart pane/layout orchestration, sidebar reveal/open flows, a curated built-in toolset, sane defaults, Helix/Zellij conflict cleanup, auto-configured tools like starship, zoxide, and carapace, and useful bundled tools such as lazygit
It already ships with Zellij and Yazi plugins, some maintained in this repo, including the pane orchestrator and sidebar-focused Yazi flows
It has features like reveal in Yazi from Helix or Neovim, opening files from Yazi in your configured editor, and switching workspace layouts without leaving the workspace
Supports top terminals and popular shells, with Ghostty as the first-party bundled terminal, WezTerm, Kitty, Alacritty, and Foot as supported alternatives when present on the host PATH, and everything configured through yazelix.toml while the packaged runtime provides the fixed Yazelix toolset
Get everything running in less than 10 minutes with no extra dependencies beyond Nix
Install once, get the same environment everywhere
Want the high-level product map? See Architecture Map; want the current runtime boundary? See v15 Trimmed Runtime Contract
See Yazelix Collection for a full list of all projects, tools, and plugins Yazelix integrates, including links to each project and their homepages
v15.1 hardens install ownership, popup env, and Home Manager packaging
- Stopped packaged and one-off runtime entrypoints from rewriting host shell dotfiles, kept runtime setup inside
~/.local/share/yazelix, and narrowedyzx statusback to runtime/config inspection with clearer stale-shell recovery guidance. - Added the explicit
editortoken forzellij.popup_program, propagated the canonical runtime env into popup flows, and setVISUALalongsideEDITORso popup editors and TUI tools reuse the configured Yazelix editor contract. - Narrowed the packaged public
bin/surface toyzx, moved bundled runtime tools underlibexec/, and kept packaged and Home Manager installs away from binary-collision traps while still shipping the full runtime toolset. - Hardened Linux Home Manager and desktop-launch reliability by passing the runtime-owned
nixGLwrapper through the module build, improving Ghostty launch diagnostics, and documenting a minimal flake example plus clearer update-owner recovery. - Replaced the remaining popup and workflow examples that still referenced Claude with Codex examples.
For exact tagged release notes, see CHANGELOG or run yzx whats_new after installing that release
For the longer project story, see Version History
Yazelix v14 is the historical Yazelix Classic snapshot: the broad, heavily integrated, devenv-era version of the project, with yazelix packs, yzx packs, dynamic runtime management, richer terminal breadth, Home Manager and manual install support, and the widest power-user command/config surface
Classic is not the active product line in this branch, and the v14 tag remains available only as the final historical snapshot for users who specifically need that broader shape; it is not a supported line anymore
v15.0 is the trimmed non-Rust reboot, not a broad package-and-environment manager: it drops the old runtime-local devenv layer, trims the command and config surface, and keeps a clearer core around fast workspace entry, layouts, managed workspace actions, explicit update ownership, and the popup/menu-centered workspace UX
On the current v15 branch, the trimmed contract is already narrower: no yazelix_packs.toml, no runtime-local devenv, no launch-profile reuse semantics, no automatic config migrations, a fixed packaged runtime toolset, built-in Ghostty on Linux and macOS, and explicit update owners through yzx update upstream or yzx update home_manager
The important split is this: Yazelix Classic was both a terminal workspace and a runtime/package-environment manager, while v15 is the narrower workspace product because dynamic runtime management was not a good long-term fit for Yazelix scope
For the current trimmed branch contract, see docs/specs/v15_trimmed_runtime_contract.md
- Nixless (System) Mode β Experimental work lives on the
nixless-system-modebranch and might never land inmain
- Platform: Works on Linux and macOS
- Terminal: Ghostty is built into Yazelix on Linux and macOS, while WezTerm, Kitty, and Alacritty remain supported PATH-provided alternatives and Foot remains a Linux-only PATH-provided alternative
- Editor: Any editor works, with Helix and Neovim getting first-class support (reveal in sidebar, open buffer in a running instance, managed editor-pane targeting) and configuration through
[editor].commandinyazelix.toml - Shell: Bash, Fish, Zsh, or Nushell - use whichever you prefer
nix profile add github:luccahuguet/yazelix#yazelix
yzx launchOne-off use without installing also works:
nix run github:luccahuguet/yazelix#yazelix -- launchPrefer declarative installs? Use the top-level Home Manager module in home_manager/README.md
π Complete Installation Guide β - Detailed step-by-step installation instructions
Choose one update owner for each Yazelix install, and do not mix both update paths for the same installed runtime
- Profile installs: use
yzx update upstream - Home Manager installs: use
yzx update home_manager
yzx update upstream prints and runs:
nix profile upgrade --refresh yazelixyzx update home_manager runs in your current flake directory and refreshes the yazelix input with:
nix flake update yazelixRun it only from the Home Manager flake that owns this install
If your Home Manager flake uses a different Yazelix input name, run nix flake update <your-input-name> yourself instead
Then yzx update home_manager prints home-manager switch for you to run yourself
Updating replaces the installed runtime that future launches use, while already-open Yazelix windows keep running their current live runtime until you explicitly relaunch them or run yzx restart; Yazelix does not silently hot-swap live sessions in place
Helix supports optional yzx reveal integration through Alt+r, and Yazelix now reserves Alt+r globally: in the managed editor it forwards Alt+r into Helix for reveal, outside the editor it falls back to the editor/sidebar focus flow, and Ctrl+y and Alt+y remain the dedicated workspace navigation keys
π Complete Helix Keybindings Guide β - Recommended keybindings for enhanced editing experience
For Neovim-Yazi integration, bind yzx reveal to any editor-local shortcut that does not conflict with your terminal or Zellij bindings; a good default is <M-r>:
This assumes yzx is on your editor PATH
-- Yazelix sidebar integration - reveal current file in Yazi sidebar
vim.keymap.set('n', '<M-r>', function()
local buffer_path = vim.fn.expand('%:p')
if buffer_path ~= '' then
vim.fn.system({ 'yzx', 'reveal', buffer_path })
end
end, { desc = 'Reveal in Yazi sidebar' })π Complete Neovim Keybindings Guide β - Setup instructions and workflow tips
Check installed tool versions:
yzx status --versionsWhen opening files from Yazi, Yazelix will:
- Ask the Yazelix pane orchestrator plugin for the managed
editorpane in the current tab - Reuse that pane directly when it exists, instead of scanning nearby panes or depending on stack position
- Create a new pane titled
editorwhen no managed editor pane exists yet - Use the same managed-pane flow for both Helix and Neovim; configure the editor via
[editor].commandinyazelix.toml
Yazelix respects XDG directories for config, data, state, and cache; see POSIX/XDG Paths for details: ./docs/posix_xdg.md
Yazelix shines over SSH: the TUI stack (Zellij, Yazi, Helix) runs cleanly without any GUI, giving you a fully configured, consistent βsuperterminalβ on barebones hosts such as an AWS EC2 instance, while the Yazelix environment delivers the same tools, keybindings, and layouts you use locally, minimizing drift on ephemeral servers
Yazelix uses a layered configuration system that safely merges your personal settings with Yazelix defaults:
- Core settings: Edit
~/.config/yazelix/user_configs/yazelix.tomlfor shell, editor, terminal, and package preferences - Yazi customization: Use the built-in
[yazi]settings inyazelix.tomlfor things like plugins, theme, sorting, and binary overrides, and use~/.config/yazelix/user_configs/yazi/for deeper merged overrides such asinit.lua,keymap.toml, oryazi.tomladditions (see Yazi Configuration) - Zellij customization: Use the built-in
[zellij]settings inyazelix.tomlfor Yazelix-owned Zellij knobs, and use~/.config/yazelix/user_configs/zellij/config.kdlfor your deeper managed Zellij overrides (see Zellij Configuration) - Your configs persist across Yazelix updates without git conflicts
- Intelligent merging: Generated Yazi and Zellij runtime configs are rebuilt from Yazelix defaults plus your managed overrides instead of forcing you to edit tracked runtime files
π Complete Customization Guide β - Detailed instructions for customizing every tool
π Editor Configuration Guide β - Complete guide for configuring editors
Quick setup:
- Default (recommended):
[editor] command = ""
- Neovim:
[editor] command = "nvim"
- System Helix:
[editor] command = "hx" [helix] runtime_path = "/path/to/runtime" # Only when your Helix runtime is outside normal discovery paths
- Other editors:
[editor] command = "vim"
To use Yazelix tools without starting the full interface (no sidebar, no Zellij), use:
yzx envThis loads the curated Yazelix tool surface into your current shell, with Yazelix env vars set and clean messaging, and automatically launches the shell configured in your yazelix.toml; if you prefer the legacy behavior, run yzx env --no-shell to stay in your current shell
Internal runtime helpers stay private under libexec/ instead of leaking into your interactive PATH, so host-distributed apps launched from that shell do not accidentally inherit Yazelix-owned core userland tools ahead of the system PATH
If you want the Yazelix tool PATH without switching into your configured shell, use:
yzx env --no-shellWhat Gets Installed: See the full catalog of tools and integrations in the Yazelix Collection: docs/yazelix_collection.md
- Essential tools: Yazi (file manager), Zellij (terminal multiplexer), Helix (editor), shells (bash/nushell, plus your preferred shell), fzf, zoxide, Starship
- Bundled helpers: lazygit (or
lg), mise, carapace, macchina, and the fixed helper tooling behind the trimmed v15 core - Optional history: atuin remains an optional initializer when the binary is available, but the old
shell.enable_atuinconfig knob is gone - Yazi preview helpers:
p7zip,jq,poppler,fd,ripgrepare part of the fixed runtime surface - Environment setup: Proper paths, variables, and shell configurations
Customize Your Installation:
If you followed step 4 in the installation guide, you already have your ~/.config/yazelix/user_configs/yazelix.toml config file ready, you can modify it anytime and restart Yazelix to apply changes, and you can see yazelix_default.toml for all available options and their descriptions
Terminal Emulator Selection:
- Ghostty (default preference): Modern, fast terminal written in Zig with great performance
- WezTerm (recommended fallback): Best image preview support in Yazi
- Kitty: Fast, feature-rich, GPU-accelerated terminal
- Alacritty: Fast, GPU-accelerated terminal written in Rust
- Foot: Wayland-native terminal (Linux-only)
- Auto-detection: Fallback order follows your configured terminal list
- Configure your preference in
yazelix.tomlwithterminals = ["ghostty", "wezterm", ...](first item is primary) - v15 terminal contract: Ghostty is first-party and bundled by Yazelix, while other configured terminals are still supported when you provide them on the host
PATH
See the full Customization Guide here.
Yazelix includes optional Home Manager support for declarative configuration management through the top-level flake's homeManagerModules.default output; see home_manager/README.md for setup instructions
- If you hate having fun
Yazelix auto-generates initialization scripts for Starship, Zoxide, Mise, and Carapace for your configured shell set during environment setup and refresh; see docs/initializer_scripts.md for details
π§ Complete CLI Reference: yzx help - Shell-agnostic command suite
π Complete yzx CLI Documentation β - Comprehensive command reference and usage guide
Quick Commands:
yzx launch- Launch Yazelix in new terminal (current directory by default)yzx enter- Start Yazelix in current terminalyzx launch --path DIR- Launch in specific directoryyzx launch --home- Launch in home directoryyzx launch --terminal ghostty- Force a particular terminal for this launchyzx launch --verbose- Print detailed launch diagnosticsyzx env [--no-shell]- Load Yazelix tools without UI (--no-shellkeeps your current shell)yzx run <command> [args...]- Run a single command inside the Yazelix environmentyzx update- Show the supported update-owner pathsyzx update upstream- Upgrade the active default-profile Yazelix packageyzx update home_manager- Refresh the current Home Manager flake input, then printhome-manager switchyzx popup- Toggle the managed popup program, usuallylazygit, and refresh the Yazi sidebar git state when it closesyzx config [--path]- Show the active config or print its resolved pathyzx edit config- Open the main managed Yazelix config file in your editoryzx restart- Restart Yazelix in a fresh windowyzx doctor [--verbose] [--fix]- Health checks and diagnosticsyzx dev profile [--cold] [--clear-cache]- Profile startup phases and write a structured report under~/.local/share/yazelix/profiles/startup/yzx status [--versions]- Show current Yazelix status and optional tool versions
π Quick diagnosis: yzx doctor - Automated health checks and fixes
π Complete Troubleshooting Guide β - Comprehensive solutions for common issues
Want to use Yazelix tools (Nushell, zoxide, starship, lazygit) inside your editor? Zed, VS Code, and Cursor all work seamlessly with yzx env
Quick Setup:
- Open your editor's integrated terminal
- Run
yzx envto load all Yazelix tools without the UI in your configured shell - Enjoy the full Yazelix environment in place
Need to stay in your editor's existing shell? Run
yzx env --no-shellinstead
For more advanced integration options, see our Zed + VS Code terminal integration guide
Yazelix includes transparency settings and theme configurations for a beautiful terminal experience, with terminal emulator configs that include transparency settings you can comment or uncomment and Helix themes that include transparent options; see docs/styling.md for customization details
For Helix themes, you can use transparent themes by editing your Helix config:
# theme = "base16_transparent"
theme = "term16_dark" # Recommended transparent themeYazelix includes adaptive layouts that organize your workspace; use three_column for Claude Code and AI tools, and see docs/layouts.md for details and customization
Yazelix uses Zellij as the workspace layer, so the most important bindings are global workspace bindings rather than editor-local shortcuts; run yzx keys inside Yazelix for the live summary, and see docs/keybindings.md for the full reference
| Keybinding | What It Does |
|---|---|
Ctrl+y |
Toggle focus between the managed editor and Yazi sidebar |
Alt+y |
Open or close the sidebar |
Alt+r |
Smart reveal/focus key; forwards into the editor when appropriate |
Alt+[ / Alt+] |
Switch between layouts |
Alt+m |
Open a new terminal in the current tab workspace root |
Alt+t |
Toggle the configured managed popup program, usually lazygit, and refresh the Yazi sidebar git state when it closes |
Alt+Shift+M |
Open the yzx command palette popup |
Alt+1..9 |
Jump directly to tabs 1 through 9 |
Alt+w / Alt+q |
Move to the next or previous tab |
Alt+Shift+H / Alt+Shift+L |
Move the current tab left or right |
Alt+Shift+F |
Toggle pane fullscreen |
Yazi still has its own keymap too: press ~ inside Yazi for its built-in help, and use the most useful Yazelix-specific sidebar flows such as Enter to open through the managed editor integration, Alt+z to pick a directory with zoxide and retarget the workspace, and Alt+p to open the selected directory in a new pane as the current tab workspace root
Helix and Neovim integration is intentionally small: use Ctrl+y and Alt+y for workspace navigation, use Alt+r / yzx reveal when you want the editor to reveal the current file in the managed Yazi sidebar, and see docs/helix_keybindings.md and docs/neovim_keybindings.md for editor-local setup details
Start by learning Zellij on its own, then optionally Yazi, and re-read this README afterwards
See contributing

