From cb732c24ce4e6405a5acfe26e381c0e91405aaac Mon Sep 17 00:00:00 2001 From: Joseph O'Brien Date: Sun, 14 Jun 2026 00:35:39 -0400 Subject: [PATCH] chore: add TODO roadmap, nf alias, and install recipe --- Justfile | 3 +++ crates/notfiles/src/cli.rs | 25 +++++++++++++++++++++ nushell/.config/nushell/autoload/aliases.nu | 3 +++ 3 files changed, 31 insertions(+) diff --git a/Justfile b/Justfile index 2762608..f99ed8f 100644 --- a/Justfile +++ b/Justfile @@ -14,6 +14,9 @@ ci: cargo clippy --workspace -- -D warnings cargo nextest run --workspace +install: + cargo install --path crates/notfiles --root "${HOME}/.local" --force + install-hooks: #!/usr/bin/env sh printf '#!/bin/sh\njust pre-commit\n' > .git/hooks/pre-commit diff --git a/crates/notfiles/src/cli.rs b/crates/notfiles/src/cli.rs index 670f503..fdaa300 100644 --- a/crates/notfiles/src/cli.rs +++ b/crates/notfiles/src/cli.rs @@ -24,6 +24,31 @@ pub struct Cli { pub command: Command, } +// TODO(install): `notfiles` is not yet installed on PATH. Add `just install` recipe and +// `mise task` so `nf` / `notfiles` is available without `cargo run`. See Justfile. + +// TODO(bootstrap): Wire `notstrap` into the CLI as `notfiles bootstrap`. Should clone the +// repo, resolve age key (Bitwarden/YubiKey/prompt), decrypt SOPS secrets, link packages, +// and run post-hooks. The notstrap crate already models this — needs a CLI entry point. + +// TODO(migrate): Add `notfiles migrate ` that takes a stow/chezmoi repo (from `detect`) +// and generates a notfiles.toml for it, then bulk-adopts all packages. Should call +// `detect::detect()`, let the user pick a source, and run `adopt` for each package. + +// TODO(which): Add `notfiles which ` — reverse lookup from a target path (e.g. +// ~/.gitconfig) to its source package and file. Walk state entries and check read_link. + +// TODO(doctor): Add `notfiles doctor` — holistic drift detection replacing drift-check.sh. +// Checks: broken symlinks, unmanaged dotfiles in $HOME, dirty git state, conflicts, +// packages in dir not listed in notfiles.toml. Should print a summary like `just doctor`. + +// TODO(discover): Add `[defaults] discover = true` mode to notfiles.toml so all top-level +// dirs are treated as packages automatically, without maintaining an explicit `include` +// list. Opt-in via config, not the default (explicit is safer). + +// TODO(edit): Add `notfiles edit ` — resolve the source file for a managed +// symlink and open it in $EDITOR. Quality-of-life shortcut for day-to-day editing. + #[derive(Subcommand, Debug)] pub enum Command { /// Create a starter notfiles.toml diff --git a/nushell/.config/nushell/autoload/aliases.nu b/nushell/.config/nushell/autoload/aliases.nu index e404996..3808d53 100644 --- a/nushell/.config/nushell/autoload/aliases.nu +++ b/nushell/.config/nushell/autoload/aliases.nu @@ -60,6 +60,9 @@ alias zbi = zb install alias zbl = zb list alias zbu = zb update +# ── notfiles ───────────────────────────────────────────────────────────────── +def --wrapped nf [...args] { notfiles --dir /Users/joe/dev/notfiles ...$args } + # ── Dotfiles ───────────────────────────────────────────────────────────────── alias dotfiles = cd ~/dotfiles def --env dotgs [] { cd ~/dotfiles; git status -sb }