Skip to content

Instantly share code, notes, and snippets.

@joelhooks
Created November 29, 2021 04:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joelhooks/7f5b58a8956011a28900cd4860c5f478 to your computer and use it in GitHub Desktop.
Save joelhooks/7f5b58a8956011a28900cd4860c5f478 to your computer and use it in GitHub Desktop.

Basic zhs Developer Shell Setup for a New M1 Mac

These are notes about my personal setup for a new macOS computer. Some of the instructions might be incorrect for your environment

Getting Started

You'll need several things installed on your machine to proceed with configuring zsh beyond the defaults.

  • Xcode Command Line Tools: just run xcode-select --install. This is an SDK and tool for development in the command line environment. Lots of things depend on it and it's essential.
  • homebrew: https://brew.sh/ is the community standard package manager for macOS and des a lot of work installing and managing libraries and tools within your shell environment.
  • git: https://git-scm.com/download/mac you want the latest version of git
  • zsh: short for Z shell, is the default login and interactice shell for macOS as of 2019 with the relase of Catalina. We're gonna set it up nice.

Take care of Xcode and homebrew, then we'll configure git and zsh (with oh-my-zsh)

Let's get started!

Set up git

Setup your credentials:

git config --global user.name "Firstname Lastname"
git config --global user.email "username@myEmail.com"

When you run these commands a .gitconfig is set up in your home folder cd ~.

Mine looks like this and I store it in a gist for future reference:

[user]
	email = joelhooks@gmail.com
	name = Joel Hooks
[core]
	excludesfile = /Users/joel/.gitignore
	editor = code
[init]
	defaultBranch = main
[pull]
	rebase = false
[alias]
	co = checkout

You'll notice a few options are set. The excludesFile option lets me have a global .gitignore which looks like this:

.DS_Store
.idea

Now these pesky local files will never get added to my repositories.

I've set my preferred editor, how I prefer to handle pull requests, a defaultBranch name, and a single alias. Aliases are actually super handy and can be very powerful so I recommend reading further.

All of the settings in .gitconfig can be set using git config --global [...], but editing the text file makes it quicker to set many all at once.

zsh

By default zsh is very capable and provides many improvements over bash (the previous macOS default). Notably it provides a comprhensive command-line completion system that can save a lot of time when you're working in the terminal.

Beyond the basics, there are several things that I like to add to my default zsh configuration immediately.

oh-my-zsh

oh-my-zsh is an open-source configuration framework and manager for zsh. oh-my-zsh gives you access to a trove of useful plugins and is essential if you're running zsh as your shell.

Installation instructions can be found here: https://ohmyz.sh/

Once zsh is installed, it needs some configuration. We are going to add a few plugins.

Open the config file:

open .zshrc

Among other things, oh-my-zsh gives you the ability to apply themes. They have many to choose from. I use the default theme personally, but you can explore. The configuration file is well documented. The major changes for me are adding plugins and some path work for my development environment.

pure prompt

The default prompt for zsh is hideous in my opinion and needs to be instantly changed. I use the Pure prompt because it's simple, compact, and provides useful information for my development workflow.

https://github.com/sindresorhus/pure

I don't do a lot of custom configuration of pure prompt in general, but I did need to add the following to the bottom of my ~.zshrc configuration to git it to run after installation as instructed by the documentation:

autoload -U promptinit; promptinit
prompt pure

I also ran into path issue and had to manually install pure and direct zsh to the manually installed location. Hopefully you can avoid this on your machine.

Pure looks good by itself, but I also like to colorize my terminal and add a nicer font. Color schemes and fonts tend to be personal choices, but I like Tomorrow Night Eighties for color and Dank Mono for the font.

File>Save as this file and open it to add the Tomorrow Night *0s color scheme to Terminal. In the Terminal app preferences you might need to set it as the default theme for Terminal. You can also change the font here and set a larger text size.

terminal preferences

zsh-syntax-highlight

This is a great plugin that gives some colorized feedback to your shell commands. Here are the oh-my-zsh setup instructions

My final plugin setup looks like this:

plugins=(git rails ruby history emoji encode64 jsontools macos zsh-syntax-highlighting)

You can look up the other plugins and all of the available plugins (there is a shitload) that might suit your personal needs. Here's my final .zshrc for my environment (it's probably not cut and paste compatible for your machine)

export PATH=$HOME/bin:/usr/local/bin:$PATH
export ZSH=$HOME/.oh-my-zsh
ZSH_THEME="robbyrussell"

plugins=(git rails ruby history emoji encode64 jsontools macos zsh-syntax-highlighting)

source $ZSH/oh-my-zsh.sh

# Pure prompt plugin loader
fpath+=$HOME/.zsh/pure
autoload -U promptinit; promptinit
prompt pure

What's Next?

The reveal is anti-climactic BUT at this point you've got a powerful shell environment that looks nice and will grow with you as you personalize it for your own needs.

Here's how it looks:

final terminal

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