Last updated August 7, 2026.
Homebrew package manager
Install: brew.sh/
‼️ Follow instructions in terminal to add to path
Bundle: docs.brew.sh/Brew-Bundle-and-Brewfile
Connect Github
Add computer to github SSH list: github.com/settings/keys. See guide linked from keys page.
Make 'git open' open the repository in the browser
npm install --global git-open
Use by typing git open in a reposetory.
Docs: www.npmjs.com/package/git-open?activeTab=readme
IDE and dev tools
Install code as PATH keyword (works in either vscode or cursor):
⌘ + Shift + P → Shell Command: Install 'code' command in PATH
claude.com/product/claude-code
www.docker.com/products/docker-desktop/?at_exp=DO103.B
.dotfiles
Clone in home folder: git clone git@github.com:aukoyy/dotfiles-zsh.git
GNU Stow dotfiles symlinking
Manages the symlinks from ~/dotfiles into ~. Replaces hand-rolled ln -sfn.
The original .zshrc and other conflicting files must be deleted/renamed.
Install
brew install stow
Mental model
Each top-level directory in ~/dotfiles is a package.
Everything inside it mirrors the path relative to ~.
The package name never appears in the resulting path. In other words, the top level dir names like zsh, git, ghostty are arbitrary names and exist for organisation.
dotfiles/
├── zsh/
│ ├── .zshrc → ~/.zshrc
│ ├── .aliases → ~/.aliases
│ └── .zsh_plugins.txt → ~/.zsh_plugins.txt
├── git/
│ └── .gitconfig → ~/.gitconfig
├── ghostty/
│ └── .config/ghostty/config → ~/.config/ghostty/config
├── starship/
│ └── .config/starship.toml → ~/.config/starship.toml
└── mise/
└── .config/mise/config.toml → ~/.config/mise/config.toml
Commands
cd ~/dotfiles
stow -nv */ # DRY RUN — always do this first
stow -v */ # link all packages
stow -R */ # restow (unlink + relink) — use after adding files
stow -D zsh # unlink one package
Use */ not . — . treats the whole repo as one package and links
~/ghostty, ~/git etc. into home. */ expands to the package list and
skips hidden dirs like .git.
Verify
ls -la ~ | grep -E 'zshrc|aliases|gitconfig'
ls -la ~/.config/
ghostty +show-config | grep -E 'theme|font'
mise config
Terminal and config (2026)
Check load times: for i in $(seq 1 5); do /usr/bin/time zsh -i -c exit; done
Antidote plugin manager
Zsh plugin manager. Replaces oh-my-zsh's plugin loading.
brew install antidote
Nerd Font (prerequisite for the prompt)
Antidote itself doesn't need it, but Starship / Oh My Posh / p10k render glyphs that
don't exist in normal fonts. Without it the prompt shows boxes ().
brew install --cask font-jetbrains-mono-nerd-font
Then in ~/.config/ghostty/config:
After symlinking, this should be same as ⌘ + , in ghostty.
font-family = JetBrainsMono Nerd Font
font-size = 14
Verify the glyphs render:
echo "\ue0b0 \uf013 \ue702 \uf09b \ue7a8"
# wrong output:
Should show: a powerline arrow, a gear, a git icon, the GitHub logo, a Rust icon.
Boxes or blank space = wrong font, or the font name in the config doesn't match.
List what's actually installed with ghostty +list-fonts | grep -i nerd.
!CleanShot 2026-08-04 at 15.15.01.png
Configure
~/.zsh_plugins.txt — one bundle per line. Syntax highlighting must be last.
zsh-users/zsh-completions
zsh-users/zsh-autosuggestions
zsh-users/zsh-history-substring-search
zdharma-continuum/fast-syntax-highlighting
Oh-my-zsh plugins still work here:
ohmyzsh/ohmyzsh path:plugins/git
ohmyzsh/ohmyzsh path:plugins/aws
~/.zshrc — note the Homebrew path, not ~/.antidote.
source /opt/homebrew/opt/antidote/share/antidote/antidote.zsh
antidote load
Verify
| Check | Command | Expected |
|---|---|---|
| Antidote loaded | antidote --version | version string |
| Plugin file found | antidote list | one line per bundle |
| Repos cloned | ls $(antidote home) | one dir per bundle |
| Static file built | ls -l ~/.zsh_plugins.zsh | exists, non-zero |
| Installed fonts | ghostty +show-config | fonts listed |
Functional test (visual):
- Autosuggestions — retype a past command → grey completion, accept with
→ - Syntax highlighting —
lsgreen,lsssred - History substring — type 2–3 chars,
↑filters instead of walking history - Completions —
git che<TAB>→checkout
After changing .zsh_plugins.txt
antidote update # update cloned plugins
exec zsh # regenerate static file and reload
Starship prompt engine
Prompt engine. Replaces powerlevel10k. Requires a Nerd Font (see antidote-setup).
curl -sS https://starship.rs/install.sh | sh
Config
Lives in dotfiles, symlinked into place with gnu stow
Apply a preset — write to the real path, not through the symlink:
starship preset catppuccin-powerline -o ~/dotfiles/starship.toml --force
Browse presets with screenshots: starship.rs/presets/
List locally: starship preset --list
Matches the Ghostty catppuccin-mocha theme. Flavour is set by palette in the toml
(catppuccin_mocha / frappe / macchiato / latte).
.zshrc
Order matters — Starship goes last, after antidote load.
eval "$(starship init zsh)"
Two-line prompt
Info on top, ❯ underneath. Needs both:
format = """...$line_break$character"""
[line_break]
disabled = false # this one did it
add_newline = true (top-level) is separate — that's the blank line above the whole prompt.
Verify
starship --version
starship timings # per-module cost
Trimming
Powerline presets show every detected runtime. On a TS/AWS machine that's noise:
[nodejs]
disabled = true
[time]
disabled = true
Env handler
MacOS Defaults & settings
Defaults
macos-defaults.com/dock/autohide.html
macos-defaults.com/dock/autohide-time-modifier.html
macos-defaults.com/dock/autohide-delay.html
Fade hidden apps in dock:
defaults write com.apple.Dock showhidden -bool true; killall Dock
Finder
mkdir ~/code && mkdir ~/torrenting && mkdir ~/youtube && mkdir ~/bots
Remember that to show hidden folders in Finder, use command + shift + .
Improve GUI
- View → Show path bar
- View → Show tab bar
- View → Show status bar
- View → Sort by → Name
- View → Sort by → Snap to grid
- More options: Show View Options (⌘J)
- Finder settings (⌘ + ,) → Advanced → In windows when sorting by name
Keyboard shortcuts
Settings → Keyboard → Keyboard Shortcuts
- Mission Control → Show Notificatioin Center: ⌥ `
Hot corners
Settings → Desktop & Dock → Hot Corners
- Up left: Mission control
- Up right: Notification Center
Text replacements
Settings → Keyboard → Text Replacements
| Replace | With |
|---|---|
-^ | ↑ |
-> | → |
-v | ↓ |
<- | ← |
<-> | ↔ |
** | ✱ |
/bul | • |
/cmd | ⌘ |
/control | ⌃ |
/deg | ° |
/euro | € |
/globe | 🌐 |
/idk | ¯\_(ツ)_/¯ |
/inf | ∞ |
/j | ✔ |
/opt | ⌥ |
/pound | £ |
/shift | ⇧ |
/tlf | +47 num |
/tm | ™ |
/x | ✘ |
gm | gmail |
mvhø | Med Vennlig Hilsen, |
orgv | num |
Applications
- www.google.com/chrome/
- www.logitech.com/en-eu/software/logi-options-plus
- rectangleapp.com/
- 1password.com/downloads/mac
- www.notion.com/desktop
- cleanshot.com/
- wisprflow.ai/
- freedom.to/downloads?utm_source=dashboard
- www.elmedia-video-player.com/
- mullvad.net/en
- displaybuddy.app/
- helpx.adobe.com/no/download-install/apps/download-install-apps/creative-cloud-apps/download-creative-cloud-desktop-app-from-web.html
- www.blackmagicdesign.com/products/davinciresolve
- www.affinity.studio/
- pdfexpert.com/
- numi.app/
- eggerapps.at/postico2/
- BitTorrent Web
App store
- Whisper Transcription
- Slack
- Things 3
- Tripmode
- Keystroke Pro
- Marked 3
- Bulder
- Subscription Day
Brew or command line installs
- github.com/yt-dlp/yt-dlp formulae.brew.sh/formula/yt-dlp#default
- www.macstories.net/stories/introducing-remctl-the-power-user-reminders-cli-for-macos-and-ai-agents/
- typst.app/open-source
Apps I consider
Other
- Discord
- Telegram
- Flightly
- Grammarly
- Infuse
- Karabiner elements (for alt-tab)
- PhotoCuller
- Photomator
- Spotify
- Cursor
- Remind me faster
Get from old mac
If you are simply resetting an old mac, make sure to grab everything you need:
- Go over and commit+push dotfiles
- Rectangle: export user settings
- Brewfile
- Create Brewfile:
brew bundle dump --force(explained in bundle link) - Personally I like a clean install, but the brewfile is still nice as reference
- Create Brewfile: