Personal dotfiles for AI-driven, CLI-first development on Linux and macOS. Chezmoi manages files; mise manages tools and tasks. Read, borrow, or fork to build your own workstation.
Install · Use · Agents · Credentials · Adapt
- Terminal: Ghostty, Zellij, and Fish with Starship, Atuin, zoxide, fzf, yazi, and lazygit — tuned for keyboard speed and ultrawide layouts.
- Editor: Neovim (LazyVim), unified across tools with fmind/theme.
- Agents: Antigravity (primary), Claude Code, Copilot, OpenCode, and Pi share one persona and skill catalog, with local session archiving and usage stats.
- Development: Python 3.14 with uv, Ruff, ty, and pytest plus cloud/service CLIs; projects pin their own stack tools.
- Automation:
dotchecks workstation health, manages multi-repo workspaces, handles provider logins and scoped secrets, and enforces agent context budgets.
| Platform | Requirements | CI coverage |
|---|---|---|
| Linux x86-64 | glibc 2.39+ (Debian 13 / Ubuntu 24.04+) | Full repository gate and starter tests |
| Linux arm64 | glibc 2.39+ (Debian 13 / Ubuntu 24.04+) | Tool locks verified in CI; exercised locally |
| macOS Apple Silicon | macOS 15+, Xcode Command Line Tools | Templates, Python, and starter tests |
macOS follows Homebrew's supported versions; other platforms are untested. CI validates locks, templates, code, and builds without running the host installer end-to-end.
Install host packages first; everything else runs in user space:
# Debian / Ubuntu
sudo apt install -y git curl libatomic1 build-essential gnome-keyring xclip wl-clipboard fonts-noto-color-emoji
# macOS
xcode-select --installThe installer requires mise 2026.11.6 or newer and installs it if absent. Ghostty is the recommended terminal. Containers are optional: on macOS, mise installs Colima, Docker CLI, Compose, and Buildx (colima start); on Linux, install Docker Engine from your distribution.
Warning
Personal dotfiles: adapt them and back up existing files first. Setup overwrites managed targets without backups. Agents run with autonomous permissions, and apply auto-trusts configured workspaces (Copilot inherits trust across subdirectories; keep untrusted clones outside pull.directories) and owner-allowlisted repos; review trust behavior before use.
Inspect install.sh, then run:
git clone https://github.com/fmind/dot.git ~/.local/share/chezmoi
bash ~/.local/share/chezmoi/install.shEnter your own Git name, email, and personal-repo email at the prompts (defaults are mine), then open a new shell and run dot doctor.
Rerun install.sh to resume setup (SKIP_GIT_PULL=true skips upstream fetch). On an initialized checkout, mise run full reapplies files and syncs locked tools, dot, and completions.
Ghostty and Zellij launch Fish without changing your login shell. Fish attaches to Zellij once at startup and drops back to a plain shell on detach or exit. Elsewhere, run fish or set your terminal shell to ~/.local/share/mise/shims/fish.
dot --help # List commands
dot doctor # Check workstation health
dot doctor --headroom # Check disk and memory before large jobs
dot config show # Show effective settings
dot agent stats # Report agent token and cost usage
dot status --fetch # Fetch remotes and show repo status
dot orphan # List unmanaged leftoversEdit sources in ~/.local/share/chezmoi, then preview and apply:
cd ~/.local/share/chezmoi
mise run diff
mise run applySee the Dot CLI guide for all commands and recovery workflows.
Keyboard ergonomics:
- Fish abbreviations:
aagy(accontinue,aiinteractive,apprint),ggit (gllazygit),mmise (mrmise run),vNeovim,yyazi,hdot(hddoctor,hhheadroom,hsfetched dirty status,hppull,hoorphans,hccaches,haagent stats). - Zellij:
Alt aAntigravity,Alt glazygit,Alt yyazi,Alt /session manager,Alt inext attention,Alt Shift iattention inbox;Alt ntiles up to four ultrawide columns before half-stacking (Ctrl b,Space); detach withCtrl o,d. - Neovim:
<leader>gmdiffs buffer against default-branch merge-base,Tabaccepts completions,Enterinserts newline, andmise lspvalidatesmise.toml.
Machine-local overrides live in unmanaged ~/.config/dot.yaml and merge over built-in defaults. Edit and validate with dot config edit, or select a ~/.config/dot.*.yaml profile via dot --config <path> or DOT_CONFIG_PATH.
dot agent stats reports tokens, estimated API value, and recorded provider spend (including archived Codex/Grok history; --monthly groups by UTC month) after syncing local transcripts via dot agent session sync; see agent usage.
Run from the checkout (mise tasks lists all tasks and aliases):
| Command | Purpose |
|---|---|
mise run diff |
Preview dotfile changes |
mise run apply |
Apply files and eligible hooks |
mise run doctor |
Check workstation health (dot, chezmoi, and mise) |
mise run full |
Install locked repo and global tools, apply dotfiles, deploy dot, completions |
mise run upgrade |
Upgrade dependencies, tools, theme pin, and plugins (includes full) |
mise run all |
Check, test, and build the repository (read-only; no file rewrites or deploy) |
Contributor guides: AGENTS.md and releases & qualification. Python tracks the latest 3.14 patch until required tools ship 3.15 wheels.
Antigravity, Claude Code, Copilot, OpenCode, and Pi share dot_agents/AGENTS.md and skills/. Launching agy from Fish or Zellij (Alt a) prepends mise shims on PATH so commands resolve each project's tool pins. Built-in subagents inherit the shared persona and skills without custom role files; see cross-harness agents.
Setup links skills/ into ~/.agents/skills/ beside standalone installs (restart open sessions after catalog updates). See skillify, dot-skills, and retired links.
Common slash commands:
- Deliverables & writing:
/clipboardcopies the last output (clipboard);/stakeholder-writingdrafts and fact-checks message-first prose;/draft-docbuilds Google Docs;/draft-maildrafts Gmail replies without sending. - Engineering & maintenance:
/full-reviewaudits a repo or PR and smoke-tests tasks;/trim <path>cuts tokens without losing facts;/skillifycaptures workflows and session lessons;/auth-statuschecks CLI logins;/task-promptswrites handoffs (agy -cresumes,/compactcompacts).
dot login # Reconcile configured providers (auth.login); opens browser only if needed
dot login --check # Exit 1 if any configured provider needs login
dot login github # GitHub
dot login workspace # Google Workspace
dot login gcp # Google Cloud and ADC
dot login colab # ADC with Colab scopes + session checkGitHub pushes over SSH even for HTTPS clones (register keys in GitHub settings). dot login reconciles auth.login providers ([github, gcp, workspace] by default; colab opt-in), OAuth scopes, and Workspace APIs; see authentication.
Harnesses manage their own logins (mise locks all except self-updating Antigravity):
| Harness | Command | Guide |
|---|---|---|
| Antigravity | agy |
agy |
| Claude Code | claude auth login |
agent-harnesses |
| Copilot | copilot login |
agent-harnesses |
| OpenCode | opencode auth login |
agent-harnesses |
| Pi | /login inside pi |
agent-harnesses |
Pi seeds Agent Platform via ADC: export GOOGLE_CLOUD_PROJECT after dot login gcp (GOOGLE_CLOUD_LOCATION defaults to global), or /login to another provider. Add optional MCP servers via mcp-setup.
Each machine signs commits and annotated tags (git tag NAME -m MSG) with a dedicated passphraseless Ed25519 key (~/.ssh/id_ed25519_signing) for unattended agent commits and per-machine revocation (machines without the key commit unsigned). Provision once (dot setup github drops temporary write:ssh_signing_key afterward; key titles are public):
ssh-keygen -t ed25519 -N '' -C "git-signing@fmind.dev" -f ~/.ssh/id_ed25519_signing
dot login github --grant write:ssh_signing_key
gh ssh-key add ~/.ssh/id_ed25519_signing.pub --type signing --title "git signing $(date +%F)"
dot setup github
printf '*@fmind.dev namespaces="git" %s\n' "$(cat ~/.ssh/id_ed25519_signing.pub)" >>"$(chezmoi source-path)/dot_config/git/allowed_signers"
chezmoi apply ~/.gitconfig ~/.config/git/allowed_signersCommit allowed_signers for local verification (git log --show-signature), then enable vigilant mode in GitHub keys. To retire a machine while preserving historical verification, append valid-before="YYYYMMDD" (namespaces="git",valid-before="YYYYMMDD") and delete its GitHub key.
Secrets are never exported at shell startup:
-
Native credential seeds: Hugging Face, Kaggle, and OpenCode (
~/.local/share/opencode/auth.json) credentials deploy only when absent sohf auth login,kaggle auth login, andopencode auth loginpersist across apply (savedauth.jsonentries override env vars); isolate customer accounts via customer overrides. -
Scoped secrets: inject a personal key into one command via
dot secret run(scoped credentials). Personal model integrations default to GCP Agent Platform with ADC, OpenCode uses OpenRouter, and PyPI uses Trusted Publishing:dot secret run OPENROUTER_MANAGEMENT_KEY -- <command>
-
Collector configs: Brain Framework credentials under
~/.config/bf/credentials/overwrite on apply; edit encrypted sources only. -
Encrypted sources:
~/.config/chezmoi/key.txtdecrypts*.agefiles (apply skips them when absent). Back up the key, never copy it to customer machines, and manage*.agefiles via chezmoi.
Fork and replace personal defaults:
- Identity: prompts in
.chezmoi.toml.tmpl, clone URL ininstall.sh, andallowed_signersbefore commit signing. Put local Git overrides in unmanaged~/.config/git/config.local. - Secrets: replace the age recipient in
.chezmoi.toml.tmpland remove or re-encrypt*.agefiles before applying (Secret Management). - Persona: edit
dot_agents/AGENTS.md. - Workspaces & trust: update
pull.directories(also trusted in harnesses — Copilot and Pi inherit trust to subdirectories, while Pi seeds.gitroots only — and added to Claude'sadditionalDirectories),trust.github_owners, andtrust.agy_projectsin~/.config/dot.yaml, plusincludeIfpaths indot_gitconfig.tmpl. Manage mise trust viamise trustor unmanaged~/.config/mise/conf.d/trust.toml. - Theme & design: update
.chezmoiexternal.toml.tmpl, pinned to an fmind/theme commit (mise run upgradeadvances it; personal work only) for app themes,~/.agents/DESIGN.md, and~/.agents/themes/renderer files.
No single uninstaller exists: save chezmoi managed, run chezmoi purge and mise implode --config, then restore backups and remove remaining deployed files, shell blocks, fonts, and agent state. To roll back, save local edits, check out the prior release tag, and run mise run full and mise run vim (newer files, app data, and migrations remain).
Report vulnerabilities via SECURITY.md.
MIT © Médéric Hurier (Fmind)