macOS dotfiles: Neovim, Kanata, Kitty, Zsh, SketchyBar, and related tools.
- macOS-only - scripts use
afplay,system_profiler, Homebrew $DOTFILESenv var is set in~/.env.shand used throughout
This system uses corepack to manage package managers. Corepack shims are installed in PATH (/opt/homebrew/bin/pnpm, /opt/homebrew/bin/yarn) — so pnpm, yarn, npx, and npm all route through corepack automatically.
- Node version manager:
fnm(configured in.zshenvandzsh.rc) - pnpm/yarn: Always go through corepack shims — do NOT install pnpm or yarn globally
- Use
pnpmandyarndirectly — the corepack shims handle version resolution per-project viapackageManagerfield inpackage.json - The zsh aliases (
alias pnpm="corepack pnpm") are redundant with the shims and only apply to interactive shells — agents should callpnpm/yarndirectly
# Lua formatting
stylua --config-path nvim/.stylua.toml nvim/
# Shell syntax check
bash -n path/to/script.sh
# Install/update all symlinks
./install/bootstrap.sh| Directory | Language | Formatter |
|---|---|---|
| kanata/ | Kanata KBD (S-expressions) | - |
| opencode/ | TypeScript (Bun) | - |
| opencode/plugin/ | TypeScript | Prettier |
| nvim/lua/ | Lua | StyLua (see .stylua.toml) |
| yazi/ | Lua | StyLua |
| sketchybar/ | Bash | - |
| kitty/meow/ | Python | PEP 8 |
Edit kanata/kanata.kbd directly. Config uses S-expressions (Lisp-like syntax).
Key concepts:
defsrc— which physical keys kanata interceptsdefalias— named shortcuts for complex actions (tap-hold, layer switches)deflayer— layer definitions (base,special,numbers)
Kanata live-reloads on config change. Requires sudo on macOS (uses Karabiner driver).
Plugins auto-load from nvim/lua/plugins/. Subdirectories organize by category:
plugins/files/- file managementplugins/git/- git integrationplugins/external/- external tool integration
Follow existing plugin structure - return a table with lazy.nvim spec.
Each tool directory has a links.prop file:
$DOTFILES/nvim=$HOME/.config/nvim
$DOTFILES/kanata=$HOME/.config/kanata
TypeScript: 2 spaces, no semicolons, double quotes for imports. Types in types.ts.
Lua: 2 spaces, single quotes preferred, omit call parentheses where possible.
Bash: 2 spaces, quote all variables ("$VAR"), use arrays for args ("${arr[@]}").
Python: 4 spaces, double quotes, type hints encouraged.
Format: <area>: <description>
Examples: kanata: add vim layer, nvim: configure LSP for Go