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)

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


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 (smileys, people, animals, food, travel, activities, objects, symbols, arrows, flags) — or just start typing to search by name or keyword (fire, smile, heart, rocket, …). Search spans every category; results update 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.2.0.tar.gz (33.2 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.2.0-py3-none-any.whl (28.6 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for mojify-0.2.0.tar.gz
Algorithm Hash digest
SHA256 879112b04f0d3988fde1fe31dc2b767f4d017c7123a6319f74e383d2e6149ace
MD5 b267b84fc853e05d5f7ca538f1632264
BLAKE2b-256 c0795a519cfb787e5d5a0baae968b6ccd8beb21ad958f590d7664631d01ec5d0

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: mojify-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 28.6 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.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cf5a723e58a36c937c7a9d04ce0d60183e33d310f3213d8e0651fcf93b279046
MD5 926e1fbb44f35a3b3cb2a2225144ce52
BLAKE2b-256 1768c8586d4a33722da5779a736dddad63ec9fcbe4fcb598dc9eed312d0479fb

See more details on using hashes here.

Provenance

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