Konfiguracja MacBooka do pracy z AI: narzędzia i workflow w macOS

Tłumaczenie automatyczne Ten artykuł został automatycznie przetłumaczony z angielskiego oryginału.

To jest konfiguracja, którą stosuję na świeżo skonfigurowanym MacBooku przed rozpoczęciem pracy inżynierskiej z AI. Obejmuje narzędzia wiersza poleceń, których macOS nie zawiera, Homebrew, Python z uv, powłokę, wybór terminala i edytora, Docker oraz lokalne narzędzia AI.

Praktyczny podział przebiega między wymaganymi podstawami a osobistymi preferencjami. Xcode Command Line Tools, Homebrew, Git i workflow dla Pythona to fundamenty. Warp, iTerm2, Powerlevel10k, Cursor i lokalne narzędzia do uruchamiania modeli to kwestie wyboru. Poniższe polecenia instalują fundamenty, a kolejne sekcje opisują wybory, których dokonuję na ich podstawie. To udokumentowana sekwencja konfiguracji, a nie bitowy obraz maszyny możliwy do odtworzenia.

Instalacja podstaw macOS

Zacznij od narzędzi wiersza poleceń Apple:

xcode-select --install

macOS otworzy okno dialogowe prowadzące przez proces instalacji.

Homebrew to menedżer pakietów, którego używam w pozostałej części tej konfiguracji:

Pobierz instalator z przejrzanej wersji, zweryfikuj jego sumę kontrolną, sprawdź jego zawartość, a następnie uruchom lokalną kopię:

(
    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"
)

Instrukcja instalacji Homebrew wyjaśnia wprowadzone zmiany i domyślne ścieżki instalacji. Na Apple Silicon Homebrew używa /opt/homebrew. Uruchom polecenie brew shellenv wyświetlone na końcu, aby brew było dostępne w bieżącej powłoce. Instalator może również skonfigurować prefiks Homebrew dla przyszłych powłok logowania. Pinowanie commita i SHA-256 obejmują plik bootstrapu — po weryfikacji aktualizuj je razem. Sam Homebrew jest menedżerem pakietów typu rolling release, dlatego późniejsze polecenia brew install nadal będą wskazywać aktualne w danym momencie wersje formuł.

Zainstaluj używane przeze mnie regularnie narzędzia wiersza poleceń:

brew install openssl readline sqlite3 xz zlib uv htop gitmoji pandoc ncdu tmux

Pakiety dzielą się na trzy grupy:

  • openssl, readline, sqlite3, xz i zlib dostarczają biblioteki do typowych zadań w Pythonie i pracy z wierszem poleceń.
  • uv zarządza wersjami Pythona, środowiskami, zależnościami, poleceniami i lockfile’ami.
  • htop, tmux, ncdu, gitmoji i pandoc służą odpowiednio do monitorowania procesów, sesji terminala, analizy zajętości dysku, formatowania commitów i konwersji dokumentów.

Używanie uv w codziennej pracy z Pythonem

Przed przejściem na uv używałem pyenv do zarządzania środowiskami Pythona. Obecnie uv obsługuje mój codzienny workflow. Zainstaluj najnowszą wersję Pythona zarządzaną przez uv:

uv python install

Spowoduje to zainstalowanie najnowszej wersji dostępnej w uv w momencie konfiguracji. W przypadku wersji przypisanej do konkretnego projektu użyj workflow pinowania opisanego w moim krótkim przewodniku po zarządzaniu Pythonem na macOS za pomocą uv.

Zainstaluj pyenv osobno tylko wtedy, gdy potrzebujesz ścieżki budowania ze źródeł:

brew install pyenv

Używam pyenv, gdy potrzebuję interpretera zbudowanego ze źródeł albo niestandardowych opcji kompilacji CPythona, których nie zapewniają prebuilt dystrybucje uv. Jeśli pomijasz tę opcjonalną instalację, usuń pyenv z listy pluginów powłoki poniżej.

Wybór terminala

