Modern macOS dotfiles that combine a Deno-powered automation layer, a deeply customized terminal/editor stack, extensive desktop automation, and AI-first tooling for day-to-day development.
- Highlights
- Requirements
- Quick Start
- Task Automation
- Repository Overview
- Shell & Terminal Stack
- Editor & LSP
- tmux & Session Tools
- Window & Input Automation
- AI & Workflow Tooling
- Package Definitions
- Validation & Maintenance
- License
- Author
- π¦ TypeScript + Deno automation β
deno.jsontasks calltasks.ts, which runs with explicit--allow-*permissions, validates Homebrew commands, and offers a--dry-runmode before touching system files. - π Security-first bootstrapping β
.bashrcpre-setsHOMEBREW_PATHfor sandboxed agent environments, macOS keychain tools (op,mas) are isolated under.config, and destructive operations prompt for confirmation. - π₯οΈ Modern terminal stack β zsh with sheldon, Atuin, Zeno, direnv, mise, and an Alacritty-first setup tuned to Catppuccin aesthetics and Japanese/English IME-friendly shortcuts, with WezTerm reserved for the quick-ime flow.
- π Neovim power setup β
.config/nvim/contains a lazy.nvim-based Lua config, dual native LSP + CoC support, LuaSnip/tsnip snippets, transparency/theme toggles, and efm-langserver integration. - π§ tmux-first workflow β prefix on
Ctrl-y, smart pane routing for Neovim/Claude panes, tmux status extensions (battery, wifi, session context), and helper binaries underbin/. - πͺ Desktop automation β Shitsurae-managed window layouts/shortcuts, Karabiner IME helpers, and Finicky browser routing keep the keyboard and window workflow cohesive.
- π€ AI-native tooling β
.config/claude/settings.jsonhooks, Warashi cage presets, andvde-*workflows keep Claude/Codex operations integrated with tmux and shell tooling. - π¦ Unified manifests β
Brewfile,Caskfile,Masfile, andmiseruntime definitions document every CLI, GUI, and runtime dependency. - π§° Script library β
bin/hosts tmux automation, Shitsurae helpers, git utilities, quick IME toggles, and monitoring commands that the rest of the dotfiles rely on.
- macOS 13+ (Sonoma/Ventura tested) with administrator rights for Homebrew/MAS installs and Accessibility permissions for window/input automation apps.
- Homebrew with
brewandmasavailable. - Deno β₯ 1.42 for running
deno task. - Node.js + yarn (managed via
misein.config/mise/config.toml). - Mac App Store sign-in (
mas signin) if you plan to runmas:install. - Optional but recommended: direnv to auto-load
.envrc,miseto sync language runtimes, Alacritty, WezTerm forquick-ime, and 1Password CLI (op) for secrets-backed commands.
git clone https://github.com/yuki-yano/dotfiles.git ~/dotfiles
cd ~/dotfiles
# Optional: trust direnv + sync runtimes
direnv allow .
mise install
# Install runtimes & tools
deno task brew:bundle
deno task brew:cask
deno task mas:install # requires `mas signin`
# Link dotfiles (prompts before replacing non-symlinks)
deno task dotfiles:install
deno task agent:link
deno task zsh:sheldon:sync
deno task codex:template # dry-run
deno task codex:template -- --apply
deno task help # list all tasksPut ~/dotfiles/bin on your PATH (zsh does this automatically) so helper scripts such as tmux-smart-switch-pane,
tmux-list-sessions, shitsurae-resize.ts, wifi, and battery are available everywhere.
To inject startup context from your personal notes into Codex, set AGENT_NOTE_DIR to an existing directory and then
run deno task codex:template -- --apply so ~/.codex/hooks.json is refreshed.
deno task help prints all commands. Every task respects --dry-run (pass it after -- so Deno forwards the flag),
and tasks.ts validates input before it shells out.
| Task | Purpose |
|---|---|
deno task dotfiles:install [-- --dry-run] |
Symlinks the files listed in DOTFILES_SRCS to $HOME, warning if a non-symlink already exists. |
deno task agent:link [-- --dry-run] |
Preflights both targets, then links Claude (~/.config/claude/skills via the dotfiles-managed .config) and Copilot (~/.copilot/skills) to ~/.agents/skills. |
deno task codex:template [-- --apply] |
Dry-run by default. Applies .config/codex-template/config.toml (managed section merge) and copy targets (AGENTS.md, RTK.md, agents/**, hooks.json) to ~/.codex only with --apply (template has no markers; ~/.codex/config.toml must contain marker block). |
deno task zsh:sheldon:sync / zsh:sheldon:update |
Generate the sheldon lock/cache for the pre and post shell phases under ~/.cache/sheldon. |
deno task brew:bundle |
Executes curated commands in Brewfile, allowing only install, tap, cask, update, upgrade, and cleanup. |
deno task brew:cask |
Installs GUI apps from Caskfile. |
deno task mas:install |
Installs missing Mac App Store apps using IDs from Masfile. |
deno task help |
Prints grouped help text with descriptions of every task. |
This repository uses Deno tasks as the single automation entrypoint (deno task ...).
deno.json,tasks.tsβ automation entrypoints controlling symlinks, Codex template apply, Homebrew/MAS installations, and dry-run behavior.Brewfile,Caskfile,Masfileβ declarative manifests for CLI formulae, casks, and App Store apps..envrcβ placeholder for direnv; add secrets or environment-specific exports locally..bashrc,.zshenv,.zprofile,.zshrc,.zsh/β shell bootstrap; zsh is the primary shell, bash is still configured for sandboxed Homebrew calls..config/β app-level configs for Alacritty, WezTerm (quick-imeη¨), Atuin, Bat themes, cage presets, Claude tasks, efm-langserver, Karabiner, mise, Neovim, ripgrep, shitsurae, tabtab, VDE layouts, vivid color themes, and zeno snippets..config/nvim/β Neovim/Lua configuration (lazy.nvim, rc modules, LuaSnip + tsnip, sessions, docs)..tmux.conf,.tmux/β tmux settings and related local assets..finicky.js,.config/shitsurae/config.yml,.config/karabiner/karabiner.jsonβ macOS automation suite (window layout/shortcuts, IME helpers, URL routing).karabiner.jsonis generated from.config/karabiner/karabiner.tsvia Deno (deno task karabiner:build/karabiner:watch)..ctags.d/config.ctags,.tigrc,.config/ripgrep/rc,.config/vivid/themes/catppuccin.ymlβ CLI defaults for tags, tig, search, and colors..config/claude/{CLAUDE.md,settings.json}and.config/cage/presets.ymlβ Claude Code settings and Warashi cage layouts that integrate AI tooling with tmux.z-ai/β repository-scoped AI working directory. Agent outputs are centralized here (for example:z-ai/plans/,z-ai/tmp/, andz-ai/references/), and the Neovim AI picker (<Plug>(ff)i) is scoped toz-ai/.bin/β helper scripts (tmux status widgets, git utilities likegit-quick-save, tmux session manager, ghq selector, wifi/battery monitors, Claude hooks, Shitsurae resize helpers, quick IME toggles). Every script is intended to run from PATH.stylua.tomlandcspell.jsonβ formatting/spell-check rules for Lua and docs.deno.jsonimports@david/daxfor ergonomic shelling inside TypeScript tasks.
- zsh + sheldon β
.zshrcbootstrapssheldon-generatedpre/postsource caches (Powerlevel10k prompt, zsh-autosuggestions, fast-syntax-highlighting, zsh-completions, ni.zsh, handy snippets, localzeno.zsh).fzfis installed by Homebrew, and.zshenv/.zprofilekeep PATH/runtime order sane for login shells. - Aliases & completions β eza replaces
ls, dust/lazygit replacements are wired,~/.zsh/completionsand.config/tabtab/zshhost generated completions, and~/.safe-chainis sourced when available. - direnv & mise β
.envrcand.config/mise/config.tomlmanage per-project env vars plus runtime installs (bun,node,python,uv, AI CLI packages such as@anthropic-ai/claude-code,@google/gemini-cli,sdd-mcp,safe-chain,vde-*). Runmise installafter cloning to sync tool versions. - Shell history & snippets β
.config/atuin/config.tomltunes Atuin (fuzzy search with previews)..config/zeno/config.ymldefines CLI snippets (git helpers, tmux commands, redirection shorthands). - Color & search defaults β
ripgrep,vivid, andbatconfigs standardize palette and output. - Terminals β
.config/alacritty/*.tomlis the primary terminal setup and carries the day-to-day key bindings, colors, and IME-friendly behavior..config/wezterm/wezterm.luais currently maintained for the narrowquick-imeworkflow: spawning a centered temporary window that attaches to an isolated tmux-backed Neovim session. Alacritty mapsCommand+1throughCommand+9to tmux-friendly escape sequences for direct session switching. Thequick-ime.shscript plusquick-ime.tomldefines instant Japanese/English toggles that interact with Karabiner rules.
.config/nvim/init.luaflips onvim.loader, setsvim.env.LSP(nvimorcoc), toggles transparency/colours via env vars, and calls the Lua module loader underrc/.rc/modules/plugin_managerwires lazy.nvim; plugin configs live inlua/plugins,lua/rc/setup,lua/rc/modules, etc.lua/hosts UI, options, keymaps, highlight, ext UI, glancing statusline, session helpers, etc.coc-settings.json,lua/rc/*provide dual LSP support (nativenvim-lspconfig+coc.nvim) with TypeScript/Deno auto-detection, Lua tooling, markdown preview, grammar/lint integrations, and snippet engines (LuaSnip, tsnip, UltiSnips compatibility).efm-langserver/config.yamldefines external formatter/diagnostic commands, aligning withBrewfilepackages.stylua.tomlconfigures Lua formatting and is used by CI orstylualocal runs.- Spell checking is centralized in
cspell.jsonso long AI/Neovim words stay whitelisted.
.tmux.confmoves the prefix toCtrl-y, setsdefault-terminaltotmux-256color, configures vi-style copy-mode bindings, uses mouse mode, and keeps clipboard actions wired throughpbcopy/pbpaste.- Smart pane navigation uses helper scripts (
bin/tmux-smart-switch-pane) and process detection to seamlessly move between Neovim, Claude panes, zsh shells, or fzf prompts. - Key bindings trigger scripts:
M-rlaunchesvtm session-manager,M-trunsghq-project-selector.zsh,M-utoggles transparent panes,M-iopenseditprompt,M-h/M-lcycle sessions inside the currentvtmcategory,Option+Control+1/2/3switchprivate/public/work, andM-1throughM-9switch to the corresponding tmux session entry inside the current category. - Status line widgets call binaries in
bin/and external tools:tmux-list-sessions,tmux-pwd,wifi,battery, plusvtm statusline-category/vtm statusline-sessionsrender the current category and session list.
- Shitsurae β
.config/shitsurae/config.ymldefines the default multi-space layout, thumbnail overlay cycle mode, andcmd+ctrlglobal actions for common floating placements (1/2/3,h,l,f). The current layout seeds browser/chat/terminal spaces and replaces the previousyabai/skhdwindow-management layer. - Karabiner-Elements β
.config/karabiner/karabiner.jsonis tuned for Alacritty/Claude workflows: Command/Shift+Return becomes backslash+Enter, IME toggles are inserted around shortcuts, and delayed actions ensure Japanese/English mode toggles fire correctly. Edit.config/karabiner/karabiner.tsand rundeno task karabiner:buildto apply (orkarabiner:watchto auto-rebuild). - Finicky β
.finicky.jsroutes specific sites (TypeScript docs, Google Docs) to Chrome while Firefox stays default. - Quick IME helpers β
bin/quick-ime.shuses a dedicated WezTerm window as a temporary IME editor, captures the previously focused window viashitsurae window current --json, and restores focus by window ID or bundle ID when the isolated tmux-backed editor detaches. Karabiner rules keep text entry stable.
.config/claude/stores Claude settings in-repo (CLAUDE.md,settings.json), while Claude runtime state (history/snapshots/cache) is managed locally on each machine. Repository-scoped agent artifacts are managed underz-ai/(z-ai/plans/,z-ai/tmp/,z-ai/references/)..config/claude/RTK.mdand.config/claude/hooks/rtk-rewrite.shenable RTK command rewriting for Claude Code Bash hooks..config/codex-template/RTK.mdis copied to~/.codex/RTK.mdbydeno task codex:template -- --apply, andAGENTS.mdreferences it for Codex CLI shell command guidance..config/cage/presets.ymlcaptures Warashi cage (multi-agent) layout presets that pair with tmux automation..config/claude/settings.jsonhooks (vde-monitor-hook,vde-monitor-summary,vde-notifier) provide monitoring and notifications around Claude sessions.miseinstalls AI CLIs (@anthropic-ai/claude-code,@google/gemini-cli,@openai/codex,editprompt,@aikidosec/safe-chain,sdd-mcp,vde-layout,vde-notifier) so they can be invoked anywhere.- The package manifests install desktop-side agent tooling such as Claude Code, Warashi
cage,shitsurae, andvde-notifier-app, alongside the CLI helpers used by the shell and tmux workflow.
Brewfileβ grouped formulae for shell/session tooling, modern CLI utilities, language runtimes, build helpers, Git/review tools, cloud/container commands, local data tools, desktop capture helpers, notifications, and fonts. Commands are constrained toinstall/tap/cask/update/upgrade/cleanupfor safety.Caskfileβ GUI and desktop casks including 1Password, 1Password CLI, Claude Code, CleanShot, Draw.io, Finicky, Firefox, Google Chrome, Karabiner-Elements, Obsidian, TablePlus, Visual Studio Code, VLC, Zoom, and local workflow apps such as Warashicage,arto,shitsurae, andvde-notifier-app.Masfileβ Mac App Store IDs for CotEditor, Spark, Transmit, Evernote, DaisyDisk, PopClip, Yoink, LINE, Unclutter, Slack, Paste, and Fantastical, plus a commented history of previous installs.deno.jsonβ defines every task alias and pins@david/daxfor shell helpers; rundeno fmtordeno task helpfor ergonomics.stylua.toml&cspell.jsonβ keep Lua and documentation formatting consistent before committing changes.
- Dry runs first β append
-- --dry-runwhen testingdotfiles:install,brew:*, or other tasks to confirm the plan before touching the real system. - Formatters β run
deno fmt tasks.ts,stylua --config-path stylua.toml .config/nvim(or target specific Lua files), andcspell lint README.mdto keep tooling happy. - Runtime sync β
mise doctorreveals missing runtimes defined in.config/mise/config.toml; re-runmise installafter manifest changes. - Package refresh β periodically run
deno task brew:bundle,deno task brew:cask, and reviewMasfilewhen new apps are added or removed. - Local overrides β place host-specific adjustments in
.gitconfig.local,.tmux.conf.local, or~/.zshrc.local(sourced from the main configs) to keep git history clean. - App permissions β
shitsuraeand Karabiner depend on macOS Accessibility permissions; re-authorize them after OS upgrades.
MIT
Yuki Yano (@yuki-yano)