Home Amber Linux Ambrosia
Panel + Service D-Bus Odin · GTK3 Linux Mint

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

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 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

bash
# 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…"