Skip to content

Latest commit

 

History

66 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dotfiles

Neovim, tmux, fish and Homebrew configuration for macOS.

Prerequisites

  • Homebrew
  • macOS on Apple Silicon (paths assume /opt/homebrew)

Installation

git clone https://github.com/pdarden/dotfiles.git
cd dotfiles
bash install.sh

The installer is idempotent: it skips anything already linked, and reports rather than clobbers any ~/.foo that exists but isn't a symlink.

Afterwards:

  1. Put your identity in ~/.gitconfig.local (created by the installer). It's [include]d by the tracked gitconfig and never committed, since this repo is public:
    [user]
      name = Your Name
      email = you@example.com
  2. Copy ssh/config to ~/.ssh/config and adjust the hosts and key paths. The installer deliberately does not symlink it — ~/.ssh holds your private keys and shouldn't point into a public repo.
  3. Set Source Code Pro (or Hack Nerd Font) as your iTerm2 font. The Nerd Font variant supplies the statusline and file-tree glyphs.

What's in here

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.

Neovim

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.
  • Completionblink.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>g live grep.
  • Formattingconform.nvim on save: mix format, prettier, ruff, stylua, sql-formatter. Toggle with :FormatToggle.

Useful commands: :Lazy (plugins), :Mason (language servers), :ConformInfo (formatters), :checkhealth.

Phoenix navigation

: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.

elixir-ls

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.

tmux

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.

Recommended apps

Not installed by install.sh — just what's worth having:

1Password · DBeaver · Docker · iTerm2 · Rectangle

About

Setup for developing

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages