<literal><linkxlink:href="https://ohmyz.sh/">oh-my-zsh</link></literal> is a framework to manage your <linkxlink:href="https://www.zsh.org/">ZSH</link> configuration including completion scripts for several CLI tools or custom prompt themes.
The module uses the <literal>oh-my-zsh</literal> package with all available features. The initial setup using Nix expressions is fairly similar to the configuration format of <literal>oh-my-zsh</literal>.
For a detailed explanation of these arguments please refer to the <linkxlink:href="https://github.com/robbyrussell/oh-my-zsh/wiki"><literal>oh-my-zsh</literal> docs</link>.
Sometimes third-party or custom scripts such as a modified theme may be needed. <literal>oh-my-zsh</literal> provides the <linkxlink:href="https://github.com/robbyrussell/oh-my-zsh/wiki/Customization#overriding-internals"><literal>ZSH_CUSTOM</literal></link> environment variable for this which points to a directory with additional scripts.
There are several extensions for <literal>oh-my-zsh</literal> packaged in <literal>nixpkgs</literal>. One of them is <linkxlink:href="https://github.com/spwhitt/nix-zsh-completions">nix-zsh-completions</link> which bundles completion scripts and a plugin for <literal>oh-my-zsh</literal>.
Internally a single store path will be created using <literal>buildEnv</literal>. Please refer to the docs of <linkxlink:href="https://nixos.org/nixpkgs/manual/#sec-building-environment"><literal>buildEnv</literal></link> for further reference.
<emphasis>Please keep in mind that this is not compatible with <literal>programs.zsh.ohMyZsh.custom</literal> as it requires an immutable store path while <literal>custom</literal> shall remain mutable! An evaluation failure will be thrown if both <literal>custom</literal> and <literal>customPkgs</literal> are set.</emphasis>
Completion scripts are supposed to be stored at <literal>$out/share/zsh/site-functions</literal>. This directory is part of the <literal><linkxlink:href="http://zsh.sourceforge.net/Doc/Release/Functions.html">fpath</link></literal> and the package should be compatible with pure <literal>ZSH</literal> setups. The module will automatically link the contents of <literal>site-functions</literal> to completions directory in the proper store path.
The <literal>plugins</literal> directory needs the structure <literal>pluginname/pluginname.plugin.zsh</literal> as structured in the <linkxlink:href="https://github.com/robbyrussell/oh-my-zsh/tree/91b771914bc7c43dd7c7a43b586c5de2c225ceb7/plugins">upstream repo.</link>