Skip to content

1h8s/fresh-mac-setup

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

fresh-mac-setup

Настройка нового Mac для разработки одной командой.

Зачем это

Когда мне выдали рабочий Mac, я потратил целый день, чтобы настроить всё под себя: Homebrew, терминал, шрифты, горячие клавиши, системные настройки, инструменты для работы. День. На то, что по сути сводится к набору одних и тех же команд.

Недавно я купил Mac mini — и понял, что всю эту настройку придётся делать заново. По памяти, гугля забытые шаги, вспоминая, какие именно пакеты я ставил и какие твики macOS включал. Перспектива повторять этот день меня не обрадовала.

Поэтому я собрал всё в один скрипт. Теперь настройка чистого мака — это одна команда и пара минут ожидания, а не день кликанья по меню. И когда появится следующий мак, я просто запущу это снова.

Бонусом написал второй скрипт — для отката, на случай если захочется вернуть систему к исходному состоянию.

Что внутри

Два скрипта:

  • setup_mac.sh — настраивает чистый Mac с нуля
  • uninstall_mac.sh — откатывает изменения обратно

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

Быстрый старт

git clone https://github.com/<USERNAME>/mac-setup.git
cd mac-setup
chmod +x setup_mac.sh
./setup_mac.sh

Скрипт спросит пароль один раз в начале, дальше работает сам. Единственное, что потребует твоего участия по ходу — добавить SSH-ключ на GitHub (откроется страница, ключ уже будет в буфере обмена).

Запускай файл напрямую (./setup_mac.sh), а не через curl | bash — интерактивному меню нужен настоящий терминал для чтения стрелок.

Что настраивает setup_mac.sh

Базовая система

  • Xcode Command Line Tools, Homebrew (с правильным путём для Apple Silicon и Intel)
  • JetBrains Mono Nerd Font — шрифт с глифами для иконок в терминале и Neovim

CLI-инструменты

  • База: git, gh, tmux, btop, neovim, wget, curl, jq
  • Современные альтернативы: ripgrep, fd, eza, bat, fzf, zoxide
  • SRE-набор: kubectl, k9s, kubectx, helm, stern

Языки и рантаймы

  • go, python, nvm (Node ставится через nvm, чтобы не конфликтовать)

Swift (по выбору)

  • swiftlint, swiftformat, xcbeautify

Docker (по выбору)

  • Colima + Docker CLI (лёгкий, без GUI) или Docker Desktop

Терминал

  • Oh My Zsh + Powerlevel10k, плагины автодополнения и подсветки
  • Современные алиасы (ls → eza, cat → bat и т.д.), интеграция zoxide и fzf

Безопасность и Git

  • SSH-ключ ed25519 с добавлением в Keychain
  • Подпись коммитов через SSH (allowed_signers настраивается автоматически — без него git log --show-signature ругается)
  • Touch ID для sudo в терминале (через sudo_local, переживает обновления macOS; для tmux подключается pam-reattach)

GUI-приложения (выбор в меню)

iTerm2, VS Code, Spotify, Rectangle, Google Chrome, Raycast, Stats, Telegram, Maccy, The Unarchiver, MonitorControl, DockDoor, Caffeine, AppCleaner, Bruno — каждое можно включить или выключить.

Системные твики macOS

  • Finder: показ скрытых файлов, расширений, путь-бар, список по умолчанию
  • Отключение автозамены текста, быстрый повтор клавиш, мгновенное автоскрытие Dock
  • Скриншоты в PNG без тени, сохранение в ~/Pictures/Screenshots
  • Блокировка .DS_Store на сетевых и USB-накопителях

Структура папок

Создаёт систему хранения, организованную по источнику файла, а не по абстрактным категориям:

~/Documents/
  00_Inbox/        свалка по умолчанию для неразобранного
  Personal/        личные документы (IDs, Medical)
  Finances/        счета, налоги, выписки
  Work/            рабочие бумаги, договоры
  Business/        своё дело
  _Archive/        законченное

~/Pictures/
  00_Inbox/
  Screenshots/     сюда же сохраняются скриншоты
  Wallpapers/
  _Archive/

~/Developer/
  00_Inbox/        быстрый клон или эксперимент
  _Archive/        замороженные проекты
  README.md        памятка о принципе

Префиксы 00_ и _ держат Inbox сверху, Archive снизу при сортировке. Папки проектов не дробятся — папка проекта сама по себе единица.

Откат: uninstall_mac.sh

./uninstall_mac.sh

Возвращает систему к состоянию до setup. В меню выбираешь, что именно откатить: приложения, CLI, Swift, Docker, Deck, системные твики, конфигурацию zsh, Touch ID, шрифт.

Откат сделан осторожно:

  • Файлы не теряются. Папки удаляются только пустые (через rmdir, который физически не трогает непустые) — твои документы в безопасности.
  • git, curl, wget не удаляются даже при откате CLI — они почти наверняка были в системе до setup.
  • Опасные действия — только по подтверждению. SSH-ключ, Git-конфиг и сам Homebrew по умолчанию не трогаются; на каждое спрашивается отдельно, с дефолтом «нет».
  • Конфиг .zshrc правится хирургически — удаляется только блок, добавленный setup, твои строки остаются.

Замечания

Deck (менеджер буфера обмена, по выбору) ставится из стороннего tap и не нотаризован Apple, поэтому при первом запуске macOS его заблокирует — нужно один раз нажать «Open Anyway» в System Settings → Privacy & Security. Карантин снимается только для него, не глобально. После установки стоит выключить авто-выгрузку диагностики; AI-функции отправляют буфер внешним провайдерам, так что при работе с секретами лучше использовать локальную модель через Ollama.

Туда, что осталось руками после setup:

  • В iTerm2 выбрать шрифт JetBrainsMono Nerd Font
  • Пройти мастер настройки Powerlevel10k (или p10k configure)
  • Docker Desktop при выборе — запустить один раз из /Applications

Совместимость

Apple Silicon и Intel. Написано с учётом того, что macOS из коробки идёт с bash 3.2 — скрипты работают на нём без установки нового bash.

Лицензия

MIT

About

Interactive, modular macOS setup script for everyone, from casual users to SRE/DevOps. Automates system tweaks, software installation, and cloud/dev tools via a clean Bash 3.2 TUI. Safe, idempotent, and includes a full uninstaller.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages