Skip to content

Commit 0124b2e

Browse files
committed
update readme
1 parent 32a058e commit 0124b2e

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

README.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,48 @@
22

33
A modular, cross-platform dotfile manager. Define your entire system setup — packages, files, binaries, and scripts — in a single `dotular.yaml`, then apply it on any machine.
44

5+
## Why dotular?
6+
7+
Most dotfile managers only manage **files**. You still need a separate bootstrap script to install packages, download binaries, configure OS settings, and glue everything together. That script inevitably becomes a fragile, untested mess of `if` statements for each platform.
8+
9+
dotular replaces all of that with a single declarative YAML file.
10+
11+
### How it compares
12+
13+
| | **dotular** | **chezmoi** | **GNU Stow** | **yadm** | **mackup** |
14+
|---|---|---|---|---|---|
15+
| Manages files | Yes | Yes | Yes | Yes | Yes |
16+
| Installs packages | Yes — brew, apt, winget, and 10+ managers | No | No | No | No |
17+
| Downloads binaries | Yes — archives, extraction, versioning | No | No | No | No |
18+
| Runs scripts | Yes — local and remote, with skip/verify | Templates only | No | Bootstrap only | No |
19+
| OS settings | Yes — macOS `defaults`, extensible | No | No | No | No |
20+
| Cross-platform config | One file, per-OS paths and packages | Separate templates | Symlinks only | Git + encryption | macOS only |
21+
| Atomicity | Snapshot + rollback per module | No | No | No | No |
22+
| No templating language | Plain YAML — no Go templates to learn | Go `text/template` | N/A | Jinja2 (alt) | N/A |
23+
| Shareable modules | Registry with parameters and overrides | Community scripts | No | No | No |
24+
| Audit log | Built-in, append-only JSON | No | No | No | No |
25+
26+
### The core idea
27+
28+
A "module" in dotular groups everything a tool needs — the package install, its config files, post-install scripts, binary downloads, and OS settings — into one unit. Apply a single module to fully set up one tool. Apply all modules to bootstrap an entire machine.
29+
30+
```yaml
31+
- name: Neovim
32+
items:
33+
- binary: nvim # download the binary
34+
source:
35+
macos: https://...nvim-macos.tar.gz
36+
linux: https://...nvim-linux.tar.gz
37+
install_to: ~/.local/bin
38+
- directory: nvim # push config files
39+
destination: ~/.config
40+
- run: nvim --headless "+Lazy sync" +qa # install plugins
41+
```
42+
43+
No bootstrap script. No platform `if`-statements. One file, any machine.
44+
45+
---
46+
547
## Features
648

749
- **Modules** — group related items; apply one or all

0 commit comments

Comments
 (0)