This repository keeps nvim and tmux at the repo root (not inside .config) so users can choose how to install them.
nvim/-> Neovim config directorytmux/-> tmux config directory
These need to be on PATH before Neovim starts (or on first plugin sync).
Required — Neovim will not fully bootstrap without these:
git— lazy.nvim clones itself and every plugin on first runmakeand a C compiler (gccorclang) — pluginbuildsteps (telescope-fzf-native,LuaSnip) and:TSUpdatefor tree-sitter parsers
Required for core workflows:
ripgrep— backs Telescope'slive_grep,grep_string, andfind_files(--hidden --no-ignore-vcsflags)node≥ 18 —copilot.vimruntime; also required by Mason to installpyrightandbashlscurl(orwget),unzip,tar,gzip— used by Mason to fetch LSP servers
Required for the active efm formatters/linters (C/C++):
clang-formatcpplint(pip install cpplint)
Recommended:
fd— faster backend for Telescopefind_files- A Nerd Font + a true-color terminal —
nvim-web-devicons,lualine, andbufferlinerender glyph icons
tmux bindings that shell out:
lazygit—Prefix + gopens a popup runninglazygit(tmux/utility.conf)
After cloning, run this from the repo root — it handles backups, symlinks, and verification automatically:
./scripts/bootstrap-symlinks.shOptional: override the source path explicitly (must be absolute):
DOTFILES="/absolute/path/to/dotfiles" ./scripts/bootstrap-symlinks.shThis replaces the manual steps below. Use the manual steps only if you need finer control.
Use symlinks so ~/.config remains the live location while real files stay in your clone.
-
Clone the repo and set an absolute source path
git clone <your-repo-url> ~/src/dotfiles cd ~/src/dotfiles export DOTFILES="$PWD"
-
Create
~/.configif neededmkdir -p ~/.config -
Back up existing configs (if present)
mv ~/.config/nvim ~/.config/nvim.backup.$(date +%Y%m%d-%H%M%S) 2>/dev/null || true mv ~/.config/tmux ~/.config/tmux.backup.$(date +%Y%m%d-%H%M%S) 2>/dev/null || true
-
Link live paths to the repo
ln -sfn "$DOTFILES/nvim" ~/.config/nvim ln -sfn "$DOTFILES/tmux" ~/.config/tmux
-
Ensure tmux loads from
~/.config/tmuxln -sfn ~/.config/tmux/tmux.conf ~/.tmux.conf
-
Reload tools
# Neovim: reopen nvim # tmux: reload config in a session tmux source-file ~/.tmux.conf
~/.config/nvimis a symlink to your clone~/.config/tmuxis a symlink to your clone~/.tmux.confpoints to~/.config/tmux/tmux.conf
Quick checks:
ls -ld ~/.config/nvim ~/.config/tmux
ls -l ~/.tmux.conf
ls ~/.config/nvim/init.lua ~/.config/tmux/tmux.conf ~/.tmux.conf- Edit only inside your clone.
- Commit and pull in your clone.
- Reload tmux with
tmux source-file ~/.tmux.conf. - Reopen Neovim (and run
:Lazy syncafter plugin spec changes).
- Always set
DOTFILESto an absolute path. - If you move the clone, recreate symlinks.
- Commit
nvim/lazy-lock.jsonwith plugin changes.
If you prefer moving files into ~/.config (no symlinks), use this variant. Set DOTFILES to your clone path first.
export DOTFILES="/absolute/path/to/your/clone"
mkdir -p ~/.config
mv "$DOTFILES/nvim" ~/.config/nvim
mv "$DOTFILES/tmux" ~/.config/tmux
ln -sfn ~/.config/tmux/tmux.conf ~/.tmux.confNote: with this approach, git pull updates will not automatically reflect in ~/.config — you would need to copy files again after each pull.