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.
- 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
kglobalacceldrestarts. - 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
GridViewrecycles 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
Eschides the picker. - Insertion. Always copies to the clipboard (
wl-copy); optionally auto-pastes into the focused window viaydotool, with a configurable paste chord so terminals work too.
paru -S emojipick # or: yay -S emojipickcargo install emojipickgit clone https://github.com/guitaripod/emojipick
cd emojipick
cargo build --release
install -Dm755 target/release/emojipick ~/.local/bin/emojipickEnable 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-shortcutPress 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".
| 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 |
| 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 |
~/.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.
- KDE Plasma 6 on Wayland (KWin). The global shortcut uses KGlobalAccel.
gtk4,wl-clipboard(forwl-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.
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.
GPL-3.0