My Terminal Setup for Work and Productivity

I run Ghostty as the terminal and Zsh as the shell. Copy the config files below, paste, reload — plus a random Pokémon on every new tab.
References: Ghostty docs · Zinit · Starship · FZF · zoxide · fastfetch · pokeget · Tokyo Night
Why this setup
Most terminal stacks bury you in nested config or lock you into cloud tooling. I wanted the opposite: open files I can read, edit, and move across machines.
- Ghostty — plain
key = valueconfig, fast rendering, live reload. Tokyo Night palette + light glass blur keeps long sessions easy on the eyes. - Zsh + Zinit — syntax highlighting, autosuggestions, fzf-tab, and history search without the weight of a full Oh My Zsh install.
- Starship — one prompt config that works everywhere.
- FZF + zoxide — fuzzy find and smart
cdso navigation stays in the keyboard flow. - Two files —
~/.config/ghostty/configfor how the terminal looks,~/.zshrcfor how the shell behaves. That split makes the setup portable and easy to share. - pokeget + fastfetch — a random Pokémon sprite on every new shell, piped into fastfetch as the logo beside your system info.
If you live in the terminal for dev, GPU jobs, or remote SSH work, this combo stays out of your way while still feeling polished.
Step 1 — Install your tools
Install Ghostty, Zsh, and the shell tools used in the config below: Starship, FZF, zoxide, eza, fd, fastfetch, and pokeget. Zinit plugins install automatically on first shell open.
Run this to install everything in one go — toggle macOS or Linux at the top:
brew install zsh starship fzf zoxide eza fd fastfetch && \
brew install --cask ghostty && \
cargo install pokegetStep 2 — Create the config paths
Run this in your terminal:
mkdir -p ~/.config/ghostty ~/.config/fastfetch
touch ~/.zshrc
Step 3 — Paste your Ghostty config
Expand the file, copy the full block, and paste it into ~/.config/ghostty/config.
Validate with ghostty +validate-config (docs).
Step 4 — Paste your Zsh config
Expand the file, copy the full block, and paste it into ~/.zshrc. Put machine-specific overrides in ~/.zshrc.local so the main file stays portable.
Step 5 — Pokémon startup with fastfetch
Every time you open a new terminal, a random Pokémon sprite shows up next to your system info. pokeget renders the sprite, fastfetch prints the stats — the sprite is piped in as the logo.

How it loads: the last block in ~/.zshrc runs only in interactive shells ([[ -t 1 ]]), pipes pokeget random --hide-name into fastfetch, and passes - as the logo source (stdin). See the fastfetch logo docs.
Paste the fastfetch config below into ~/.config/fastfetch/config-compact.jsonc:
The startup command is already at the bottom of the ~/.zshrc block in Step 4:
pokeget random --hide-name | fastfetch -c $HOME/.config/fastfetch/config-compact.jsonc --logo-type file-raw --logo-height 10 --logo-width 5 --logo-padding-left 3 --logo -
pokeget random --hide-name— picks a random Pokémon and skips the name label above the sprite--logo-type file-raw— tells fastfetch the logo is raw terminal image data from stdin--logo -—-is fastfetch's alias for stdin (docs)
Open a new terminal tab to see it. Want a specific Pokémon? Swap random for a name, e.g. pokeget pikachu --hide-name.
Step 6 — Reload
Run this to apply the shell config:
source ~/.zshrc
Ghostty reloads most settings when you save the config file. Open a new tab if something does not apply.
Conclusion
That is the full stack — Ghostty for the look, Zsh for the behavior, fastfetch and pokeget for the small details that make a new tab worth opening.
Once it is running, the friction mostly disappears. The theme holds up through long sessions, autosuggestions and fzf-tab cut seconds off routine commands, and the random Pokémon sprite is a nice touch without getting in the way. You could strip this down to Ghostty + Zsh and still be productive — but this is the environment I actually want when I am debugging, SSH-ing into a GPU box, or jumping between projects.
I treat both config files as living documents. Font too small, blur too heavy, a plugin slowing startup — change one line, reload, move on. The terminal should bend to how you work, not the other way around.
If you are trying this yourself, start with the Ghostty colors and the Zsh plugins. Get those right first, then layer in fastfetch and pokeget when you want personality. Keep machine-specific tweaks in ~/.zshrc.local so the main files stay clean and easy to share.
This is what I run every day — not perfect, but dialed in enough that opening a terminal never feels like a chore. Two files, paste, tweak until it fits you.
Hope you like my setup. See you soon!