Material Design icons for ls. One command installs a Nerd Font, eza, and a Material icon theme — 257 file extensions + 216 file/folder names mapped to Material Design glyphs — and aliases ls/ll/la/lt in your zsh.
src main.py app.ts docker-compose.yml
tests index.html data.json README.md
curl (recommended):
curl -fsSL https://raw.githubusercontent.com/deepakmarathe/material-eza/main/install.sh | bashHomebrew:
brew tap deepakmarathe/material-eza https://github.com/deepakmarathe/material-eza
brew install --HEAD deepakmarathe/material-eza/material-eza
material-ezanpm:
npx material-ezaThen set your terminal font to a Nerd Font (e.g. JetBrainsMono Nerd Font — the installer installs it) and open a new terminal.
install.sh [--no-font] [--no-aliases] [--uninstall]
| Flag | Effect |
|---|---|
--no-font |
skip the Nerd Font step (you already use one) |
--no-aliases |
install the theme only; leave ~/.zshrc untouched |
--uninstall |
remove the theme + zsh block (keeps eza and fonts) |
Env overrides: MATERIAL_EZA_FONT_CASK (brew font cask), MATERIAL_EZA_ZSHRC (rc file to edit).
- Nerd Font — checks for any installed Nerd Font; installs JetBrains Mono Nerd Font if missing (brew cask on macOS,
~/.local/share/fontson Linux). - eza — installs via brew/apt/dnf/pacman/zypper/cargo if missing.
- Theme — installs
theme.ymlto~/.config/eza/theme.yml(backs up any existing one). On macOS it also symlinks~/Library/Application Support/eza/theme.yml, which is where eza actually looks by default there. - zsh — appends one marker-fenced block to
~/.zshrc(idempotent — re-running replaces it):
export EZA_CONFIG_DIR="$HOME/.config/eza"
alias ls='eza --icons=auto'
alias ll='eza -l --icons=auto --git'
alias la='eza -la --icons=auto --git'
alias lt='eza --tree --icons=auto --level=2'theme.yml is generated, never hand-edited. scripts/generate.py holds human-readable tables (py → language_python, components → puzzle, …) and resolves every name against Nerd Fonts' official glyphnames.json at build time. An unknown glyph name aborts the build, so a typo can't ship a wrong or missing icon. test/smoke.sh then runs the real eza against a fixture tree and asserts the exact codepoints rendered.
Regenerate after editing the tables:
python3 scripts/generate.py && test/smoke.shWhy don't I see colored VS Code–style folder icons? Terminals render font glyphs, one color per cell — multi-color SVG icons like VS Code's are technically impossible in (almost all) terminals. This is the closest a terminal gets: the Material glyph shapes, tinted by eza's color scheme.
Icons show as boxes (□)? Your terminal font isn't a Nerd Font. Set it in your terminal profile settings.
Why don't icons appear when piping (ls | grep …)? eza disables the theme along with colors for non-TTY output — same behavior as ls colors.
A filetype I use is missing. Unmapped types fall back to eza's built-in icons, so nothing is ever blank. PRs welcome: add a line to the table in scripts/generate.py, regenerate, done.
bash/fish? The theme itself works in any shell (macOS symlink covers the default path; on Linux ~/.config/eza is the default). Only the alias block is zsh-specific — add equivalent aliases to your shell's rc.
MIT. Glyphs are Material Design Icons (Apache-2.0) via Nerd Fonts (MIT); this repo ships only codepoint mappings, not fonts.