HomeProjectsAmbrosia
Panel + ServiceD-BusOdin · GTK3Linux Mint

Ambrosia

Everything you have 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

bash
# 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 org.amberlinux.Ambrosia \
  --object-path /org/amberlinux/Ambrosia

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 org.amberlinux.Ambrosia on the session bus. The six domains are not 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.

MethodReturnsDescription
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 idInsert a new entry and return its id.
Update(id, entry)BooleanUpdate an existing entry in place.
Delete(id)BooleanRemove a single entry.
Clear(window)IntegerTime-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

bash
# The five most recent clipboard entries
gdbus call --session --dest org.amberlinux.Ambrosia \
  --object-path /org/amberlinux/Ambrosia \
  --method org.amberlinux.Ambrosia.Clipboard.List 5

# Search terminal history — same fields the panel searches
gdbus call --session --dest org.amberlinux.Ambrosia \
  --object-path /org/amberlinux/Ambrosia \
  --method org.amberlinux.Ambrosia.Terminal.Query "make release"

# Add a note (markdown, optional TOML front matter)
gdbus call --session --dest org.amberlinux.Ambrosia \
  --object-path /org/amberlinux/Ambrosia \
  --method org.amberlinux.Ambrosia.Notes.Add "+++\ntags = ['mint']\n+++\nRelease checklist…"