Domyślny Terminal macOS jest wystarczający. Przez lata używałem iTerm2, a niedawno przeszedłem na Warp — terminal oparty na Rust z wbudowanymi funkcjami AI. Ten wybór nie wpływa na dalszą konfigurację.

Jeśli pozostajesz przy iTerm2, zmieniam w nim dwa ustawienia:

Włącz naturalną edycję tekstu

  1. Otwórz Preferences → Profiles → Keys → Key Mappings.
  2. Otwórz menu rozwijane Presets…
  3. Wybierz „Natural Text Editing”.

Wybierz motyw kolorystyczny

  1. Przejrzyj motywy na stronie iTerm2-Color-Schemes.
  2. Otwórz Preferences → Profiles → Colors → Color Presets…
  3. Wybierz Import i wskaż pobrany motyw.

Konfiguracja Zsh

macOS używa Zsh jako domyślnej powłoki logowania. Korzystam z dołączonego do systemu /bin/zsh; Zsh z Homebrew instaluję tylko wtedy, gdy potrzebuję konkretnej, nowszej wersji upstream.

Sprawdź zainstalowaną wersję Zsh i bieżącą powłokę logowania:

echo "$SHELL"
command -v zsh
zsh --version

Jeśli Zsh jest zainstalowany, ale nie jest wybraną powłoką logowania, przełącz się na wersję dołączoną do systemu:

chsh -s /bin/zsh

Po zmianie powłoki logowania otwórz nowy terminal.

Oh My Zsh dodaje używane przeze mnie ustawienia domyślne i system pluginów. Jego standardowy instalator korzysta ze zmiennej gałęzi. W przypadku przypiętej konfiguracji sklonuj repozytorium bez przełączania się na tę gałąź, wybierz zweryfikowany commit i dopiero wtedy skopiuj szablon:

(
    set -e
    omz_dir="$HOME/.oh-my-zsh"
    if [ -L "$HOME/.zshrc" ]; then
        printf 'Refusing to replace symlink: %s\n' "$HOME/.zshrc" >&2
        exit 1
    fi
    if [ -e "$HOME/.zshrc" ] && [ ! -f "$HOME/.zshrc" ]; then
        printf 'Refusing to replace non-regular file: %s\n' "$HOME/.zshrc" >&2
        exit 1
    fi
    if [ -e "$HOME/.zshrc" ]; then
        omz_backup="$(mktemp "$HOME/.zshrc.pre-oh-my-zsh.XXXXXX")"
        cp "$HOME/.zshrc" "$omz_backup"
        printf 'Existing .zshrc backed up to %s\n' "$omz_backup"
    fi
    git clone --filter=blob:none --no-checkout https://github.com/ohmyzsh/ohmyzsh "$omz_dir"
    git -C "$omz_dir" checkout --detach 4b657407c98bbc8830ae66c2ac7ff3d737c55a83
    test "$(git -C "$omz_dir" rev-parse HEAD)" = 4b657407c98bbc8830ae66c2ac7ff3d737c55a83
    new_zshrc="$(mktemp "$HOME/.zshrc.new.XXXXXX")"
    trap 'rm -f "$new_zshrc"' EXIT
    cp "$omz_dir/templates/zshrc.zsh-template" "$new_zshrc"
    test -s "$new_zshrc"
    test ! -d "$HOME/.zshrc"
    mv -f "$new_zshrc" "$HOME/.zshrc"
)

Blok zatrzymuje się przed zastąpieniem .zshrc, jeśli klonowanie lub weryfikacja commita zakończy się niepowodzeniem. Odrzuca dowiązania symboliczne i pliki niebędące zwykłymi plikami, tworzy kopię zapasową istniejącego pliku pod unikalną nazwą .zshrc.pre-oh-my-zsh.*, a następnie zastępuje go zweryfikowaną kopią tymczasową w ramach jednej operacji rename. Porównaj wyświetloną kopię zapasową z szablonem i przywróć lokalne ustawienia przed otwarciem nowej powłoki. Checkout jest przypięty do commita 4b65740; aktualizuj hash dopiero po przejrzeniu nowszej wersji.

