Zsh is the alternative shell option in Salchipapa.Dots. It is built on top of Oh My Zsh with theDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/erickm13/Salchipapa.Dots/llms.txt
Use this file to discover all available pages before exploring further.
nanotech theme and enriched by Homebrew-installed plugins for syntax highlighting, autosuggestions, and tab completions via Carapace. Like the Fish configuration, it auto-starts Zellij on every interactive session, giving you an identical multiplexed workflow regardless of which shell you choose.
Setup
The Zsh configuration is a single.zshrc file symlinked into your home directory by the installer. To link it manually:
The installer (
sudo ./install.sh) handles this symlink automatically when you select Zsh as your shell. You do not need to run this command if you used the installer.Oh My Zsh
Oh My Zsh is the framework that loads the theme and plugins. The theme is set tonanotech:
command-not-found, which suggests the package to install when an unknown command is entered:
Homebrew Plugins
Three additional Zsh plugins are sourced directly from Homebrew’s share directory. The correct Homebrew prefix is detected automatically based on the OS:| Plugin | Description |
|---|---|
zsh-autocomplete | Real-time completion menu that appears as you type, without pressing Tab |
zsh-syntax-highlighting | Highlights valid commands in green and invalid ones in red while you type |
zsh-autosuggestions | Grays out history-based command completions; press → to accept |
BREW_BIN switches between /opt/homebrew/bin (macOS) and /home/linuxbrew/.linuxbrew/bin (Linux) based on the output of uname, so the same .zshrc works on both platforms without modification.NVM Setup
Node Version Manager is loaded via the Homebrew-managed NVM formula. Both the NVM shell integration and bash completion are sourced:Carapace Completions
Carapace provides completion bridging across multiple shell environments. The bridge list and the completion style are configured before the Carapace source command:zstyle line styles completion category headers with a dimmed grey label so they are easy to scan visually.
Tool Initializations
After Oh My Zsh and plugins are loaded, the major CLI integrations are initialized:fzf
Fuzzy finder — adds key bindings for history search (
Ctrl+R), file search (Ctrl+T), and directory navigation (Alt+C).Zoxide
Smarter
cd replacement. Tracks visit frequency and lets you jump to directories with z <name>. The cd alias also maps to z directly.Atuin
Replaces shell history with a searchable SQLite database. Supports encrypted sync across machines.
Angular CLI Completion
Angular CLI completions are loaded automatically at the end of.zshrc:
ng subcommands, flags, and project-specific schematics.
Aliases
Listing Aliases
All listing aliases use eza as a modern replacement forls, with Nerd Font icons and Git integration.
| Alias | Command | Description |
|---|---|---|
ls | eza --no-permissions --git --no-time --no-user --icons --group-directories-first | Clean listing with icons, directories first |
ll | eza -l --no-permissions -no-time --no-user --icons --group-directories-first | Long listing without permission/time/user columns |
la | eza -la --no-permissions --no-time --no-user --icons --group-directories-first | Long listing including hidden files |
lt | eza -lT --no-permissions --no-time --no-user --icons --group-directories-first | Full tree view |
lt2 | eza -lT --no-permissions --no-time --no-user --icons --group-directories-first --level=2 | Tree — 2 levels deep |
lt3 | eza -lT --no-permissions --no-time --no-user --icons --group-directories-first --level=3 | Tree — 3 levels deep |
lt4 | eza -lT --no-permissions --no-time --no-user --icons --group-directories-first --level=4 | Tree — 4 levels deep |
lS | eza -l --no-permissions --sort=size --icons | Sorted by file size |
lD | eza -l --no-permissions --sort=date --icons | Sorted by modification date |
lg | eza -l --no-permissions --git --icons | Long listing with Git status column |
lf | eza -l --git --group-directories-first | Long listing with permissions and Git info |
Git Aliases
| Alias | Command | Description |
|---|---|---|
gs | git status | Show working tree status |
ga | git add | Stage changes |
gc | git commit -m | Commit with inline message |
gp | git push -u origin main | Push and set upstream to main |
Navigation Aliases
| Alias | Command | Description |
|---|---|---|
cd | z | Replace cd with zoxide for smart directory jumping |
Fuzzy Finder Aliases
| Alias | Command | Description |
|---|---|---|
fzfbat | fzf --preview="bat --theme=gruvbox-dark --color=always {}" | fzf with Gruvbox-themed bat preview |
fzfnvim | nvim $(fzf --preview="bat --theme=gruvbox-dark --color=always {}") | Open fzf selection in Neovim |
Zellij Auto-Start
Zellij is launched at the end of.zshrc by calling start_if_needed. The function checks that the session is interactive, that Zellij is not already running, and that stdout is a real terminal before executing:
WM_VAR="/$ZELLIJ"— Zellij sets$ZELLIJto a non-empty value when already running. The leading/means${WM_VAR#/}strips it and returns the session ID; an empty result means Zellij is not active.WM_CMD="zellij"— the command to execute. Update this variable to switch to a different multiplexer without changing the function logic.
WSL Runtime Directory Fix
Zellij requires a validXDG_RUNTIME_DIR. In WSL this directory does not exist by default, which causes Zellij to fail at startup. The .zshrc creates and secures it automatically:
mkdir -p is a no-op if the directory already exists.
PATH
PATH is extended with Volta and Cargo binaries near the top of.zshrc, before any tool initialization:
| Entry | Purpose |
|---|---|
$HOME/.volta/bin | Volta — manages Node.js, npm, and Yarn versions without requiring nvm use |
$HOME/.cargo/bin | Rust binaries installed via cargo install (e.g., eza, bat, fd, zoxide) |
Shell Options
Twosetopt directives tune Zsh’s interactive behavior:
FZF Environment Variables
Default FZF commands are configured to usefd for fast, .git-excluding file discovery:
Ctrl+T) and directory picker (Alt+C) are both fast and respect .gitignore-style exclusions.