macOS dev environment configs.
| Tool | Config |
|---|---|
| fish | shell, aliases, tool inits |
| git | GPG signing via 1Password, aliases |
| starship | prompt |
| aerospace | tiling window manager |
| claude | Claude Code settings, rules, skills |
| opencode | MCP servers, plugins, OCX profiles |
| agents | shared AI agent skills (skills.sh) |
| lazygit | git TUI |
| lazydocker | docker TUI |
| wtf | terminal dashboard (1Password tokens) |
| try-rs | Rust REPL config |
| BetterDisplay | display management |
| Mac Mouse Fix | mouse customization |
| force-audio-input | locks preferred mic as input device |
# Install tools
./install.sh
# Create symlinks + set fish as default shell
./setup.sh
# Apply macOS preferences (optional)
./macos.shAfter changing BetterDisplay or Mac Mouse Fix settings:
./sync.shmacos.sh configures:
- Dock: autohide, size, no recents
- Finder: column view, folders first, show extensions, snap to grid
- Keyboard: fast key repeat, no auto-correct
- Trackpad: tap to click, traditional scroll direction
- Menu bar: battery %, 24h clock
- Display scaling via
displayplacer - Reduce motion, no .DS_Store on network/USB
macOS switches the input device whenever Bluetooth audio (e.g. AirPods) connects. A launchd agent polls every 5s and forces the preferred mic back.
How it works:
scripts/force-audio-input.shusesSwitchAudioSource(fromswitchaudio-osx) to check/set the input devicelaunchagents/com.jopcmelo.force-audio-input.plistruns the script at login via launchdsetup.shcopies the plist to~/Library/LaunchAgents/with the correct dotfiles path injected
Changing the preferred mic:
- List available inputs:
SwitchAudioSource -t input -a - Update
PREFERRED_INPUTinscripts/force-audio-input.sh - Re-run
./setup.shto reload the agent
Checking status:
launchctl list | grep force-audio-input # running?
SwitchAudioSource -t input -c # current input?
cat /tmp/force-audio-input.err # errors?- macOS
- 1Password with CLI enabled
├── Brewfile # homebrew packages
├── install.sh # install tools + ocx + opencode plugins
├── setup.sh # symlink configs
├── macos.sh # macOS preferences
├── sync.sh # sync app settings to repo
├── fish/config.fish
├── git/{config,ignore}
├── starship/starship.toml
├── aerospace/aerospace.toml
├── claude/{settings.json,CLAUDE.md,rules/,file-suggestion.sh}
├── opencode/{opencode.json,ocx.jsonc,plugin/,plugins/,profiles/}
├── agents/{.skill-lock.json,skills/}
├── lazygit/config.yml
├── lazydocker/config.yml
├── wtf/config.yml
├── try-rs/config.toml
├── scripts/force-audio-input.sh
├── launchagents/com.jopcmelo.force-audio-input.plist
└── preferences/{BetterDisplay,MacMouseFix}.plist