Mozeidon is essentially a CLI written in Go to handle Mozilla Firefox tabs and bookmarks.
Here you'll find :
- a guide to complete the installation of the mozeidon components (see architecture).
- install the Mozeidon firefox add-on
- install the Mozeidon native-app
- install the Mozeidon CLI
- advanced examples of the CLI usage (including integration with fzf and fzf-tmux)
- a Raycast extension built around Mozeidon (for MacOS only)
All the code is available here as open-source. You can be sure that :
- your browsing data (tabs, bookmarks, etc) will remain private and safe: mozeidon will never share anything outside of your system.
- at any time, stopping or removing the
mozeidon firefox addon extension
will stop or remove all related processes on your machine.
Using the mozeidon
CLI, you can :
- list all currently opened tabs
- list recently-closed tabs
- list current bookmarks
- switch to a currently opened tab
- open a new tab (empty tab or with target url)
- close a currently opened tab
Mozeidon is built on ipc and native-messaging protocols, using the following components :
-
the Mozeidon firefox add-on, a JS script running in the Mozilla browser, receives commands and sends back data (i.e tabs, bookmarks, etc) by leveraging various browser APIs.
-
the Mozeidon native-app, a Go program, interacts with the Mozeidon firefox-addon. It sends commands to, and receive data from the browser addon - via native-messaging protocol.
-
the Mozeidon CLI, another Go program, interacts with the Mozeidon native-app. It sends commands to and receive data from the native-app - via ipc protocol.
Of course you need to install each of these components :
- the Mozeidon firefox add-on
- the Mozeidon native-app
- the Mozeidon CLI
The mozeidon addon for Mozilla Firefox can be found here :
https://addons.mozilla.org/en-US/firefox/addon/mozeidon
The mozeidon native-app, a very simple ipc server written in go
, will allow the mozeidon add-on to receive commands from and send responses to the mozeidon CLI (see below).
On MacOS or Linux, you can install it using homebrew
:
brew tap egovelox/homebrew-mozeidon ;
brew install egovelox/mozeidon/mozeidon-native-app ;
Otherwise, you may download the binary from the release page.
If no release matches your platform, you can build the binary yourself:
git clone https://github.com/egovelox/mozeidon-native-app.git ;
cd mozeidon-native-app && go build
As a firefox native-app, it has to be referenced into your Firefox configuration.
On MacOS
, first locate the ~/Library/Application Support/Mozilla/NativeMessagingHosts
directory (or create it if missing).
Then create a mozeidon.json
file, and copy into it the following json
.
Note: depending on your installation, you may need to replace the value in "path"
with the absolute path of the mozeidon-native-app.
{
"name": "mozeidon",
"description": "Native messaging add-on to interact with your browser",
"path": "/opt/homebrew/bin/mozeidon-native-app",
"type": "stdio",
"allowed_extensions": [
"[email protected]"
]
}
Now the Mozeidon firefox-addon will be able to interact with the Mozeidon native-app.
Note :
For other OS than MacOS
, please check the Mozilla documentation to find the correct location of the Firefox NativeMessagingHosts
directory.
As a last step, you need to install the Mozeidon CLI.
The Mozeidon CLI is a lightweight CLI written in go
.
On MacOS or Linux, you can install it using homebrew
:
brew tap egovelox/homebrew-mozeidon ;
brew install egovelox/mozeidon/mozeidon ;
Otherwise, you may download the binary from the release page.
If no release matches your platform, you can build the binary yourself:
git clone https://github.com/egovelox/mozeidon.git ;
cd mozeidon/cli && go build
# get maximum 10 of latest bookmarks, title and url
mozeidon bookmarks -m 10 --go-template '{{range .Items}}{{.Title}} {{.Url}}{{"\n"}}{{end}}'
# get opened tabs, with π icon if pinned
mozeidon tabs get --go-template '{{range .Items}}{{.WindowId}}:{{.Id}} {{.Url}} {{if .Pinned}}π{{else}}π¦{{end}} {{"\\u001b[38;5;109m"}} {{.Domain}}{{"\\033[0m"}} {{.Title}}{{"\n"}}{{end}}'
If you've installed fzf you can use it as a kind of UI for mozeidon CLI.
The below bash
command shows how fzf
can be used to select a tab, and to open it in your browser.
mozeidon tabs get --go-template '{{range .Items}}{{.WindowId}}:{{.Id}} {{.Url}} {{if .Pinned}}π{{else}}π¦{{end}} {{"\u001b[38;5;109m"}} {{.Domain}}{{"\033[0m"}} {{.Title}}{{"\n"}}{{end}}' \
| fzf --ansi --with-nth 3.. --bind=enter:accept-non-empty \
| cut -d ' ' -f1 \
| xargs -n1 -I % sh -c 'mozeidon tabs switch % && open -a firefox'
note : xargs -n1
prevents to run any command if no tab was chosen with fzf ( say, for example, that you exited fzf with ctrl-c )
note : mozeidon tabs switch
is used to switch to the tab you chose in fzf
As an example, let's bind our mozeidon script with the tmux shortcut Prefix-t
# in $HOME/.tmux.conf
bind t run-shell -b "bash $HOME/.tmux/mozeidon_tabs.sh"
Now create the script $HOME/.tmux/mozeidon_tabs.sh
:
#!/bin/bash
mozeidon tabs get --go-template \
'{{range .Items}}{{.WindowId}}:{{.Id}} {{.Url}} {{if .Pinned}}π{{else}}π¦{{end}} {{"\u001b[38;5;109m"}} {{.Domain}}{{"\033[0m"}} {{.Title}}{{"\n"}}{{end}}' \
| fzf-tmux -p 60% -- \
--no-bold --layout=reverse --margin 0% --no-separator --no-info --black --color bg+:black,hl:reverse,hl+:reverse,gutter:black --ansi --with-nth 3.. --bind=enter:accept-non-empty \
| cut -d ' ' -f1 \
| xargs -n1 -I % sh -c '$HOME/bin/mozeidon tabs switch % && open -a firefox'
This more advanced script will allow to :
- open a new tab (empty or with search query)
- switch to a currently open tab
- close one or many tabs
#!/bin/bash
$HOME/bin/mozeidon tabs get --go-template \
'{{range .Items}}{{.WindowId}}:{{.Id}} {{.Url}} {{if .Pinned}}π{{else}}π¦{{end}} {{"\u001b[38;5;109m"}} {{.Domain}}{{"\033[0m"}} {{.Title}}{{"\n"}}{{end}}'\
| fzf-tmux -p 60% -- \
--border-label=TABS \
--no-bold \
--layout=reverse \
--margin 0% \
--no-separator \
--no-info \
--black \
--color bg+:black,hl:reverse,hl+:reverse,gutter:black \
--with-nth 3.. \
--bind="enter:accept+execute($HOME/bin/mozeidon tabs switch {1} && open -a firefox)" \
--multi \
--marker=β \
--bind="ctrl-p:accept-non-empty+execute($HOME/bin/mozeidon tabs close {+1})" \
--bind="ctrl-o:print-query" \
--header-first \
--color=header:#5e6b6b \
'--header=close tab(s) [C-p]
open new tab [C-o]'\
| grep -v "[π¦π]" \
| xargs -r -I {} sh -c '$HOME/bin/mozeidon tabs new "{}" && open -a firefox'
For MacOS users only : see the Mozeidon Raycast extension.
Note that you'll first need to complete the installation of Mozeidon components (Mozeidon firefox add-on, Mozeidon native-app and Mozeidon CLI).
If you ask for something faster than Raycast ( which I find quite slow to trigger the search list ),
you might take a look at this macOS agent-app :
mozeidon-macos-ui
Various releases of the Mozeidon CLI can be found on the releases page.
Releases are managed with github-actions and goreleaser.
A release will be auto-published when a new git tag is pushed, e.g :
git clone https://github.com/egovelox/mozeidon.git && cd mozeidon;
git tag -a v2.0.0 -m "A new mozeidon (CLI) release"
git push origin v2.0.0