An emoji picker + clipboard history tool for Linux (built for Zorin OS, works on other distros). Named after the Tim Hortons donut holes.
- Emoji picker — opens with the cursor in the search box. Type to search
the full Unicode emoji set (Emoji 17, fully-qualified) by name or keyword
(e.g.
canada,canadian flag,lol,coffee), browse by category chip, move with the arrow keys, hit Enter and the emoji is pasted right where your cursor was. Remembers recent picks. - Clipboard history — stores text, file copies (uri-list) and images (screenshots). Search filters everything, including text inside images and image files via OCR (tesseract). Arrow keys to navigate, Enter pastes into the previously focused window, Ctrl+Delete forgets an entry.
- Hotkeys — set your own (default
Super+.emoji,Super+Shift+Chistory). - Emoji skin tone — in Settings, pick a preferred tone (default: none). The picker lists each emoji once and pastes hands/people in your preferred tone.
./install.shThis builds a release binary into ~/.local/bin/timbits, writes a default
config, adds an autostart entry for the daemon, creates launcher entries, and
on GNOME / Zorin registers the emoji and clipboard hotkeys via gsettings.
Requirements:
- Rust toolchain (build time) — https://rustup.rs
- Wayland pasting (GNOME):
wl-copy/wl-pasteplus a running ydotoold (ydotool; socket often/tmp/.ydotool_socket).wtypeis not supported on GNOME. On X11,xdotool/enigowork. - Colour emoji: system
fonts-noto-color-emoji(Noto Color Emoji) - Emoji search data: bundled
emojis.json(Unicode Emoji 17 fully-qualified set + emojilib-style keywords) plus built-in aliases; optional~/.config/timbits/emoji_aliases.toml. Refresh the catalogue with Settings → Update emoji catalogue, ortimbits update-emojis(network). Dev shipping builds:cargo run --bin update-emojisthen rebuild. - Optional, for image OCR:
sudo apt install tesseract-ocr - No Python required for the app (paste is pure Rust)
Edit hotkeys in ~/.config/timbits/config.toml, then re-run timbits install
(or restart the daemon on X11):
emoji_hotkey = "Super+Period"
clipboard_hotkey = "Super+Shift+C"
max_entries = 500
ocr_enabled = truetimbits install registers custom shortcuts automatically (defaults
Super+. and Super+Shift+C). It also clears the system/IBus Super+. emoji
chord so Timbits owns that key (IBus may keep Super+; for the stock picker).
No manual Settings trip needed unless you prefer the GUI.
Bind custom shortcuts in your DE to:
| Name | Command | Shortcut |
|---|---|---|
| Timbits Emoji | ~/.local/bin/timbits emoji |
Super+. |
| Timbits Clipboard | ~/.local/bin/timbits clipboard |
Super+Shift+C |
The daemon grabs the hotkeys automatically. Make sure it is running (it
autostarts on login after install, or run timbits daemon &).
timbits emoji # emoji picker
timbits clipboard # clipboard history
timbits settings # preferences (also the app-menu launcher)
timbits daemon # clipboard watcher (+ hotkeys on X11)
timbits install # first-time setup
On GNOME Wayland, Timbits puts the selection on the clipboard with
wl-copy, then synthesizes Ctrl+V with ydotool (requires ydotoold).
On X11 it uses arboard + enigo/xdotool. A legacy __serve-clip helper remains
as fallback.
If key synthesis isn't available, the item is still on your clipboard — just
press Ctrl+V yourself.
- GNOME (Zorin): the compositor only lets the focused window read the clipboard, so the background daemon can't see copies made while unfocused. The history picker ingests the current clipboard every time it opens (it is focused then), so the item you want is always captured. On KDE Plasma and wlroots compositors the daemon watches continuously via the data-control protocol.
- Global hotkeys: use your DE's custom shortcuts (see above). There is no cross-compositor global-hotkey API on Wayland.
~/.local/share/timbits/history.db— SQLite history~/.local/share/timbits/images/— copied images (PNG)~/.config/timbits/config.toml— settings
cargo build # debug build
cargo test # unit tests (storage, hotkey parsing, clipboard roundtrip)See AGENTS.md for the architecture overview.