These are my dotfiles.
Primary terminal stack: Ghostty + fish + zellij.
Fish is the first-class interactive shell; all interactive config lives under
home/.config/fish/. The rc.common / rc.bash / rc.zsh files exist for
POSIX/bash compatibility but are secondary.
Both tools are configured to behave well inside git repos where .gitignore
is often overly restrictive (generated configs, editor files, etc.).
| Setting | fd | rg |
|---|---|---|
| Include hidden files | --hidden |
--hidden |
| Ignore VCS ignore rules | --no-ignore-vcs |
--no-ignore-vcs |
| Exclude noise dirs | --exclude <dir> (× 6) |
--glob=!<dir> (× 6) |
Excluded dirs: node_modules, dist, .git, target, __pycache__, .cache
Why --no-ignore-vcs? Inside a repo, generated configs, editor files, and
local build artifacts are often gitignored. Without this flag both tools silently
skip them, making searches feel broken. The explicit excludes above cover the dirs
you almost never want.
home/.config/fish/conf.d/search.fish— setsRIPGREP_CONFIG_PATHand thefdalias.home/.config/rg/config— ripgrep flags, loaded automatically viaRIPGREP_CONFIG_PATH.
# Nuclear: respect nothing, search everything
fd --no-ignore --no-ignore-vcs <pattern>
rg --no-ignore --no-ignore-vcs <pattern>
# Add back a single ignore file (e.g. a local .ignore)
fd --ignore-file .ignore <pattern>
# One-off: also search node_modules
fd --no-ignore-vcs <pattern> # removes the alias excludes automatically
fdalias flags are baked into the function; to skip the alias entirely usecommand fd <args>.
Edit both files together so they stay in sync:
home/.config/fish/conf.d/search.fish— add--exclude <dir>to the alias.home/.config/rg/config— add--glob=!<dir>.