Personal macOS development environment managed with Chezmoi. Keyboard-centric workflow with extensive automation and tool integration.
New here? Start with docs/index.md.
- Key Features
- Installation
- Chezmoi & ASDF
- Shell Environment
- Git & 1Password
- Terminal Tools
- AI & LLM Integration
- Neovim
- macOS Automation
- Package Management
- Workflow
- Further Reading
| Feature | Description |
|---|---|
| π€ Agent Memory | Beads integration for AI task tracking |
| π Secure Identity | 1Password SSH agent with work/personal switching |
| π³ Git Worktrees | Worktree management with PR integration |
| π Neovim | Custom LSP, AI commits, refactoring tools |
| π Fish Shell | 30+ custom productivity functions |
| π¦ Brewfile | 250+ formulas and casks |
| βοΈ ASDF | Version manager with automatic switching |
- Install 1Password: Required for SSH agent and secret management.
sh -c "$(curl -fsLS get.chezmoi.io/lb)" -- init --apply kapral18- Chezmoi installs and initializes from this repository
- Prompts for:
- Primary email and SSH public key
- Secondary credentials (if personal machine)
- Work machine confirmation
- PGP cache TTL preference
- Applies all dotfiles, scripts, and configs
- Installs Homebrew packages
- Installs/updates language tools (ASDF, cargo, go, gems, npm, uv)
- Installs GitHub CLI extensions and manual packages (GitHub releases / DMGs)
- Applies macOS system preferences and other automation hooks
Configuration management with templates and scripts.
Key Concepts:
-
Conditional Logic (
.isWork): Templates use{{ .isWork }}to handle:- Different Git identities and SSH keys
- Work-specific ASDF plugins
- Separate Homebrew cask installations
- Different PGP cache timeouts
-
Executable Scripts: Files with
executable_prefix go to~/bin:home/exact_bin/executable_,w β ~/bin/,w -
Automated Hooks: Scripts in
.chezmoiscripts/run automatically:run_once_before_*- One-time setup (e.g., Xcode installation)run_once_after_*- One-time post-install (e.g., Homebrew setup)run_onchange_after_*- Run when template changes (e.g., package updates)
-
External Assets:
home/.chezmoiexternal.tomlpulls a few third-party dependencies so they stay up-to-date without being vendored here (e.g. tmuxtpm, HammerspoonEmmyLua.spoon,lowfidata files,batthemes).
Version manager for languages and tools.
How it works:
-
Declarative Plugins (
home/asdf_plugins.tmpl): Conditionally install pluginsnodejs ruby {{ if ne .isWork true }}lua{{ end }} -
Version Pinning (
home/readonly_dot_tool-versions.tmpl): Pin tool versionsnodejs 20.11.0 ruby 3.2.2 -
Automatic Switching:
cdinto a project and the right versions activate via ASDF shims.
Fish is the primary shell, with Zsh and Bash also configured.
Git worktree helpers for easier branch management.
Create worktrees from:
- Existing local branches
- Remote branches (
origin,upstream) - Fork branches (
,w add user/branch) - New branches from
HEAD - Nested directories for
feature/new-uiβ../feature/new-ui/
PR reviewer workflow:
- Search by PR number or keywords
- Select with
fzf(shows diff, description, CI status) - Fetch PR metadata via GitHub API
- Add contributor's fork temporarily
- Create worktree for PR branch
- Launch named tmux session
Interactive cleanup:
- Removes worktree directories
- Deletes local branches
- Cleans up fork remotes
- Removes empty parent directories
- Purges paths from zoxide
- Kills tmux sessions
Custom commands are shipped as scripts installed to ~/bin (source: home/exact_bin/). Fish completions live in home/dot_config/fish/completions/. A few helpers are defined directly in Fish config (home/dot_config/fish/config.fish.tmpl).
- Name:
,w- Description: Manage git worktrees with a consistent, tmux-friendly workflow (add/list/switch/open/remove) so you can keep branches isolated without losing context.
- Examples:
,w add feat/my-change main;,w prs 12345
- Name:
,add-patch-to-prs- Description: Apply a local
fix.patchonto one or more of your PR branches, commit, and pushβuseful for βsame fix across multiple PRsβ. - Examples:
,add-patch-to-prs 12345;,add-patch-to-prs "is:open author:@me label:backport"
- Description: Apply a local
- Name:
,appid- Description: Print the bundle identifier for a macOS app name/path (useful for scripting macOS automation).
- Examples:
,appid "Google Chrome";,appid "Safari"
- Name:
,apply-app-icons- Description: Apply custom app icons declared in
home/app_icons/icon_mapping.yamlto/Applications/*.appusingfileicon. - Examples: edit
home/app_icons/icon_mapping.yamlthen run,apply-app-icons; add a PNG underhome/app_icons/assets/β¦then run,apply-app-icons
- Description: Apply custom app icons declared in
- Name:
,bat-preview- Description: Smart preview for
fzf/terminal workflows: images viachafa, binaries viahexyl, directories vials -la, and text viabat. - Examples:
,bat-preview README.md --style=numbers;,bat-preview path/to/image.png
- Description: Smart preview for
- Name:
,check-backport-progress- Description: Inspect PRs via
ghto find missing backports and/or missing required labels across target branches. - Examples:
,check-backport-progress --merged-label "Critical Fixes" --required-labels "backport-v8.18 backport-v8.19" --branches "8.x 8.18" --upstream origin;,check-backport-progress --merged-label "needs-backport" --required-labels "backport-v1 backport-v2" --branches "main release-1.0" --upstream upstream
- Description: Inspect PRs via
- Name:
,cp-files-for-llm- Description: Copy the text contents of a directory tree to the clipboard with file headers (skips non-text), so you can paste a curated snapshot into an assistant.
- Examples:
,cp-files-for-llm .;,cp-files-for-llm src -E node_modules -E dist
- Name:
,disable-auto-merge- Description: Turn off auto-merge for all open PRs targeting a base branch (optionally skipping specific PRs).
- Examples:
,disable-auto-merge main;,disable-auto-merge 8.18 12345 23456
- Name:
,dumputi- Description: Dump the systemβs registered Uniform Type Identifiers (UTIs), useful when debugging file associations.
- Examples:
,dumputi | rg -n "public\\.json";,dumputi | rg -n "com\\.adobe"
- Name:
,enable-auto-merge- Description: Re-enable auto-merge for all open PRs targeting a base branch (also leaves a comment).
- Examples:
,enable-auto-merge main;,enable-auto-merge 8.18
- Name:
,fuzzy-brew-search- Description: Fuzzy search Homebrew descriptions with preview, then drive an βadd this to Brewfileβ workflow.
- Examples:
,fuzzy-brew-search ripgrep;,fuzzy-brew-search "postgres"
- Name:
,fzf-git-changed-lines- Description: Emit βchanged linesβ for your working tree as grep-like entries so you can search within just the diff.
- Examples:
,fzf-git-changed-lines --mode status | rg -n "TODO";,fzf-git-changed-lines --mode range --range "main..HEAD" | ,fzf-rg-multiline | fzf --read0
- Name:
,fzf-preview-follow- Description: Preview helper that centers the view around the match
line (works well with
,fzf-rg-multiline). - Examples:
,fzf-preview-follow --file README.md --line 120;rg -n --column --no-heading --color=never PATTERN | ,fzf-rg-multiline | fzf --read0 --delimiter '\t' --with-nth 1 --preview ',fzf-preview-follow --file {2} --line {3}'
- Description: Preview helper that centers the view around the match
line (works well with
- Name:
,fzf-rg-multiline- Description: Convert ripgrep output into NUL-delimited multi-line fzf entries so wrapped text doesnβt break actions/preview.
- Examples:
rg -n --column --no-heading --color=never PATTERN | ,fzf-rg-multiline | fzf --read0;,fzf-git-changed-lines --mode status | rg -n PATTERN | ,fzf-rg-multiline | fzf --read0
- Name:
,generate-git-sandbox- Description: Create a throwaway git repo with branches/commits for testing rebases/merges/scripts without touching real repos.
- Examples:
,generate-git-sandbox;cd git-sandbox-* && git log --oneline --graph --decorate --all
- Name:
,get-age-buckets- Description: Compute file βage bucketsβ from git history (last true content change) for path patterns, which helps spot stale areas.
- Examples:
,get-age-buckets --pattern "src/**/*.ts";,get-age-buckets --pattern "docs/**/*.md,*.mdx" --format json
- Name:
,get-risky-tests- Description: Run Jest and report tests whose runtime exceeds a threshold (helps target slow tests).
- Examples:
,get-risky-tests "src/plugins/data";,get-risky-tests "src/core/server" | jq -r '.fullName'
- Name:
,gh-prw- Description: Open the PR for the current branch (or a given PR number) in the browser, or print its number/URL for scripting.
- Examples:
,gh-prw;,gh-prw 12345;,gh-prw --number;,gh-prw --url
- Name:
,gh-tfork- Description: Fork + clone a repo into
./<repo>/main, then create/focus a tmux session named<repo>|mainwith a 2-window layout (each window split vertically). - Examples:
,gh-tfork elastic/integrations
- Description: Fork + clone a repo into
- Name:
,gh-subissues-create- Description: Draft multiple sub-issues in your editor, create them, and attach them to a parent issue via GitHubβs sub-issue GraphQL API.
- Examples:
,gh-subissues-create; re-run,gh-subissues-createto reuse defaults from/tmp/github-sub-issue-creator-session.json
- Name:
,grepo- Description: Find files containing a pattern and open the selected
file in
$EDITORat the next match. - Examples:
,grepo "owner:";,grepo "TODO"
- Description: Find files containing a pattern and open the selected
file in
- Name:
,hey-branch- Description: Quick βam I in sync with upstream?β status for the current branch (ahead/behind + missing remote).
- Examples:
,hey-branch; run,hey-branchaftergit fetch
- Name:
,history-sync- Description: Merge local Fish history with a 1Password document and push the merged result back, so multiple machines stay in sync.
- Examples:
,history-sync; run,history-syncon each machine periodically
- Name:
,install-npm-pkgs- Description: Install global npm packages listed in
home/readonly_dot_default-npm-pkgsand re-shim via ASDF. - Examples: update
home/readonly_dot_default-npm-pkgsthen run,install-npm-pkgs; run,install-npm-pkgson a new machine
- Description: Install global npm packages listed in
- Name:
,jest-test-title-report- Description: Compare Jest test titles between two worktrees and emit a CSV (useful for refactors/migrations and review diffs).
- Examples:
,jest-test-title-report --before ~/work/repo/main --after ~/work/repo/feat --scope src/plugins/data --out /tmp/data-tests.csv;,jest-test-title-report --before ~/work/repo/main --after ~/work/repo/feat --scope src/plugins/data --out /tmp/data-tests.csv --gist
- Name:
,list-prs- Description: Print PR numbers + titles (optionally with a search
query) for quick piping into
fzf/scripts. - Examples:
,list-prs;,list-prs "is:open label:bug"
- Description: Print PR numbers + titles (optionally with a search
query) for quick piping into
- Name:
,pdf-diff- Description: Visual diff two PDFs by compositing pages and opening the output.
- Examples:
,pdf-diff left.pdf right.pdf;,pdf-diff -d 200 -o /tmp/diff.pdf left.pdf right.pdf
- Name:
,pull-rebase- Description: Pull and rebase your current branch onto the branch it was created from (or its remote equivalent), with a confirmation prompt.
- Examples:
,pull-rebase; run,pull-rebasebefore pushing
- Name:
,remove-comment- Description: Delete a comment from the current PR by selecting it via
fzf(usesgh api). - Examples:
,remove-comment; use,remove-commentafter posting a mistaken comment
- Description: Delete a comment from the current PR by selecting it via
- Name:
,search-brew-desc- Description: Search installed Homebrew formula descriptions and emit JSON (name/desc/homepage).
- Examples:
,search-brew-desc "json" | jq -r '.[].name';,search-brew-desc "kubernetes"
- Name:
,search-gh-topic- Description: Search GitHub repos by topic (default:
gh-extension) with preview, then open the selected repo. - Examples:
,search-gh-topic "mcp";,search-gh-topic "kibana" "kibana"
- Description: Search GitHub repos by topic (default:
- Name:
,start-feat-kbn- Description: Kibana helper that boots ES (snapshot) and then starts Kibana in a tmux pane when bootstrap completes.
- Examples:
,start-feat-kbn feat-cluster;,start-feat-kbn -E xpack.security.enabled=false
- Name:
,start-main-kbn- Description: Same as
,start-feat-kbn, but for the βmainβ cluster defaults/ports. - Examples:
,start-main-kbn main-cluster;,start-main-kbn -E xpack.security.enabled=false
- Description: Same as
- Name:
,tmux-lowfi- Description: Control/launch
lowfiin a dedicated tmux session for quick play/pause/skip and tracklist switching. - Examples:
,tmux-lowfi play;,tmux-lowfi next-tracklist
- Description: Control/launch
- Name:
,tmux-run-all- Description: Run a command across multiple tmux sessions matching a pattern (optionally excluding a pattern).
- Examples:
,tmux-run-all "work-*" "git status";,tmux-run-all --all "dev-*" "*test*" "npm test"
- Name:
,to-gif- Description: Convert a video clip to a GIF using an ffmpeg palette workflow (tunable duration/scale/fps).
- Examples:
,to-gif -i in.mp4 -o out.gif;,to-gif -i in.mp4 -o out.gif -t 10 -s 900 -f 15
- Name:
,trace-string-pr- Description: Search git history for when a regex was introduced in a path, then open the PR referenced by the selected commit.
- Examples:
,trace-string-pr "mySymbol" src/;,trace-string-pr "TODO\\(" .
- Name:
,vid-ipad- Description: Re-encode a video with audio normalization/compression/EQ so itβs more βiPad friendlyβ.
- Examples:
,vid-ipad in.mov out.mp4;,vid-ipad recording.mp4 ipad.mp4
- Name:
,view-my-issues- Description: Show your assigned issues via
fzfand open the selected one in a browser. - Examples:
,view-my-issues; use,view-my-issuesas a quick βwhat should I do next?β launcher
- Description: Show your assigned issues via
- Name:
bdlocal- Description: Beads wrapper that pins a per-repo local DB (based on your current directoryβs git remote/repo name).
- Examples:
bdlocal status --no-activity --json;bdlocal ready --json
- Name:
wpass(non-work)- Description: Point
PASSWORD_STORE_DIRto the work password-store. - Examples:
wpass; pass ls;wpass; pass show some/entry
- Description: Point
- Name:
ppass(non-work)- Description: Reset
PASSWORD_STORE_DIRback to the default password-store. - Examples:
ppass; pass ls;ppass; pass show some/entry
- Description: Reset
Manage separate Git identities (personal/work) automatically.
- Global config sets
sshCommand = ssh -o IdentityFile="~/.ssh/primary_public_key.pub" - Points to public key (safe on disk)
- 1Password SSH agent fetches matching private key from vault
- Conditional include
[includeIf "gitdir:~/work/"]loads work config - Work config points to
secondary_public_key.pubfor different private key
Result: Automatic identity switching based on directory, no private keys on disk.
Aliases:
git wtgrab <worktree>- Transfer uncommitted changes between worktreesgit squash <n>- Interactive squashgit u- Fetch, rebase, and prunegit hide/unhide- Ignore local changes to tracked files
Defaults:
rerere- Auto-resolve repeated conflictsrebase.autoSquash = truerebase.updateRefs = truediff.algorithm = histogrammerge.conflictStyle = zdiff3feature.manyFiles = true
gh-dash: Terminal UI for GitHub PRs and issues
- Separate views for work/personal repos
- Custom filters and layouts
- Config:
home/dot_config/exact_gh-dash/config.yml - GitHub CLI (
gh) config:home/dot_config/exact_private_gh/
TUIs:
- gitui - Fast keyboard-driven UI
- lazygit - Simple terminal interface
- tig - History viewer
Prefix: C-Space
Config: home/dot_config/tmux/tmux.conf
Plugins:
| Plugin | Function |
|---|---|
tpm |
Plugin manager |
tmux-resurrect + tmux-continuum |
Auto-save sessions every 15min |
tmux-pain-control |
Pane resize/swap |
tmux-sessionist |
Session switching |
tmux-fzf-url |
Extract URLs from scrollback |
tmux-theme-catppuccin |
Theme |
Neovim Integration:
Ctrl-Shift-h/j/k/l- Passthrough to Neovim- Vi mode for navigation and copy
Default terminal emulator (GPU-accelerated).
Config (home/dot_config/exact_ghostty/config):
- Hidden titlebar, no shadows
- JetBrainsMono Nerd Font 14pt
- Copy-on-select
- Shell integration
Language server for Fish scripts:
- Completions
- Syntax checking
- Go-to-definition
- Diagnostics
AI tools for CLI and editor. Credentials in 1Password, configs in repo.
| Tool | Purpose | Config |
|---|---|---|
| Crush | Terminal AI assistant | Charmbracelet tap |
| Ollama | Local LLM runtime | home/.chezmoiscripts/run_onchange_after_05-add-ollama-models.sh |
| Amp | AI coding tool with MCP | home/dot_config/amp/private_settings.json |
| Codex CLI | Terminal coding agent | home/dot_codex/private_config.toml |
| OpenCode | Terminal agent runner | home/dot_config/opencode/opencode.jsonc |
| Cursor | AI code editor (work) | home/dot_cursor/mcp.json (.isWork conditional) |
| Gemini CLI | Terminal AI assistant | home/dot_gemini/settings.json |
Ollama Models:
gpt-ossdeepseek-r1
This repo ships "how I want assistants to operate" as files installed to your home directory:
home/readonly_AGENTS.mdβ~/AGENTS.mdhome/readonly_CLAUDE.mdβ~/CLAUDE.mdhome/dot_gemini/readonly_GEMINI.mdβ~/.gemini/GEMINI.md
Playbooks are reusable workflow modules referenced by the SOP entrypoints (for example: "When X happens, use playbook Y").
Source of truth (chezmoi-managed, real files):
home/exact_dot_agents/exact_playbooks/β~/.agents/playbooks/
Config lives in home/dot_config/exact_nvim/ (installed to ~/.config/nvim/).
Local plugins are implemented in home/dot_config/exact_nvim/exact_lua/exact_plugins_local_src/ and loaded via home/dot_config/exact_nvim/exact_lua/exact_plugins_local/.
- Name:
run-jest-in-split- Description: Run the nearest Jest test (or entire file) in a split
terminal, with debug and snapshot modes;
qcloses the terminal buffer. - Examples:
<leader>ttrun test under cursor;<leader>tDdebug whole file
- Description: Run the nearest Jest test (or entire file) in a split
terminal, with debug and snapshot modes;
- Name:
summarize-commit- Description: Generate a conventional-commit message from the staged
diff and insert it into the
gitcommitbuffer. - Examples:
<leader>aisl(Ollama);<leader>aiso(OpenRouter)
- Description: Generate a conventional-commit message from the staged
diff and insert it into the
- Name:
save-ai-data- Description: Build a curated
~/ai_data.txtby appending/replacing the current buffer or a selected path (and removing entries by pattern/type). - Examples:
<leader>aisappend current buffer;:RemoveAIFileEntries <pattern>
- Description: Build a curated
- Name:
ts-move-exports- Description: Move selected TypeScript exports to a new file path and update imports.
- Examples: Visual-select exports β
<leader>]; repeat until file is clean
- Name:
switch-src-test- Description: Jump between source and test files (supports common
test/specsuffixes and JS/TS extension variants). - Examples:
<C-^>toggle; run from either file direction
- Description: Jump between source and test files (supports common
- Name:
owner-code-search- Description: CODEOWNERS-aware search helpers (ripgrep/fd) scoped to paths owned by a team or regex.
- Examples:
:OwnerCodeGrep <team> <pattern>;<leader>rginteractive prompt
- Name:
show-file-owner- Description: Show the owner(s) of the current file from
.github/CODEOWNERS(with caching + specificity sorting). - Examples:
<leader>0;:ShowFileOwner
- Description: Show the owner(s) of the current file from
- Name:
open-eslint-path- Description: In an ESLint config, open the on-disk file behind the
extends/plugins/rulesentry under the cursor (fromnode_modules). - Examples: Put cursor on a value β
<leader>sfe; pick from multiple matches when prompted
- Description: In an ESLint config, open the on-disk file behind the
- Name:
send-to-tmux-right-pane- Description: Send diagnostics/current line/selection/git hunk/diff to the Tmux pane to the right (useful for pasting into a REPL, Slack, etc.).
- Examples:
<leader>adsend diagnostics;<leader>avsend selection
- Name:
copy-to-qf- Description: Copy the current buffer file into each unique directory referenced by the current quickfix list (optionally forcing overwrites).
- Examples:
<leader>cbcopy;:CopyBufferToQfDirs force
- Name:
qf- Description: Quickfix ergonomics: dedupe, path-copy, reverse
:cdo, plus interactive include/exclude filtering. - Examples:
:QFDedupe;<leader>rqiinclude-filter quickfix items
- Description: Quickfix ergonomics: dedupe, path-copy, reverse
- Name:
toggle-win-width- Description: Toggle the current window width between the previous value and the longest visible line width in the buffer.
- Examples:
<leader>=expand-to-content;<leader>=restore
- Name:
winbar- Description: Winbar shows the βremainderβ of the current path (components not already shown by bufferline), with truncation.
- Examples: Open a deep path; resize the window and it reflows
- Name:
:LargeFiles [min_lines] [max_lines]- Description: Populate quickfix with tracked files exceeding a line-count threshold (filters out image files).
- Examples:
:LargeFiles 5000;:LargeFiles 2000 10000
- Name:
:UndoHashedPrune [max_age_days] [max_total_mb]- Description: Prune the custom hashed-undo store by age/size.
- Examples:
:UndoHashedPrune;:UndoHashedPrune 14 256
- Name:
:CpFromDownloads- Description: Neo-tree helper that builds a
cp ~/Downloads/ β¦command targeting the selected directory. - Examples: In Neo-tree:
:CpFromDownloads;<leader>cp(Neo-tree buffer)
- Description: Neo-tree helper that builds a
- Name:
:WW/:WWW- Description: Write (or write-all) without triggering write autocmds.
- Examples:
:WW;:WWW
- Name:
:MakeTags- Description: Generate
ctagsrespecting.gitignore. - Examples:
:MakeTags;<leader>mt
- Description: Generate
- Filetype detection for Helm chart YAML/templates, Docker Compose YAML, and
.httpfiles:home/dot_config/exact_nvim/exact_ftdetect/filetypes.lua - Tree-sitter query overrides/injections for several languages (e.g.
Astro/TSX/MDX/Markdown):
home/dot_config/exact_nvim/exact_after/exact_queries/
Lua-based automation.
Defaults scripts:
home/.osx.core+home/.chezmoiscripts/run_onchange_after_05-osx.core.sh.tmplhome/.osx.extra+home/.chezmoiscripts/run_onchange_after_05-osx.extra.sh.tmpl
Keyboard mouse control:
h/j/k/lto move cursor- Grid mode for precise positioning
Hyper key + movement:
Hyper + h- Snap leftHyper + l- Snap rightHyper + k- Snap topHyper + j- Snap bottomHyper + m- Maximize
Script: ,apply-app-icons
- YAML mapping (
home/app_icons/icon_mapping.yaml) - Uses
fileiconto apply icons - Assets in
home/app_icons/assets/
Alfred preferences and workflows live in home/Alfred.alfredpreferences/.
Karabiner-Elements rules live in home/dot_config/private_karabiner/karabiner.json.
| System | File | Purpose |
|---|---|---|
| Homebrew | home/readonly_dot_Brewfile.tmpl |
macOS apps, CLI tools, fonts |
| Cargo | home/readonly_dot_default-cargo-crates |
Rust packages |
| Go | home/readonly_dot_default-golang-pkgs |
Go tools |
| Gems | home/readonly_dot_default-gems |
Ruby packages |
| npm | home/readonly_dot_default-npm-pkgs |
Node.js globals |
| uv | home/readonly_dot_default-uv-tools.tmpl |
Python tools |
| Manual | home/readonly_dot_default-manual-packages.tmpl |
DMGs + GitHub releases |
Install scripts run via chezmoi hooks when files change.
Note: this setup is intentionally declarative. For example:
- Homebrew sync runs
brew bundle cleanup --global --forceviahome/.chezmoiscripts/run_onchange_after_03-install-brew-packages.fish.tmpl(so formulas/casks not in the Brewfile can be removed). - ASDF sync removes unwanted plugins/versions based on
home/asdf_plugins.tmplandhome/readonly_dot_tool-versions.tmplviahome/.chezmoiscripts/run_onchange_after_05-install-asdf-plugins.sh.tmpl.
- Tmux sessions auto-restore
,w add feature/new-ui- new worktree + tmux session,w prs 12345- checkout PR- Jest runner in Neovim
- AI-generated commit
,w remove- cleanup
brew update && brew upgrade
chezmoi applysh -c "$(curl -fsLS get.chezmoi.io/lb)" -- init --apply kapral18- Docs:
docs/index.md - Chezmoi configs:
home/ - Chezmoi data prompts:
home/.chezmoi.toml.tmpl - Chezmoi externals:
home/.chezmoiexternal.toml - Chezmoi hooks:
home/.chezmoiscripts/ - Neovim:
home/dot_config/exact_nvim/ - Fish:
home/dot_config/fish/ - Scripts:
home/exact_bin/ - Brewfile:
home/readonly_dot_Brewfile.tmpl - Assistant playbooks:
home/exact_dot_agents/exact_playbooks/ - Codex CLI config:
home/dot_codex/ - OpenCode config:
home/dot_config/opencode/ - Alfred:
home/Alfred.alfredpreferences/ - Karabiner:
home/dot_config/private_karabiner/ - Hammerspoon:
home/dot_hammerspoon/
See also: AGENTS.md for AI agent instructions
