18 Matching Annotations
  1. Jan 2026
    1. You probably don't need Oh My Zsh
      • Oh My Zsh (OMZ) adds unnecessary bloat, slowing shell startup to ~0.38 seconds due to script interpretation on every new terminal tab.
      • Author opens hundreds of tabs daily via tmux and tools like lazygit/yazi, making startup time critical; OMZ updates also delay prompts.
      • Recommends minimal Zsh config: large history (HISTSIZE=1000000000), EXTENDED_HISTORY, autocd, compinit for completions.
      • Uses Starship prompt (single binary, fast): disables cloud/lang segments, shows git/Python/Rust, command duration; startup drops to 0.07s.
      • History search via fzf (Ctrl+R) instead of zsh-autosuggestions; optional vi mode for Vim users.
      • Workflow: tmux popups/splits for git/files/tests; adapted in days, add plugins only as needed.

      Hacker News Discussion

      • Many defend OMZ for ease/convenience (single install, plugins like git/fzf), argue 0.3-0.4s startup unnoticeable unless opening hundreds of tabs; some stripped it to essentials.
      • Alternatives praised: Fish (better defaults, syntax, ~0.2s startup; use bash shebangs for scripts), Zimfw/Zinit (fast frameworks), Nushell/Oilsh, bare Zsh with plugins (fast-syntax-highlighting, zsh-autosuggestions).
      • Starship popular but critiqued for bloat (Node/Python versions, AWS), empty segments, config effort vs Powerlevel10k wizard; some prefer custom prompts or none.
      • Benchmark debates: zsh -ic exit flawed (use zsh-bench for prompt/input lags); git plugin slows in big repos; tips like zprof, lazy loading (nvm/mise), share_history.
      • Fish/Zsh vs Bash: Fish nicer interactively but scripting needs porting; Bash universal/lean; some revert to Bash, others tmux/multiple shells.
      • Tools: Atuin (history), Zoxide (cd), Mise (asdf), fzf-tab; AI (Claude/GPT) helps migrate configs quickly.
  2. Feb 2024
  3. Jun 2023
  4. Jan 2023
  5. Dec 2022
  6. Feb 2021
  7. Jan 2021
  8. Oct 2020
  9. Apr 2020
  10. May 2015
    1. Every shell has some startup files that it consults for its configuration. Zsh has system-wide startup items in /etc/ (or, in distributions such as Ubuntu, in /etc/zsh/) and user-specific startup files (in the home directory). When Zsh starts up, it reads the following things in this order: /etc/zshenv and ~/.zshenv If the shell is a login shell: /etc/zprofile and ~/.zprofile If it’s an interactive shell: /etc/zshrc and ~/.zshrc If the shell is a login shell: /etc/zlogin and ~/.zlogin And when a user logs out from a login shell, Zsh reads /etc/zlogout and ~/.zlogout. To work out which commands you have to write in which startup files, it's important to know the different types of shells. A login shell is one that's spawned when you log in - for example, via SSH or on a virtual terminal. An interactive shell displays a prompt to the user where you can type commands - for instance, when you open a terminal window in Ubuntu. However, if you run ssh host somecommand, then this is a login shell, but is in fact a non-interactive one.
    2. Every shell has some startup files that it consults for its configuration. Zsh has system-wide startup items in /etc/ (or, in distributions such as Ubuntu, in /etc/zsh/) and user-specific startup files (in the home directory). When Zsh starts up, it reads the following things in this order: /etc/zshenv and ~/.zshenv If the shell is a login shell: /etc/zprofile and ~/.zprofile If it’s an interactive shell: /etc/zshrc and ~/.zshrc If the shell is a login shell: /etc/zlogin and ~/.zlogin And when a user logs out from a login shell, Zsh reads /etc/zlogout and ~/.zlogout. To work out which commands you have to write in which startup files, it's important to know the different types of shells. A login shell is one that's spawned when you log in - for example, via SSH or on a virtual terminal. An interactive shell displays a prompt to the user where you can type commands - for instance, when you open a terminal window in Ubuntu. However, if you run ssh host somecommand, then this is a login shell, but is in fact a non-interactive one.
    3. Zsh also makes it possible to run particular code automatically on certain occasions. You just have to define some special functions. The two most frequently used are chpwd and precmd. Zsh calls the former each time the current directory changes. The latter is called just before Zsh shows you a new prompt. Both functions are regularly used to show the current directory in the title bar of your terminal emulator. If you use programs other than the shell, which alter the title of your terminal emulator (Vim is one example), you should use precmd - it restores the title after another command has run. So this is how we show the current directory in the title bar (adapted from the manual page):

      Run commands