Skip to content

garretpatten/dotfiles

Repository files navigation

Dotfiles

Personal, portable developer environment — shell startup, XDG app configs, editors, terminals, and CI-backed quality checks. Designed to symlink or vend across machines (including nested submodule layouts) without one-off paths baked into the tree.

MIT License Quality checks Security checks OpenSSF Scorecard Last commit

Layout

Automation can copy or symlink entire trees without per-file mapping:

  • config/ — XDG-style application configs (Neovim, Ghostty, Zellij, Alacritty, Kitty, Oh My Posh themes, etc.). Paths inside these files avoid machine-specific locations where possible (e.g. Neovim uses stdpath() for cache/state; Alacritty theme imports use $HOME/.config/...).
  • home/ — Dotfiles meant for the home directory (e.g. .zshrc, .bashrc, .tmux.conf, .vimrc). Tmux 3.1+ can use ~/.config/tmux/tmux.conf; this repo still ships ~/.tmux.conf for broad compatibility.

XDG directories

home/.zshrc exports standard defaults when unset (XDG Base Directory spec):

Variable Default
XDG_CONFIG_HOME $HOME/.config
XDG_DATA_HOME $HOME/.local/share
XDG_CACHE_HOME $HOME/.cache
XDG_STATE_HOME $HOME/.local/state

Tools that respect these (including many terminals and Neovim) can find configs under ~/.config without littering $HOME.

Embedding as a submodule (or vendored copy)

Some projects ship this repo under a nested path (for example src/dotfiles/ in macOS-setup-scripts). In that layout, keep these in mind:

  • OS-specific zsh snippets live in config/zsh/ and are picked up automatically once ~/.config/zsh is symlinked by the provisioning scripts. No path variables need to point at the repo root.

  • Two Git histories: Changes land in this repository first. The parent then records the new submodule commit with git add <submodule-path> and its own commit. git submodule update --init (or --remote) only fetches what the parent has pinned.

  • Parent scripts may copy a subset of config/. For example, one phase might install terminals and another Neovim; that is not always the full config/ tree. Setup and provisioning scripts live in the parent repository (e.g. macOS-setup-scripts); this repo contains only configs, not scripts.

  • Node tooling for this repo (Prettier, markdownlint, etc.) uses package.json here. A parent project’s npm ci at its own root does not replace (cd path/to/dotfiles && npm ci) when you lint or develop inside the dotfiles tree.

CI and supply chain

Pull requests run reusable workflows for linting / formatting (StyLua, ShellCheck, Prettier, and the rest of the shared quality matrix) and security (Semgrep, TruffleHog). Dependabot keeps GitHub Actions references current. Contribution and automation notes for agents live in AGENTS.md.

What's inside

Terminal & Shell

  • Alacrittyconfig/alacritty/
  • Ghosttyconfig/ghostty/
  • Kittyconfig/kitty/
  • Zellijconfig/zellij/
  • Oh My Posh — Prompt themes (config/oh-my-posh/)

Editors

  • Neovimconfig/nvim/; plugins via lazy.nvim. Options live in lua/config/lazy.lua (install.missing = true, change_detection.enabled = false for non-interrupting installs and automation). lazy-lock.json is committed so plugin revisions match across machines. Example headless sync: XDG_CONFIG_HOME=/path/to/this/repo/config nvim --headless "+Lazy! sync" +qa
  • VS Codevs-code/

Other

  • Taskwarriortaskwarrior/ (includes a themes submodule)

Usage

These are my personal configurations. Feel free to browse and adapt them for your own use. Machine-specific settings can live in ~/.local_extras, which is sourced from home/.zshrc and home/.bashrc when present.

License

MIT License — see LICENSE for details.

About

My personal configuration files for Arch Linux, macOS, and Ubuntu; this repository serves as a submodule for the setup scripts repositories.

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Generated from garretpatten/template