dotship
v1.0.10
Published
A cli-based tool for managing dotfiles. Browse any public GitHub repository, pick the config files you need, and save them exactly where they belong on your machine.
Readme
dotship
A cli-based tool for managing dotfiles. Browse any public GitHub repository, pick the config files you need, and save them exactly where they belong on your machine.

Prerequisites
- Node.js v18 or later
Installation
Global install
npm install -g dotship@latestThen run it anywhere:
dotshipOne-off execution
npx dotship@latestHow it works
- Paste a GitHub repo URL (e.g.
https://github.com/user/dotfiles) - Browse the repository's files and folders
- Select a file you want
- Enter the destination path on your machine (supports
~expansion) - Confirm — dotship downloads the file and saves it
If a file already exists at the destination, you'll see a warning before anything is overwritten.
Manifest file (for repo authors)
If a repository contains a .dotship.yml at its root, dotship will detect it automatically and offer to install all files at once — no manual browsing required.
Example .dotship.yml
files:
ghostty/config: ~/.config/ghostty/config
.zshrc: ~/.zshrc
starship.toml: ~/.config/starship.toml
nvim/init.lua: ~/.config/nvim/init.lua- Keys are paths relative to the repo root
- Values are destination paths on the user's machine (
~is expanded to the home directory)
When a user runs dotship on your repo, they'll see a summary of all file mappings with an option to install everything in one go. Files that would overwrite existing files are marked with a warning.
Controls
| Key | Action |
| ----------- | ---------------- |
| ↑ ↓ | Navigate items |
| Enter | Select / confirm |
| Backspace | Go back |
| Esc | Exit |
Contributing
- Fork the repo and clone it
- Install dependencies:
npm install- Start the dev watcher (recompiles on file changes):
npm run dev- In a separate terminal, run the CLI:
npm start- Run tests:
npm testProject structure
source/
cli.tsx Entry point
app.tsx Main app state machine
theme.ts Color tokens for theming
components/
Header.tsx Gradient ASCII header
CommandInput.tsx GitHub URL input
RepoBrowser.tsx File/folder browser
DestinationInput.tsx Save path input
FileConfirm.tsx Single file confirmation
ManifestReview.tsx Manifest batch install review
ManifestDone.tsx Batch install results
Spinner.tsx Loading animation
StatusBar.tsx Keyboard shortcut hints
utils/
github.ts GitHub API, manifest parsing, file system helpersSubmitting changes
- Create a branch for your change
- Make sure
npm testpasses - Open a pull request against
develop
License
MIT