Uruchamiaj fragmenty konfiguracji powłoki z jednej powłoki konfiguracyjnej, bez innego procesu modyfikującego .zshrc albo docelowe katalogi pluginów i motywów. Odmawiają one nadpisania istniejących lub dowiązanych symbolicznie lokalizacji, ale nie są menedżerem pakietów obsługującym wiele procesów.

Dodawanie pluginów

Zainstaluj zsh-autosuggestions i zsh-syntax-highlighting w niestandardowym katalogu pluginów Oh My Zsh:

install_pinned_zsh_repo() (
    set -e
    repo_url="$1"
    commit="$2"
    destination="$3"
    if [ -L "$destination" ]; then
        printf 'Refusing symlink destination: %s\n' "$destination" >&2
        return 1
    fi
    if [ -d "$destination/.git" ] && [ "$(git -C "$destination" rev-parse HEAD)" = "$commit" ]; then
        return 0
    fi
    destination_parent="$(dirname "$destination")"
    mkdir -p "$destination_parent"
    stage="$(mktemp -d "$destination_parent/.pinned-zsh.XXXXXX")"
    cleanup_stage() { rm -rf "$stage"; }
    trap cleanup_stage EXIT
    git clone --filter=blob:none --no-checkout "$repo_url" "$stage/repo"
    git -C "$stage/repo" checkout --detach "$commit"
    test "$(git -C "$stage/repo" rev-parse HEAD)" = "$commit"
    test ! -e "$destination"
    test ! -L "$destination"
    mv -h -n "$stage/repo" "$destination"
    test ! -e "$stage/repo"
    test "$(git -C "$destination" rev-parse HEAD)" = "$commit"
)

install_pinned_zsh_repo https://github.com/zsh-users/zsh-autosuggestions e52ee8ca55bcc56a17c828767a3f98f22a68d4eb "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions"
install_pinned_zsh_repo https://github.com/zsh-users/zsh-syntax-highlighting.git db085e4661f6aafd24e5acb5b2e17e4dd5dddf3e "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting"

Przypięty commit zsh-autosuggestions i commit zsh-syntax-highlighting odpowiadają opublikowanym wydaniom v0.7.1 i 0.8.0. Aktualizuj hashe dopiero po przejrzeniu nowszego wydania.

Edytuj ~/.zshrc, aby ładował je wraz z używanymi przeze mnie pluginami:

plugins=(
    aws bgnotify brew docker docker-compose
    emoji forklift gcloud git history iterm2
    keychain kubectl macos pre-commit
    pyenv pylint python screen themes
    tmux virtualenv vscode
    zsh-autosuggestions zsh-syntax-highlighting
)

Pozostaw zsh-syntax-highlighting na końcu tablicy. Wiki pluginów Oh My Zsh opisuje pluginy dołączone do pakietu. Dwa zewnętrzne pluginy podpowiadają polecenia na podstawie historii i wyróżniają składnię podczas pisania; postępuj zgodnie z instrukcjami instalacji w poszczególnych repozytoriach.

Dodawanie Powerlevel10k i czcionki

Powerlevel10k to używany przeze mnie motyw Zsh. Pokazuje bieżący katalog roboczy, status Git i aktywne środowisko Pythona w promptcie oraz udostępnia interaktywny kreator konfiguracji. Zainstaluj go dla Oh My Zsh, a następnie wybierz motyw w ~/.zshrc:

