Skip to content

Instantly share code, notes, and snippets.

@LeZuse
Last active July 14, 2025 14:51
macOS Machine Setup

Mac OS Dev Machine Setup

General

For latest settings refer to this comment

For previous settings check this Gist revisions

Remarks

  • always read and follow Homebrew formulae installation instructions
  • NEVER utilize prebundled binaries from Apple (ruby, python, postgres)
    • use virtual environments whenever possible (chruby, virtualenv, nvm, etc)

TODO

  • translate OS settings into defaults calls
  • save all dot files; see https://github.com/jansedivy/dotfiles
  • figure out how to backup a list of installed sw (for reference)
    • using Homebrew Cask?
    • Mac App store installs
@LeZuse
Copy link
Author

LeZuse commented Mar 9, 2023

M1 setup (old for reference)

  • preinstalled

    • MDM
    • carbon black
    • chrome
    • 1password
    • zoom
    • slack
  • initial install wizard

    • skip whatever is not important
      • apple id
  • install brew M1

    • in /opt/homebrew
  • 1password setup using emergency setup kit QR

    • plus browser extensions
  • github login

  • install git

  • copy ssh config

  • brew install node

  • npm install -g yarn

  • clone all work repositories

  • yarn/bundle/setup docker

  • install editor

    • brew install homebrew/cask/sumlime-text

@LeZuse
Copy link
Author

LeZuse commented Mar 9, 2023

@LeZuse
Copy link
Author

LeZuse commented Mar 9, 2023

nice, simple setup.sh & based on stow https://github.com/shakeelmohamed/stow-dotfiles

@LeZuse
Copy link
Author

LeZuse commented Mar 15, 2023

M2 Pro

  • Pair keyboard
  • Set my password
  • Displays arrangement, Menubar to external (make it main), Builtin display resolution: More space
  • Dock to the side (depending on where Mac is)
  • Dock > Magnification On (50%)
  • Desktop > Windows > Close windows when quitting an application Off
  • Desktop background > Use stacks
  • Set computer name (Zuse-XXX)
  • Customise Modifier key: Caps Lock = Control (both internal & external keyboards)
  • Left top hot corner = lock
  • Touch ID - setup both pointer fingers (don’t forget to name them)
  • Trackpad
    • Swipe between pages > Three Fingers
    • Click > Light
    • Silent clicking
    • Tap to click
    • App Expose > Down Three Fingers
  • Appearance > Show scroll bars when scrolling
  • Control Center > Clock options > Display time with seconds
  • Accessibility > Zoom > Use scroll gesture with modifier key (Control) to zoom
  • Keyboard
    • Text input > Turn off Correct spelling automatically, Turn off Capitalise words automatically
    • Keyboard navigation (Tab to focus controls)
    • Shortcuts -> Input sources -> Select previous source -> Alt + Space, Select next source -> Shift + Alt + Space
  • Sign in to Apple ID
    • HW security key needed
  • Set AirDrop discoverability to Everyone
  • Enable unlimited bash history to keep all commands since first boot
  • Install https://brew.sh
  • Install https://cli.github.com/manual/
  • gh auth login
    • Choose github.com, SSH, generate new key, no passphrase, web authentication
  • gh repo clone LeZuse/homedir ~/homedir
  • Double check contents of homedir/dotfiles/Brewfile* files
  • brew bundle -v --file=dotfiles/Brewfile.core
  • Follow all caveats: brew caveats `brew list`
  • Switch to iTerm
    • Settings > Profiles > Colors > Foreground > 190 green
    • General > Command > Custom shell > /opt/homebrew/bin/bash (path to brew installed bash)
  • Install & update MDM managed apps - Kandji Self Help app
    • 1Password, Zoom, Slack
  • Add 1Password Vaults using Setup Code from iPhone
    • Enable Apple Watch Unlock
  • Open installed apps and setup respectively
    • KeepingYouAwake -> Start at Login
    • MonitorControl -> Start at Login, disable Volume control
    • SoundSource -> Start at Login
    • Zoom -> Automatically join audio, Mute my mic when joining, Background blur, Always show meeting controls, Show meeting timers, Stop video and audio when display off, Stop my video when joining a meeting, Hide non-video participants, Always display participant name
  • Safari > View > Show Status bar
  • Safari > General > Safari opens with last session windows, Tabs > Compact, Always show titles, Advanced > Default encoding: Unicode, Show Develop menu
  • Finder > General > New Finder windows show > $HOME
  • brew bundle -v --file=dotfiles/Brewfile.dev
  • Open installed apps and setup respectively
    • Notion -> Dark theme
  • Update to latest Mac OS
  • Apple ID
    • iCloud Mail > Off
    • Calendar -> Off
  • Messages > Enable Messages in iCloud, Reachable at: all except work & apple custom domain test, Turn off Play sound effects
  • Calendar > Accounts > Add Google calendar account, Alerts > Google > Events > 5 min before, Advanced > Turn on timezone support, Delete default On My Mac Calendar, for each calendar > Get Info > Disable/Enable alerts & availability, General > Show 16 hours at a time, View > Show Declined Events
  • Mail > Accounts > Add Gmail account (work & personal), Viewing > Move discarded into > Archive, Show most recent at the top, Delete default On My Mac SentLater mailbox, General > New message notifications > VIPs
  • Open all iCloud apps, check synced data, setup
    • Photos, Passwords, Keychain, Contacts, Reminders, Notes, Safari (tabs & bookmarks), Stocks, Home, Wallet (add daily card)
  • Notes > Edit > Spelling > Turn on Correct spelling automatically
  • Touch ID > Unlock with Apple Watch
  • Notifications
    • Turn off badges: Mail
    • Turn off sound: Calendar
  • Screen time > Turn on
  • Dock
    • Pin Desktop folder (easy screenshot access)
  • brew bundle -v --file=dotfiles/Brewfile.misc
  • RescueTime > Turn off UI sounds
  • mkdir ~/Projects
  • Activity Monitor > Dock Icon > Show CPU History
  • Install SCM breeze https://github.com/scmbreeze/scm_breeze#installation

