๐ชฆ Relfa - Your Gentle Digital Gravedigger
Keep your computer's clutter under control with loving care
๐ฆ Installation โข ๐ Quick Start โข โจ Features โข ๐ Documentation โข ๐ค Contributing
"In Relfa's Graveyard, nothing is truly lostโjust waiting in gentle slumber for you, or the next digital archaeologist."
๐ What is Relfa?
Relfa is your gentle digital gravedigger that helps you maintain a clean workspace without the anxiety of permanently losing important files. Instead of aggressively deleting old files, Relfa lovingly archives them to a well-organized digital graveyard where they can rest in peaceโand be easily resurrected when needed.
๐ฏ Philosophy
- ๐๏ธ Gentle Approach: No aggressive deletions, just loving archival
- ๐ Smart Detection: Identifies files that haven't been touched recently
- ๐๏ธ Organized Storage: Creates a structured graveyard with multiple time-based views
- ๐งโโ๏ธ Easy Resurrection: Bring back archived files when you need them
- ๐ Memory Keeping: Add epitaphs explaining why files were archived
- ๐ Efficient Links: Uses symlinks to provide multiple organizational views without file duplication
โจ Features
๐ฎ Interactive Review
- Multi-action interface: archive, delete, view, open, skip
- Safety confirmations for destructive actions
- Real-time file preview with configurable pager
- Desktop application integration
๐๏ธ Flexible Archival System
- Smart organization by creation/modification/archival dates
- Efficient symlink-based storage
- Configurable graveyard structure
- Cross-platform support (Linux, macOS, Windows)
๐ Powerful Search
- Filename pattern matching
- Content search within epitaph notes
- Visual indicators for match sources
- Smart deduplication
๐ฑ Modern UX
- Desktop notifications
- Configurable pager support
- Rich emoji-enhanced CLI output
- Comprehensive man page
๐ Installation
๐ฆ Quick Install
๐ฅ Pre-built Binaries
Download the latest release for your platform from GitHub Releases:
# Linux (x86_64)
|
# macOS (Intel)
|
# macOS (Apple Silicon)
|
# Windows
# Download relfa-windows-x86_64.zip and extract to your PATH
๐ Man Page Installation
๐โโ๏ธ Quick Start
1. ๐ง Initial Setup
# View current configuration
# Scan your inbox for stale files
๐ท๏ธ Scanning Inbox for dusty files...
โ ๏ธ 3 items in ~/Inbox are gathering dust:
๐ "old-document.pdf" (file) - last touched 25 days ago (2024-07-08)
๐ "project-archive/" (folder) - last touched 18 days ago (2024-07-15)
๐ "temp-notes.txt" (file) - last touched 32 days ago (2024-07-01)
๐ก Run 'relfa review' to interactively deal with these items,
or 'relfa archive --all' to archive them all to the Graveyard.
2. ๐ Interactive Review
The interactive review gives you options for each file:
| Command | Action | Description |
|---|---|---|
(a)rchive |
๐๏ธ Archive | Move to graveyard without note |
(n)ote+archive |
๐ Archive with epitaph | Add explanatory note |
(d)elete |
๐๏ธ Delete | Permanent deletion (requires confirmation) |
(v)iew |
๐ View | Preview content with pager |
(o)pen |
๐ Open | Open with default application |
(s)kip |
โญ๏ธ Skip | Skip for now |
(q)uit |
๐ช Quit | Exit review session |
3. ๐ฆ Batch Operations
# Archive all stale files at once
# Archive specific file with explanation
# Archive with batch note
4. ๐ Search & Resurrection
# Search in graveyard (searches filenames AND epitaph content)
# Search by epitaph content
# Resurrect files back to inbox
๐ Searching for 'project' in the Graveyard...
Found 2 matches in the Graveyard:
๐ created/laptop/2024/07/15/project-alpha-notes.md
๐ญ "Meeting notes from project alpha kickoff"
๐ created/laptop/2024/06/20/project-proposal.pdf
๐ญ "Initial proposal document - archived after approval" ๐
The ๐ emoji indicates the match was found in the epitaph content, not the filename.
๐๏ธ Graveyard Structure
Relfa creates an elegantly organized graveyard structure:
~/Graveyard/
โโโ created/hostname/2024/08/02/ # Organized by creation date
โ โโโ document.pdf # ๐ Original file
โ โโโ document.pdf.epitaph # ๐ Optional note
โโโ modified/hostname/2024/07/15/ # Organized by modification date
โ โโโ document.pdf@ โ ../created/ # ๐ Symlink to original
โ โโโ document.pdf.epitaph@ โ # ๐ Symlink to epitaph
โโโ archived/hostname/2024/08/02/ # Organized by archival date
โโโ document.pdf@ โ ../modified/ # ๐ Symlink chain
โโโ document.pdf.epitaph@ โ # ๐ Follows same pattern
This structure provides:
- ๐ Browse by creation date: Find files by when they were originally created
- โ๏ธ Browse by modification date: See files by when they were last changed
- ๐๏ธ Browse by archival date: Review recently archived items
- ๐พ Efficient storage: Symlinks prevent duplication while providing multiple views
- ๐ Consistent organization: Epitaphs follow the same symlink structure as files
โ๏ธ Configuration
Relfa uses a TOML configuration file at ~/.config/relfa/config.toml:
# Basic settings
= "/home/user/Inbox"
= "/home/user/Graveyard"
= 14
= "desktop" # "desktop" or "cli"
= "less" # "less", "bat", "more", etc.
[]
= "{hostname}/{year}/{month:02}/{day:02}"
# Flexible subdirectory configuration
[]
= "original" # Contains actual files
= "created"
[]
= "symlink" # Contains symlinks
= "modified"
= "created" # Points to created subdir
[]
= "symlink"
= "archived"
= "modified" # Creates chain: archived โ modified โ created
๐๏ธ Advanced Configuration Options
Each subdirectory can be configured as:
original- Contains the actual filessymlink- Contains symlinks pointing to another subdirectorynothing- Disabled (not created)
Example configurations:
# Minimal: Only organize by creation date
[]
= "original"
= "by-creation"
[]
= "nothing"
[]
= "nothing"
# Complex chain: created โ modified โ archived
[]
= "original"
= "created"
[]
= "symlink"
= "modified"
= "created"
[]
= "symlink"
= "archived"
= "modified"
The date_format supports these placeholders:
{hostname}- Computer hostname{year}- Full year (2024){month}- Month number (8){month:02}- Zero-padded month (08){day}- Day number (15){day:02}- Zero-padded day (15)
Examples:
= "{year}/{month:02}/{day:02}" # 2024/08/15
= "{hostname}/{year}-{month:02}" # laptop/2024-08
= "archive-{year}-{month:02}-{day:02}" # archive-2024-08-15
๐ Epitaphs - Digital Memory Keeping
Epitaphs are optional notes that explain why files were archived, creating a historical record of your digital archaeology:
โ๏ธ Adding Epitaphs
# During archival
# During interactive review
# Choose (n)ote+archive and enter your explanation
# Batch archival with note
๐ Epitaph Format
Epitaphs are stored as .epitaph files containing structured metadata and your note:
# Epitaph for project-notes.md
# Archived: 2024-08-02 15:30:45 UTC
# Created: 2024-01-15 09:22:10 UTC
# Modified: 2024-07-28 16:45:33 UTC
# Hostname: workstation
Project planning notes from Q1 2024. Archived after project completion
but keeping for historical reference and lessons learned documentation.
Contains meeting notes, timeline, and final retrospective.
๐ Searching Epitaphs
Epitaph content is fully searchable:
# Find files by epitaph content
# Case-insensitive search
๐จ Usage Examples
๐ Daily Workflow
#!/bin/bash
# Daily cleanup routine
# Check for new clutter
# Interactive review (optional)
# Quick batch cleanup for everything else
๐ Finding Archived Content
# Search by filename patterns
# Search by epitaph content
# Find recently archived items
๐งโโ๏ธ File Resurrection
# Resurrect specific files
# Interactive selection for multiple matches
# Found 3 matches:
# 1. presentation-draft.pptx
# 2. final-presentation.pptx
# 3. presentation-notes.md
# Which file to resurrect? (1-3, or 'q' to quit): 2
# Files are copied back to Inbox (originals remain in graveyard)
๐ค Automation Examples
#!/bin/bash
# weekly-cleanup.sh
WEEK=
# Archive everything with weekly note
# Show statistics
| |
| |
# Update cleanup timestamp
#!/bin/bash
# project-archive.sh PROJECT_NAME
PROJECT_NAME=
ARCHIVE_NOTE="Project '' completed on . Archiving all project files for historical reference."
# Archive project-related files
๐ฏ Use Cases
๐ฉโ๐ผ Professionals
- Downloads cleanup: Archive old downloads with context
- Project management: Organize completed projects by timeline
- Document versioning: Archive old versions with change notes
- Meeting materials: Archive with meeting context and outcomes
๐ Students
- Assignment organization: Archive by semester with grades/feedback
- Research materials: Keep old research accessible with context
- Course notes: Archive by semester with course information
- Project files: Maintain academic project history
๐ป Developers
- Log management: Archive logs with deployment context
- Build artifacts: Archive with version and build information
- Backup organization: Structure backups with project context
- Code samples: Archive experimental code with learning notes
๐ Home Users
- Photo organization: Archive old photos with family context
- Document management: Keep important docs with life events
- Media collection: Archive old media with descriptive context
- Digital memories: Maintain family digital history
๐ Documentation
- ๐ Complete User Guide - Comprehensive documentation
- ๐ Man Page - Complete command reference (
man relfa) - ๐๏ธ API Documentation - For developers and contributors
- ๐ก Examples Repository - Real-world usage examples and scripts
- โ FAQ & Troubleshooting - Common questions and solutions
๐ง Development
๐งช Setup Development Environment
# Clone repository
# Build and test
# Install locally for testing
# Run with test configuration
RELFA_CONFIG_DIR=./test-config
๐๏ธ Architecture Overview
src/
โโโ main.rs # CLI entry point and command routing
โโโ cli.rs # Command-line argument parsing
โโโ commands.rs # Business logic for all commands
โโโ config.rs # Configuration management
โโโ scanner.rs # File scanning and age detection
โโโ archiver.rs # File archival and epitaph management
โโโ graveyard.rs # Search and resurrection functionality
โโโ utils.rs # Utility functions (pager, file ops)
๐งช Testing
# Run all tests
# Run tests with coverage
# Run benchmarks
# Check code quality
๐ค Contributing
We welcome contributions! Here's how you can help make Relfa even better:
๐ Reporting Issues
- Use the issue tracker
- Include your OS, Rust version, and configuration
- Provide steps to reproduce the issue
- Include relevant log output
โจ Submitting Features
- Check existing issues for similar requests
- Create a detailed feature request with use cases
- Consider implementing it yourself (we love PRs!)
๐ป Code Contributions
- Fork the repository
- Create a feature branch:
git checkout -b amazing-feature - Implement your changes with tests
- Test thoroughly:
cargo test --all-features - Format code:
cargo fmt && cargo clippy - Submit a pull request with detailed description
๐ Documentation
- Improve README, man page, or code documentation
- Add usage examples or tutorials
- Fix typos or clarify explanations
- Translate documentation to other languages
๐จ Other Ways to Help
- โญ Star the repository to show your support
- ๐ฆ Share on social media to help others discover Relfa
- ๐ฐ Sponsor the project to support development
- ๐ฃ๏ธ Provide feedback on your user experience
๐ Project Statistics
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
- ๐ก Inspiration: The endless struggle against digital entropy and the need for gentle file management
- ๐ฆ Built with Rust: Leveraging the amazing Rust ecosystem and community
- ๐๏ธ Architecture: Inspired by the Unix philosophy of small, composable tools
- ๐ Community: Special thanks to all contributors, users, and feedback providers
- ๐ Influences: Getting Things Done methodology and digital minimalism principles
๐ฎ Roadmap
๐ฏ Planned Features
- Web interface for remote graveyard management
- Plugin system for custom archival rules
- Cloud backup integration for graveyard sync
- AI-powered file categorization and epitaph suggestions
- Statistics dashboard showing digital entropy over time
- Integration with popular file managers
๐จ Quality of Life
- Fuzzy search for file resurrection
- Bulk epitaph editing for multiple files
- Themes for CLI output customization
- Multiple inbox support for different project types
- Advanced notifications with custom triggers
"For dust thou art, and unto dust shalt thou return."
But maybe you'll want that markdown file again someday!
Made with ๐ชฆ and โค๏ธ by the Relfa community
Happy haunting, and tidy archiving!