Personal Dotfiles

Technologies Used

GNU StowBashZshNeovimTmuxGit

Project Overview

This is my configuration backbone for shell and editor setup: GNU Stow packages, bootstrap scripts for Linux and macOS, and a curated public export that contains only what is safe to share.

The private canonical repository also holds IDE agent configuration (Cursor rules, skills, and related tooling). That material is not part of the public export and does not appear in its git history.

The Challenge

Environment drift shows up on every new machine: aliases, Git defaults, editor settings, and terminal behaviour diverge when configured by hand. Publishing a full private tree would also risk exposing host-specific paths and operational detail.

The Solution

GNU Stow for Dotfiles

GNU Stow treats each configuration area as a package (bash, zsh, tmux, neovim, and similar). A bootstrap script installs dependencies and runs stow to symlink files into $HOME. Adding or removing a package is a single Stow command—not a manual copy exercise.

Curated Public Export

A separate public repository holds a clean history of Stow packages and setup scripts only. It deliberately omits:

  • Cursor rules, skills, commands, agents, and MCP wiring
  • Homelab topology and LAN inventories
  • Private on-prem GitLab submodule URLs

Layout

dotfiles/                  # private canonical (not mirrored as-is)
├── bash/, zsh/, tmux/, neovim/, ...
├── scripts/               # bootstrap and validation
└── cursor/                # private — rules, skills, agents

dotfiles-public/           # curated public export
├── bash/, zsh/, tmux/, neovim/, ...
└── scripts/               # Stow install and platform setup only

Results & Learning

Reproducible shell and editor setup without treating “everything in the private repo” as public. Agent configuration stays private; the public story is Stow and everyday tooling.