TODO

  • Login in Logi Options+ to sync settings
  • Symlink shell profile rc files (incl brew PATH)
  • Get back to all brew caveats
  • Apple ID with HW keys
  • Install 1Password for Safari - it actually works pretty well without it
  • Enter Sublime Text license from 1pass
  • Check for not installed apps in apps.txt, user_apps.txt, mas_apps.txt
  • https://github.com/dolmen/github-keygen
  • Remember password for SSH keys (Github etc)
  • Setup scm_breeze
  • Dock icons
  • Spotlight enabled folders
  • Menubar icons & apps
  • Add aliases to Mail accounts
  • Organize the UI of Mail app (favorites and header)
  • Finder sidebar Favorites
  • Figure out how to sync Sublime settings
  • Check why Keyboard Input Sources are not syncing over iCloud (US & Czech querty)
  • Control centre widgets
  • Set faster key repeat using defaults write
  • Convert all manual steps above into defaults write commands
  • Add czech qwerty layout

needs old Mac:

  • Figure out how to preserve Zoom settings
  • Figure out how to preserve Notifications settings

Uh oh!

There was an error while loading. Please reload this page.

@LeZuse
Copy link
Author

LeZuse commented Mar 15, 2023

@LeZuse
Copy link
Author

LeZuse commented Mar 16, 2023

Spellcheck & correction settings
https://apple.stackexchange.com/a/411622/62041

@LeZuse
Copy link
Author

LeZuse commented Mar 29, 2023

Storing secrets securely
https://scriptingosx.com/2021/04/get-password-from-keychain-in-shell-scripts/
https://gist.github.com/willgarcia/7347306870779bfa664e - homebrew token needs no scopes, for private repos only repo

@LeZuse
Copy link
Author

LeZuse commented Apr 26, 2023

@LeZuse
Copy link
Author

LeZuse commented Apr 26, 2023

@LeZuse
Copy link
Author

LeZuse commented May 4, 2023

notification settings management
https://github.com/jacobsalmela/NCutil

@LeZuse
Copy link
Author

LeZuse commented May 4, 2023

@LeZuse
Copy link
Author

LeZuse commented May 9, 2023

@LeZuse
Copy link
Author

LeZuse commented Jun 12, 2023

@LeZuse
Copy link
Author

LeZuse commented Oct 24, 2023

MacOS Sonoma

@LeZuse
Copy link
Author

LeZuse commented Dec 16, 2024

Managing multiple git identities within .gitconfig file.

You can set this one up per-folder but I prefer mine to be set per wildcard of remote origin URL like so, example:
contents of my global ~/.gitconfig

[includeIf "hasconfig:remote.*.url:**github.com:*/*.git"]
	path = .gitconfig_personal

[includeIf "hasconfig:remote.*.url:**github.com:productboard/*.git"]
	path = .gitconfig_productboard

contents of ~/.gitconfig_productboard:

[user]
	email = xxx.xxxx@productboard.com
	name = John Does
    signingKey = xxx

contents of ~/.gitconfig_personal

# ... you get the idea

@LeZuse
Copy link
Author

LeZuse commented Apr 3, 2025

@LeZuse
Copy link
Author

LeZuse commented Jun 26, 2025

@LeZuse
Copy link
Author

LeZuse commented Jul 8, 2025

OSS version of "Hide my email"
https://github.com/simple-login/app

@LeZuse
Copy link
Author

LeZuse commented Jul 14, 2025

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment