dotshot

Lightweight dotfile snapshot & sync tool for Arch-based systems (or anyone who needs Git-tracked config backups)
π§ What is dotshot?
dotshot is a small, focused CLI app for syncing and snapshotting dotfiles, like:
- Neovim configs
- Zsh (
~/.zshrc, ~/.config/zsh/)
- WezTerm themes and settings
- Any other custom config files you want version-controlled
It helps keep your system's critical user-level config files in sync with a tracked Git repo β ideal for power users managing dotfiles manually or through a central ~/arch or ~/dotfiles repo.
β‘ Features
- ποΈ Track and sync dotfiles to a defined repo structure
- π Dry-run mode for safe previews
- π§± Optional Git commit automation
- π§ Designed for integration into larger tools like
ghostctl
- π Configurable via TOML/YAML (via Viper)
π¦ Installation
From Source
git clone https://github.com/ghostkellz/dotshot.git
cd dotshot
go build -o dotshot .
With PKGBUILD (Arch Linux)
makepkg -si
With install script
./install.sh
π Usage
# One-time setup
./dotshot init
# Add paths to sync
./dotshot add nvim ~/.config/nvim
./dotshot add zsh ~/.config/zsh ~/.zshrc
# Sync current config state to repo
./dotshot sync
# Show what would sync
dotshot sync --dry-run
# Watch for changes and auto-sync
dotshot watch
# Restore dotfiles from repo to original locations
dotshot restore
# Show what would sync and git status
dotshot status
# Commit and push changes
dotshot commit
# Print systemd user service install instructions
dotshot systemd-helper
βοΈ Configuration
- Default config location:
./config.yaml or ~/.config/dotshot/config.yaml
- Example config: see
config.yaml in the repo or /usr/share/dotshot/config.yaml.example
- Exclude files: add an
exclude: list to your config
π‘οΈ Systemd Integration
To run dotshot as a background user service:
cp dotshot.service ~/.config/systemd/user/dotshot.service
systemctl --user daemon-reload
systemctl --user enable --now dotshot.service
systemctl --user status dotshot.service
π§ Planned Features
- Automatic tagging/versioning
- Integration with
ghostctl as a subcommand
- System snapshot metadata (hostname, kernel, date)