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.0.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.0-py3-none-any.whl (32.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mojify-0.4.0.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.0.tar.gz
Algorithm Hash digest
SHA256 8c47b343fd28f7f542d5ce7ec21c80b48550a860ba065a44d1567d514bc2f7ce
MD5 5dfbe953d7a534c86edca6f4af5c70a6
BLAKE2b-256 f79709007cca94edc54f0f1bf66d5a81ffea1efbc808896efddde6e4ef549fa3

See more details on using hashes here.

Provenance

The following attestation bundles were made for mojify-0.4.0.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.0-py3-none-any.whl.

File metadata

  • Download URL: mojify-0.4.0-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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ec786662b53643456f556bcd31a81a67671b08a1ce4caa6421778eb6d52bc27d
MD5 2447359ad3fa423b52c747a662371621
BLAKE2b-256 2a3191aea7cb6240f6cc2ad53d8961f7929ceefd3569f0effc27eeefb5142ae8

See more details on using hashes here.

Provenance

The following attestation bundles were made for mojify-0.4.0-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