Skip to content
jbabin91Public

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

273 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

github.com/jbabin91/dotfiles

Jace Babin's dotfiles, deployed by chezmoi from home/.

Features

Installation

Prerequisites

Quick Start

  1. Clone this repository:
git clone https://github.com/jbabin91/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
  1. Run the install script. It links and deploys the configs, then chezmoi's run_onchange_ scripts apply the Brewfile, install mise and its tools, install tmux plugins and regenerate zsh completions, each again only when its inputs change:
./install
  1. Install development dependencies:
pnpm install
  1. Restart your shell:
exec zsh

Keeping it up to date

./install is the only command you need, and it is safe to run at any time: after pulling, after editing the repo, or when something seems off. A re-run deploys only what changed, re-runs the Brewfile, mise, tmux and completion steps only when their inputs changed, and verifies the result.

cd ~/.dotfiles && git pull && ./install

Karabiner is the exception: the live config wins, so change it in Karabiner-Elements rather than in the repo (see Karabiner).

Configuration Structure

~/.dotfiles/
├── config/             # Configs a tool rewrites; chezmoi symlinks them into ~/.config
│   ├── btop/           # btop system monitor
│   ├── karabiner/      # Keyboard customization (copy-synced)
│   ├── kitty/          # Kitty terminal
│   ├── macos/          # System defaults script (not auto-run)
│   ├── mise/           # Tool version manager (node, rust, dotnet)
│   ├── nvim/           # Neovim config (LazyVim)
│   ├── zed/            # Zed settings, keymap, tasks
│   └── zellij/         # config.kdl only; zellij rewrites it on upgrade
├── general/
│   ├── agents/         # Global agent instructions (~/AGENTS.md, ~/.codex/AGENTS.md, ~/.agents/docs)
│   ├── .cspell/        # Spell checking dictionaries
│   └── Brewfile        # Homebrew packages, casks, VS Code extensions
├── home/               # chezmoi source; mirrors ~/ (zsh, git, ghostty, zellij, …)
├── .chezmoiroot        # Points chezmoi's source at home/
├── lefthook.yml        # Git hooks
├── prettier.config.js  # Code formatting
└── .markdownlint-cli2.mjs  # Markdown linting

Karabiner

Karabiner-Elements replaces symlinks when it writes config, so it uses a copy instead of a symlink. Each ./install copies the live config into the repo, or seeds it from the repo when there is none yet.

Version Management

Tools are installed by Homebrew where possible; mise covers the rest, in the order brew > mise > pnpm | cargo | uv. That order picks the installer, not the winner on PATH: eight names exist in both /opt/homebrew/bin and mise's shims — node, npm and npx among them — and .zshenv puts the shims first, so the mise-pinned version is the one that runs.

mise itself is the exception: it installs from https://mise.run into ~/.local/bin, not from the Brewfile, so it updates itself (self_update.auto in config/mise/config.toml) instead of waiting on brew upgrade. ./install bootstraps it, so it needs no manual install — but a machine that carries a Homebrew mise from before this change wants brew uninstall mise, since brew bundle leaves an already-installed formula in place.

chezmoi is nearly the same: ./install uses a working chezmoi already on PATH, and otherwise bootstraps one from https://get.chezmoi.io into ~/.local/bin. A machine carrying a Homebrew chezmoi from before this change therefore keeps using it, so brew uninstall chezmoi to switch to that copy, which chezmoi upgrade updates in place.

  • Python — uv, installed via Homebrew, with automatic version switching
  • Node.js — managed via mise; .nvmrc / .node-version auto-switching enabled via idiomatic_version_file_enable_tools
  • .NET — SDK managed via mise
  • Rust — toolchain via mise, along with any crate that has no Homebrew formula (cargo: backend)

Development

Available Scripts

pnpm run format        # Format JSON/YAML/MD files
pnpm run format:check  # Check formatting
pnpm run lint          # Run all linting
pnpm run lint:shell    # Lint shell scripts
pnpm run lint:md       # Lint markdown files

Git Hooks

Pre-commit hooks automatically:

  • Format files with Prettier
  • Lint shell scripts with Shellcheck
  • Lint markdown with markdownlint
  • Validate commit messages with commitlint (conventional commits)

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages