I'm a die hard Linux user, but in November 2022, I had to use a Mac for some work. This document describes how I turned a vanilla install of the latest macOS into a powerful Unix workstation.
Homebrew 🍺
This is AFAIK the best package manager for Unix tools on macOS. Install it with:
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Emacs 🐂
Install Emacs from emacsformacosx.com, this gives you a good, up to date Emacs build.
Note, this build doesn't provide native compilation (aka "gccemacs"), nor the non-blocking JSON processing done in this emacs-lsp fork.
Update 2022-11-25: It's also possible to get Emacs with brew
. Note,
after testing this on a fresh Mac, I the --cask emacs
--with-native-comp --with-cocoa
options didn't work, so had to just
issue the below command which gives a non-graphical Emacs (to get the
full package, use the emacsformacosx
link above):
$ brew install emacs
Spell check 📖
$ brew install aspell
Terminal 💻
I've grown very fond of the kitty terminal. I believe it's the best terminal around, it even beats iTerm2 😃. It strikes a great balance between features (24 bit colours, Unicode, multiplexer, view pictures on remote servers, remote server clipboard integration++) and speed. Install it with:
$ curl -L https://sw.kovidgoyal.net/kitty/installer.sh | sh /dev/stdin
Set Caps Lock as Ctrl
Or else, I'll go seriously mad.
Head over to System preferences
, then Keyboard
and finally
Modifier Keys
.
Unix shell environment
Git
$ brew install git
ZSH 🐚
I prefer the ZSH shell over BASH:
$ brew install zsh
$ brew install zsh-autosuggestions
$ brew install zsh-completions
$ brew install fzf
BASH
You should install a newer version of bash
. Although I use ZSH for
my interactive shell, I still do lots of shell programming in
BASH. The version of bash
that comes with macOS is very old,
3.2.57
, so installing a newer bash with brew
:
$ brew install bash
Coreutils 🧰
GNU coreutils
, sed
, awk
, getopt
and grep
are superior to the
ancient BSD tools that ship with macOS.
$ brew install coreutils
$ brew install gawk
$ brew install gsed
$ brew install gnu-getopt
$ brew install grep
Add this to your ~/.zshrc
or ~/.bashrc
to ensure the GNU coreutils
are first in PATH:
export PATH=\
/usr/local/bin:\
/usr/local/Cellar/gnu-sed/4.9/libexec/gnubin:\
/usr/local/opt/coreutils/libexec/gnubin:\
/usr/local/opt/gawk/bin:\
/usr/local/opt/gnu-getopt/bin:\
/usr/local/opt/grep/libexec/gnubin:\
/usr/local/opt/openjdk@11/bin:\
$PATH
As you can see from the above paths, gnused
isn't packaged like the
others, and doesn't provide a bin
directory outside the cellar.
PGP 🔒
$ brew install gnupg
Java ☕
$ brew install openjdk@11
Ensure this JDK's binaries are first in PATH, add these to ~/.zshrc
or ~/.bashrc
:
export PATH=/usr/local/opt/openjdk@11/bin:$PATH
JSON
Installing jq
allows you to query JSON documents, a bit like what XPath on XML files.
$ brew install jq
Installing json_xs
lets you convert between YAML and JSON. For
instance, you can use this to do look ups in YAML documents using
jq
. json_xs
doesn't exist in Homebrew, but you should be able to
install it from CPAN using cpm
(untested):
$ brew install cpm
$ cpm install JSON::XS
$ cpm install YAML::XS::LibYAML
Video meetings 📽️
My company uses Microsoft Teams, so that' the one to get.
Update 2022-11-22: Per told me Teams can also be installed with brew
like so:
$ brew install --cask microsoft-teams
Fonts 🖊️
Download the excellent Adobce Source Code Pro
font,
unzip it and drag and drop the files to the Font Book
:
A better top
btop is my favourite resource monitor these days, install it with:
$ brew install btop
That's it!
Your shiny macOS machine is now a good, modern Unix workstation with most of the same tools and versions as GNU/Linux distributions ship with.
Happy hacking!