dotling 0.9.0

A dotfiles management CLI — track, link, and sync your config files across machines
Documentation
# Changelog

All notable changes to dotling are documented here.

Each release follows [Keep a Changelog](https://keepachangelog.com/) conventions: **Added**, **Changed**, **Fixed**, **Removed**.

---

## v0.8.0

### Changed

- **Vault export/import — single encrypted bundle format**`vault export` now writes a single encrypted bundle file instead of copying raw vault files. `vault import` decrypts the bundle with your password and verifies the identity before writing. Old directory-based bundles are no longer compatible; re-export from your source machine after upgrading.
- **Encryption/decryption refactored**`encrypt` and `decrypt` now operate in-place on tracked entries, consolidating file handling into shared helpers. Directory encryption uses the same pipeline as single-file encryption.
- **Fingerprint tracking for template entries** — Templates now participate in the fingerprint store, enabling `status` and `sync --dry-run` to detect template drift without decrypting.

### Removed

- **Backup system** — Removed the `dotling backup` command, the `--backup` flag on `sync`, and all automatic backup-before-overwrite behavior.

### Added

- Comprehensive roundtrip tests for encryption and decryption, and a full template sync lifecycle test suite.

---

## v0.7.0

### Added

- **Shell completions** (`dotling completions <SHELL>`) — Generate tab-completion scripts for bash, zsh, fish, elvish, and powershell.

---

## v0.6.2

### Changed

- **Module restructuring** — Reorganized the codebase into a layered architecture with `core/`, `config/`, and `sync/` top-level modules.

### Fixed

- Minor formatting cleanup in the sync command hook error message.

---

## v0.6.1

### Added

- **`dotling edit <entry>`** — Open any tracked file in your editor without manually decrypting and re-encrypting.

### Fixed

- **Hook retry logic** — Hooks that fail are now retried up to 3 times before the sync is aborted.

---

## v0.6.0

### Added

- **Dotfile templating** (`dotling add --template`, `dotling vars`) — Render machine-specific values into your dotfiles automatically.
- Template syntax with `{{ var.key }}`, built-in variables, environment variables, pipe filters, and whitespace control.
- `dotling vars` subcommand with seven actions: list, set, get, unset, check, import, export.
- Bootstrap prompt for missing variables on new machines.

---

## v0.5.0

### Added

- **Lifecycle hooks** — Run custom commands before/after sync, globally or per-entry, with trust verification.
- **Line-level three-way merge** — Interactive merge option for copy-mode files during conflict resolution.
- **Sync fingerprints** — Blake2s-256 content hash tracking for encrypted and copy-mode entries.
- **`dotling remove` improvements** — Now restores tracked files to their original paths.

---

## v0.4.0

### Added

- **Bidirectional `sync`** — Replaces the old `deploy` command. Syncs changes in both directions.
- **Recursive directory encryption**`encrypt` and `decrypt` now handle entire directories.

### Changed

- `remove` always restores the original file and deletes the repo source.

---

## v0.3.1

### Fixed

- Vault architecture now correctly uses the master secret via key encapsulation.
- Absolute paths and `~`-relative paths are resolved correctly during config lookups.

---

## v0.3.0

### Changed

- Rewrote core modules, replaced the printer with a UI layer, and simplified the CLI command structure.

---

## v0.2.1

### Added

- **Automatic pull-back** — modified entries are pulled back during push.

---

## v0.2.0

### Added

- Age-based encryption with key generation support.
- Core dotfiles management CLI and project scaffolding.

---

## v0.1.0

Initial release.