Neovim, tmux, fish and Homebrew configuration for macOS.
- Homebrew
- macOS on Apple Silicon (paths assume
/opt/homebrew)
git clone https://github.com/pdarden/dotfiles.git
cd dotfiles
bash install.shThe installer is idempotent: it skips anything already linked, and reports
rather than clobbers any ~/.foo that exists but isn't a symlink.
Afterwards:
- Put your identity in
~/.gitconfig.local(created by the installer). It's[include]d by the trackedgitconfigand never committed, since this repo is public:[user] name = Your Name email = you@example.com
- Copy
ssh/configto~/.ssh/configand adjust the hosts and key paths. The installer deliberately does not symlink it —~/.sshholds your private keys and shouldn't point into a public repo. - Set Source Code Pro (or Hack Nerd Font) as your iTerm2 font. The Nerd Font variant supplies the statusline and file-tree glyphs.
| Path | Links to | What it is |
|---|---|---|
config/nvim/ |
~/.config/nvim |
Neovim, in Lua, managed by lazy.nvim |
config/omf/ |
~/.config/omf |
oh-my-fish init, aliases and functions |
tmux.conf |
~/.tmux.conf |
tmux, prefix is C-a |
gitconfig |
~/.gitconfig |
git aliases and defaults (identity left blank on purpose) |
gitignore |
~/.gitignore |
global ignores — OS and editor cruft only |
ssh/config |
~/.ssh/config |
template for per-host SSH keys |
~/.config is shared with tools this repo doesn't manage, so install.sh
links its subdirectories individually rather than the whole directory.
Lua config under config/nvim/lua/, split into config/ (options, keymaps,
autocmds) and plugins/ (one file per concern). lazy-lock.json is committed,
so a fresh machine gets the exact plugin revisions this one runs.
Leader is <Space>.
- LSP — native, via
nvim-lspconfig+mason.nvim. Elixir, TypeScript, Python, Tailwind, HTML/CSS/JSON, Docker, Lua. - Completion —
blink.cmp. Tab/S-Tab cycle, Enter accepts. - Syntax — Treesitter, including HEEx with Elixir injection, so Tailwind classes complete inside templates.
- Finding — Telescope.
<C-p>files,<leader>glive grep. - Formatting —
conform.nvimon save:mix format,prettier,ruff,stylua,sql-formatter. Toggle with:FormatToggle.
Useful commands: :Lazy (plugins), :Mason (language servers),
:ConformInfo (formatters), :checkhealth.
:Econtroller, :Elive, :Econtext, :Ecomponent, :Echannel,
:Emigration, :Erouter, :Etest, :Emix, :Econfig.
These come from projections registered against
vim-projectionist in
lua/plugins/elixir.lua. phoenix.vim is deliberately not used: its detection
requires a top-level web/ directory, which Phoenix dropped in 1.3.
Installed via Homebrew rather than Mason, so it builds against the same asdf-managed OTP/Elixir as your projects. The first time you open an Elixir project it compiles itself from source — expect a few minutes before diagnostics appear.
Prefix C-a. | and \ split panes. C-h/j/k/l moves between tmux panes
and Neovim splits interchangeably (via vim-tmux-navigator). Copy mode is
vi-style; y copies to the system clipboard.
Not installed by install.sh — just what's worth having: