| Crates.io | asimeow |
| lib.rs | asimeow |
| version | 0.2.1 |
| created_at | 2025-03-22 22:10:13.050499+00 |
| updated_at | 2025-08-12 08:44:07.744937+00 |
| description | A tool for managing macOS Time Machine exclusions for developer's workspaces |
| homepage | |
| repository | https://github.com/mdnmdn/asimeow |
| max_upload_size | |
| id | 1602138 |
| size | 80,385 |
A command-line tool that automatically manages macOS Time Machine exclusions for developer projects. It recursively analyzes folders according to rules defined in a configuration file and excludes development artifacts from Time Machine backups.
Many thanks and kudos to Steve Grunwell and it's inspiring asimov project, which provided the original concept for this tool. Asimeow aims to be a spiritual successor to the original asimov project, building upon its core concept with several improvements. These enhancements include more adaptable rule configurations, multi-threaded tree traversal, and more efficient processing capabilities.
brew tap mdnmdn/asimeow
brew install asimeow
To run asimeow as a scheduled service (run every 6 hours):
brew services start asimeow
asimeow-x86_64-apple-darwin.zipasimeow-aarch64-apple-darwin.zip# Example
unzip asimeow-x86_64-apple-darwin.zip
chmod +x asimeow
sudo mv asimeow /usr/local/bin/asimeow
cargo install asimeow
git clone https://github.com/mdnmdn/asimeow.git
cd asimeow
cargo build --release
The executable will be available at target/release/asimeow.
# Run with automatic config file detection
./asimeow
# Specify a custom config file
./asimeow -c /path/to/config.yaml
# Enable verbose output
./asimeow -v
# Specify number of worker threads (default: 4)
./asimeow -t 8
# Create a default configuration file in ~/.config/asimeow/
./asimeow init
# Create a default configuration file in the current directory
./asimeow init --local
# Create a default configuration file at a specific path
./asimeow init --path /path/to/config.yaml
# List exclusions in the current directory
./asimeow list
# List exclusions in a specific directory (with trailing slash)
./asimeow list /path/to/directory/
# Check exclusion status of a specific file or directory (without trailing slash)
./asimeow list /path/to/file
# Explicitly exclude a specific file or directory from Time Machine backups
./asimeow exclude /path/to/file_or_directory
# Explicitly include a specific file or directory in Time Machine backups (remove exclusion)
./asimeow include /path/to/file_or_directory
Note: This tool requires macOS and uses the tmutil command to manage Time Machine exclusions. You may need to run it with sudo for some operations.
Asimeow looks for configuration files in the following order:
-c or --config flagconfig.yaml in the current directory~/.config/asimeow/config.yaml in the user's home directoryIf no configuration file is found, Asimeow will display an error message with instructions on how to create one.
The tool uses a YAML configuration file with the following structure:
roots:
- path: ~/works/projects/ # Paths to explore (~ is expanded to home directory)
- path: /another/path/
rules:
- name: "net" # Rule name
file_match: "*.csproj" # Glob pattern to match files
exclusions: # Directories to exclude from Time Machine when the pattern is matched
- "obj"
- "bin"
- "packages"
- name: "rust"
file_match: "cargo.toml"
exclusions:
- "target"
- name: "node"
file_match: "package.json"
exclusions:
- "node_modules"
- "dist"
- "build"
- name: "python"
file_match: "requirements.txt"
exclusions:
- "venv"
- "__pycache__"
- ".pytest_cache"
Here's a minimal example of a configuration file:
# Define the root directories to scan
roots:
- path: ~/projects/ # Will be expanded to your home directory
- path: ~/work/ # You can specify multiple roots
# Define directories to ignore during exploration
ignore:
- .git # Common directories to skip
# Define rules for different project types
rules:
# Node.js projects
- name: "node"
file_match: "package.json"
exclusions:
- "node_modules"
- "dist"
# Rust projects
- name: "rust"
file_match: "Cargo.toml"
exclusions:
- "target"
When you run asimeow init, a default configuration file will be created with common rules for various project types. You can then customize it to suit your needs.
roots: List of base paths to process
ignore: List of directory patterns to skip during exploration (e.g., .git, node_modules)
rules: List of rules to apply
.git) are skipped entirely during explorationtmutil addexclusionThe tool also provides direct commands to manage Time Machine exclusions:
exclude <path>: Explicitly excludes a specific file or directory from Time Machine backups
include <path>: Explicitly includes a specific file or directory in Time Machine backups
✅ /Users/user/works/projects/my-rust-project/target - rust
🟡 /Users/user/works/projects/my-node-project/node_modules - node
✅ /Users/user/works/projects/my-node-project/dist - node
Total paths processed: 42
Total exclusions found: 3
Newly excluded from Time Machine: 2
The output uses:
Asimeow - Folder Analysis Tool
-----------------------------
Reading config from: config.yaml
Using 4 worker threads
Loaded 3 rules:
- rust (pattern: cargo.toml, exclusions: target)
- node (pattern: package.json, exclusions: node_modules, dist)
- markdown (pattern: *.md, exclusions: )
Processing path: /Users/user/works/projects
Found match for rule 'rust' at: /Users/user/works/projects/my-rust-project/cargo.toml
✅ /Users/user/works/projects/my-rust-project/target - rust
→ Excluded from Time Machine: /Users/user/works/projects/my-rust-project/target
Found match for rule 'node' at: /Users/user/works/projects/my-node-project/package.json
🟡 /Users/user/works/projects/my-node-project/node_modules - node
→ Already excluded from Time Machine
✅ /Users/user/works/projects/my-node-project/dist - node
→ Excluded from Time Machine: /Users/user/works/projects/my-node-project/dist
Found match for rule 'markdown' at: /Users/user/works/projects/README.md
No exclusions defined for this rule
Total paths processed: 42
Total exclusions found: 3
Newly excluded from Time Machine: 2
Listing contents of: /Users/user/projects/
------------------------------------
🟡 node_modules/
package.json
README.md
🟡 target/
Cargo.toml
src/
Legend:
🟡 - Excluded from Time Machine
- Included in Time Machine
/ - Directory
Status of directory: /Users/user/projects/target
------------------------------------
🟡 target/
Legend:
🟡 - Excluded from Time Machine
- Included in Time Machine
/ - Directory
✅ Successfully excluded: /Users/user/projects/build
With verbose flag (-v):
Excluding directory from Time Machine: /Users/user/projects/build
✅ Successfully excluded: /Users/user/projects/build
If already excluded:
🟡 Already excluded: /Users/user/projects/node_modules
✅ Successfully included: /Users/user/projects/target
With verbose flag (-v):
Including directory in Time Machine: /Users/user/projects/target
✅ Successfully included: /Users/user/projects/target
If already included:
Already included: /Users/user/projects/src
Developers often have large directories of build artifacts, dependencies, and generated files that:
Asimeow automatically identifies and excludes these directories based on project types, saving backup space and improving Time Machine performance.
Contributions are welcome! Here's how you can contribute to Asimeow:
git checkout -b feature/my-new-featuregit commit -am 'Add some feature'git push origin feature/my-new-featureThis project uses GitHub Actions for continuous integration and deployment:
cargo fmt and clippy