Every nested shell, and every sourced file that prepends, added the same directories again; a workstation's PATH carried each of several entries three times. typeset -U in the .zshenv block applies to every zsh.
zsh
The login shell as a module (novox/hq ADR 0176, ADR 0204, to-be 41).
- Installs the
zshpackage and makes it the operator account's login shell through theusershape. The host gives the found shell back when the module goes. - Claims the mesh's
node-login-shellseat and serves its verbexecute: one command, run as the account in a zsh login shell in the account's home. It is ended with everything it started after 20 s by default (25 s at most, below the runtime's 30 s call limit). Each stream is cut at 256 KiB and the answer says so intruncated. - Its own tool
zsh_configshows~/.zshenvand~/.zshrcas they are, with the mesh block's line count in each. - Contributes to the account's environment (ADR 0203):
EDITORandVISUAL(vim),XDG_CONFIG_HOME, and~/.local/bin,~/scripts,~/scripts/binat the start ofPATH. The holder ofnode-environment(node-env) writes them; this module writes noexportof its own.
The two blocks
Each block is the mesh's, between # BEGIN mesh zsh.<id> and # END mesh zsh.<id>. Every line
outside a block is yours, kept byte for byte, and given back when the module goes.
~/.zshenv, at the start: sources~/.config/mesh/environment.shif it is readable. Every zsh reads this file: a login, a script, andexecute.~/.zshrc, at the start: the defaults every machine shares, with the three slots other modules fill (first, the defaults,normal,last). The defaults are the terminal title, seven keybindings, the colour aliases,ll/la/l,drun,disksizeandsudo-disksize. Your lines below it run after it, so they win.
The one-off migration (ADR 0182)
The mesh removes nothing it did not make. After the first push that assigns this module, the lines
below are in the block and in your own part of ~/.zshrc. Until you delete your copies, they run
twice, which is harmless and visible. Deleting them is a person's act, once per machine.
Delete once zsh is assigned. The block or the environment now carries these:
export EDITOR=vimexport VISUAL=vimexport XDG_CONFIG_HOME=$HOME/.configexport PATH="$HOME/.local/bin:$HOME/scripts:$HOME/scripts/bin:$HOME/.dotnet:$PATH". Keep the one entry no module carries yet, asexport PATH="$HOME/.dotnet:$PATH".- The terminal title:
function set_terminal_title() { … }andprecmd_functions+=(set_terminal_title). - The seven
bindkeylines (Home twice, Ctrl+A, End twice, Ctrl+E, Del). alias drun='docker run -it --rm', and the functionsdisksize() { … }andsudo-disksize() { … }.- The
if [ -x /usr/bin/dircolors ]; then … fiblock, with its aliasesls,dir,vdir,grep,fgrepandegrep. alias ll='ls -alhF',alias la='ls -Ah'andalias l='ls -CFh'.
Delete once powerlevel10k is assigned. Its contribution in the normal slot loads the prompt:
#user_p10k_cache_file="${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${USER}.zsh", and theif [[ -r "$user_p10k_cache_file" ]]; then … fiafter it. It does nothing today, because the variable is commented out.[[ ! -f ~/.zsh/themes/powerlevel10k/powerlevel10k.zsh-theme ]] || source …[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
Delete once zsh-autosuggestions / zsh-syntax-highlighting are assigned. Each module loads
the distribution's copy from its own slot:
[[ ! -f ~/.zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh ]] || source …[[ ! -f ~/.zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ]] || source …
What stays yours. Keep these below the block until a module carries them:
- the
NVM_DIRlines; MY_KV_PATHandMY_LIB_PATH;CLAUDE_CODE_DISABLE_TERMINAL_TITLE;- the
killportandfindportaliases; - the
zstylelines; - the line sourcing
~/.zshrc.local, and that file itself.
Paths no longer used. The predecessor cloned these and nothing of the mesh reads them. Remove them by hand once the module that replaces each is assigned:
~/.zsh/themes/powerlevel10k: replaced bypowerlevel10k's pinned copy in~/.local/share/powerlevel10k;~/.p10k.zsh: replaced by~/.config/powerlevel10k/p10k.zsh, the same bytes, oncepowerlevel10kis assigned;~/.zsh/plugins/zsh-autosuggestionsand~/.zsh/plugins/zsh-syntax-highlighting: replaced by the distribution's packages;~/.zsh/plugins/zsh-autocomplete: loaded by nothing today.
Anything else under ~/.zsh/ is yours.