(
    set -e
    p10k_dir="${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k"
    if [ -L "$p10k_dir" ]; then
        printf 'Refusing symlink destination: %s\n' "$p10k_dir" >&2
        exit 1
    fi
    if [ -d "$p10k_dir/.git" ] && [ "$(git -C "$p10k_dir" rev-parse HEAD)" = 35833ea15f14b71dbcebc7e54c104d8d56ca5268 ]; then
        exit 0
    fi
    test ! -e "$p10k_dir"
    p10k_parent="$(dirname "$p10k_dir")"
    mkdir -p "$p10k_parent"
    stage="$(mktemp -d "$p10k_parent/.pinned-p10k.XXXXXX")"
    cleanup_stage() { rm -rf "$stage"; }
    trap cleanup_stage EXIT
    git clone --filter=blob:none --no-checkout https://github.com/romkatv/powerlevel10k.git "$stage/repo"
    git -C "$stage/repo" checkout --detach 35833ea15f14b71dbcebc7e54c104d8d56ca5268
    test "$(git -C "$stage/repo" rev-parse HEAD)" = 35833ea15f14b71dbcebc7e54c104d8d56ca5268
    test ! -L "$p10k_dir"
    mv -h -n "$stage/repo" "$p10k_dir"
    test ! -e "$stage/repo"
    test "$(git -C "$p10k_dir" rev-parse HEAD)" = 35833ea15f14b71dbcebc7e54c104d8d56ca5268
)

Przypięty commit Powerlevel10k jest wskazany przez wydanie v1.20.0.

Powyższe identyfikatory obiektów Git zapobiegają cichemu dryfowi wersji po ich uzyskaniu, ale same w sobie nie uwierzytelniają maintenera. Polecenia te ufają endpointowi HTTPS GitHub i powiązanym z nim kontom repozytoriów. Aby zastosować silniejszy model zaufania, zweryfikuj podpisany tag lub commit względem klucza maintenera uzyskanego niezależnie, zanim przeniesiesz przygotowany checkout na miejsce docelowe.

ZSH_THEME="powerlevel10k/powerlevel10k"

Otwórz nową powłokę i uruchom p10k configure.

Jeśli używasz zintegrowanego terminala VS Code, zainstaluj zalecaną czcionkę przed ustawieniem czcionki terminala, aby ikony Powerlevel10k wyświetlały się poprawnie. p10k configure może automatycznie zainstalować czcionkę w iTerm2. W przypadku innych terminali pobierz i zainstaluj cztery pliki TTF z przewodnika po czcionce Powerlevel10k.

W VS Code ustaw czcionkę terminala na MesloLGS NF:

  1. Otwórz ustawienia edytora.
  2. Wyszukaj terminal.integrated.fontFamily.
  3. Ustaw wartość MesloLGS NF.

Wybór edytorów i asystentów AI

Zazwyczaj mam otwarte jedno IDE, a obok niego jedno lub dwa narzędzia AI.

IDE

  • Cursor to fork VS Code z wbudowanym AI do pair programmingu.
  • VS Code ma większy katalog rozszerzeń.

Asystenci AI

  • OpenAI Codex to agent kodujący firmy OpenAI.
  • Claude to asystent firmy Anthropic, po którego sięgam przy trudniejszych zadaniach.

Obecnie używam Cursora, a równolegle uruchamiam Codex i Claude Code.

Wybór kontenerów i lokalnych narzędzi do modeli

Pozostałe narzędzia zależą od pracy, którą planuję wykonywać na komputerze:

Docker Desktop i lokalne narzędzia do uruchamiania modeli to niezależne wybory. Instaluj je wtedy, gdy projekty wymagają kontenerów lub lokalnej inferencji; konfiguracja powłoki i Pythona nie zależy od żadnego z nich.

Ustalenie granic konfiguracji

To osobista konfiguracja, a nie minimalna ani uniwersalna baza macOS. Usuń elementy, których nie używasz. Zawiera zweryfikowane wersje bootstrapu i wydań pluginów, ale formuły Homebrew i aplikacje GUI nadal się zmieniają. Spójność utrzymuję przede wszystkim na poziomie następujących granic:

  1. Używaj dołączonego do systemu /bin/zsh, chyba że projekt wymaga konkretnej, nowszej wersji Zsh.
  2. Używaj uv do codziennej instalacji Pythona i środowisk projektowych; zachowaj pyenv do interpreterów budowanych ze źródeł lub niestandardowych interpreterów CPython.
  3. Dokumentuj polecenia instalacyjne, pozbawione sekretów dotfiles, rozszerzenia edytora i lokalizacje modeli, aby kolejna konfiguracja była mechaniczna.

Materiały referencyjne