My personal dotfiles, managed with chezmoi.
This repository is a chezmoi source directory. Files use chezmoi's naming conventions (dot_, executable_, and .tmpl) so the same source can be applied on macOS and Linux.
# macOS / Linux
brew install chezmoi
# or: https://www.chezmoi.io/install/mise is also required to install the CLI tools listed below.
Install it manually first: https://mise.jdx.dev/getting-started.html.
Neovim itself is a manual install too: this repo only manages a few plugin files layered on top of the LazyVim starter.
git clone https://github.com/LazyVim/starter ~/.config/nvim
rm -rf ~/.config/nvim/.gitchezmoi init https://github.com/rangzen/dotfiles.git
chezmoi diff
chezmoi applyTo inspect the generated source: chezmoi source-path.
Do not run chezmoi and Stow against the same files at the same time; remove the old Stow links first.
Templates use .chezmoi.os for platform-specific values. Hammerspoon is ignored on Linux.
Whispypy keeps its generated runtime configuration outside this repository. On each Linux machine, run its device discovery/validation tool once; the application saves the selected device in ~/.config/whispypy/config.conf. This avoids versioning hardware-specific PipeWire IDs and lets Whispypy use its semi-automatic detection flow.
- Starts maximized on the active screen
- No decorations, no tab bar, no padding
- Launches tmux directly on startup
F13- interactive screenshot saved to~/Pictures/and copied to clipboard
CLI tools declared in ~/.config/mise/config.toml, installed with mise install.
Machine-specific tools and secrets go in ~/.config/mise/config.local.toml, which mise merges in but chezmoi never manages.
| Tool | Description |
|---|---|
| bat | cat clone with syntax highlighting and Git integration |
| delta | Syntax-highlighting pager for git/diff output |
| eza | Modern replacement for ls with icons and Git status |
| fd | Fast, user-friendly alternative to find |
| fzf | Command-line fuzzy finder |
| lazydocker | Terminal UI for Docker and Docker Compose |
| lazygit | Terminal UI for git commands |
| rg (ripgrep) | Fast recursive search that respects .gitignore |
| starship | Fast, customizable cross-shell prompt |
| tmux | Terminal multiplexer |
| zoxide | Smarter cd that learns your most-used directories |
Only tools every machine needs belong in the versioned config.toml.
Anything specific to one machine (language runtimes, work-only CLIs, API keys) goes in ~/.config/mise/config.local.toml instead, which is not part of this repository and is never applied by chezmoi.
Add a tool without opening an editor:
mise use -g --path ~/.config/mise/config.local.toml node@ltsOr edit the file directly, which is also required for [env] since mise use only manages [tools]:
mkdir -p ~/.config/mise
$EDITOR ~/.config/mise/config.local.toml[tools]
node = "lts"
[env]
SOME_API_KEY = "..."Run mise install afterwards. mise config shows which file each active tool comes from.
Rules for markdownlint-cli2 (~/.markdownlint-cli2.yaml). Used by the nvim package via nvim-lint.
lint.lua-nvim-lintwithmarkdownlint-cli2, uses themarkdownlintpackage config
Inspired by Omarchy.
- Prefix:
Ctrl+Space - Default shell: Fish
- Pane split:
prefix+v(vertical) /prefix+h(horizontal) - Pane navigation:
Shift+Alt+Arrows - Pane resize:
Ctrl+Alt+Arrows - Window switch:
Alt+Left/RightorAlt+<BEPO digit keys>for windows 1-9 - Session switch:
Alt+Up/Down - Copy mode: vi-style (
vto select,yto copy) - Reload config:
prefix+q
Must be run inside a tmux session. <ai> is any CLI command e.g. claude, opencode, gemini.
| Command | Meaning | Usage |
|---|---|---|
tdl |
Tmux Dev Layout | tdl <ai> [<ai2>] - editor left, AI pane(s) right, terminal strip at bottom |
tdlm |
Tmux Dev Layout Multi | tdlm <ai> [<ai2>] - runs tdl in one window per subdirectory |
tds |
Tmux Dev Square | tds - square 4-pane layout: nvim, diff watch, terminal, opencode |
tlt |
Tmux Layout Tabs | tlt <ai> - three tabs: AI tool, nvim with file explorer, lazygit |
tsl |
Tmux Split Launch | tsl <count> <cmd> - N tiled panes all running the same command |