MacBook-setup voor AI engineering: macOS-tools en workflow
Automatische vertaling
Dit artikel is automatisch vertaald vanuit de oorspronkelijke Engelse versie.
Dit is de setup die ik op een nieuwe MacBook toepas voordat ik aan AI engineering begin. Hij is bedoeld voor engineers die een Apple Silicon-Mac inrichten voor Python- en AI-werk. Hij behandelt de command-line tools die macOS niet meelevert, Homebrew, Python met uv, de shell, de keuze van terminal en editor, coding agents, Docker en tools voor lokale models.
Sommige stappen zijn vereist en sommige zijn mijn voorkeur. Xcode Command Line Tools, Homebrew, Git en een Python-workflow zijn de basis. Warp, iTerm2, Powerlevel10k, Cursor en lokale model runners zijn keuzes. De commando’s hieronder installeren de basis; de latere secties leggen de keuzes vast die ik daarbovenop maak.
De stappen verlopen in deze volgorde:
- Xcode command-line tools.
- Homebrew.
- uv en Python.
- Oh My Zsh.
- Plugins en Powerlevel10k.
Terminal, editor, containers en lokale models zijn onafhankelijke keuzes. Sla je er een over, dan werken de stappen hierboven nog steeds.
Command-line tools en Homebrew
Begin met de command-line tools van Apple:
xcode-select --install
macOS opent een dialoogvenster dat je door de installatie leidt.
Homebrew is de package manager die ik voor de rest van deze setup gebruik. De officiële installer is één commando:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
De installer legt uit wat hij gaat wijzigen en vraagt om bevestiging. De installatiehandleiding van Homebrew somt de wijzigingen en de standaardprefixen op.
Wil je een gecontroleerde revisie van het installatiescript uitvoeren, download dan het
script, controleer de SHA-256 en voer de lokale kopie uit. Dit blok gebruikt
commit 150c69d:
(
set -e
homebrew_installer="$(mktemp)"
trap 'rm -f "$homebrew_installer"' EXIT
curl --proto '=https' --tlsv1.2 --fail --location --show-error https://raw.githubusercontent.com/Homebrew/install/150c69df1e54b0b74c9fcca5a201410a2300816a/install.sh -o "$homebrew_installer"
printf '%s %s\n' 12479a24be3f5307eecac7cde670fad7118640f031229e964f544b1367b52a41 "$homebrew_installer" | shasum -a 256 --check
less "$homebrew_installer"
/bin/bash "$homebrew_installer"
)
De commit en SHA-256 leggen het installatiescript vast dat je uitvoert. Dat script installeert nog steeds de nieuwste Homebrew-versie, en latere packagecommando’s installeren de huidige versies. Het vastleggen van de commit bewijst niet wie hem heeft geschreven.
Op Apple Silicon installeert Homebrew in /opt/homebrew, dat niet in de standaard-PATH
staat. De installer drukt de commando’s af die dit oplossen, maar voert ze niet uit.
Voer ze zelf uit:
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
De eerste regel maakt brew beschikbaar in elke nieuwe login shell. De tweede maakt
het beschikbaar in de huidige. .zprofile vs .zshrc
legt uit waarom de regel in .zprofile hoort.
Installeer de command-line tools die ik regelmatig gebruik:
brew install uv htop gitmoji pandoc ncdu tmux
- uv beheert Python-versies, omgevingen, dependencies, commando’s en lockfiles. De volgende sectie richt het in.
- htop is een visuele monitor voor het systeem en processen.
- tmux houdt meerdere terminalsessies actief in één venster.
- ncdu toont het schijfgebruik per map.
- gitmoji voegt emoji’s toe aan commitberichten.
- pandoc zet documenten om tussen formaten.
Python met uv en pyenv
Voordat ik uv ging gebruiken, beheerde ik Python-omgevingen met pyenv. uv dekt nu mijn dagelijkse workflow. Installeer de nieuwste Python-versie die uv beheert:
uv python install
Dat installeert de nieuwste versie die uv op het moment van de setup beschikbaar
heeft. Start hem met uv run python, of begin een project met uv init. Voor een
projectspecifieke versie gebruik je de pinning-workflow uit mijn korte gids voor
Python-beheer op macOS met uv.
Ik gebruik pyenv als ik een interpreter nodig heb die uit de broncode is gebouwd, of eigen CPython-buildopties die de kant-en-klare distributies van uv niet bieden. pyenv compileert Python uit de broncode en heeft daarom eerst deze bibliotheken nodig. De lijst volgt de aanbevolen buildomgeving van pyenv:
brew install pyenv openssl@3 readline sqlite3 xz tcl-tk@8 libb2 zstd zlib pkgconfig
- openssl levert SSL/TLS-ondersteuning voor de
ssl-module van Python. - readline voegt regelbewerking en geschiedenis toe aan de interactieve interpreter.
- sqlite3 is de ingebouwde database achter de
sqlite3-module van Python. - xz, zlib en zstd zorgen voor datacompressie.
tcl-tk@8bouwt de GUI-moduletkinter,libb2levert BLAKE2-hashing enpkgconfighelpt de build de andere bibliotheken te vinden.
uv heeft geen van deze packages nodig. Sla dit blok over als je pyenv niet gebruikt.
Terminal
De standaard Terminal van macOS volstaat. Ik gebruikte jarenlang iTerm2 en ben onlangs overgestapt op Warp, een terminal in Rust met ingebouwde AI-functies. Het prompt-thema verderop in dit artikel, Powerlevel10k, vraagt per terminal één wijziging: stel het lettertype in op MesloLGS NF. Open in Warp ook Settings → Appearance en zet onder Input het Input type op Shell (PS1). Warp tekent standaard een eigen prompt, dus zonder deze wijziging zie je de Powerlevel10k-prompt niet (Warp-documentatie over de prompt).
Blijf je bij iTerm2, dan zijn dit de twee instellingen die ik wijzig:
Natuurlijk tekst bewerken inschakelen
- Open Preferences → Profiles → Keys → Key Mappings.
- Open de vervolgkeuzelijst Presets….
- Kies “Natural Text Editing”.
Een kleurenthema kiezen
- Bekijk thema’s op iTerm2-Color-Schemes.
- Open Preferences → Profiles → Colors → Color Presets…
- Kies Import en selecteer het gedownloade thema.
Zsh en Oh My Zsh
macOS gebruikt Zsh als standaard login shell.
Ik gebruik de meegeleverde /bin/zsh; installeer
de Zsh van Homebrew alleen als je een
specifieke, nieuwere upstream-versie nodig hebt.
Controleer de geïnstalleerde Zsh en de huidige login shell:
echo "$SHELL"
command -v zsh
zsh --version
Is Zsh geïnstalleerd maar niet gekozen als login shell, schakel dan over op de meegeleverde versie:
chsh -s /bin/zsh
Open een nieuwe terminal nadat je de login shell hebt gewijzigd.
Oh My Zsh voegt de standaardinstellingen en het pluginsysteem toe die ik gebruik. De officiële installer is:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
De installer hernoemt een bestaande ~/.zshrc naar ~/.zshrc.pre-oh-my-zsh en
schrijft een nieuwe op basis van zijn template. Kopieer de instellingen die je wilt
houden uit het oude bestand naar het nieuwe. Voer omz update uit als je een
nieuwere Oh My Zsh wilt. Standaard vraagt het je ook elke 13 dagen of je wilt updaten.
De volgende twee secties voegen plugins en een thema toe, en beide passen ~/.zshrc
aan. De figuur toont welk bestand welke regel bevat, welke regels je wijzigt en waar elke regel op schijf naartoe wijst.
Plugins toevoegen
Installeer zsh-autosuggestions en zsh-syntax-highlighting in de map voor eigen plugins van Oh My Zsh:
git clone https://github.com/zsh-users/zsh-autosuggestions "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions"
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting"
zsh-autosuggestions stelt tijdens het typen commando’s uit je geschiedenis voor. zsh-syntax-highlighting kleurt elk commando terwijl je typt, zodat typfouten zichtbaar zijn voordat je op Enter drukt.
Vervang in ~/.zshrc de regel plugins=(git) uit de template door de plugins
voor de tools in dit artikel:
plugins=(
git brew docker docker-compose macos python tmux vscode
zsh-autosuggestions zsh-syntax-highlighting
)
Voeg pyenv aan de lijst toe als je het hebt geïnstalleerd. Houd
zsh-syntax-highlighting als laatste in de array. Mijn eigen lijst bevat ook aws,
gcloud, kubectl en pre-commit. Voeg zulke plugins alleen toe als je die tool
gebruikt, want elke plugin maakt het opstarten van de shell trager. De wiki over
plugins van Oh My Zsh beschrijft
de meegeleverde plugins.
Powerlevel10k en het lettertype
Powerlevel10k is het Zsh-thema dat ik gebruik. Het toont de werkmap, de Git-status en de actieve Python-omgeving in de prompt, en heeft een interactieve configuratiewizard. Installeer het voor Oh My Zsh:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k"
Vervang in ~/.zshrc de regel ZSH_THEME="robbyrussell" door:
ZSH_THEME="powerlevel10k/powerlevel10k"
Open een nieuwe shell en voer p10k configure uit. De wizard schrijft je keuzes
naar ~/.p10k.zsh.
De iconen van Powerlevel10k hebben het lettertype MesloLGS NF nodig. In iTerm2 kan
p10k configure het lettertype automatisch installeren. Voor andere terminals en
editors download en installeer je de vier TTF-bestanden uit de lettertypegids van
Powerlevel10k en kies
je daarna het lettertype. Open in Warp Settings → Appearance → Text en zet Terminal
font op MesloLGS NF. Stel in VS Code of Cursor het lettertype van de geïntegreerde
terminal in:
- Open de instellingen van je editor.
- Zoek naar
terminal.integrated.fontFamily. - Stel het in op
MesloLGS NF.
Editors en coding agents
Ik houd één editor open en draai er één of twee coding agents naast. Tegenwoordig gebruik ik Cursor, met Codex en Claude Code parallel ernaast.
- Cursor is een fork van VS Code met ingebouwde AI pair programming. Gebruik het als je wilt dat het model code in de editor bewerkt.
- VS Code heeft de grotere catalogus met extensies. Gebruik het als je een extensie nodig hebt die Cursor niet ondersteunt.
- Claude Code en Codex CLI zijn coding agents die in de terminal draaien. Ze lezen de repository, bewerken bestanden en voeren commando’s uit. Gebruik ze voor wijzigingen in veel bestanden of voor taken waarbij tests moeten draaien.
- GitHub Desktop is een Git-client voor als ik niet naar de CLI wil overstappen.
Ze installeren allemaal als Homebrew-casks:
brew install --cask cursor visual-studio-code claude-code codex github
Homebrew werkt Claude Code niet vanzelf bij; voer brew upgrade claude-code uit.
Wil je automatische updates, gebruik dan de native installer van Anthropic:
curl -fsSL https://claude.ai/install.sh | bash.
Containers en lokale models
De overige tools hangen af van het werk dat ik op de machine wil doen. De shell- en Python-setup is niet afhankelijk van containers of lokale models.
- Docker Desktop is de container-runtime die ik gebruik. De licentie is gratis voor persoonlijk gebruik en voor kleine bedrijven met minder dan 250 medewerkers en minder dan $10 miljoen jaaromzet. Grotere bedrijven hebben een betaald abonnement nodig (Docker Desktop-licentie).
- Podman Desktop is open source en kent zo’n licentievoorwaarde niet. Gebruik het als je bedrijf boven die grenzen zit en niet voor Docker betaalt.
- Ollama draait als achtergrondservice met een lokale API. Gebruik het als scripts of een applicatie het model aanroepen.
- LM Studio is een desktop-app om models te vinden, te laden en te vergelijken. Gebruik het als je models met de hand wilt uitproberen. Het kan ook een lokale API aanbieden.
Ook deze installeren als casks:
brew install --cask docker-desktop # or podman-desktop
brew install --cask ollama-app # or lm-studio
Lokale LLMs op macOS vergelijkt Ollama, LM Studio, llama.cpp en MLX-LM in detail.
De setup herhalen op de volgende Mac
Homebrew kan de formula’s en casks uit deze setup vastleggen in een Brewfile en op een nieuwe machine installeren:
brew bundle dump --file ~/Brewfile
brew bundle --file ~/Brewfile
Voer het eerste commando uit op de oude Mac; voeg --force toe om een bestaande Brewfile te overschrijven. Installeer op de nieuwe Mac Xcode Command Line Tools en Homebrew, voer de stap brew shellenv uit en daarna het tweede commando.
Bewaar de Brewfile en kopieën van .zprofile, .zshrc en .p10k.zsh zonder geheimen in een dotfiles-repository. Herhaal de installatie van Python met uv en de handmatige stappen voor Oh My Zsh, plugins, Powerlevel10k en het lettertype. Herstel je shellconfiguratiebestanden nadat je Oh My Zsh hebt geïnstalleerd, omdat de installer .zshrc herschrijft. Pas je terminal- en editorinstellingen opnieuw toe.
Een Brewfile legt packagenamen vast zonder hun versies vast te zetten. De herstelde packages kunnen nieuwer zijn; de documentatie van Homebrew Bundle legt deze beperking uit.
Referenties
- Apple Terminal-gebruikershandleiding: de standaardshell wijzigen
- Homebrew-installatie en Homebrew Zsh-formula
- Oh My Zsh-installatie en Zsh-setup op macOS
- Powerlevel10k-installatie
- pyenv-installatie en shellconfiguratie
- Python-beheer met uv
- Promptinstellingen van Warp
- Claude Code-setup en Codex CLI
- Docker Desktop voor Mac en Docker Desktop-licentie
- Ollama-documentatie