Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

301 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dotfiles

My personal configuration for a development environment on macOS. The intended audience is future me on a new laptop.

What's here

Path Purpose
nvim/ Neovim config — Lua, lazy.nvim, LSP + treesitter + completion + snippets. The primary editor.
vim/ Legacy Vim config (kept as a fallback during the nvim transition).
zsh/zshrc Shell config (oh-my-zsh + powerlevel10k + vi-mode + fzf integration).
tmux/tmux.conf Tmux config (C-a prefix, powerline theme, mouse on, tpm).
git/ gitconfig + global gitignore.
claude/ Claude Code user-level skills (e.g. /initiative for structured multi-phase workflow).
iterm/ iTerm color presets (.itermcolors files). Imported per-machine into the iTerm prefs plist; see the per-machine state section below.

Setup on a new machine

Assumes macOS with Command Line Tools installed (xcode-select --install).

1. Homebrew + core CLIs

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

brew install \
    neovim tree-sitter-cli \
    fzf fd eza \
    uv \
    tmux \
    git \
    node \
    powerlevel10k

brew install --cask iterm2

2. Oh My Zsh

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended

Don't let it overwrite ~/.zshrc — if it does, restore the symlink in step 4.

3. Clone this repo

git clone git@github.com:pwsiegel/dotfiles.git ~/dotfiles

4. Link configs into place

ln -sfn ~/dotfiles/zsh/zshrc          ~/.zshrc
ln -sfn ~/dotfiles/tmux/tmux.conf     ~/.tmux.conf
ln -sfn ~/dotfiles/git/gitconfig      ~/.gitconfig
ln -sfn ~/dotfiles/vim/vimrc          ~/.vim/vimrc          # legacy, optional
mkdir -p ~/.config/git
ln -sfn ~/dotfiles/nvim               ~/.config/nvim
ln -sfn ~/dotfiles/git/gitignore_global ~/.config/git/ignore  # git reads this by default (XDG)
mkdir -p ~/.claude/skills
ln -sfn ~/dotfiles/claude/skills/initiative ~/.claude/skills/initiative   # /initiative skill

On a work machine where ~/.gitconfig is kept separate (different identity, custom aliases), skip the gitconfig link above but keep the ~/.config/git/ignore one — git reads it regardless of what your .gitconfig says.

5. Tmux plugins

Install tpm:

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

Start tmux, then press <C-a> I (capital-i) to install the plugins listed in tmux.conf.

6. Fonts (Nerd Font)

Lualine chevrons and the nvim-tree file-type icons both come from a Nerd-Fonts-patched font. Without one, file-tree icons render as ?.

brew install --cask font-jetbrains-mono-nerd-font

In iTerm: Preferences → Profiles → Text → FontJetBrainsMono Nerd Font (or JetBrainsMonoNL Nerd Font for the ligature-free variant).

7. Neovim bootstrap

Open nvim. lazy.nvim self-clones on first launch and installs every plugin from nvim/lua/plugins/*.lua. Quit and relaunch once the install finishes.

Then inside nvim, install the treesitter parsers and LSP servers:

:lua require('nvim-treesitter').install({
    'bash','css','diff','dockerfile','gitcommit','gitignore','html',
    'javascript','json','lua','markdown','markdown_inline','python',
    'query','regex','sql','toml','tsx','typescript','vim','vimdoc','yaml',
})

:MasonInstall pyright ruff typescript-language-server eslint-lsp lua-language-server prettier

(The :MasonInstall line uses Mason's package names, which differ from the mason-lspconfig short names — ts_ls vs typescript-language-server etc.)

8. Powerlevel10k

On first shell launch, p10k will run its configuration wizard. Answer the prompts to taste; it writes ~/.p10k.zsh which zshrc sources.

Per-machine state (not in this repo)

Some things can't be symlinked in — they live in macOS preferences, app preference plists, or get generated by interactive wizards. When setting up a new machine, work through this checklist alongside the symlinks above:

What Where How to set
GitHub SSH key ~/.ssh/id_ed25519 Generate with ssh-keygen -t ed25519 -C pwsiegel@gmail.com, then add the public key at https://github.com/settings/keys. Required before the git clone step works.
iTerm font iTerm prefs (com.googlecode.iterm2.plist) Preferences → Profiles → Text → FontJetBrainsMono Nerd Font.
iTerm color scheme iTerm prefs Import iterm/*.itermcolors (open iterm/*.itermcolors registers them as Color Presets), then Preferences → Profiles → Colors → Color Presets... → pick Solarized Dark Berry fg. Pairs with the nvim solarized8 theme.
Powerlevel10k config ~/.p10k.zsh Runs a wizard on first shell launch (sourced by zshrc). Re-run any time with p10k configure.
Tmux plugins ~/.tmux/plugins/ Install tpm (step 5 above), then <C-a> I inside tmux.
Nvim plugins ~/.local/share/nvim/lazy/ lazy.nvim self-installs on first nvim launch.
Nvim LSP servers + parsers ~/.local/share/nvim/mason/, ~/.local/share/nvim/lazy/nvim-treesitter/parser/ Run the :MasonInstall and require('nvim-treesitter').install(...) commands from step 7.
Claude Code skills (user-level) ~/.claude/skills/ Symlinked from claude/skills/* (see step 4). Adding a new skill = drop it under claude/skills/<name>/ and add the symlink.

Updating the config

The repo is the source of truth. Edit files in place under ~/dotfiles/ and reload:

What How
Zsh source ~/.zshrc or open a new shell
Tmux <C-a> r (if mapped) or tmux source ~/.tmux.conf
Nvim :Lazy sync for plugin changes; restart nvim for config changes (Lua module cache makes in-place reload unreliable)

Caveats

  • The nvim/ config requires Neovim 0.11+ (uses vim.lsp.config, vim.diagnostic.jump, etc.). On macOS just keep brew current.
  • The brew-shipped tree-sitter package is the library only; you also need the tree-sitter-cli package for parsers that build from grammar (latex in particular).
  • The legacy vim/ config and Vim itself are kept around as a fallback. Delete them once nvim is fully settled.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages