Prometheus

Terminal & Shell — Ghostty, Starship, Zsh, Fish

Ghostty (GPU terminal), Starship (prompt), the Zsh + Fish setup with eza, fzf, zoxide, Atuin, and the four-plugin fish-like Zsh experience.

The terminal stack: a GPU terminal, a single prompt shared by both shells, and Zsh + Fish kept in lockstep so you can switch at any time.

Ghostty

GPU-accelerated terminal. Tokyo Night theme, JetBrains Mono Nerd Font, tabs, splits, clipboard.

Setup
brew install --cask ghostty
mkdir -p ~/.config/ghostty
ln -sf ~/dotfiles/ghostty/config ~/.config/ghostty/config
FeatureValue
ThemeTokyo Night (built-in)
FontJetBrains Mono Nerd Font · 13pt
Background95% opacity + blur radius 20
Working dir~ on every new tab/window
Scrollback10 MB
Copy on selectEnabled

Tabs

KeyAction
⌘ TNew tab
⌘ WClose tab / split

⌘ ] / ⌘ [

Next / previous tab
⌘ 1–8Jump to tab
Ctrl + TabNext tab

Splits

KeyAction
⌘ DSplit right
⌘ ⇧ DSplit down
⌘ ⌥ H/J/K/LNavigate splits

Inactive splits are dimmed (0.7 opacity), mouse-hover switches focus.

Power

KeyAction
⌘ `Toggle Quick Terminal — global Quake drop-down (works anywhere)
⌘ ⇧ PCommand palette — fuzzy-search every Ghostty action

⌘ ↑ / ⌘ ↓

Jump to previous / next shell prompt
⌘ ⇧ SDump current screen to a file and open in $EDITOR
⌘ ⇧ YDump current selection to a file and open in $EDITOR
⌘ ⇧ RReload Ghostty config without restarting

Notifications: any command that runs > 10s in an unfocused tab triggers a macOS notification on completion.

Misc

KeyAction
⌘ KClear screen
⌘ ↩Toggle fullscreen

⌘ = / ⌘ -

Font size up / down
⌘ 0Reset font size
⌘ NNew window
⌘ ,Open config

Option key acts as Alt (vim/fish Alt-bindings work). Cursor hides while typing.

Starship

Two-line bracket prompt with live tech-stack, git, command status, monorepo detection, and a dedicated Claude Code statusline. Tokyo Night palette throughout.

Prompt layout (illustrative):

╭─ ~/dots/sketchybar  main ●✚⇡ +12 -3      ⬢ Nx ⚡ Turbo   v22   $2.34          10:42
╰─  2.3s ✗1 ❯

Tech stack modules

ModuleTriggered by
Node · Bun · Denopackage.json · bun.lock · deno.json
Pythonpyproject.toml · requirements.txt · Pipfile
Rust · OCaml · SwiftCargo.toml · dune-project · Package.swift
Go · Perl · Elm · Crystalgo.mod · cpanfile · elm.json · shard.yml
Java · Ruby · Erlang · Scalapom.xml · Gemfile · rebar.config · build.sbt
Kotlin · Haskell · Elixir · Julia · .NET · PHP · Gleamnative project files
C · C++ · Lua · Dart · V · R · Solidity · CMake · Bufnative project files
Zig · Nimbuild.zig · nim.cfg

Each module renders only inside a project of that language — your daily prompt stays clean.

Git indicators

IconMeaning
Clean working tree, up-to-date with remote
Modified files in the working tree
Staged for commit
/ / Ahead / behind / diverged from remote
Untracked files
Stashed changes exist
» / Renamed / deleted in index
+12 -3Lines added / removed (git metrics)
REBASE 3/10Operation in progress: rebase, merge, revert, cherry-pick, bisect, am

Monorepo badges

BadgeToolTriggered by
⬢ NxNxnx.json · workspace.json
⚡ TurboTurborepoturbo.json
pnpm-wspnpm workspacespnpm-workspace.yaml
⚛ LernaLernalerna.json
⇶ RushRushrush.json
☾ MoonMoonrepo.moon/
BazelBazelWORKSPACE · MODULE.bazel
go.workGo workspacesgo.work
cargo-wsCargo workspaceCargo.toml with [workspace]

Badges stack — e.g. an Nx + pnpm repo lights up both. Cargo workspace uses a grep check, the rest are pure file/folder detection (zero cost outside monorepos).

Command status

IndicatorMeaning
✗ 1Exit code of last command (only on failure)
2.3sCommand duration (only if > 2s)
✦ 2

Backgrounded jobs (Ctrl-Z’d processes)

10:42Current time, right-aligned via right_format
$2.34Project version from package.json / Cargo.toml / pyproject.toml etc.
↕ 3Cached sudo creds / nested shells (SHLVL ≥ 3)
⎈ ctx · ws · profileKubernetes context · Terraform workspace · AWS profile

Claude Code statusline

Starship doubles as Claude Code’s statusline via the starship statusline claude-code profile. Renders the active model, a context-window gauge, session cost, and the git branch.

Rendered output (illustrative):

󰚩 Opus 4.7 (1M)  ████░░░░░░ 38%   $2.34   main ✓
ModuleBehaviour
claude_modelShort alias for the active model (Opus 4.7, Sonnet 4.6, Haiku 4.5)
claude_context10-wide gauge — green < 50% · yellow 50–75% · orange 75–90% · red 90%+
claude_costSession USD — muted < $1 · yellow $1+ · orange $5+ · red $20+
Wire into Claude Code
# Auto-configured by install.sh — answer "yes" to the Starship statusline prompt.
# Or merge manually with jq (preserves existing keys):
jq '.statusLine = {type: "command", command: "starship statusline claude-code"}' \
 ~/.claude/settings.json | sponge ~/.claude/settings.json
Install
brew install starship
ln -sf ~/dotfiles/starship/starship.toml ~/.config/starship.toml

Shell tools

lsd · Starship · Fastfetch · CodexBar.

# lsd — modern ls replacement
brew install lsd
alias ls='lsd'
alias ll='lsd -la'
alias lt='lsd --tree'

# fastfetch — system info (run on demand, not auto-loaded)
brew install fastfetch
fastfetch

CodexBar — AI token usage tracker. Install from github.com/steipete/CodexBar, then log in to Claude and Gemini via the menu bar app. Query usage with codexbar usage --provider claude --format json.

Zsh

Default shell on macOS. Starship prompt, fzf, zoxide, eza, Atuin history, and a fish-like input experience via four zsh plugins.

Setup
ln -sf ~/dotfiles/zsh/.zshrc ~/.zshrc

What’s included

FeatureDetails
PromptStarship — cross-shell, fast, Tokyo Night compatible
Fuzzy finderfzf with custom Tokyo Night colour scheme
Smart cdzoxide rebinds cd — frecency-based jumps
HistoryAtuin — SQLite-backed, fuzzy Ctrl+R (local-only, no sync)
ls replacementeza with icons — see the Eza section below
cat replacementbat — syntax-highlighted output
Runtime managersnvm · rbenv · bun · fnm
Input pluginsautosuggestions · syntax-highlighting · history-substring-search · fzf-tab

Eza

Every ls-family alias is driven from a single $EZA_BASE variable plus a Tokyo-Night palette. ls is bound to the long view (same body as ll); plain grid is reachable via lG.

Shared base flags ($EZA_BASE):

--icons=always                # nerd-font glyphs
--group-directories-first     # folders rise to the top
--classify=auto               # /, *, @ markers on a TTY
--color=always                # keep colour through pagers
--color-scale=all             # gradient on size + age columns
--color-scale-mode=gradient   # smooth gradient, not buckets
--hyperlink                   # OSC-8 clickable paths
AliasAdds to $EZA_BASEPurpose
ls / ll--long --header --git --time-style=relativelong view, git column, “3h ago” times
l--onelineone file per line
lGplain grid view
la / lla--long ... --alllong view + hidden files
lt / lt3--tree --level=2|3tree, depth-capped
lta--tree --all --git-ignoretree honouring .gitignore
ltd--tree --only-dirsdirectories-only tree
lr--sort=modified --reversenewest first
lS--sort=size --reverselargest first
lg--git --git-reposlong view with repo state per dir
ld--only-dirsdirectories only

Tokyo-Night palette ($EZA_COLORS) — eza uses LS_COLORS syntax. About 80 rules cover file-type metadata, permissions, git status, and per-extension hues. Reorder freely — first match wins.

CategoryHueExamples
DirectoriesBold blueall dirs
Executables / shell scriptsGreen.sh · .zsh · .fish · .vue
Source code (typed)Cyan.ts · .py · .go · .c · .css · Dockerfile
JavaScript / audioYellow.js · .mp3 · .wav
Configs / HTML / RustOrange.json · .toml · .yaml · .html · .rs · Makefile
Markup / images / videoPurple.md · .png · .svg · .mp4
Archives / .env / PDFsBold red.zip · .tar.gz · .env · .pdf
Noise (dimmed)Grey.lock · .log · .bak · .DS_Store
SpecialBold + underlineREADME.md (pops in every repo)

Plugins

Four plugins make zsh feel like fish. Loading order matters — fzf-tab first (touches compdef), syntax-highlighting second-to-last, history-substring-search dead last.

PluginWhat it doesKeybinding
fzf-tab

Replaces Tab with an fzf picker. cd previews use eza —tree; cat/bat/vim previews use bat.

Tab
zsh-autosuggestionsFades in a suggested completion in Tokyo-Night grey (#565f89) as you type.

/ Ctrl+F to accept

zsh-syntax-highlightingColours valid commands green, invalid red, strings yellow — as you type.
zsh-history-substring-searchType the start of an old command, then walk through matching history entries.

Ctrl+↑ / Ctrl+↓

The brew packages are in the Brewfile. fzf-tab has no brew formula — install.sh clones it idempotently to ~/.local/share/zsh/fzf-tab.

brew install zsh-autosuggestions zsh-syntax-highlighting zsh-history-substring-search
git clone --depth=1 https://github.com/Aloxaf/fzf-tab ~/.local/share/zsh/fzf-tab

Aliases

AliasCommand
Listings (see the Eza section for the full set)
ls / lllong view with git column + relative times
catbat
Git
gsgit status
ggit
gcgit clone
gagit add *
gm "msg"git commit -m + git push (function)
branchgit branch -r
Navigation
cdzoxide — fuzzy jump by frecency
dev [subpath]cd into ~/Code or a subdirectory (tab-completes)
System
ccclaude —dangerously-skip-permissions (Claude Code)
killport <port>free a TCP port (SIGTERM then SIGKILL fallback)
dock / undockaerospace-sync (profile switch)
scrcpy120scrcpy —video-codec=h265 —max-size=1920 —max-fps

Per-project shortcuts (lumo, envpilot.dev, …) live in ~/.config/dotfiles/aliases.local.{sh,fish} — sourced by both shellrcs if present, never committed.

Install dependencies (Brewfile covers all of these)
brew install fzf zoxide eza bat starship atuin \
 zsh-autosuggestions zsh-syntax-highlighting zsh-history-substring-search
git clone --depth=1 https://github.com/Aloxaf/fzf-tab ~/.local/share/zsh/fzf-tab

Fish

Friendly interactive shell. Aliases, eza palette, git function, and project shortcuts mirror zsh one-to-one. Autosuggestions / syntax-highlighting / history-substring-search are built-in to fish — no plugins needed.

Setup
brew install fish
mkdir -p ~/.config/fish
ln -sf ~/dotfiles/fish/config.fish ~/.config/fish/config.fish

# Set as default shell (optional)

echo $(which fish) | sudo tee -a /etc/shells
chsh -s $(which fish)

What’s included

FeatureDetails
PromptStarship — starship init fish | source
Smart cdzoxide rebinds cd — frecency-based jumps
HistoryAtuin — same Ctrl+R TUI as zsh, local-only
ls replacementeza — same $EZA_BASE + Tokyo Night palette as zsh
cat replacementbat — cat alias
Runtime managersrbenv · fnm · bun
Built-in UXautosuggestions · syntax-highlight · history search — no plugins required

Aliases (one-to-one with zsh)

AliasCommand
ls / lleza long view (git + relative time)
catbat
cdzoxide (frecency jump)
dev [subpath]cd into ~/Code/<arg> (tab-completes)
gm "msg"git commit -m + push (function)
killport <port>free a TCP port
dock / undockaerospace-sync
gsgit status
ggit
gcgit clone
gagit add *

Where to go next

On this page
Edit this page on GitHub Last updated

Built by rafay99-epic · MIT License

Tokyo Night · macOS · SketchyBar · AeroSpace · Ghostty · Zsh · Fish