Настройка MacBook для AI-инжиниринга: инструменты и рабочий процесс в macOS

Автоматический перевод Эта статья была автоматически переведена с оригинальной английской версии.

Это последовательность настройки, которую я применяю на новом MacBook перед началом работы в AI-инжиниринге. Здесь рассматриваются командные инструменты, которых нет в macOS по умолчанию, Homebrew, Python с uv, shell, выбор терминала и редактора, Docker и локальные AI-инструменты.

Полезно разделять обязательную базу и личные предпочтения. Xcode Command Line Tools, Homebrew, Git и рабочий процесс с Python — это база. Warp, iTerm2, Powerlevel10k, Cursor и локальные раннеры моделей — варианты на выбор. Команды ниже устанавливают базовые компоненты, а в следующих разделах описаны выбранные мной инструменты поверх этой базы. Это задокументированная последовательность настройки, а не побитовый образ машины, который можно воспроизвести один в один.

Установите базовые компоненты macOS

Начните с командных инструментов Apple:

xcode-select --install

macOS откроет диалоговое окно и проведёт вас через установку.

Homebrew — пакетный менеджер, который я использую для остальных компонентов этой настройки:

Скачайте установщик из проверенной ревизии, проверьте его дайджест, проинспектируйте файл и затем запустите локальную копию:

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

В руководстве по установке Homebrew описаны изменения и префиксы по умолчанию. На Apple Silicon Homebrew использует /opt/homebrew. Выполните команду brew shellenv, напечатанную в конце, чтобы brew был доступен в текущем shell. Установщик также может настроить префикс Homebrew для будущих login shell. Фиксация коммита и SHA-256 защищают bootstrap-файл; после проверки обновляйте их одновременно. Сам Homebrew — rolling пакетный менеджер, поэтому последующие команды brew install всё равно будут разрешаться в актуальные на тот момент версии формул.

Установите командные инструменты, которые я регулярно использую:

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

Пакеты делятся на три группы:

  • openssl, readline, sqlite3, xz и zlib предоставляют библиотеки для распространённых задач на Python и в командной строке.
  • uv управляет версиями Python, окружениями, зависимостями, командами и lock-файлами.
  • htop, tmux, ncdu, gitmoji и pandoc предназначены для мониторинга процессов, терминальных сессий, анализа диска, форматирования коммитов и конвертации документов.

Используйте uv для повседневной работы с Python

До перехода на uv я использовал pyenv для управления окружениями Python. Теперь uv покрывает мой повседневный рабочий процесс. Установите последнюю версию Python, доступную через uv:

uv python install

Будет установлена последняя версия, доступная в uv на момент настройки. Для версии, специфичной для проекта, используйте процесс фиксации версии из моего краткого руководства по управлению Python в macOS с помощью uv.

Устанавливайте pyenv отдельно только тогда, когда вам нужен путь со сборкой из исходников:

brew install pyenv

Я использую pyenv, когда нужен интерпретатор, собранный из исходников, или специальные опции сборки CPython, которых нет в готовых дистрибутивах uv. Если вы пропускаете эту необязательную установку, удалите pyenv из списка shell-плагинов ниже.

Выберите терминал

Стандартный терминал macOS вполне подходит. Я много лет использовал iTerm2, а недавно перешёл на Warp — терминал на Rust со встроенными AI-функциями. Этот выбор не влияет на дальнейшую настройку.

Если вы остаетесь на iTerm2, я меняю две настройки:

Включите естественное редактирование текста

  1. Откройте Preferences → Profiles → Keys → Key Mappings.
  2. Откройте выпадающий список Presets…
  3. Выберите «Natural Text Editing».

Выберите цветовую тему

  1. Просмотрите темы на сайте iTerm2-Color-Schemes.
  2. Откройте Preferences → Profiles → Colors → Color Presets…
  3. Выберите Import и укажите скачанную тему.

Настройте Zsh

macOS использует Zsh как login shell по умолчанию. Я использую встроенный /bin/zsh; устанавливайте Zsh из Homebrew только при необходимости в конкретной более новой upstream-версии.

Проверьте установленный Zsh и текущий login shell:

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

Если Zsh установлен, но не выбран как login shell, переключитесь на встроенную копию:

chsh -s /bin/zsh

После смены login shell откройте новый терминал.

Oh My Zsh добавляет используемые мной настройки по умолчанию и систему плагинов. Его стандартный установщик следует ветке, которая постоянно меняется. Для закреплённой настройки клонируйте репозиторий без checkout этой ветки, выберите проверенный коммит и только после этого скопируйте шаблон:

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

