Compact Zsh setup that wires in
Antidote for plugins and
Starship as the prompt. Everything is driven by a single
zshrc.sh so you can drop it into any machine quickly.
-
Clone the repo (defaults to
~/.zdotfiles):git clone [email protected]:jcyamacho/zdotfiles.git "$HOME/.zdotfiles"
-
Source the main file from your
~/.zshrc:source "${ZDOTFILES_DIR:-$HOME/.zdotfiles}/zshrc.sh"
- Keep the repo elsewhere by setting
ZDOTFILES_DIRbefore sourcing. - Change the editor used by helper commands by exporting
EDITOR. - Adjust where self-managed tools install by overriding
CUSTOM_TOOLS_DIR. - Set
GIT_WORKTREE_BASEto change wheregwt-newcreates worktrees (see git-worktree).
Starship is the required prompt and installs automatically on first load. Set
STARSHIP_CONFIG before sourcing zshrc.sh to override the default
~/.config/starship.toml.
update-starshipupdates Starship and reloads the shell.starship-configedits the active configuration and reloads the shell.starship-preset-customapplies the customstarship.toml.starship-preset-nerd-fonts,starship-preset-no-nerd-font, andstarship-preset-plain-textapply built-in Starship presets.
By default, zsh-you-should-use reminds you when you type a command that has an alias. To disable these suggestions:
# In ~/.zshrc, before the source line:
export ZSH_DISABLE_YOU_SHOULD_USE=1
source "${ZDOTFILES_DIR:-$HOME/.zdotfiles}/zshrc.sh"Antidote reads .zsh_plugins.txt and builds a static .zsh_plugins.zsh. The default setup enables:
- Always-on shell UX: prompt theme (see above),
zsh-autosuggestions, syntax highlighting (F-Sy-H), and “you-should-use”. - Local plugin helpers: small
plugins/*scripts that addinstall-*,update-*,uninstall-*, and*-confighelpers.
Many integrations are conditional (they only activate when the underlying binary exists) to keep startup fast and avoid errors.
These are the install-* helpers (run the command to install; integrations load on reload/next shell start). Tools are grouped by how useful they are for the default shell experience.
Run install-recommended to install every missing tool in this group.
install-fzf– fzf fuzzy finder (enablesfzf-tabif present)install-zoxide(orinstall-z) – zoxide smartercdinstall-atuin– Atuin synced, searchable historyinstall-carapace– Carapace completionsinstall-jq– jqinstall-yazi– yazi terminal file manager (Ctrl+o, andyto cd on exit)
install-aspire- Aspire CLI for distributed appsinstall-bat– batcatcloneinstall-btop- btop resource monitorinstall-bun– Bun runtimeinstall-claude-code– Claude Code CLIinstall-code– VS Codeinstall-codex– OpenAI Codex CLIinstall-cmux– cmux native macOS terminal for AI agentsinstall-copilot– GitHub Copilot CLIinstall-cursor– Cursorinstall-cursor-cli- Cursor CLI terminal agent via the native installer (~/.local/bin). Useupdate-cursor-clito update it, oruninstall-cursor-clito remove it. Its updater also runs throughupdate-all.install-deno– Deno runtimeinstall-direnv– direnv + hookinstall-docker– Docker CLIinstall-dotnet- .NET SDK developer platform (dotnet)install-dotenvx– dotenvx a secure dotenvinstall-varlock– varlock AI-safe .env filesinstall-fabric– Fabricinstall-flutter– Flutter SDKinstall-fnm(orinstall-node) – fnm + LTS activationinstall-gemini– Gemini CLIinstall-ghostty– Ghostty terminal + config restoreinstall-wezterm– WezTerm terminal + config restoreinstall-gh– GitHub CLIinstall-go– Go + golangci-lintinstall-herdr- Herdr agent multiplexer that lives in your terminalinstall-java- Amazon Corretto 25 LTS JDK via Homebrew (macOS). SetsJAVA_HOMEand PATH, preserving an existing validJAVA_HOME. Useuninstall-javato remove it;update-brewhandles patch updates.install-just– just command runnerinstall-lsd– lsd + config/themeinstall-memo- memo durable memory CLI; includes Claude and Codexmemo contexthook helpersinstall-mise– miseinstall-nub- Nub all-in-one toolkit for Node.jsinstall-ollama– Ollamainstall-openspec– OpenSpec workflow CLI (openspec)install-opencode– OpenCodeinstall-orbstack- OrbStack Docker Desktop alternativeinstall-pi- Pi minimal terminal coding harnessinstall-television– Television fuzzy finder; bindsCtrl+Tto channel-aware completion (Ctrl+Rgoes to Atuin when present). Also installsfdandbat, which its channels shell out toinstall-rbenv(orinstall-ruby) – rbenvinstall-rust– rustupinstall-uv(orinstall-python) – uv + Python tooling (python)install-viteplus– Vite+ unified web toolchaininstall-worktrunk– Worktrunk git worktree managementinstall-zed– Zedinstall-zsh-bench– zsh-bench benchmark for interactive zshinstall-zellij– Zellij terminal workspace (zellij)install-zig– Ziginstall-antigravity– Antigravityinstall-agent-browser– agent-browser browser automation CLIinstall-fonts– Homebrew font casks
Additional helper functions (no external tool required):
-
git –
g,gaa,gf,gcb,gcmsg,gc!,ggl,ggpshorthands plusgit-pull-allandgit-hook -
git-worktree –
gwt-*helpers for managing Git worktrees -
dotenv –
dotenv [-e environment] [--] command [args...]runs an executable with variables from.env,.env.local, and, with-e,.env.{environment}and.env.{environment}.local, in that order. Only the current directory is searched; missing files are skipped. Later values override earlier ones and inherited environment variables without changing your shell.Files accept
KEY=value, optionalexport, blank lines, comments, and LF or CRLF endings. Keys use letters, digits, and underscores and cannot start with a digit. Surrounding whitespace is ignored; outer single or double quotes are removed. Inline comments require whitespace before#; a#inside quotes or attached to a value is literal. Values are literal: variables, command substitutions, backticks, and escapes are never expanded. Multiline values and concatenated quoted fragments are unsupported. Invalid or unreadable files abort execution with a location-only diagnostic, without printing values. Loaded variables can still affect the executable's behavior.Examples:
dotenv -- bun run devordotenv -e production -- bun run start.
Shell helpers from _utils.zsh:
mkcd <dir>– create a directory and cd into itedit <file>– open a file in$EDITOR(defaults to vim)home– cd to$HOMEzsh-config– edit~/.zshrcand reloadkill-port <port>– kill the process listening on a given portzdotfiles-cache-clean– remove all zdotfiles caches and reloadcls– alias forclearrmf– alias forrm -rfcd..– alias forcd ..
Sync files and directories to/from private GitHub Gists. See github-cli for details on save-file-to-gist, load-file-from-gist, and related functions.
reload– reload the configuration.update-zdotfiles– pull the latest repo changes and reload.update-antidote– update Antidote and reload.update-all– run all registered updaters and reload.
update-all iterates over the updates array and calls each registered function. Plugins register their updaters like this:
_update_mytool() {
info "Updating mytool..."
# update logic here
}
updates+=(_update_mytool)Use an internal _update_* function (no reload) so update-all can batch updates and reload once at the end. Tools installed via Homebrew don't need individual updaters since update-brew runs brew upgrade --greedy.
- Benchmark before/after changes with
zsh-startup-bench. - Use
zsh-startup-profilefor a quick zprof-enabled timing run. - Quick sanity check without launching an interactive shell:
zsh -lic exit.