November 15, 2023

Setting up a new Macbook M3 from scratch

Dev Notes
I just got a new Macbook M3 Pro Max last week, and decided to set up my dev environment from scratch. These are my setup notes.

Starting a new Macbook Pro setup from scratch was much less painful than I initially expected. I thought setting up environment variables and various system tools like Docker would be a massive pain, but turns out it took a lot less time than I thought.

On my old Intel Macbook I decided to copy everything over. Somehow it messed up the disk image partition, and almost ~100GB wasn’t usable for some odd reason. It kept thinking it had a duplicate volume or something, and I could never figure it out. This time I’m starting from scratch!

In total I spent about ~6 hours to set up 95% of everything I needed to do work on this machine.

A few things to keep in mind:

  • Have good wifi! I set my machine up at the Sydney Startup Hub which had a measly 30mb down and something like 5mb up. My 5G connection wasn’t doing much better (with the Optus outage). Without this issue, setup would’ve taken much less time.
  • Transfer apps, files and folders with Airdrop! I keep forgetting how incredibly fast Airdrop is
  • Your old Intel apps might not work, or might work poorly Some apps complain they run on suboptimal silicon — those have been replaced through new app downloads. I’m still running many old Intel apps moved over from Airdrop; lots of apps are “universal” and don’t have a M-compatible chip, while others just hum along sub-optimally. I’ve decided I’m ok with that.
  • The CouchDB daemon somehow didn’t run well on M3 on install; the icon in the top bar took ~1 min to open when clicked, and the admin page wouldn’t open. Somehow it fixed itself a week later though…

The following is a list of apps, configs, etc. that I had to do to get my machine to my liking and ready for work.

Mac Settings

I’m weird about my OSX settings

  • Set up swipe shortcuts in settings
  • Display path + disk space in Finder
  • Show hidden files (Just hit shift cmd .)
  • Uncheck Swipe between pages

Mini & Utility Apps

Here’s a bunch of “mini apps” I like to have around on the toolbar

  • Setapp Apps
    • Apparently I only have a single-machine license and need multi computer license. Sigh. The M3 is my main, so I moved this suite of apps over.
    • Apps: CleanMyMac, Gemini 2, Tape
  • ItsyCal: Nice to have a small calendar in the corner
  • Spectacle: Move windows around with keyboard
  • Flux: Turns screens orange at dark; better than the built-in Mac app
  • Dropbox: Offload data to the Dropbox cloud, for backups
  • Google Drive: Offload data to the Google cloud, for backups
  • Calibre: For managing eBooks
  • 1Password: Password handling
  • Bitwarden: More Password handling
  • Disk Inventory X: I have a TB of space. Will I ever use this (probably, yes)
  • Omnidisk Sweeper: (refer to above)
  • FileZilla: Is FTP still a thing?
  • Folx: Are torrents still a thing?
  • NordVPN: For pretending to be back home
  • Cloudflare Warp: Supposedly makes things faster. Been off for the last week; has slowed connection speeds by 1/100.
  • Handbrake: Video compression; great for video cutting/editing
  • VLC: Plays any video including weird codecs. Great for video preview / editing
  • Beeper: A multi-platform messenger tool; I don’t really use this, but excited to try the API
  • MacGPT: I haven’t been using this since the new GPTs update

Didn’t make the cut:

  • Oversight: Tells you when you’re being watched. Decided to give into surveillance.
  • Loom: Only good for short videos; trying out Tape instead. Maybe should use screen.studio instead?
  • Tunnelblick: Using NordVPN right now; no need for a home-VPN.
  • MongoDB Community: Great tool for managing MongoDB Atlas. Been using Couchdb and D1 though.

Work & Dev Apps

  • Docker Desktop: Necessary evil to run Docker
  • CouchDB: Runs Couchdb locally in the background for testing. Useful!
  • Postgres.app: Runs Postgres locally in the background for testing. Also useful!
  • XCode: This is a massive install that Node requires. Copy this over from /applications with Airdrop
  • VS Code: A nice code editor
  • Cursor.sh: A cheat code for programming

CLI Apps & Configurations

