I’m happy to announce the first release of runrunrun (v0.1.0), a new file and URL opener that runs the right thing—no surprises, no guesswork.
The Problem It Solves
If you’ve ever clicked on a text file only to have it open in Wine’s Notepad, or watched your carefully configured file associations get overridden by yet another desktop environment, you’ll understand the frustration. Every time I need to configure file associations with xdg-open and its cousins, something isn’t quite right.
Traditional desktop openers work by making assumptions—and that might be exactly what some users want. But for those who prefer explicit control, the current tools fall short. They guess your preferred browser based on your desktop environment, scatter configuration across countless .desktop files, and make debugging file associations unnecessarily complex.
The goal of runrunrun is simple: make opening files and URL schemes straightforward and consistent.
What Makes runrunrun Different
runrunrun (or rrr for short) takes a radically simple approach: explicit configuration through pattern matching. No MIME type cascades, no desktop file archaeology—just straightforward rules that you control.
Here’s what opening a PDF looks like in your config:
*.pdf qpdf
That’s it. When you run rrr document.pdf, it opens in qpdf. No surprises.
Core Features in v0.1.0
Simple Pattern Matching: Define what opens what using glob patterns for files and URLs:
*.jpg feh
https://* firefox
mailto:* thunderbird
Predictable Overrides: Later rules win, making customization straightforward:
*.txt mousepad
*.txt vim # This one wins
Regex Support with Capture Groups: For more advanced matching, use regex patterns (prefixed with ~) that can even extract and reuse parts of the match:
~^IMG_[0-9]+\.png$ darktable
~mailto:([^?]+)\?subject=([^&]+) "true %s; thunderbird --compose \"to=%1,subject=%2\""
Profiles for Different Contexts: Switch between configurations easily:
:profile work
https://* firefox-work-profile
:profile personal
https://* brave
Terminal-Friendly: Unlike desktop-centric tools, rrr works just as well in terminal environments as it does on a full desktop, making it suitable for servers and minimal setups.
Transparent Operation: Query mode (rrr -q file.ext) shows you exactly what would run, and dry-run mode (rrr -n) lets you test configurations safely.
Getting Started
The project is written in Rust and available on GitHub. Configuration lives in simple text files at /etc/rrr.conf or ~/.config/rrr.conf.
What’s Next
This first release includes the core functionality along with regex patterns and aliases for common applications. Future versions will add the ability to import existing .desktop files for those who want a migration path from their current setup.
As with any first release, there are likely bugs to catch and behaviors that might need adjustment. Your feedback will help shape the direction of future releases.
If you’re tired of fighting with file associations and want something that just works the way you configure it, give runrunrun a try. Your feedback and contributions are welcome!
runrunrun is available at https://github.com/gawen947/runrunrun