- Shell 64.9%
- Lua 35.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
- zsh: fish-parity config (ZDOTDIR via ~/.zshenv), doas/ll/y functions - atuin: local-only history config with catppuccin mocha theme - yazi: config, keymap, theme, pinned plugins, ghostty desktop entry - fish: task completions, doas wrapper, y function - nvim: install rust-analyzer via mason, add dap keys/lldb configs, odin and yazi plugin updates, lockfile bump - install.sh/README: cover the new apps - sway, ghostty: minor tweaks Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> |
||
| applications | ||
| atuin | ||
| bin | ||
| fish | ||
| ghostty | ||
| noctalia | ||
| nvim | ||
| sounds | ||
| sway | ||
| tmux | ||
| yazi | ||
| zsh | ||
| .gitignore | ||
| install.sh | ||
| README.md | ||
dotfiles
Portable config for the tools I use everywhere. Each top-level directory
mirrors ~/.config/<name> and is symlinked into place by install.sh.
| dir | platform | notes |
|---|---|---|
fish |
linux, macos | shell; conf.d/local.fish for per-machine bits |
zsh |
linux, macos | fish-parity zsh; ~/.zshenv sets ZDOTDIR |
atuin |
linux, macos | ctrl-r history search, local-only, mocha theme |
tmux |
linux, macos | local.conf for per-machine bits |
ghostty |
linux, macos | catppuccin mocha; local for per-machine bits |
nvim |
linux, macos | LazyVim |
yazi |
linux, macos | file manager; plugins pinned in package.toml |
sway |
linux | SwayFX; host overrides in config.d/local.conf |
noctalia |
linux | shell/bar settings |
Install
git clone <remote> ~/code/dotfiles
~/code/dotfiles/install.sh
The installer is idempotent. Anything already at ~/.config/<name> that is not
a symlink into this repo is moved to <name>.bak, never deleted. On macOS the
Linux-only dirs are skipped.
Prerequisites
fish, zsh (+ zsh-autosuggestions, zsh-syntax-highlighting, zsh-history-substring-search, zsh-completions), tmux ≥ 3.1, ghostty, neovim ≥ 0.10, JetBrains Mono, starship, atuin, direnv, ripgrep, lazygit, yazi (plus fd, fzf, zoxide, jq, 7zip, ffmpeg, ImageMagick, poppler-utils, resvg for search and previews). Linux desktop additionally: swayfx, noctalia, wl-clipboard, ripdrag.
Secrets and machine-local state
Nothing secret is committed. config.fish reads HF_TOKEN from
~/.secret/hf_token at runtime — create that file by hand on each machine.
These files are gitignored and safe to edit per host:
sway/config.d/local.conf— monitor, wallpaper, host daemons, personal webapp bindings (template:local.conf.example, seeded on first install)fish/fish_variables— fish's own universal-variable storezsh/env.local.zsh(env/PATH, see.example),zsh/local.zsh(interactive)fish/conf.d/local.fish,tmux/local.conf,ghostty/local— free-form per-machine overrides, all sourced automatically if present
Agent completion chime
bin/chime (linked to ~/.local/bin/chime by the installer) plays
sounds/done.wav or sounds/attn.wav — afplay on macOS, PipeWire/Pulse on
Linux. Claude Code triggers it via hooks in ~/.claude/settings.json, which is
not in this repo; add this block on each machine:
"hooks": {
"Stop": [{ "hooks": [{ "type": "command", "command": "$HOME/.local/bin/chime done", "async": true, "timeout": 5 }] }],
"Notification": [{ "matcher": "permission_prompt|elicitation_dialog",
"hooks": [{ "type": "command", "command": "$HOME/.local/bin/chime attn", "async": true, "timeout": 5 }] }]
}
chime done fires when Claude finishes a turn; chime attn when it is
waiting on a permission prompt or a question.