feat: add map command, XDG config, and rule-based sweep#10
Merged
Conversation
Replace the old icicle visualization with a dust-style proportional tree (oops map) that shows one entry per line with proportional bars, readable sizes, and indented hierarchy. APFS-aware: redirects to the data volume when scanning / to avoid double-counting via firmlinks. Add XDG config system (~/.config/oops/config.toml) with 14 built-in sweep rules that users can extend or disable. Sweep now uses configurable rules instead of hardcoded patterns, finding 44 GiB vs the old 13 GiB. Interactive cleanup with --exec (y/N/a/q per match). New commands: oops map (alias m), oops config (alias c). Restructured ui.rs into ui/ module (colors.rs, output.rs, mod.rs) with per-command rendering in commands/map/render.rs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
drill, tree, overview, and top are all subsumed by map: - drill = map --expand 1 - tree = map -n 20 --expand 20 - overview = map --depth 1 - top has a niche (flat ranking) but its overlap with map outweighs the value Remove them. Running `oops` with no subcommand now runs map directly. Keep volumes/vol since `df -h` doesn't have nice capacity bars. Strip obsolete renderers (render_drill_*, render_tree_node, render_top_entries, render_dir_breakdown, proportion_bar, SYM_BLOCK_MED) and the unused explicit_path field on Ctx. Update README, CLAUDE.md, wiki, and docs to reflect the smaller surface. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Resolves modify/delete conflicts: keep deletes for drill.rs, overview.rs, top.rs, tree.rs, and ui.rs (intentionally removed in this branch). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
oops map— dust-style proportional tree replacing the icicle view. One line per entry, proportional bars, readable sizes, indented hierarchy. APFS-aware (handles firmlinks when scanning/). Volume context bar at the top shows scanned/other/free.oops config— XDG config system at~/.config/oops/config.toml. Auto-creates on first run. Shows loaded rules, lets users add custom rules or disable built-ins.oops sweeprewrite — rule-based engine with 14 built-in rules (was hardcoded to ~8 patterns). Now finds 44 GiB vs old 13 GiB.--execfor interactive cleanup (y/N/a/q).--ruleto filter by name.ui.rsintoui/module (colors.rs, output.rs, mod.rs) following jig's pattern. Per-command rendering incommands/map/render.rs.Test plan
oops map ~/— proportional tree with volume contextoops map /— APFS-aware, no double counting, numbers add upoops sweep ~/— rule-based results, 14 rules activeoops sweep ~/ --exec— interactive cleanup flowoops sweep ~/ --rule rust-target -v— filter + verboseoops config— auto-creates config, shows rules with +/- indicatorsoops config initwhen config exists — says "already exists"cargo clippy && cargo fmt --check && cargo test— all clean🤖 Generated with Claude Code