Блок останавливается до замены .zshrc, если клонирование или проверка коммита завершается ошибкой. Он отклоняет symlink и не обычные файлы, создаёт резервную копию существующего файла под уникальным именем .zshrc.pre-oh-my-zsh.* и заменяет его проверенной временной копией одной операцией rename. Сравните напечатанную резервную копию с шаблоном и восстановите локальные настройки перед открытием нового shell. Checkout закреплён на коммите 4b65740; обновляйте хэш только после проверки новой ревизии.

Выполняйте фрагменты конфигурации shell из одного setup-shell, не допуская параллельного редактирования .zshrc или целевых директорий плагинов и темы. Они отклоняют существующие или симлинкованные целевые пути, но не являются пакетным менеджером для нескольких процессов.

Добавьте плагины

Установите zsh-autosuggestions и zsh-syntax-highlighting в директорию пользовательских плагинов 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"

Закреплённые коммит zsh-autosuggestions и коммит zsh-syntax-highlighting соответствуют опубликованным релизам v0.7.1 и 0.8.0. Обновляйте хэши только после проверки нового релиза.

Отредактируйте ~/.zshrc, чтобы загружать их вместе с используемыми мной плагинами:

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
)

Оставьте zsh-syntax-highlighting последним элементом массива. В wiki плагинов Oh My Zsh описаны встроенные плагины. Два внешних плагина предлагают команды из истории и подсвечивают команды по мере ввода; инструкции по установке приведены в соответствующих репозиториях.

Добавьте Powerlevel10k и его шрифт

Powerlevel10k — тема Zsh, которую я использую. Она показывает в промпте рабочую директорию, статус Git и активное окружение Python, а также предоставляет интерактивный мастер настройки. Установите её для Oh My Zsh, затем выберите тему в ~/.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
)

Закреплённый коммит Powerlevel10k указан в релизе v1.20.0.

Приведённые выше идентификаторы объектов Git предотвращают незаметное изменение версии после получения файлов, но сами по себе не подтверждают подлинность сопровождающего проекта. Эти команды доверяют HTTPS-эндпоинту GitHub и аккаунтам репозиториев. Для более строгой модели доверия проверьте подписанный тег или коммит по ключу сопровождающего, полученному отдельно, и только затем переносите подготовленный checkout на место.

ZSH_THEME="powerlevel10k/powerlevel10k"

Откройте новый shell и выполните p10k configure.

Если вы используете встроенный терминал VS Code, установите рекомендуемый шрифт до настройки шрифта терминала, чтобы иконки Powerlevel10k отображались корректно. p10k configure может автоматически установить шрифт в iTerm2. Для других терминалов скачайте и установите четыре файла TTF из руководства по шрифтам Powerlevel10k.

В VS Code установите для терминала шрифт MesloLGS NF:

  1. Откройте настройки редактора.
  2. Найдите terminal.integrated.fontFamily.
  3. Установите значение MesloLGS NF.

Выберите редакторы и AI-ассистентов

Я держу открытым один IDE, а рядом запускаю один или два AI-инструмента.

IDE

  • Cursor — форк VS Code со встроенным AI-парным программированием.
  • VS Code располагает более крупным каталогом расширений.

AI-ассистенты

  • OpenAI Codex — кодинговый агент OpenAI.
  • Claude — ассистент Anthropic, к которому я обращаюсь для более сложных задач.

Сейчас я использую Cursor, а Codex и Claude Code запускаю параллельно.

Выберите контейнеры и локальные инструменты для моделей

Остальные инструменты зависят от задач, которые я планирую выполнять на машине:

  • GitHub Desktop, когда не хочется переходить в CLI.
  • Docker Desktop — используемый мной рантайм контейнеров.
  • Podman Desktop — альтернатива Docker Desktop.
  • Ollama или LM Studio — для локального запуска LLMs на Mac.

Docker Desktop и локальные раннеры моделей — независимые варианты. Устанавливайте их, когда проектам нужны контейнеры или локальный инференс; настройка shell и Python не зависит ни от одного из них.

Зафиксируйте границы настройки

Это личная настройка, а не минимальная или универсальная базовая конфигурация macOS. Удалите всё, чем не пользуетесь. Здесь зафиксированы проверенные bootstrap-ревизии и релизы плагинов, но формулы Homebrew и GUI-приложения продолжают обновляться. Неизменными я стараюсь оставлять следующие границы:

  1. Используйте встроенный /bin/zsh, если только проекту не нужен конкретный более новый Zsh.
  2. Используйте uv для повседневной установки Python и окружений проектов; сохраняйте pyenv для интерпретаторов CPython, собранных из исходников или с кастомными настройками.
  3. Документируйте команды установки, dotfiles без секретов, расширения редактора и расположение моделей, чтобы следующую настройку можно было выполнить механически.

Ссылки