I try to keep track of everything that goes into my work machine.
I, of course, start missing things after a couple of months.
But the value is in trying, right? Let’s hope so.
In any case, I recently setup a macos machine from scratch. It was intended for devops/infra work ( k8s, terraform, aws etc).
It also includes java + node as I’ll occasionally need to build the apps before running them.
Here is how everything went. Apart from a couple of tokens and ssh keys that are org specific, this is the full setup.
While it was macos + zsh in this instance, I’m pretty sure most of this is portable to Linux and WSL (if you opt for brew for package mgmt and zsh for a shell). YMMV, of course.
install everything
# install brew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
(echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> "/Users/${USER}/.zprofile"
eval "$(/opt/homebrew/bin/brew shellenv)"
# install gui apps
brew install --cask rectangle # split screen to 2,4 windows w/ kb shortcuts
brew install --cask google-chrome
brew install --cask firefox
brew install --cask chromium
brew install --cask microsoft-edge
brew install --cask visual-studio-code
brew install --cask dbeaver-community
brew install --cask postman
brew install --cask microsoft-teams
brew install slack
# install cli apps
brew install awscli
brew install wget
brew install zsh-completions
brew install watch
brew install fzf
brew install libpq && brew link --force libpq # postgres tools
# docker
brew install colima
brew services start colima
colima start
brew install docker
brew install docker-compose
brew install docker-credential-helper
# k8s
brew install kubectl
brew install kube-ps1
brew install kubectx
# krew
(
set -x; cd "$(mktemp -d)" &&
OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
KREW="krew-${OS}_${ARCH}" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
tar zxvf "${KREW}.tar.gz" &&
./"${KREW}" install krew
)
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
kubectl krew install resource-capacity
# terraform
brew install tfenv
tfenv use x.y.z # select your version here
brew install tflint
terraform -install-autocomplete
#### dev setup
# java
brew tap sdkman/tap
brew install sdkman-cli
export SDKMAN_DIR=$(brew --prefix sdkman-cli)/libexec
[[ -s "${SDKMAN_DIR}/bin/sdkman-init.sh" ]] && source "${SDKMAN_DIR}/bin/sdkman-init.sh"
sdk install java x.y.z-distro # select your version here
java --version
# node, yarn
brew install nvm
mkdir -p ~/.nvm
export NVM_DIR="$HOME/.nvm"
[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh"
nvm install x.y.z # select your version here
npm install --global yarn
node --version
yarn --version
# configure git
git config --global user.name "Firstname Lastname"
git config --global user.email "username@email.tld"
configure everything
#/.zshrc
source "/opt/homebrew/opt/kube-ps1/share/kube-ps1.sh"
source /opt/homebrew/share/zsh-autocomplete/zsh-autocomplete.plugin.zsh
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
export PATH="/opt/homebrew/opt/libpq/bin:$PATH"
source <(fzf --zsh)
PS1='$(kube_ps1)'$PS1
export KUBE_EDITOR='nano'
[[ $commands[kubectl] ]] && source <(kubectl completion zsh)
# java
export SDKMAN_DIR=$(brew --prefix sdkman-cli)/libexec
[[ -s "${SDKMAN_DIR}/bin/sdkman-init.sh" ]] && source "${SDKMAN_DIR}/bin/sdkman-init.sh"
# node
mkdir -p ~/.nvm
export NVM_DIR="$HOME/.nvm"
[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh" # This loads nvm
[ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm"
chmod go-w '/opt/homebrew/share'
chmod -R go-w '/opt/homebrew/share/zsh'
complete -o nospace -C /opt/homebrew/Cellar/tfenv/3.0.0/versions/1.2.6/terraform terraform
complete -C '/opt/homebrew/bin/aws_completer' aws
eval "$(op completion zsh)"; compdef _op op
if type brew &>/dev/null; then
FPATH=$(brew --prefix)/share/zsh-completions:$(brew --prefix)/share/zsh/site-functions:$FPATH
autoload -Uz compinit
compinit
fi