minimalist configurations
.zshrc • .zshrc.d/* • .profile • .tmux.conf • .claude/*
git • zsh • tmux • direnv/jump/jenv • shims
██████╗ ██████╗ ████████╗███████╗ ██╔══██╗██╔═══██╗╚══██╔══╝██╔════╝ ██║ ██║██║ ██║ ██║ ███████╗ ██║ ██║██║ ██║ ██║ ╚════██║ ██████╔╝╚██████╔╝ ██║ ███████║ ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝
Personal dotfiles + bootstrap scripts for a fast, consistent shell setup across macOS and Linux.
If you want one repo to manage shell config, platform-specific overlays, and a small "download-on-first-use" tool system, this is that repo.
- Quick Start
- Prerequisites
- What Happens During Install
- Day-to-Day Usage
- Vim Quick Start
- Repository Map
- Optional AI Config
- Shims
Bootstrap in one command:
curl -fsSL https://raw.githubusercontent.com/iarkhanhelsky/dots/main/install.sh | bashDefaults:
DOTS_HOME="$HOME"DOTS_DIR="$DOTS_HOME/Projects/github/dots"
Common overrides:
# Use a custom checkout location
DOTS_DIR="$HOME/some/other/path/dots" \
curl -fsSL https://raw.githubusercontent.com/iarkhanhelsky/dots/main/install.sh | bash
# Test in an isolated home directory
DOTS_HOME="/tmp/dots-test-home" \
curl -fsSL https://raw.githubusercontent.com/iarkhanhelsky/dots/main/install.sh | bashManual fallback:
git clone --recurse-submodules https://github.com/iarkhanhelsky/dots.git ~/Projects/github/dots
cd ~/Projects/github/dots
./bin/dots-setupAfter install, quick sanity check:
- Open a new shell (
zsh) and confirm your prompt/plugins are active. - Run
./bin/dots-setupfrom the repo once to verify no setup issues.
Required:
gitbashzsh
Optional but supported:
jenvjumpdirenvbat
If optional tools are installed, config and shims use them automatically.
install.sh does the following:
- Verifies
gitandbashare available. - Uses
DOTS_HOME/DOTS_DIR(or defaults) and exportsHOME="$DOTS_HOME". - If the repo does not exist: clone with submodules, then run
./bin/dots-setup. - If the repo exists and is clean:
git pull --ff-only --recurse-submodules, update submodules, then run./bin/dots-setup. - If local changes exist: exit without overwriting anything.
./bin/dots-setup then performs dotfiles linking + configure scripts.
- Update your setup: rerun the bootstrap command, or
cd "$DOTS_DIR" && ./bin/dots-setupafter pulling changes yourself. - When updates fail: if installer reports local changes, commit/stash/discard
in
DOTS_DIR, then rerun. - Changing machines/environments: reuse the same bootstrap command and set
DOTS_HOME/DOTS_DIRif needed.
If you use Vim casually, this repo now includes rc/vimrc with
simple defaults for single-file edits and git commit messages.
- Undo/redo
uundoCtrl-rredo:earlier 5m/:later 5mfor time-based undo travel
- Yank/paste
- Native Vim still works (
yy,yw,p,P) <leader>ycopy to system clipboard (<leader>isSpace)<leader>p/<leader>Ppaste from system clipboard- Useful registers:
"(default),"0(last yank),"+(system clipboard)
- Native Vim still works (
- Commit messages
- In
git commitbuffers: spellcheck is enabled and wrapping is tuned for the common 72-character body style.
- In
- Optional plugins
rc/vimrcincludes a commentedvim-plugblock with lightweight options:vim-sensible,vim-surround,vim-commentary.- Config works without plugins; uncomment only if you want them.
- A few commands that dramatically improve daily use
- Navigation:
w/b/e(word moves),0/^/$(line start/non-blank/end) - Editing:
ciw(change word),di((delete inside parentheses),da"(delete around quotes) - Search:
/textthenn/Nfor next/previous match - Buffers:
:e fileopen file,:bnextand:bprevswitch between open buffers
- Navigation:
rc/: base dotfile sources (linked into$HOMEas hidden files).rc/shared/: shared assets linked once and consumed by multiple tools.rc-darwin/andrc-linux/: OS-specific overlays.configure/: post-link setup scripts used by./bin/dots-setup.bin/dots-setup: orchestration for link/configure phases.shims/: shim runtime, generated launchers, and shim definitions.tmux/: tmux assets/plugins used by this setup.zsh-plugins/: bundled zsh plugin sources.
What this changes in practice:
- Dotfiles in
$HOMEare managed as symlinks into this repo. - Existing targets can be replaced during linking.
- Configure scripts from
configure*/run during setup.
This repo can also manage personal Claude/Cursor config using the same linking model. If you do not use it, you can safely ignore this section.
- Personal agents:
rc/claude/agents/*.md->~/.claude/agents/*.md - Shared skills source:
rc/shared/skills/*/SKILL.md->~/.shared/skills/*/SKILL.md - Claude skills link:
~/.claude/skills->~/.shared/skills - Cursor skills link:
~/.cursor/skills->~/.shared/skills
Shims let you expose CLI tools that are downloaded on demand and cached outside this repository.
- Supported platforms:
darwin/arm64,linux/amd64 - Cache root:
~/.cache/dm-dots/shims - Cache invalidation: definition-file hash (definition changes trigger refresh)
- Scaffold shim launcher + placeholder definition:
./shims/dm-shim add <tool-name>- Edit
shims/defs/<tool-name>.env:
TOOL_VERSION="v0.0.0"
TOOL_URL="gh://owner/repo/{version}/asset-{os}-{arch}.tar.gz"
TOOL_FILE="path/inside/archive/to/binary"Notes:
gh://...expands tohttps://github.com/<owner>/<repo>/releases/download/...- Supported placeholders:
{version},{os},{arch} - Optional overrides:
TOOL_MODE(auto,binary,tar.gz,zip)TOOL_URL_DARWIN_ARM64,TOOL_URL_LINUX_AMD64TOOL_FILE_DARWIN_ARM64,TOOL_MODE_LINUX_AMD64
- Commit:
shims/bin/<tool-name>shims/defs/<tool-name>.env
Reload shell config, then run the tool name directly.
Example:
my-tool --helpOn first run, the shim downloads and caches the binary. Later runs use cache.