An open API service indexing awesome lists of open source software.

https://github.com/szymonwilczek/carmenta

Fast, minimal Emoji Picker for GNOME written in Rust & GTK4. Supports custom providers, "Always on Top" mode, and Wayland integration via extension.
https://github.com/szymonwilczek/carmenta

copr emoji-picker gnome gtk4 libadwaita linux rust wayland

Last synced: 6 months ago
JSON representation

Fast, minimal Emoji Picker for GNOME written in Rust & GTK4. Supports custom providers, "Always on Top" mode, and Wayland integration via extension.

Awesome Lists containing this project

README

          


Carmenta Logo

# Carmenta

![License](https://img.shields.io/badge/license-MIT-blue.svg) ![Rust](https://img.shields.io/badge/language-Rust-orange.svg) ![GTK4](https://img.shields.io/badge/toolkit-GTK4%20%2B%20Adwaita-green.svg)

**Carmenta** is minimal, fast emoji picker for Linux desktops, built with Rust and GTK4. It integrates with GNOME Shell to provide instant access to Emojis, Kaomojis, Symbols, and GIFs.


Preview

## 🚀 Performance
| Metric | Result |
| :--- | :--- |
| **Startup Time** | **< 200ms** (Internal init: ~135ms) |
| **Insertion Latency** | **~1.2ms** |
| **Memory Usage** | **~0.75MB** (RSS) |

*Measured on standard hardware.*

## ✨ Features
- **Instant Search**: Localized, debounce-optimized search for thousands of items.
- **Four Modes**:
- 😃 **Emoji**: Full Unicode support with categories and skin tones.
- (◕‿◕) **Kaomoji**: Extensive library of Japanese emoticons.
- ∑ **Symbols**: Math, currency, arrows, and more.
- 🎬 **GIFs**: Search millions of animated GIFs powered by **Klipy**.
- **Smart History**: Remembers your most used items.
- **"Always on Top"**: Stays visible while you work, but gets out of the way when you don't need it.
- **Shell Integration**: Uses an optional, companion GNOME Shell extension for reliable text insertion into any application (Wayland workaround).

## 📦 Installation

### Fedora (Recommended)
You can install Carmenta directly from the [COPR repository](https://copr.fedorainfracloud.org/coprs/szymon-wilczek/carmenta/):

```bash
sudo dnf copr enable szymon-wilczek/carmenta
sudo dnf install carmenta
```

### Manual Build
If you are not using Fedora or prefer to build from source, the installation script will attempt to install necessary dependencies for you (on Ubuntu/Debian, Fedora, Arch).

If the script fails to install dependencies, you will need:
- `gtk4` (libgtk-4-dev)
- `libadwaita` (libadwaita-1-dev)
- `rust` / `cargo`

**Installation:**

1. Clone the repository:
```bash
git clone https://github.com/szymonwilczek/carmenta.git
cd carmenta
```
2. Run the installation script:
```bash
./scripts/install_app.sh
```

### Install Extension (Optional)
Carmenta does not require a companion extension to function correctly, but it makes the work much easier.

Currently, Wayland prohibits inserting anything from other applications into other windows.
A workaround for this is a Companion extension that communicates with the application, allowing emoticons to be inserted.

> [!NOTE]
> While I wait for *GNOME Extensions'* review, here's a guide to install the extension without it:

#### Installation Script

I recommend you to install the extension via [installation script](./scripts/install_extension.sh), as it do all of these (listed below - but not the 2nd step, you'll still need to do that manually):

1. Copy the `extension` folder to your GNOME Shell extensions directory:
```bash
git clone https://github.com/szymonwilczek/carmenta.git
cd carmenta
mkdir -p ~/.local/share/gnome-shell/extensions/carmenta@szymonwilczek.dev
cp -r extension/* ~/.local/share/gnome-shell/extensions/carmenta@szymonwilczek.dev/
```
2. Restart GNOME Shell (logout and login back).
3. Enable the extension using the **Extensions** app.

Obviously, if you want to do that steps yourself, that's fine and will work the same.

## ⌨️ Usage
- Launch Carmenta (can be binded to any **Custom Shortcut** as `carmenta`).
- Type to search (or use Arrows and/or Tab/Ctrl-Tab to navigate around the app).
- Click to copy & insert.
- **Esc** to quit instantly.