This page helps me when setting up a new computer, and provides an overview to assess for consistency and compatibility.
Hardware
- Computer: Mac Mini (2024) M4 10 core, 32GB RAM, 512GB SSD
- Monitor: BenQ PD27305
- Keyboard: NuPhy Air75 V2, with caps-lock configured as escape
Software management
- Package management: brew
- Python versions and virtualenv: uv
- Containers / virtual machines: container, colima, docker, and qemu
Desktop
Programming
- Editor: Helix
- Terminal : Ghostty
- Shell: Fish
- Terminal prompt: Starship
- Git: LazyGit
- Python code quality: Ruff and ty
- Javascript/Typescript: Bun
Data Science
- Python notebooks: Marimo
- Dataframes: Polars and DuckDB
- Visualisations: Vega-Altair
LLMs
- Local models: Ollama
- Remote models: OpenRouter
- Commandline: LLM
- Programming: Aider
Researching and writing
Apps
To install all apps (list created using brew list --casks -1
):
brew install -q --cask \
font-fira-code \
font-fira-code-nerd-font \
font-noto-emoji \
ghostty \
raycast \
zotero
Note this includes the Fira Code font with programming ligatures.
Commandline tools
To install all my usual packages (list created using brew leaves -r
):
brew install -q \
bat \
bottom \
colima \
curl \
docker \
duckdb \
dust \
eza \
fastfetch \
fd \
ffmpeg \
fish \
fzf \
git \
helix \
jq \
lazygit \
libffi \
mkcert \
neovim \
oven-sh/bun/bun \
qemu \
ripgrep \
sqlite \
starship \
tidy-html5 \
uv \
zlib
Note the better versions of standard tools:
Configuration
Ghostty
Open settings to set:
macos-option-as-alt = left
split-divider-color = white
Fish
The main ~/.config/fish/config.fish
contains:
if status --is-login
# For brew
fish_add_path -P /opt/homebrew/bin
brew shellenv fish | source
# For uv
uv generate-shell-completion fish | source
# Add standard unix paths
fish_add_path -P /usr/local/sbin /usr/sbin /sbin /usr/local/bin /usr/bin /bin
# Add path to brew-installed curl
fish_add_path -P (brew --prefix)/opt/curl/bin
# Add path to anything I have installed locally (e.g. by `uv tool`)
fish_add_path -P /Users/tcorbettclark/.local/bin
# Set library path and dynamic library path
set -x -g LD_LIBRARY_PATH (brew --prefix)/opt/curl/lib (brew --prefix)/lib /usr/lib /lib
set -x -g DYLD_LIBRARY_PATH (brew --prefix)/opt/curl/lib (brew --prefix)/lib /usr/lib /lib
end
# Make starfish manage the prompt always.
starship init fish | source
Some handy aliases:
alias --save ls eza
alias --save la 'ls -a'
alias --save ll 'ls -l'
alias --save lla 'ls -la'
alias --save lt 'ls --tree'
alias --save va 'source .venv/bin/activate.fish'
alias --save copy-latest-pdf-download 'cp (ls --sort created ~/Downloads/*.pdf | tail -1)'
Tips
Brew
Add the brew-cache extension to make it easy to find which packages own which files:
brew tap ten0s/homebrew-brew-cache
In addition to the usual brew update/upgrade/install/uninstall/list/info
:
brew cache -u # Create/update cache of files
brew cache -s <file pattern> # Find packages containing files/directories matching pattern
brew leaves # Packages which are not dependencies of other packages
brew leaves -r # ...installed manually
brew leaves -p # ...installed as dependencies
brew deps --tree <package> # Dependencies of <package>
brew deps --tree --installed # ...all packages
brew deps --tree (brew leaves -r) # ...all manually installed packages, avoiding duplications
brew deps --tree (brew list --casks -1) # ...all casks
brew autoremove --dry-run # Remove (dry run) packages no longer required
brew cleanup -s # Remove old versions of packages and cache files
brew doctor # Find potential issues
Fish
Find changes made to fish configuration, functions, completions etc since installation:
fish_delta