Personal dotfiles. XDG-based, symlinked by a dependency-free POSIX installer.
| Repo path | Symlinked to |
|---|---|
git/ |
${XDG_CONFIG_HOME:-~/.config}/git |
nvim/ |
${XDG_CONFIG_HOME:-~/.config}/nvim |
tmux/ |
${XDG_CONFIG_HOME:-~/.config}/tmux |
- git >= 2.38 (
rebase.updateRefs,merge.conflictstyle = zdiff3,includeIf "gitdir:") - tmux >= 3.1 (reads
$XDG_CONFIG_HOME/tmux/tmux.conf) - Neovim >= 0.12 (
vim.pack,vim.hl) - pacman, apt-get or dnf for package installation (or skip with
--no-packages)
git clone <repo-url> ~/dotfiles
cd ~/dotfiles
./install.shClone location matters: the generated git/config keys per-directory identity
off includeIf "gitdir:" for the clone itself and <workspaces-root>/<identity>/.
The installer is idempotent. Re-running skips links that are already correct;
anything else occupying a target path is first moved to <path>.bak.<timestamp>.
- Installs
curl git neovim tmux ripgrep fzfvia pacman, apt-get or dnf (--no-packagesto skip). - Symlinks
git/,nvim/,tmux/into$XDG_CONFIG_HOME. - Generates the per-machine
git/config(gitignored): the base include plusincludeIf "gitdir:"routing for the identities selected via--identities(or an interactive prompt).--workspaces-rootsets the root those identities are keyed under. Never overwrites an existinggit/config. - If
ghis installed and logged in, runsgh auth setup-gitso git uses it as the credential helper forhttps://github.com(and gists). The block is appended to the generatedgit/configviaGIT_CONFIG_GLOBAL; gh records its own resolved binary path, so re-run if gh moves. - Optionally merges SSH keys from GitHub (opt-in, see below).
Run ./install.sh --help for the full option list.
| Variable | Default | Description |
|---|---|---|
XDG_CONFIG_HOME |
$HOME/.config |
Symlink target directory |
INSTALL_SSH_KEYS_FROM_GITHUB |
0 |
Set to 1 to merge GitHub keys into authorized_keys |
GITHUB_KEYS_USER |
feepw |
GitHub user to fetch keys from |
SSH_DIR |
$HOME/.ssh |
SSH directory for the key merge |
GIT_WORKSPACES_ROOT |
$HOME/Workspaces |
Root the git identities are keyed under (--workspaces-root) |
GIT_IDENTITIES |
(ask if interactive) | Comma-separated git identities to enable (--identities) |
NVIM_ENABLED_LANGUAGES |
lua |
Comma-separated languages whose LSP servers Neovim installs via mason |
The SSH step merges — only keys not already present are appended — and backs
up the existing authorized_keys first. It never overwrites the file.
git/config is gitignored and generated by install.sh: it includes
git/global and routes per-directory identities via includeIf "gitdir:" for
each enabled identity (git/github, git/eom, … — one file per platform).
Add a new platform by dropping a git/<identity> file with a [user] block
into git/ and re-running the installer on a fresh machine.