Skip to main content

A Wayland-native emoji picker for Ubuntu/GNOME — search, select, paste.

Project description

mojify logo

mojify

A Wayland-native emoji picker for Ubuntu/GNOME.

Press a shortcut, type to search, hit Enter — the emoji is copied to your clipboard. Paste it anywhere with Ctrl + V.

pip install mojify

Why it exists

GNOME's built-in emoji picker only works inside GTK apps, and most third-party pickers (rofi-emoji, etc.) rely on xdotool / ydotool to type the emoji — which does not work on Wayland because Wayland blocks programs from synthesizing keystrokes into other apps for security reasons.

mojify takes the Wayland-friendly route: it copies the emoji to your clipboard and lets you paste it yourself with Ctrl + V. That works in every application — your terminal, browser, editor, chat app, anywhere — with no input-injection hacks.

It's built on GTK3 (PyGObject), which already ships with Ubuntu's GNOME desktop, so the only thing you need to add is the clipboard helper.


Install

pip install mojify

Required dependency: wl-clipboard

mojify uses wl-copy to put the emoji on your clipboard:

sudo apt install wl-clipboard

GTK3 / PyGObject already come with Ubuntu's GNOME desktop. If you're on a stripped-down system and the picker won't start, install them with: sudo apt install python3-gi gir1.2-gtk-3.0


Usage

Launch the picker directly:

mojify

Other commands:

mojify --version    # print the version
mojify --list       # print every bundled emoji (char<TAB>name<TAB>keywords)
mojify --stdout     # print the chosen emoji to stdout instead of copying
mojify --no-notify  # skip the "Copied" desktop notification

--list is handy for scripting, e.g. piping into your own fuzzy finder:

mojify --list | fzf | cut -f1 | wl-copy

Set up the Super + . keyboard shortcut (GNOME)

The whole point is to summon mojify with one keystroke. Bind it as a custom shortcut:

  1. Open Settings → Keyboard → View and Customize Shortcuts.
  2. Scroll to the bottom and click Custom Shortcuts, then the + button.
  3. Fill in:
    • Name: mojify
    • Command: mojify (if that doesn't work, use the absolute path — run which mojify to find it, e.g. /home/you/.local/bin/mojify)
    • Shortcut: press Super + .
  4. Click Add.

Now press Super + . anywhere and the picker pops up.

Note: Super is the Windows/⌘ key. If GNOME says the shortcut is already in use, pick another combo (e.g. Super + E) — the steps are the same.

Tip: if you installed with pip install --user, make sure ~/.local/bin is on your PATH, or just use the absolute path in the command field.


Show mojify in the app grid / dock (optional)

To register mojify as a desktop app (with its icon) so it appears in the GNOME app grid, search, and dock — and can be pinned:

mojify --install-desktop      # installs a .desktop file + icon
mojify --uninstall-desktop    # removes them

You may need to log out/in for the icon to refresh. Note the picker itself is a borderless pop-up, so it intentionally has no titlebar icon.

How it works

  1. Press your shortcut (e.g. Super + .).
  2. A small floating search window appears in the center of the screen, always on top, with no titlebar.
  3. Browse by category tab — starting with a 🕒 Recent tab of your most-used emojis — or just start typing to search by name or keyword (fire, smile, heart, rocket, …). Search spans every category and updates in real time.
  4. Use arrow keys to move through the grid, or click with the mouse.
  5. Press Enter (or click) to select. The emoji is copied to your clipboard and the window closes instantly.
  6. Press Ctrl + V wherever you want the emoji.
  7. Press Escape at any time to dismiss the picker without selecting.

Known limitation

You have to paste manually with Ctrl + V. mojify cannot type the emoji into the focused app for you, because Wayland deliberately prevents applications from injecting keystrokes into other windows. Copy-to-clipboard is the robust, secure way to do this on Wayland — and it works everywhere.


Project layout

mojify/
├── mojify/
│   ├── __init__.py
│   ├── __main__.py     # CLI entry point (python -m mojify / `mojify`)
│   ├── picker.py       # GTK3 floating picker window
│   └── emojis.py       # bundled emoji dataset + search
├── setup.py
├── pyproject.toml
├── README.md
└── LICENSE

Contributing

Contributions are very welcome! 🎉

  1. Fork the repo and create a feature branch.
  2. Make your change. The codebase is small and dependency-light:
    • Adding emojis? Edit mojify/emojis.py. Each entry is a (character, name, keywords) tuple. Add generous keywords — they're what make search forgiving.
    • UI tweaks? They live in mojify/picker.py.
  3. Test locally with an editable install:
    pip install -e .
    mojify
    
  4. Open a pull request describing the change.

Please keep the zero-heavy-dependency philosophy: GTK3 (already on Ubuntu) for the UI and wl-clipboard for the clipboard — nothing more.


License

MIT © 2026 Piyush Doorwar

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mojify-0.4.1.tar.gz (79.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mojify-0.4.1-py3-none-any.whl (32.5 kB view details)

Uploaded Python 3

File details

Details for the file mojify-0.4.1.tar.gz.

File metadata

  • Download URL: mojify-0.4.1.tar.gz
  • Upload date:
  • Size: 79.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mojify-0.4.1.tar.gz
Algorithm Hash digest
SHA256 fbb207d829d03243d9d74d82c6d0dee94b2f6f166aae5aa17a6177f796ddde52
MD5 7c06c8de3c0fb748a98c31ec575d914a
BLAKE2b-256 bf6ae9b3491771ce0593d37feb9648078dbc819eb036661ae839258a6f34d9f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for mojify-0.4.1.tar.gz:

Publisher: publish.yml on piyushdoorwar/mojify

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mojify-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: mojify-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 32.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mojify-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3b17a5ea5efaf0905b19a8d5fe453c0236cfad86cfdbcbee46e8a4b793affefb
MD5 c0aa10a8db6a70dbe504714a8ee41d68
BLAKE2b-256 9825e28023b6acf00396902e06accb1d34e68e1aa75d21f1276008c57bc7eae2

See more details on using hashes here.

Provenance

The following attestation bundles were made for mojify-0.4.1-py3-none-any.whl:

Publisher: publish.yml on piyushdoorwar/mojify

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page