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.5.0.tar.gz (89.0 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.5.0-py3-none-any.whl (44.1 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for mojify-0.5.0.tar.gz
Algorithm Hash digest
SHA256 13ab85f6476422377186ea57d79f26ce980a99e05289ed0d7a92df8647dd9b19
MD5 dc2c5e51f6ac6449b59438984b7c4f44
BLAKE2b-256 556279121d0e8dacf1c1406fee2c4ab267818b35d4bc3df4b21bf0bcc1c32db5

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: mojify-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 44.1 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.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 889385493969d3ed03f902231a14d051c26f537a636599caa5f8d52a30d75c8a
MD5 9b105d1aed33c4dc47a4874cce6ab787
BLAKE2b-256 788cfab4b0e6efbebb7effcbfcbfaf57b7c24ce32119296b61413a84b68f3697

See more details on using hashes here.

Provenance

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