Configuration for my macOS development environment, managed with dfm.
cd $HOME
git clone git@github.com:joshbeckman/dotfiles.git .dotfiles
./.dotfiles/setupThe setup script handles everything: symlinking dotfiles via dfm install, installing Homebrew formulae from Brewfile, and cloning plugins for zsh, tmux, and Neovim. It detects macOS vs. Linux and adjusts accordingly.
To apply macOS system preferences (key repeat, Finder settings, etc.):
./bin/set-defaults.sh.zshrc— primary shell config (zsh): prompt, aliases, functions, path, completions.bashrc/.bash_profile/.bash_aliases— legacy bash config.shellrc.load— shared shell initialization
.config/nvim/— Neovim configuration (init.vim, ftplugin overrides, keyword lists).vimrc— Vim configuration
.tmux.conf— tmux key bindings, status bar, and session management.wezterm.lua— WezTerm terminal configkitty.conf— Kitty terminal config
.gitconfig— aliases, delta pager, merge/diff settings, signing.git-templates/— custom git template hooks
Brewfile— Homebrew dependencies (bat, fzf, gh, ripgrep, neovim, tmux, etc.).psqlrc— PostgreSQL client preferences.irbrc— Ruby REPL config.gemrc— RubyGems settings.ripgreprc— ripgrep defaults.grcat— generic colouriser config
Many small utilities.
Run any script with --help or read the source — they're short.
- Symlinks, not copies.
dfm installsymlinks files into$HOME. Editing a dotfile here edits the live config. - Shell scripts stay simple. Scripts in
bin/are short, single-purpose, and use#!/bin/shor#!/usr/bin/env bash(or ruby, etc.). Preferset -euo pipefailin bash scripts. - Brewfile tracks dependencies. If a script or config relies on a Homebrew formula, add it to
Brewfile. - No secrets in version control. Credentials, tokens, and API keys belong in files sourced separately (e.g. a
.secretsfile), not committed here. - Conventional Commits. Commit messages follow the
type(scope): descriptionformat (e.g.feat(zshrc):,fix(nvim):).