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 β
.vim/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, Claude usage), 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, cage/ccusage helpers, 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 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.
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 codex:template [-- --apply] |
Dry-run by default. Applies .config/codex-template/config.toml (managed section merge) and copy targets (AGENTS.md, agents/**) 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..vim/,.vimrcβ Neovim/Lua configuration (lazy.nvim, rc modules, LuaSnip + tsnip, sessions, docs) synced with.config/nvimruntime files..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.
.vim/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 integrates withreattach-to-user-namespacefor clipboard access.- 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-rlaunchesbunx --bun vtm session-manager,M-trunsghq-project-selector.zsh,M-utoggles transparent panes,M-iopenseditprompt,M-cspawns cwd windows, andM-1throughM-9switch to the corresponding tmux session entry. - Status line widgets call binaries in
bin/and external tools:tmux-list-sessions,tmux-status-ccusage,tmux-pwd,wifi,battery, plustmux-auto-rename-sessionkeeps session names fresh.
- 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/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.Brewfileincludesclaude-code,ccusage, and the Warashicagecask to round out the local agent suite.
Brewfileβ grouped installs (shells, editors, languages, container tooling, services/CLIs, fonts, AI helpers, display tooling, ntfy). Commands are constrained toinstall/tap/cask/update/upgrade/cleanupfor safety.Caskfileβ GUI apps (1Password CLI, Bartender, Claude Code, CleanShot, Default Folder X, Docker, browsers, JetBrains Toolbox, Karabiner, Keka, OBS, TablePlus,shitsurae, etc.) alongside the notifier app casks used by the local agent workflow.Masfileβ Mac App Store IDs for CotEditor, Bear, Spark, MenubarX, Transmit, Evernote, DaisyDisk, PopClip, Yoink, Sip, Due, LINE, Unclutter, Slack, Paste, 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 .vim(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
deno task brew:bundle,brew update && brew upgrade, 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)