1 unstable release
0.1.0 | Dec 20, 2022 |
---|
#280 in Database implementations
180KB
245 lines
Roo - A smart bookmarking search engine for your browser
Introduction
Roo
(short for "Kangaroo") is a smart bookmarking and productivity CLI tool that works as a custom search engine for your browser, allowing you to quickly issue commands in your browser's search bar. It's a simple server that accepts a search query and redirects to the appropriate URI based on a set of predefined (and customizable) rules.
Roo
is useful for personal productivity, but many users run it on company servers to allow all employees to share a common way to quickly access internal and external tools, wikis, documentation and resources.
Roo is heavily inspired by bunny1, a bookmarking tool created at Facebook and open-sourced in 2012. It's written in Rust and released under the MIT license.
Built-in commands
Roo comes with a set of default commands that can be fully customized.
Tool | Description | Command | Example |
---|---|---|---|
Search Google.com | g <search query> |
g Rust language |
|
Google Calendar | Go to Google Calendar | cal |
cal |
Google Docs | Create a new GDoc | newdoc |
newdoc |
Gmail | Create a new mail in Gmail | newmail |
newmail |
Youtube | Go to youtube | y |
y |
Youtube Search | Search youtube.com | y <search query> |
y Rust videos |
Google Maps | Go to Google Maps | maps |
maps |
Google Maps Search | Search Google Maps | maps <search query> |
maps rome colosseum |
Google Drive | Go to Google Drive | drive |
drive |
Google Drive Search | Search Google Drive | drive <search query> |
drive blog post |
GitHub | Go to Github | gh |
gh |
GitHub Search | Search Github | gh <search query> |
gh hello world! |
GitHub Search code | Search Github Code | ghc <search query> |
ghc hello world! |
GitHub Search issues | Search Github Issues | ghi <search query> |
ghi runtime exception |
Search Pinterest | pin <search query> |
pin ideas |
|
Search Reddit | redd <search query> |
redd Rust language |
|
Go to Twitter profile | tw <handle> |
tw @marcocampana |
|
Search | tw <search query> |
tw rust lang |
|
Amazon | Search Amazon.com | a <search query> |
a 4k tvs |
AWS EC2 | Go to ec2 instance page | i-<instance_id> |
i-123 |
AWS VPC | Go to VPC page | vpc-<vpc_id> |
vpc-123 |
Installation
Install from Crates.io
If you are a Rust programmer you can install roo_engine
with cargo
cargo install roo_engine
Install with Homebrew (Mac)
brew tap marcocampana/tap
brew install roo_engine
Check out the repository
If you are on MacOs, installing with homebrew is the recommended choice. However, you can also check out the repository on your machine and run with cargo
.
-
Check out the repository from GitHub
git checkout git@github.com:marcocampana/roo_engine.git
-
Run with Cargo
cargo run
How to
Start the server
If you installed the binary, you can start the server by executing the roo_engine
binary in your terminal:
roo_engine
or if you using cargo
you can run:
cargo run
This will start roo_engine
on 127.0.0.1:3030
.
You can use the --help
argument to print all the available arguments you can use to run roo
.
roo --help
Add roo_engine
as your default search engine in Chrome
- Go to
chrome://settings/searchEngines
- Click on
Add
underSearch engines
and use this URLhttp://127.0.0.1:3030/?q=%s
- Optionally set this as your default search engine for maximum productivity™
Define your own commands
roo_engine
takes your search query and tries to match it against the list of defined commands. Buil-in commands that ship with roo_engine
are found in the parser.rs file. You can make your own rules file and tell roo
where to find it at startup:
roo --path ~/my_file.toml
A roo_engine
command looks like this:
[[command]]
input = "g (.+)"
output = "https://www.google.com/search?q={}"
the input
string is a regex that is matched against the input of your browser's search bar. If a match is found the regex group captured in ()
is replaced in the {}
found on the output string where the browser redirects. In the example above we are defining a command g
that will match a string g <search query>
that redirects to Google search to search for <search query>
.
See rules.toml for sample commands.
Example: JIRA tasks
If you are a JIRA user you know that JIRA task ids have the format <PROJECT_PREFIX>-<TASK_NUMBER>
. You could write a custom command that allows you to input the task id in your browser search bar and be redirected to the task details. For example, let's assume that your project prefix is MP
you could define the following rule:
[[command]]
input = "(MP-.+)"
output = "https://marcocampana.atlassian.net/browse/{}"
Run in the background
On MacOs you can setup launchd
to automatically run roo_engine
in the background.
- create a
plist
file in the~/Library/LaunchAgents
folder (make sure to specify the absolute path to the code in your machine instead of/Users/myuser
)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.marcocampana.roo_engine</string>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/User/myuser/code/roo_engine</string>
<key>ProgramArguments</key>
<array>
<string><PATH_TO>/User/myuser/.cargo/bin/cargo</string>
<string>run</string>
</array>
</dict>
</plist>
- Load the configuration to start the server:
launchctl load ~/Library/LaunchAgents/com.marcocampana.roo_engine.plist
How to contribute
Fork this repo and send a pull request. Make sure to have unit tests for any new functionality
Run tests with:
cargo test
Dependencies
~18–49MB
~835K SLoC