A lightweight, framework-free, cross-distribution ZSH experience inspired by native Linux distributions.
The ZSH prompt every Linux distribution should have shipped.
Distributions · Features · Quick Start · Configuration · Layouts · FAQ · License
The prompt automatically adopts the color of your distribution while keeping one consistent layout. The ◉ separator is DistroZSH's identity — it is not Kali's ㉿.
All screenshots are generated from the real prompt engine by
scripts/preview.sh.
Unknown distributions automatically fall back to the neutral generic theme, and derivatives inherit the closest registered parent theme.
DistroZSH is not another Oh My Zsh. There is no framework, no plugin manager, no external prompt engine, and no Nerd Font requirement. Everything is implemented in native ZSH, and the only plugins loaded are the standalone plugins that Linux distributions already package.
| Feature | DistroZSH | Oh My Zsh | Starship | Powerlevel10k | Prezto | Zinit |
|---|---|---|---|---|---|---|
| Framework-free | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Native ZSH prompt engine | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ |
| Auto theme per distribution | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Uses distribution plugin packages | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| No Nerd Font requirement | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| Installs via native package manager | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Fully reversible installer | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Startup time | ms | slow | slow | fast | slow | slow |
- Automatic distribution detection — reads
/etc/os-release(ID,ID_LIKE,NAME,PRETTY_NAME) at load time - Per-distribution color themes — Fedora blue, Ubuntu orange, Debian red, Kali green, Arch blue, openSUSE green, and 15 more
- Four prompt layouts —
kali(default two-line box),oneline,minimal,compact - User configuration without touching code — everything in
~/.config/distrozsh/config.zsh - Custom themes — drop a file in
~/.config/distrozsh/themes/and you're done - Excellent completion — case-insensitive, colored, menu selection, cached
- Smart history — deduplication, ignore-space, verification, full-history alias
- Good key bindings — Emacs mode, word jumps,
Ctrl+Pto cycle layouts - Fast startup — no subprocesses in the prompt, everything built at load time
- Works with any standard monospace font — Noto Sans Mono, JetBrains Mono, DejaVu Sans Mono, Fira Code
No battery indicator, no clocks, no CPU/RAM graphs, no Docker/Kubernetes widgets, no Powerline, no Nerd Fonts.
zsh5.9+- One of:
dnf,apt,pacman, orzypper
git clone https://github.com/johnvexcoder/DistroZSH.git
cd DistroZSH
./install.shThe installer will:
- Detect your distribution and package manager.
- Install
zsh,zsh-autosuggestionsandzsh-syntax-highlightingfrom your native repositories. - Back up any existing
~/.zshrc. - Install the engine to
~/.config/distrozsh/. - Ask whether to make
zshyour default shell.
./install.sh --shell # install and change the default shell (no prompt)
./install.sh --no-shell # install without changing the default shell
./install.sh --help # full helpStart a new terminal (or run exec zsh) when the installer finishes.
Full guide with per-distribution notes: docs/INSTALLATION.md
Everything user-facing lives in ~/.config/distrozsh/config.zsh:
DISTROZSH_THEME=auto # auto, fedora, ubuntu, kali, arch, ... generic, or custom
DISTROZSH_LAYOUT=kali # kali, oneline, minimal, compact
DISTROZSH_NEWLINE_BEFORE_PROMPT=no
DISTROZSH_SET_TITLE=yes| Setting | Default | Description |
|---|---|---|
DISTROZSH_THEME |
auto |
auto detects from the running distribution; any theme name forces it |
DISTROZSH_LAYOUT |
kali |
kali, oneline, minimal, compact |
DISTROZSH_NEWLINE_BEFORE_PROMPT |
no |
print a blank line before each prompt |
DISTROZSH_SET_TITLE |
yes |
set the terminal window title to user@host: dir |
DISTROZSH_HISTFILE |
~/.zsh_history |
history database location |
See docs/THEMES.md and docs/LAYOUTS.md for the full catalog.
| Layout | Prompt Style |
|---|---|
| kali (default) | ┌──(user◉distro)-[~/path] └─$ |
| oneline | user◉distro:~/path$ |
| compact | user@host:~/path$ |
| minimal | ~/path$ |
Cycle between layouts at any time with Ctrl+P.
./uninstall.shRestores your previous ~/.zshrc, restores your previous default shell, saves your config.zsh, and removes the engine. It never uninstalls zsh or the plugins.
cp themes/_template.zsh ~/.config/distrozsh/themes/mine.zsh
# edit the seven colors, then:
echo 'DISTROZSH_THEME=mine' >> ~/.config/distrozsh/config.zshThemes only define colors — never structure. See themes/_template.zsh.
Copy a file from layouts/ into ~/.config/distrozsh/layouts/ and define the _distrozsh_prompt function.
DistroZSH/
├── .zshrc # thin launcher (do not edit)
├── init.zsh # engine bootstrap
├── config.zsh # user configuration template
├── install.sh # installer (dnf / apt / pacman / zypper)
├── uninstall.sh # uninstaller (fully reversible)
├── zsh/ # engine modules (one concern per file)
├── themes/ # per-distribution color palettes
├── layouts/ # prompt structure definitions
├── scripts/ # distro-detect.sh, preview.sh, screenshot tooling
├── screenshots/ # generated preview matrix (PNG + ANSI)
├── img/ # distribution logos (official + community)
├── docs/ # installation, themes, layouts, FAQ
└── .github/ # workflows, issue + PR templates
See ROADMAP.md.
Contributions are welcome. Please read CONTRIBUTING.md and our Code of Conduct.
Found a problem? See SECURITY.md.
MIT © 2026 J0hn Vex Coder
J0hn Vex Coder github.com/johnvexcoder

































