Personal system manager: dotfiles, profiles, and tool installations across machines.
Project description
pauldot
Personal system manager: dotfiles, profiles, and tool installations across machines. File-first, written in Python, fork-friendly.
What it does
- Manages
~/.zshrc(and other dotfiles) from a single git repo - Layers machine-specific profiles (work, personal) on top of a shared base
- Declares desired tools and installs them on
apply - Quick CLI for daily tasks: adding aliases, switching profiles, syncing
- One-line bootstrap on a fresh machine
Install
uv tool install pauldot
Quick start (new dotfiles repo)
# 1. Create your dotfiles repo on GitHub
gh repo create <you>/dotfiles --private --clone
# 2. Scaffold the structure
pauldot init --scaffold ./dotfiles
# 3. Edit pauldot.toml and bootstrap.sh, then push
cd dotfiles && git add . && git commit -m "init" && git push
# 4. On any new machine
curl -sSL https://raw.githubusercontent.com/<you>/dotfiles/main/bootstrap.sh | sh
Run pauldot help fork for the full walkthrough.
Quick start (existing dotfiles repo)
pauldot init git@github.com:<you>/dotfiles
pauldot apply
If your repo is private, set up GitHub CLI first — pauldot help gh walks you through it.
Commands
pauldot init [<repo-url>] Clone your dotfiles repo and configure this machine
pauldot init --scaffold <path> Generate a starter dotfiles repo structure
pauldot apply Reconcile current profile (zshrc + tools)
pauldot status Dry-run apply — show what would change
pauldot doctor Health check
pauldot profile show Show the active profile
pauldot profile list List available profiles
pauldot profile set <name> Switch profile
pauldot tool list List all defined tools and install status
pauldot tool install [<name>] Install a tool (or all profile tools)
pauldot tool add Interactively add a tool to tools.toml
pauldot tool remove <name> Remove a tool from tools.toml
pauldot alias add <key> <value> Add an alias to aliases.zsh
pauldot alias list List defined aliases
pauldot sync Pull latest changes; push local commits
pauldot edit [profile|tools|zshrc|pauldot] Open a dotfiles file in $EDITOR
pauldot help bootstrap Bootstrap walkthrough for new machines
pauldot help gh GitHub CLI auth walkthrough
pauldot help fork How to set up your own dotfiles repo
Dotfiles repo layout
~/.pauldot/
├── pauldot.toml # top-level config (shell, git, bootstrap settings)
├── profiles/
│ ├── base.toml # shared base profile
│ └── personal.toml # extends base; machine-specific overrides
├── files/
│ ├── zshrc.base # base zsh config
│ ├── zshrc.personal # profile-specific zsh config
│ └── aliases.zsh # managed by `pauldot alias add`
├── tools/
│ └── tools.toml # tool definitions (check + install commands)
└── bootstrap.sh # one-liner for new machines
~/.zshrc is a symlink to a generated file that sources these in order.
Local state
~/.config/pauldot/state.toml # active profile + repo URL (not committed)
Development
make install # uv sync
make test # uv run pytest
make lint # uv run ruff check .
make format # uv run ruff format .
Requires Python 3.14+ and uv.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pauldot-0.2.0.tar.gz.
File metadata
- Download URL: pauldot-0.2.0.tar.gz
- Upload date:
- Size: 37.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
08f7a0d484b27c0cc8460cfe8e0bb8fc467c31adb9fd4069e9181da1cd657e53
|
|
| MD5 |
c104f9d1e9127831a6843b7e449dbdb5
|
|
| BLAKE2b-256 |
5969e310319aec3ff88d5b45f7e6262d87b82c55e827470de5836b26d4dc2dc3
|
File details
Details for the file pauldot-0.2.0-py3-none-any.whl.
File metadata
- Download URL: pauldot-0.2.0-py3-none-any.whl
- Upload date:
- Size: 22.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff3db3ae4894f8d87b84a45b5940c2d938c775d62a59ac98656c1fb8e81660fe
|
|
| MD5 |
68770b82b4d7f910a05cd81552b22514
|
|
| BLAKE2b-256 |
459c980b91cbfa7422512ab4814da41d156ecf89a737c3a182d0cc6ddeda4dc4
|