I recently got a new Macbook Pro 14" as my new work laptop so I’ve been busy setting up the machine. It’s a base model with an M1 chip, which I’m particularly looking forward to trying. Having worked with Windows and Arch Linux before, there are some challenges, especially a shift in thinking but overall, I am very surprised to find out most of the stuff works out of the box pretty well.

I’m documenting my process and this will serve as a living document for me to refer to once I’ve updated my setup.

Homebrew

You can’t talk about macOS without Homebrew. It’s the de-facto package manager for macOS and the installation guide works fine for M1 architecture.

Once it’s installed, I’ve also installed some other tools such as bat, PHP, and Git via brew install command.

Side note: You can install multiple PHP versions on your machine via brew install [email protected], brew install [email protected], etc, and use the brew link/unlink command to set the default version used in your machine. For example to switch the default version used from 8.1 to 7.4:

1
2
brew unlink [email protected]
brew link [email protected]

Other applications

Most of the stuff that I use can be either downloaded from their official site, or installed from the App Store, and I haven’t had any compatibility issue with M1 architecture just yet.

Some of the apps that I have:

  • 1Password - Work and personal password manager, also installed Chrome’s addon.
  • AltTab - Use Windows alt+tab feature in macOS.
  • AppCleaner - Nice to have uninstaller for macOs.
  • Authy - Manage all my 2FA.
  • Big Weather - A simple weather menu bar app.
  • CleanMyDrive 2 - A lightweight drive manager, bonus for menu bar integration.
  • Clocker - Useful to have in the menu bar, to see current date and time of my colleagues all over the world.
  • Dropzone 4 - A very cool app that lives in your menu bar, and able to handle a lot of things.
  • Google Chrome - Web browser of choice.
  • Hidden Bar - I originally paid for Vanilla Pro, wished I found this one sooner.
  • How Long Left - Pretty useful menu bar app to quickly glance the next event in your calendar.
  • Insomnia - Beautiful API client with multiple protocols support. I have since use Thunder Client for VS Code
  • Maccy - Minimal clipboard manager. I bind +v to toggle, similar to the keybinding that I used to have in Archlinux via rofi.
  • LyricsX - Karaoke lyrics 🤘 Not that reliable so I decided to remove this
  • Raycast - Spotlight replacement, pretty good but I haven’t used Alfred so I can’t compare.
  • Rectangle - Allows you to move and resize windows, quite a decent replacement for Windows-like features. Not as good as bspwm though.
  • Sequel Ace - Database client of choice.
  • Slack - Work chat.
  • Spark - Awesome email client, calendar included as well.
  • Spotify - No explanation is needed.
  • SSH Proxy - Some of the client sites require going through a proxy, so this is needed.
  • The Unarchiver - Kinda set and forget unarchiver for Mac.
  • TopNotch - Magically makes the notch disappear.
  • Typewriter - Markdown editor, nothing fancy, get the job done.
  • Visual Studio Code - Just started using this after using Sublime Text for the last 9 years, might need a separate post for the setup.
  • VLC - Another set and forget media player.
  • Zoom - Meeting, meeting, meeting!

Docker

Docker support for M1 architecture has been not much of an issue currently. At work, I’m using Altis Local Server which has been supporting ARM/Apple M1 since v9. For my side projects, I’ve also added support to switch the underlying MySQL engine for my docker-lemp and haven’t had any issues since.

Terminal Setup

I used Alacritty in Arch Linux but for macOS, I decided to go with iTerm2. It’s good enough to get the job done.

Some pointers:

  • I set system-wide hotkey `^`` to quickly show/hide the window.
  • I set a Working Directory in my default profile > General.
  • I use Github Dark color scheme.
  • The window column is set to 140 and row to 30, with no transparency.
  • I added the ~/.hushlogin file to disable last login notification when starting the session.

Oh My Zsh

Since the configuration is OS-agnostic, I copied over my existing configuration from Arch Linux to this machine. My theme of choice is essembeh and I installed several plugins:

  • colored-man-pages
  • colorize
  • command-not-found
  • common-aliases
  • copydir
  • copyfile
  • cp
  • docker
  • dotenv
  • extract
  • encode64
  • gh
  • git
  • git-prompt
  • history
  • history-substring-search
  • safe-paste
  • sudo
  • urltools
  • wd

Generally, I don’t use any alias-related plugins. I might be in the minority who likes to type in the full command instead of using aliases.

There’s also a useful package called zsh-syntax-highlighting that provides syntax higlighting as you type.

Other CLI tools

I don’t have many installed. For now, I have:

  • bat - Much better cat replacement.
  • gh - Github official CLI.
  • hugo - Solely for this blog.
  • nvm - So that I can switch Node version easily between projects.
  • neofetch - Had to bring this from Arch Linux.

Code Editor

Using VS Code at the moment, after 9 years with Sublime Text. Lots of adjustments need to be made, worthy of a separate post about my whole setup. Probably soon!