Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/0x20f/bunny
Smart bookmarking tool. Fast and customizable shortcuts for your browser.
https://github.com/0x20f/bunny
bookmarks rocket-rs rust rust-lang server simple
Last synced: 3 months ago
JSON representation
Smart bookmarking tool. Fast and customizable shortcuts for your browser.
- Host: GitHub
- URL: https://github.com/0x20f/bunny
- Owner: 0x20F
- License: mit
- Created: 2020-07-16T18:22:06.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2021-01-16T10:50:50.000Z (almost 4 years ago)
- Last Synced: 2024-10-09T20:41:38.467Z (3 months ago)
- Topics: bookmarks, rocket-rs, rust, rust-lang, server, simple
- Language: Rust
- Homepage:
- Size: 68.4 KB
- Stars: 18
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
bunny
Smart bookmarking tool, running custom commands to open urls from a browser url bar
## What?
"Smart bookmarking"? What? I had the same reaction. Imagine it as a very fast, and elegant (if you so wish) way of entering urls into your browser. Instead of writing `reddit.com/r/programmerhumor`, you could be writing `rd r programmerhumor` and be redirected to your entertainment of choice a lot easier.This was inspired by the following [article by facebook](https://developers.facebook.com/blog/post/2020/06/03/build-smart-bookmarking-tool-rust-rocket/)
## How to use
* `cargo install bun` (this does require rust nightly for now)
* Run the installed program `bun`
* Create a custom search engine for your browser and point it towards the address the server is running onThe server looks for a file that contains all the bookmarks inside the home directory (`~/bookmarks.toml`)
### Writing bookmarks (`bookmarks.toml`)
The engine is simple, it's all written in a `toml` format for readability* The bookmarks file is made of `books`, they can have any *name* you choose, an *alias*, and a *default* url:
```rust
[twitter]
alias = "tw"
default = "https://twitter.com"
```* Each `book` in the file has `pages`. Each page has a *name*, a *prefix*, and a *url*:
```rust
[twitter]
alias = "tw"
default = "https://twitter.com"[twitter.pages]
search = { prefix = "NONE", url = "https://twitter.com/search?q={encoded}" }
profile = { prefix = "@", url = "https://twitter.com/{raw}" }
```* Each `url` can contain special keys that handle the data you pass to the command.
### Keys
Consider the following command: `tw rust lang`. Here are the keys and what they do with the given data. The `prefix` gets stripped away and we are left to handle `rust lang`
- `{default}` - will be replaced with the default url of the `book` => `https://twitter.com`
- `{encoded}` - will url encode the data => `rust%20lang`
- `{raw}` - will pass in the raw data without encoding it => `rust lang`
- `{0}` - will pass in the first *segment* of the data => `rust`
- `{1}` - will pass in the second *segment* of the data => `lang`
* There are up to `4` total segments at the moment, because it felt like more were just too many. These can be used to create more customised commands, such as, a reddit command:
```rust
[reddit]
alias = "rd"
default = "https://reddit.com"
[reddit.pages]
whatever = { prefix = "NONE", url = "https://reddit.com/{0}/{1} }
```
* The above can be used as `rd r programmerhumor` to go to a subreddit or as `rd u programmerhumor` to go to a user
### PrefixesThe url prefix can be whatever you want it to be, it is used to differentiate between each command. You could have `-s` when searching for something, or full on `search` if shortcuts aren't your thing.
**You dont even need spaces between the prefix and command**.
`-sheyooo` will be split into `-s heyooo` if the prefix is defined as `-s`.
There's also one special prefix, `NONE`, which means the command will not expect a prefix, and encode the url with all the given data.
### Full examples can be seen in the [example file](./example/bookmarks.example.toml)