Command-line apps and configurations.

  • Note: on M-series Macs, use ~/.zprofile for configurations and system variables; this replaces .bash_profile — so make sure you copy over any settings
  • Start by setting up homebrew: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  • Once Sublime is installed, use it to open folders or edit text files, e.g. subl . or subl ~/.zprofile
  • Python3 & pip:
    • Install python 3 with brewbrew install python@3
    • Add this to subl ~/.zprofile: export PATH="/opt/homebrew/bin:$PATH"
    • Restart terminal
    • Type in terminal: source ~/.zprofile
    • Pip should now with pip3: pip3 --version to check version
    • Note that in Sonoma / home-brew everything python is in opt/homebrew instead of usr/local/
  • 7zip:
    • Download 7zz
    • add to subl ~/.zprofile: export PATH="/Applications/7zz.app/Contents/SharedSupport/bin:$PATH"
  • Github
    • Install with brew install gh
    • If Sublime is installed and setup, change to subl on commit: git config --global core.editor "subl -n -w"
    • Create a new public key for Github signing: None of their documentation worked, but I got GPT-4 to do this for me: https://chat.openai.com/share/6ca7e574-8531-477e-9b67-730b0dc50578
    • GPT-4 instructions (worked like a charm)

      To set up a new Mac with your GitHub public key for SSH authentication, follow these steps:

      1. Generate an SSH Key Pair:
          • Open your Terminal on the new Mac.
          • Use the ssh-keygen command to generate a new SSH key pair. You can specify the filename if you want, but the default is usually fine.
            •     
                      mathematicaCopy code
              ssh-keygen -t ed25519 -C "your_email@example.com"
                  
              
          • Replace "your_email@example.com" with the email associated with your GitHub account.
      1. Save the SSH Key:
          • You'll be prompted to choose a location to save the SSH key pair. Press Enter to accept the default location, which is usually ~/.ssh/id_ed25519 for an Ed25519 key.
      1. Add the SSH Key to the SSH Agent:
          • Start the SSH agent if it's not already running:
            •     
                      bashCopy code
              eval "$(ssh-agent -s)"
                  
              
          • Add your SSH key to the agent:
            •     
                      javascriptCopy code
              ssh-add ~/.ssh/id_ed25519
              
              
                  
              
      1. Copy the Public Key:
          • Use the following command to copy the contents of your public key to the clipboard:
            •     
                      javascriptCopy code
              pbcopy < ~/.ssh/id_ed25519.pub
                  
              
      1. Add the Public Key to Your GitHub Account:
          • Go to your GitHub account settings.
          • Click on "SSH and GPG keys."
          • Click "New SSH key" or "Add SSH key," give it a title (e.g., "Mac SSH Key"), and paste the public key you copied in the previous step into the key field.
      1. Test the SSH Connection:
          • To ensure everything is set up correctly, test the SSH connection to GitHub:
            •     
                      cssCopy code
              ssh -T git@github.com
                  
              
          • You should see a message confirming your successful connection.

      Now, your new Mac is set up with your GitHub public key for SSH authentication. You can use this key to securely access your GitHub repositories without needing to enter your GitHub password each time.

  • Fly.io
    • Install: brew install flyctl
    • fly auth login
  • Cloudflare Wranger CLI
    • They removed the global install; it’s only project specific now. Just install like any other packages in the project.
    • In a project: yarn add --dev wrangler
  • Vercel:
    • yarn global add vercel
  • Sentry-CLI: decided I didn’t need this right now
  • Node / nvm
    • Don’t install Node (brew install node) outright; use nvm instead as it gives you the ability to switch between node versions very easily.
    • Installing nvm: brew install nvm
    • Add this to subl ~/.zprofile: source $(brew --prefix nvm)/nvm.sh so nvm is always available
    • Restart terminal
    • Install a node version, e.g. nvm use 18 then set it as default nvm alias default 18
    • To list all versions: nvm list or to see current version: nvm current
    • Notes: https://collabnix.com/how-to-install-and-configure-nvm-on-mac-os/
    • Install yarn
      • brew install yarn
  • Other Stuff
    • visidata: for dealing with CSVs: brew install saulpw/vd/visidata

Consumer Apps

  • Chrome: Do this one first; set up the account to sync
  • Airtable
  • Notion
  • Figma
  • Front: Multiplayer email client
  • Spotify
  • Google: Docs / Sheets / Slides
  • Microsoft: Office / Word / Excel / Powerpoint
  • Firefox: For backup
  • Agenda: For journaling / short notes
  • Sketch: For older projects (newer projects are on Figma)
  • Whatsapp
  • Telegram
  • Discord
  • Slack
  • Zoom
  • Webex: barf

Didn’t make the cut:

  • Microsoft Edge: Good to use the new Bing AI features but that’s about it.
  • PDF Expert: Don’t PDF editing very much, but this is the GOAT product for PDFs.
  • Opera (and the other browsers): I used to test on multiple browsers, but now they’re all based on Chromium so…

Games

Mac doesn’t really have any good games (c’mon Game Pass, get on the Mac!), but this is what I like to put on a new machine to test if it’s powerful enough. My Intel Macbook struggled with all of these, running at ~10fps. The M3 runs them at ultra resolution no problem, but the fans do kick on. (Except for Stardew, of course…)

  • Steam: Civ 6, Stardew Valley
  • GOG: Battletech

It’s been a week, and I’ve been adding a couple of things here and there to this list, but the system’s been humming! A few odd things have been popping up (every time I try to run an old Node project I get some node-gyp about Node not having the right permissions or the wrong silicon. Every bank and other log in requires a new round of 2FA. That kind of thing. But mostly it’s been smooth sailing!