Ghostty

https://github.com/ghostty-org/ghostty

This is the best terminal I've used; it's replaced iTerm and Warp for me.

Zed

https://github.com/zed-industries/zed

They also made a really nice contribution to the Rust ecosystem with gpui!

Fish

https://github.com/fish-shell/fish-shell

I really like the tab completion and syntax highlighting

LazyGit

https://github.com/jesseduffield/lazygit

Before LazyGit, working on stacked PRs was a pain...

git checkout main
git pull --rebase
git checkout wcygan/branch-one
git merge main
git checkout wcygan/branch-two
git merge wcygan/branch-one
git checkout wcygan/branch-three
git merge wcygan/branch-two
...

After LazyGit, the amount of keystrokes that I needed to achieve this went down by ~80%!

RipGrep

https://github.com/BurntSushi/ripgrep

→ rg 'rpc'
pnpm-lock.yaml
1468:  '@rollup/rollup-linux-powerpc64le-gnu@4.42.0':
5525:  vscode-jsonrpc@8.2.0:
6382:  '@rollup/rollup-linux-powerpc64le-gnu@4.42.0':
8399:      '@rollup/rollup-linux-powerpc64le-gnu': 4.42.0
8940:  vscode-jsonrpc@8.2.0: {}
8944:      vscode-jsonrpc: 8.2.0

Search for patterns in files. Really nice for searching through logs.

fzf

https://github.com/junegunn/fzf

I use this to fuzzy-search my history. It's similar to doing this:

history | nl | fzf

This makes it really easy to find commands you did in the past.

fd

https://github.com/sharkdp/fd

Find files on your computer

→ fd json
deno.json
package.json
tsconfig.json

jq

https://github.com/jqlang/jq

Make your json pretty and run commands on it.

→ cat deno.json | jq 'keys'
[
  "imports",
  "tasks"
]

→ cat deno.json | jq '.tasks'
{
  "fix-mermaid": "deno run --allow-read --allow-write scripts/fix-mermaid-formatting.ts"
}

Starship

https://github.com/starship/starship

My prompt:

wcygan@foobar wcygan.net on main
→

You can customize it in very dynamic ways too, if that's what you want.

uv

https://docs.astral.sh/uv/

uv has become my defacto scripting platform. With PEP 723 inline script metadata, a single .py file can declare its own dependencies and uv run will resolve them into an ephemeral environment before executing.

# /// script
# requires-python = ">=3.12"
# dependencies = ["httpx"]
# ///
import httpx
print(httpx.get("https://example.com").status_code)
→ uv run script.py
200

just

https://github.com/casey/just

I use just for task orchestration across my projects (similar to make). For example, I would have commands like just up, just down, just test, etc...

jj (experimental)

https://github.com/jj-vcs/jj

Seems like a nice successor to git. But I don't think there is a TUI as nice as LazyGit yet, so I stay on git.