Public dotfiles for my macOS setup, managed with yadm.
Operating system macOS
Terminal Ghostty, WezTerm, and Warp
Shell fish
Editor Neovim, Zed, and JetBrains IDEs
Window manager AeroSpace
Launcher Raycast
Theme Gruvbox Medium Dark
xcode-select --installHomebrew requires Apple's Command Line Tools or Xcode.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"After installation, follow the shell setup lines printed by Homebrew. On Apple Silicon that is usually:
eval "$(/opt/homebrew/bin/brew shellenv)"On Intel Macs the Homebrew prefix is usually /usr/local.
brew install yadm
yadm clone git@github.com:christofferbergj/dotfiles.gitUse the HTTPS URL instead if SSH keys are not configured yet:
yadm clone https://github.com/christofferbergj/dotfiles.gitbrew bundle --file="$HOME/Brewfile"Check whether the machine matches the Brewfile with:
brew bundle check --file="$HOME/Brewfile"The Brewfile installs fish. Confirm the path first:
command -v fishThen add fish to the list of allowed login shells and switch to it:
command -v fish | sudo tee -a /etc/shells
chsh -s "$(command -v fish)"Restart the terminal afterwards. fish automatically loads ~/.config/fish/config.fish and files in ~/.config/fish/conf.d/.
gh auth login
gh ssh-key add ~/.ssh/id_ed25519.pubCreate an SSH key first if one does not exist yet.
Fonts are installed from the Brewfile. To install one manually:
brew install --cask font-jetbrains-monoSecrets do not belong in this public repository. Tracked config should only reference environment variable names, never raw credentials.
Machine-local values are loaded from ignored files such as:
~/.config/local/env.fish
That file is sourced by ~/.config/fish/conf.d/local-env.fish, which also publishes selected variables through launchctl on macOS so GUI-launched apps can read them.
Current examples:
UIDOTSH_MCP_AUTHORIZATIONis stored in~/.config/local/env.fishand referenced from Codex withenv_http_headers.CONTEXT7_API_KEYfollows the same pattern for the Context7 MCP server: the key lives in~/.config/local/env.fish, while~/.codex/config.tomlonly containsenv_http_headers = { CONTEXT7_API_KEY = "CONTEXT7_API_KEY" }.
When adding a new local secret:
- Add the value to
~/.config/local/env.fish. - If a GUI app needs it, add the variable name to
launchctl_varsin~/.config/fish/conf.d/local-env.fish. - Reference the variable name from tracked config instead of committing the value.
- Restart the app that needs the new environment variable.
Currently installed extensions detected from the local Raycast setup:
- Apple Reminders
- Coffee
- Color Picker
- GitHub
- Kill Process
- Port Manager
- Ray.so
- Sips
- Speedtest

