git config --global user.name "First Last" # fill in your name
git config --global user.email "ikke@mijndomain.com"
git config --global http.postBuffer 157286400Tip: Use
git fetch+git mergeinstead ofgit pull(or set rebase merge).
- Install VS Code
- Install PlatformIO in VS Code
- Install Karabiner-Elements (map Shift-ESC to tilde)
- Install iTerm2 and make it the default terminal
- Install iTerm2 shell integrations
Install Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Install Liquidprompt via git (powerline_full theme):
git clone https://github.com/liquidprompt/liquidprompt.git ~/liquidpromptAdd to ~/.zshrc:
# Only load Liquidprompt in interactive shells, not from a script or from scp
[[ $- = *i* ]] && source ~/liquidprompt/liquidprompt
[[ $- = *i* ]] && source ~/liquidprompt/themes/powerline/powerline.theme
[[ $- = *i* ]] && lp_theme powerlinemkdir -p ~/Git/generic
cd ~/Git/generic
git clone https://github.com/powerline/fonts.git --depth=1
cd fonts && ./install.sh- In iTerm2: change font to Roboto Mono for Powerline, Regular, 17px
- Change colors to Solarized Dark in iTerm2
- Check if VS Code terminal also has the Powerline fonts
brew update
brew upgradebrew install fzf
$(brew --prefix)/opt/fzf/install
exec zsh
brew install rustup
rustup-init
cargo install exa
brew install cowsay
brew install coreutils
brew install bat
brew install ripgrep
brew install zoxide
brew install entr
brew install wgetwget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-darwin-arm.tar.gz
# Extract in user home directory, then:
./google-cloud-sdk/install.sh
rm google-cloud-cli-darwin-arm.tar.gz
exec zsh
gcloud components update
gcloud auth loginbrew install python@3.11
python3.11 -m venv ansible-env
source ansible-env/bin/activate
pip3 install ansible-core==2.11.6
pip3 install apache_libcloud==3.3.1
pip3 install google-auth
pip3 install requestsCreate ~/.ansible.cfg:
[galaxy]
server = https://old-galaxy.ansible.com/ansible-galaxy collection install google.cloud:1.2.0
ansible-galaxy collection install community.google:1.0.0
ansible-galaxy collection install community.general:3.8.1
ansible-galaxy collection install ansible.windows
ansible-galaxy role install googlecloudplatform.google_cloud_ops_agents# Traceroute
brew install mtr- Install WireGuard (use IPs from wp-voice-ansible)
- Login via
gcloud sshto one machine in each project
# Disk usage
brew install ncdu
# Downloader
brew install aria2
# Calculator
brew install insect
# MySQL CLI
brew install mycli
# PostgreSQL CLI
brew tap dbcli/tap
brew install pgcli
# System info
brew install neofetch
# Markdown reader
brew install glow
# FTP/WebDAV etc.
brew install duck
# Top replacement
brew install bpytop
# Find replacement
brew install fd
# Remote terminal helper
brew install tmate
# Lazygit (TUI)
brew install lazygit
# Video downloader (YouTube etc.)
brew install lux
# Terminal notifier
brew install terminal-notifierThe config is tracked in this repo at dotconfig/nvim/init.vim
(Vimscript, dein.vim plugin manager). Its dein
paths use expand('~'), so it is portable across machines and usernames.
Install Neovim + the dein plugin manager:
brew install neovim
pip3 install pynvim
sh -c "$(wget -O- https://raw.githubusercontent.com/Shougo/dein-installer.vim/master/installer.sh)"Deploy the tracked config by symlinking it (so git pull on any station keeps
every machine in sync — edit once, pull everywhere):
mkdir -p ~/.config/nvim
ln -sf ~/Git/Guru-RF/MacOSX-DevBase/dotconfig/nvim/init.vim ~/.config/nvim/init.vimThen install the plugins:
nvim +"call dein#update()" +qallbrew install redis
brew services start redis# Disk usage (alternative)
brew install dust
# Cheat sheets (handy shortened manuals)
brew install cheat
# Terminal recorder
brew install asciinema
npm --global i -D git+https://github.com/miraclx/svgembed svg-term-cli
# Zsh autocomplete
brew install zsh-autocomplete
# HTTP client
brew install httpie
# Zsh completions
brew install zsh-completions# Count installed formulae / casks
brew list --formula | wc -l
brew list --cask | wc -l
# Packages you explicitly asked for (not pulled in as dependencies)
brew leaves --installed-on-request
# Full dependency tree of everything installed
brew deps --tree --installed
# Disk space used by Homebrew
du -sh "$(brew --prefix)"
# What's outdated
brew outdated| Metric | Value |
|---|---|
| Formulae installed | 319 |
| Casks installed | 8 |
Explicitly requested (brew leaves --installed-on-request) |
57 |
| Outdated packages | 137 |
Disk used (/opt/homebrew) |
7.8 GB |
| Homebrew version | 6.0.4 |
Captured on Apple Silicon (
/opt/homebrew). Regenerate any time with the commands above.
gcloud components install kubectlExport system root certificates:
security find-certificate -a -p \
/System/Library/Keychains/SystemRootCertificates.keychain \
/Library/Keychains/System.keychain > ~/.mac-ca.pemfor file in $(compaudit); do
sudo chmod 755 $file
sudo chmod 755 $(dirname $file)
sudo chown $(whoami) $file
doneInstall latest .zshrc, then:
rm -fr ~/perl5
PERL_MM_OPT="INSTALL_BASE=$HOME/perl5" cpan local::lib
eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib=$HOME/perl5)"
brew install perl
curl -L https://cpanmin.us | perl - App::cpanminus
cpanm App::cpanoutdated
cpan-outdated | cpanm --notestcpanm JSON::XS
cpanm Mojolicious
cpanm Mojo::Redis
cpanm LWP::Protocol::https
cpanm Mojolicious::Plugin::Sentry
cpanm Config::YAML
cpanm Carton
cpanm -f Perl::PrereqScanner::Lite
cpanm App::scan_prereqs_cpanfile
cpanm File::JSON::Slurper
cpanm -f AnyEvent
cpanm AnyEvent::AIO
cpanm Coro
cpanm Class::Refresh
cpanm Compiler::Lexer
cpanm Hash::SafeKeys
cpanm Perl::LanguageServerexport LIBRARY_PATH=$LIBRARY_PATH:/opt/homebrew/opt/openssl/lib/
cpanm -n Redis::Fastexport LIBRARY_PATH=$LIBRARY_PATH:/opt/homebrew/Cellar/libpng/1.6.44/lib/
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/opt/homebrew/Cellar/libpng/1.6.44/include/
cpanm Imager::File::PNGecho ".DS_Store" > ~/.gitignore
echo ".vscode" >> ~/.gitignore
git config --global core.excludesFile '~/.gitignore'brew install --cask macfuseAdd to ~/.zshrc:
export SSL_CERT_FILE="$HOME/.mac-ca.pem"
export MOJO_CA_FILE="$HOME/.mac-ca.pem" # optional, nice for Mojolicious
export PERL_LWP_SSL_CA_FILE="$HOME/.mac-ca.pem" # optional, helps LWP tooInstall with Homebrew (puts zellij on PATH, needed for the VS Code terminal below):
brew install zellijOr run it once without installing:
bash <(curl -L https://zellij.dev/launch)This repo ships a custom Zellij theme, dotconfig/zellij/themes/solarized-powerline.kdl, that keeps the Solarized Dark base (so it matches the VS Code Better Solarized Dark Italics theme and the iTerm2 Solarized Dark palette above) while recolouring the status bar to match the Liquidprompt powerline prompt — the active mode ribbon uses powerline orange, inactive ribbons use the powerline path grey, and the status-bar text is muted Solarized grey instead of the default glaring white.
Install it (Zellij auto-loads ~/.config/zellij/themes/*.kdl):
mkdir -p ~/.config/zellij/themes
cp dotconfig/zellij/themes/solarized-powerline.kdl ~/.config/zellij/themes/Then select it in ~/.config/zellij/config.kdl:
theme "solarized-powerline"Zellij reads the theme when a session is created. To apply it to an already-running session, recreate it: detach (
Ctrl othend),zellij kill-session <name>, then reattach — session serialization restores your panes and cwd. See VSCODE.md for details.
On macOS there is no Alt key — Zellij's default Alt-based bindings (e.g. pane/tab navigation) won't fire until you make your terminal send Option as Alt/Meta:
- iTerm2: Settings → Profiles → Keys → set Left Option key to Esc+ (the
Esc+option, notNormalorMeta). This makesOptionsend theAltsequences, so the defaultAltbindings work as-is. - Ghostty: add
macos-option-as-alt = trueto~/.config/ghostty/config - Terminal.app: Settings → Profiles → Keyboard → enable Use Option as Meta key
The Ctrl-based bindings work out of the box; only the Alt ones need this.
Zellij is wired in as the default integrated terminal for this project, with a persistent per-project session — and can be made the default for every project too. See VSCODE.md for both the project and global setup.
brew install --cask monitorcontrolMonitorControl is a menu bar app that controls the brightness and volume of external monitors over DDC/CI — the same hardware channel the monitor's own OSD buttons use. macOS only exposes those controls for built-in and Apple displays, so on a third-party monitor the keyboard brightness/volume keys normally do nothing. MonitorControl makes them work again, adds native-looking sliders per display, and remembers the level per monitor.
First launch needs Accessibility permission (System Settings → Privacy & Security → Accessibility) to capture the media keys. DDC/CI must be enabled on the monitor itself; it does not work over most DisplayLink/USB hubs.
brew install moleMole (mole.fit) is a terminal app to clean, uninstall,
analyze, optimize and monitor your Mac — roughly CleanMyMac + AppCleaner + DaisyDisk +
iStat Menus in a single binary, without the paid apps. It reclaims space from caches, logs
and orphaned app data, fully removes apps including launch agents / preferences / hidden
leftovers, visualises what is actually eating the disk, purges project build artifacts, and
shows live CPU / GPU / memory / disk / network stats.
Note the binary is mo, not mole:
mo # interactive menu
mo clean # deep cleanup + leftovers of already-uninstalled apps
mo uninstall # remove an app plus its remnants
mo analyze # visual disk explorer
mo status # live system health dashboard
mo purge # clean project build artifacts (node_modules, target, ...)
mo installer # find and remove leftover installer files
mo completion # shell tab completionPreview before deleting anything — every destructive subcommand takes --dry-run:
mo clean --dry-run
mo purge --dry-run
mo history # what was removed previouslyiTerm2: Mole auto-detects the terminal and has known compatibility issues with iTerm2 (the default terminal set up above). If the TUI renders badly, run it from Ghostty / kitty / WezTerm / Alacritty, or override detection with
MO_LAUNCHER_APP=<name>.It deletes files. Read what each step proposes before confirming — the whitelists (
mo clean --whitelist,mo optimize --whitelist, persisted in~/.config/mole/whitelist) are how you protect caches you want to keep.