A Zsh framework as nice as a cool summer breeze
Zsh is a wonderful shell, but out-of-the-box it needs a boost. That's where Zephyr comes in.
Zephyr combines some of the best parts from Prezto and other Zsh frameworks, removes bloat and dependencies, and prioritizes speed and simplicity.
Zephyr can be thought of as a fast, lightweight set of independent Zsh features, and is designed to be one of the first things you load to build your ideal Zsh config.
Combine Zephyr with a plugin manager and some awesome plugins and you'll have a powerful Zsh setup that rivals anything out there.
Zephyr allows you to take an a la carte approach to building your ideal Zsh configuration. Other Zsh frameworks are meant to be used wholesale and are not truly modular. Zephyr is different - each of its plugins works independently, and are designed to pair well with a modern Zsh plugin manager like antidote. Zephyr can be used in whole or in part, and plays nice with other popular plugins. Zephyr brings together core Zsh functionality that typically is not available elsewhere as standalone plugins - while favoring a build-your-own composable Zsh config.
Zephyr comes with an (optional) Starship prompt config.
If your plugin manager supports using sub-plugins, you can load Zephyr that way as well.
Antidote is one such plugin manager. You can load only the parts of Zephyr you need like so:
# .zsh_plugins.txt # pick only the plugins you want and remove the rest mattmc3/zephyr path:plugins/color mattmc3/zephyr path:plugins/completion mattmc3/zephyr path:plugins/compstyle mattmc3/zephyr path:plugins/confd mattmc3/zephyr path:plugins/directory mattmc3/zephyr path:plugins/editor mattmc3/zephyr path:plugins/environment mattmc3/zephyr path:plugins/history mattmc3/zephyr path:plugins/homebrew mattmc3/zephyr path:plugins/macos mattmc3/zephyr path:plugins/prompt mattmc3/zephyr path:plugins/utility mattmc3/zephyr path:plugins/zfunctions
Add the following snippet to your .zshrc
:
# Clone Zephyr. [[ -d ${ZDOTDIR:-~}/.zephyr ]] || git clone --depth=1 https://github.com/mattmc3/zephyr ${ZDOTDIR:-~}/.zephyr # Use zstyle to specify which plugins you want. Order matters. zephyr_plugins=( zfunctions directory editor history ) zstyle ':zephyr:load' plugins $zephyr_plugins # Source Zephyr. source ${ZDOTDIR:-~}/.zephyr/zephyr.zsh
- color - Make terminal things more colorful
- completion - Load and initialize the built-in zsh completion system
- compstyle - Load and initialize a completion style system
- confd - Source a Fish-like
conf.d
directory - directory - Set options and aliases related to the dirstack and filesystem
- editor - Override and fill in the gaps of the default keybinds
- environment - Define common environment variables
- history - Load and initialize the built-in zsh history system
- homebrew - Functionality for users of Homebrew
- macos - Functionality for macOS users
- prompt - Load and initialize the built-in zsh prompt system
- utility - Common shell utilities, aimed at making cross platform work less painful
- zfunctions - Lazy load a Fish-like functions directory
Zephyr uses Zsh's zstyles to let you easily customize your config. Unlike environment variables which pollute your environment, zstyles make it easy to handle more robust configuration.
Reminder: zstyle
settings need to be set prior to loading Zepyr.
The customizations are detailed below.
To selectively load plugins when sourcing zephyr.plugin.zsh directly, use the zstyle ':zephyr:load' plugins ...
array. Order matters.
zstyle ':zephyr:load' plugins \ environment \ homebrew \ color \ compstyle \ completion \ directory \ editor \ helper \ history \ prompt \ utility \ zfunctions \ macos \ confd
To use your home directory instead of using XDG Base Directories:
zstyle ':zephyr:plugin:*' use-xdg-basedirs no
Change the confd directory used for conf.d:
':zephyr:plugin:confd' directory ${HOME:-$ZDOTDIR}/.zshrc.d
Disable editor features with 'no'. Features are enabled by default:
zstyle ':zephyr:plugin:editor' 'prepend-sudo' yes zstyle ':zephyr:plugin:editor' 'glob-alias' no zstyle ':zephyr:plugin:editor' 'magic-enter' no zstyle ':zephyr:plugin:editor' 'pound-toggle' yes zstyle ':zephyr:plugin:editor' 'symmetric-ctrl-z' no
Change the zfunctions directory:
':zephyr:plugin:zfunctions' directory ${HOME:-$ZDOTDIR}/.zfuncs
Q: Why don't you include programming language plugins (eg: Python, Ruby)?
A: These kinds of plugins can be very opinionated, and are in need of lots of upkeep from maintainers that use those languages. Language plugins are already available via Oh-My-Zsh and Prezto, and can always be installed with a plugin manager that supports subplugins.
Q: Why don't you also include popular plugins the way Prezto does (eg: zsh-autosuggestions, zsh-history-substring-search)?
A: These kinds of utilities are already available as standalone plugins. Zephyr aims to include only core Zsh functionality that you can't already easily get via a plugin manager, with a few exceptions for convenience. I have experimented with including submodules similar to Prezto, but was not happy with the result. Simpler is better.
Zephyr is a derivative work of the following great projects: