Ambrosia
Everything you've copied, run, opened, bookmarked or noted — searchable, one keypress away. A system-tray panel and session D-Bus service for Linux Mint, written in Odin with GTK3 and SQLite.
Quick Start
# Install
sudo apt install ambrosia
# Open the panel: Ctrl+Alt+A — search box focused, Tab into the list,
# Enter acts on the row, Escape closes.
# Verify the service on the session bus
gdbus introspect --session \
--dest io.ambrosia.Manager \
--object-path /io/ambrosia/Manager Features
Six domains, one panel
Applications, clipboard, terminal history, recently-opened items, bookmarks, and notes — one keypress opens a centred, searchable list over all of them.
Terminal history with context
It remembers what .bash_history was never designed to hold: which directory a command ran in, its exit code, and how long it took.
Notes as documents
A note is a markdown document with optional TOML front matter, stored as one authoritative text blob. Title and tags are derived on every write, so any client can filter without knowing the format.
One D-Bus contract, six times
Every domain answers the same methods — List, Query, Add, Update, Delete, a time-windowed Clear — and emits the same Changed signal. A contract test pins the promise to the introspection XML.
kat800 integration
kat800 runs its clipboard, history, bookmarks and memos docks on Ambrosia over the session bus. Copy anywhere on the desktop; find it searchable in your terminal.
Search that means it
The Apps tab matches name, description, keywords and categories — typing "browser" finds Firefox. A Query over D-Bus matches exactly the same fields the panel does.
D-Bus API
Ambrosia lives at io.ambrosia.Manager on the session bus. The
six domains aren't six features bolted together — they are one shape instantiated
six times. Every domain interface answers the same methods and every row
carries the same core fields, so a client written against one domain reads
the next by swapping the interface name.
| Method | Returns | Description |
|---|---|---|
List(limit) | Array<Entry> | Return the most recent entries of a domain. |
Query(text) | Array<Entry> | Search a domain — the same fields the panel searches. |
Add(entry) | String id | Insert a new entry and return its id. |
Update(id, entry) | Boolean | Update an existing entry in place. |
Delete(id) | Boolean | Remove a single entry. |
Clear(window) | Integer | Time-windowed purge; returns the number of entries removed. |
Each domain also emits a Changed signal, so clients like kat800's
docks update live without polling.
From a script
# The five most recent clipboard entries
gdbus call --session --dest io.ambrosia.Manager \
--object-path /io/ambrosia/Manager \
--method io.ambrosia.Clipboard.List 5
# Search terminal history — same fields the panel searches
gdbus call --session --dest io.ambrosia.Manager \
--object-path /io/ambrosia/Manager \
--method io.ambrosia.History.Query "make release"
# Add a note (markdown, optional TOML front matter)
gdbus call --session --dest io.ambrosia.Manager \
--object-path /io/ambrosia/Manager \
--method io.ambrosia.Notes.Add "+++\ntags = ['mint']\n+++\nRelease checklist…"