Skip to content
guitaripodPublic

About

A fast emoji picker for KDE Plasma Wayland

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

emojipick

A fast, frecency-ranked emoji picker for KDE Plasma on Wayland, written in Rust + GTK4.

It runs as a resident daemon that owns a native global shortcut (via KGlobalAccel), so it shows up instantly with no per-launch startup cost. Emoji render as native color glyphs through Pango, search is fuzzy and tiered, and the emoji you actually use float to the top.

Features

  • Instant show. A resident daemon toggles one window over a Unix socket and a native KGlobalAccel global shortcut (default Meta+Space). The shortcut is re-registered if kglobalacceld restarts.
  • Frecency ranking. The default view is your most recently used emoji first. Search matches names and :shortcodes: in tiers (exact, prefix, word boundary, fuzzy) with a frecency tiebreak.
  • Virtualized grid. A GridView recycles a handful of widgets regardless of result count, so typing stays smooth across the full Unicode set.
  • Keyboard-first. Type to filter, arrows/Home/End/PageUp-Down to move, Tab/Shift+Tab to cycle categories, Enter to insert. Full vim-style navigation with Ctrl.
  • Skin tones. Pick a default tone in the UI (or Ctrl+0..5), applied across the whole set.
  • Persistent UI scale. Grow or shrink the whole picker with Ctrl + / Ctrl -, remembered across restarts.
  • Follows your theme. Light and dark switch live with the Plasma color scheme.
  • Dismisses itself. Clicking another window or pressing Esc hides the picker.
  • Insertion. Always copies to the clipboard (wl-copy); optionally auto-pastes into the focused window via ydotool, with a configurable paste chord so terminals work too.

Install

Arch Linux (AUR)

paru -S emojipick     # or: yay -S emojipick

crates.io

cargo install emojipick

From source

git clone https://github.com/guitaripod/emojipick
cd emojipick
cargo build --release
install -Dm755 target/release/emojipick ~/.local/bin/emojipick

Setup

Enable the daemon (instant show) and bind the shortcut:

# run + enable the resident daemon
systemctl --user enable --now emojipick.service   # if installed from a package
# or, from a manual build:
emojipick --daemon &

# the daemon registers Meta+Space itself via KGlobalAccel on startup.
# apply the optional KWin rule that centers/floats the window:
emojipick install-shortcut

Press Meta+Space to toggle the picker. To change the key, open System Settings, Keyboard, Shortcuts, find emojipick and rebind "Toggle emoji picker".

To start a manual build at login, copy emojipick.service to ~/.config/systemd/user/, point its ExecStart at your binary, and enable it with the command above.

By default emojipick pastes the picked emoji straight into the focused app (via ydotool) in addition to copying it. Install ydotool for that to work; to only copy to the clipboard instead, set auto_paste = false in the config. emojipick starts the ydotool user unit on demand, so nothing needs enabling.

Terminals do not paste on Ctrl+V. If you paste into one, set paste_shortcut = "ctrl-shift-v" or "shift-insert".

Usage

Command Action
emojipick toggle the running daemon, or open a one-shot picker that exits after you pick when no daemon is running
emojipick --daemon run the resident picker and register the global shortcut
emojipick --toggle show or hide the picker in the running daemon
emojipick install-shortcut apply the KWin rule that centers and floats the picker
emojipick --version, --help print the version, or the command list

Keybindings

Key Action
type filter (works from anywhere in the window)
Enter / click insert the selected emoji
Space insert the selected emoji (when the grid has focus)
Esc clear query/category, then hide
Tab / Shift+Tab next / previous category
Down enter the grid from search
Up on the first row back to search
Backspace edit the query (when the grid has focus)
arrows, Home/End, PageUp/PageDown move selection
Ctrl+h / Ctrl+l left / right
Ctrl+j / Ctrl+k down / up
Ctrl+d / Ctrl+u half page down / up
Ctrl+f / Ctrl+b full page down / up
Ctrl+e / Ctrl+y scroll one line down / up
Ctrl+0..Ctrl+5 skin tone
Ctrl + / Ctrl - scale UI up / down

Configuration

~/.config/emojipick/config.toml:

auto_paste = true           # also paste via ydotool after copying; false = copy only
paste_shortcut = "ctrl-v"   # "ctrl-v", "ctrl-shift-v" (terminals) or "shift-insert"
restore_clipboard = false   # put your previous clipboard text back after pasting
skin_tone = 0               # 0 = default, 1..5 = light..dark
grid_columns = 9            # emoji per row
scale = 1.0                 # UI scale factor (0.7 to 3.0)

Edits apply the next time the picker opens, except grid_columns, which needs a daemon restart. Changing the skin tone or scale in the UI rewrites the file, which drops any comments you added. A config that fails to parse is moved to config.toml.bak and defaults are used, so a typo never destroys your file.

Frecency data lives in ~/.local/share/emojipick/frecency.json.

Requirements

  • KDE Plasma 6 on Wayland (KWin). The global shortcut uses KGlobalAccel.
  • gtk4, wl-clipboard (for wl-copy), a color emoji font (noto-fonts-emoji).
  • ydotool (+ ydotoold) for the default auto-paste, with write access to /dev/uinput. Without it emojipick falls back to copy-only.

Why clipboard + paste instead of typing?

Emoji have no keysym, so synthetic typing can't produce them reliably on Wayland. emojipick always copies (universal and instant) and optionally pastes via ydotool, which is the robust path on KWin.

License

GPL-3.0

About

A fast emoji picker for KDE Plasma Wayland

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages