Skip to content

Commit 2b62b34

Browse files
committed
refactor: migrate dotfiles with new blend
1 parent bd2c212 commit 2b62b34

296 files changed

Lines changed: 2545 additions & 1832 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitattributes

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,6 @@
66
/Brewfile* linguist-language=Ruby
77
/*.json linguist-language=JSON
88

9-
# Text filters
10-
/packages/git/git/gitk filter=vanilla.gitk
11-
/packages/sway/sway/config filter=vanilla.sway
12-
/packages/htop/htop/htoprc filter=vanilla.htop
13-
/packages/npm/.npmrc filter=vanilla.npm
14-
/packages/vscode/User/settings.json filter=vanilla.code
15-
169
# Binary stuff
1710
*.png filter=lfs diff=lfs merge=lfs -text
1811
*.jpg filter=lfs diff=lfs merge=lfs -text

.gitignore

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,17 @@ Brewfile.lock.json
77

88
# npm
99
node_modules
10+
11+
*.log
12+
13+
# local modules
14+
*.local.elv
15+
16+
# local overlay directories for blend
17+
*.local/
18+
19+
20+
/.claude/
21+
22+
# local superpowers docs
23+
/docs/superpowers/

Brewfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,3 @@ instance_eval(File.read("./Brewfile.font"))
77
instance_eval(File.read("./Brewfile.desktop"))
88
instance_eval(File.read("./Brewfile.util"))
99
instance_eval(File.read("./Brewfile.app"))
10-
instance_eval(File.read("./Brewfile.vscode"))

Brewfile.util

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,6 @@ brew "exiv2"
120120
# https://kanidm.github.io/kanidm/stable/installing_client_tools.html
121121
tap "kanidm/kanidm"
122122
brew "kanidm"
123+
124+
brew "nickel"
125+
brew "just"

Brewfile.vscode

Lines changed: 0 additions & 58 deletions
This file was deleted.

CLAUDE.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# CLAUDE.md
2+
3+
## Project Overview
4+
5+
Vanilla is a cross-platform dotfiles manager. The core tool is **blend** (Rust + Nickel DSL), built from `blend/` and symlinked into `bin/blend`.
6+
7+
## Repository Layout
8+
9+
- `blend/` — Rust source for the blend CLI
10+
- `orders/` — Nickel-based order definitions (`.ncl` files), the active config format
11+
- `bin/` — Personal scripts deployed to `$PATH`; also where `blend` is symlinked from `blend/target/release/blend`
12+
- `legacy/` — Orphaned entries from the stow era kept for reference (`atom`, `krita`, `psd`, `root`); not managed by blend
13+
- `screenshots/` — README screenshots
14+
- `Brewfile*` — Homebrew dependency manifests
15+
- `bootstrap.sh` — Fresh-machine bootstrap entrypoint for installing prerequisites, deploying dotfiles, and running one-shot system setup guidance
16+
- `justfile` — Canonical task runner (build, check, test, fmt, clippy, deploy)
17+
- `macos_config.sh` — Standalone macOS `defaults write` script (run separately from blend)
18+
- `NEW_BLEND.md` — Design document for the blend rewrite
19+
- `ERGO.md` — User-journey analysis / friction-point notes for blend
20+
- `raycast-and-finder.md` — macOS Raycast + Finder setup notes
21+
- `README.md.nu` — Nushell script that regenerates `README.md` from `blend table` output
22+
23+
## Migration Status
24+
25+
Migration from the legacy nushell-based blend + `packages/` (stow-managed) to Rust-based `orders/` (Nickel DSL) is complete on `dev/brand-new-blend`. All macOS and Linux configs live in `orders/`. The four entries that did not migrate (`atom`, `krita`, `psd`, `root`) sit in `legacy/` — defunct app, app-data rather than config, or system-level files outside blend's scope.
26+
27+
## blend Development
28+
29+
blend is being enhanced iteratively via manual testing. No CI yet.
30+
31+
**Pre-release posture:** blend is pre-initial-release with one user (the repo owner). Backwards compatibility is *not* a constraint — prefer the cleanest design over compat shims, deprecation paths, or migration tooling for hypothetical external users. Migrating the user's own dotfiles in this repo is still in scope.
32+
33+
**Build / common tasks (via `just`):**
34+
```sh
35+
just build # cargo build --release + symlink target/release/blend → bin/blend
36+
just check # blend view --dry-run (validates all orders)
37+
just test # cargo test --release
38+
just fmt-check # rustfmt --check
39+
just clippy # cargo clippy -- -D warnings
40+
just deploy # blend sync
41+
```
42+
Run `cargo build --release` directly inside `blend/` if you want to skip the `bin/blend` symlink step.
43+
44+
**CLI commands:**
45+
- `sync [orders...]` / `s [orders...]` — Bidirectional sync with per-key interactive Source/Target choices for `from_config` entries (`--force-source-to-target`, `--force-target-to-source`, `--no-rewrite`)
46+
- `view [orders...]` — Preview generated config and diff from deployed (`-c` content only, `-a` all, `-s` short — omit up-to-date entries)
47+
- `table` — Output order info as HTML table (for README generation)
48+
- `init` — Generate or refresh `orders/order.contract.ncl` and `orders/metadata.ncl`
49+
50+
**Global flags:** `--dry-run` (`-n`), `--verbose` (`-v`), `--home` (Target `~` expansion + `metadata.home`), `--blend-dir`
51+
52+
## Tech Stack
53+
54+
- Rust 1.92.0 (edition 2024, pinned in `blend/rust-toolchain.toml`)
55+
- Nickel for config DSL (`nickel-lang` + `nickel-lang-parser` from git, tag `1.16.0`)
56+
- clap v4 (derive) for CLI
57+
- Key crates: walkdir, globset, console, serde/serde_json, similar, rayon, anyhow, tree-sitter/tree-sitter-nickel (CST for surgical rewrite), json-strip-comments (JSONC support)
58+
- In `.ncl` files, use `\u{xxxx}` escape sequences for non-ASCII characters (e.g. Nerd Font icons) instead of raw unicode codepoints, for readability

0 commit comments

Comments
 (0)