π΄ TUI icon picker (emojis / kaomojis / unicode / nerd fonts) ripped from late.sh
Rust
57
46 commits
updated Sep 22, 2026
A terminal UI icon picker for emoji, kaomoji, Unicode characters, and Nerd Font glyphs. Press Enter to print the selected icon to stdout; press Esc to exit without output.
[!TIP] Want to use
latuiconin Neovim? Check out thelatuicon.nvimwrapper plugin!
Run without installing:
nix run github:coko7/latuicon
Or install it into your Nix profile:
nix profile add github:coko7/latuicon
Install the latuicon bin crate:
cargo install latuicon
Install the latuicon AUR package:
$ yay -S latuicon
# or
$ paru -S latuicon
./scripts/deploy.sh
Builds a release binary and installs it to ~/.local/bin/latuicon.
The flake also provides the Rust toolchain, Clippy, rustfmt, and rust-analyzer for contributors:
nix develop
nix flake check
latuicon # default theme, opens on emoji tab
latuicon --theme mocha # specific theme
LATUICON_THEME=dracula latuicon
latuicon --default-tab unicode # sets default tab (all, emoji, kaomoji, unicode, nerd font)
LATUICON_DEFAULT_TAB=nerd latuicon
latuicon --search-mode simple # substring-only search (default: fuzzy)
LATUICON_SEARCH=fuzzy latuicon
latuicon --tabs "nerd-font,emoji,all,kaomoji,unicode" # reorder tab strip / Tab cycling
LATUICON_TABS="nerd-font,emoji,all,kaomoji,unicode" latuicon
latuicon --tabs "emoji,kaomoji" # only enable emoji and kaomoji tabs
Prints the chosen icon to stdout.
| Key | Action |
|---|---|
β / β | Navigate list |
Ctrl+K / Ctrl+J | Navigate list (vi-style) |
PgUp / PgDn | Page up / down |
Ctrl+U / Ctrl+D | Half-page up / down |
Tab / Shift+Tab | Switch tab |
Enter | Select and exit |
Esc / Ctrl+C | Exit without selecting |
| Type anything | Filter by name |
Ctrl+Z | Undo search edit |
| Mouse click | Select tab or item |
| Double-click | Select and exit |
| Scroll wheel | Scroll list |
Search supports full emacs cursor movement (Ctrl+A, Ctrl+E, Ctrl+F, Ctrl+B, Ctrl+W, Ctrl+Y, etc.).
U+XXXX / 0xXXXX hex lookup and full Unicode name scanIn my setup, I use floatty.sh to open latuicon in a floating terminal window and pipe the result to the clipboard. Here is my custom Hyprland binding for it:
bindd = $mainMod, comma, laTUIcon icon picker, exec, FLOATTY_CAPTURE_OUTPUT=1 bash floatty.sh latuicon latuicon | wl-copy
And these are the Hyprland window rules for it:
# Special rules for floating/prompt terminals
windowrule {
name = floater-kitty
match:class = ^(floater-kitty-.*)$
no_anim = on
float = on
center = on
size = 1000 800
}
windowrule {
name = floater-kitty-latuicon
match:class = floater-kitty-latuicon
size = 700 700
}
Pressing $mainMod + , opens a floating terminal with the picker; confirming an icon copies it straight to the Wayland clipboard.
You can configure latuicon in config.toml:
~/.config/latuicon/config.toml~/Library/Application Support/latuicon/config.toml%APPDATA%\latuicon\config.tomlExample:
# Set the color theme
theme = "mocha"
# Set the default tab (selected tab on launch)
default_tab = "all"
# Set the search mode:
# - simple: case-insensitive substring match only
# - fuzzy: substring match, using word-level Levenshtein distance for ignoring small typos
search_mode = "fuzzy" # or 'simple'
# Configure the enabled tabs and their display order.
# Missing tabs will not have their icons available through "All".
tabs = ["all", "emoji", "kaomoji", "unicode", "nerd-font"]
# Path to a custom kaomoji file, overrides the built-in list entirely.
# Shell expansions supported (`~`, `$HOME`, `$XDG_CONFIG_HOME`, etc.)
kaomoji_file = "~/.config/latuicon/kaomoji.json"
Override the path with --config <path> / -c <path> / LATUICON_CONFIG.
Precedence: CLI flag > env var > config file > built-in default.
contrast (default), late, purple, mocha, gruvbox, dracula
Set with --theme <name> / -t <name> / LATUICON_THEME / theme in the config file.
Configures which tab is active when latuicon opens: all, emoji, kaomoji, unicode, or nerd-font (default: emoji).
Must be one of the tabs enabled via Tabs.
Set with --default-tab <tab> / -d <tab> / LATUICON_DEFAULT_TAB / default_tab in the config file.
fuzzy (default) β substring match, falling back to word-level Levenshtein distance so small typos still find the right iconsimple β case-insensitive substring match onlySet with --search-mode <mode> / -s <mode> / LATUICON_SEARCH / search_mode in the config file.
You can configure which tabs are enabled, and in what order. To do so, provide a list which corresponds to a subset of the 5 tabs. A tab missing from this subset will be disabled: hidden from UI and excluded from the "All" icon set.
Set with --tabs <list> / -T <list> / LATUICON_TABS / tabs in the config file.
You can override the built-in kaomoji list with your own, by providing a JSON file with this structure:
[
{ "icon": "(a)", "name": "Smile" },
{ "icon": "(β―Β°β‘Β°)β―οΈ΅ β»ββ»", "name": "table flip" }
]
If not set explicitly, latuicon looks for this file at ~/.config/latuicon/kaomoji.json.
It silently falls back to the built-in list if the custom file is missing.
Set with --kaomoji-file <path> / LATUICON_KAOMOJI_FILE / kaomoji_file in the config file.
The project was seeded from the icon-picker component of late.sh at commit 6c670683. Code written after the initial commit is not derived from that project.
The original icon picker was written by @mevanlc; the late.sh project is maintained by @mpiorowski.
A big thanks to the both of them! β¨
[!NOTE] For more details, you can read the full story of how
latuiconstarted: blog.lazyfreax.dev/blog/latuicon-icon-picker
See THIRD_PARTY_LICENSES.md for the license covering the derived code from the initial commit.
Rust
95.0%
Nix
4.9%
π΄ TUI icon picker (emojis / kaomojis / unicode / nerd fonts) ripped from late.sh
Rust
57
46 commits
updated Sep 22, 2026
A terminal UI icon picker for emoji, kaomoji, Unicode characters, and Nerd Font glyphs. Press Enter to print the selected icon to stdout; press Esc to exit without output.
[!TIP] Want to use
latuiconin Neovim? Check out thelatuicon.nvimwrapper plugin!
Run without installing:
nix run github:coko7/latuicon
Or install it into your Nix profile:
nix profile add github:coko7/latuicon
Install the latuicon bin crate:
cargo install latuicon
Install the latuicon AUR package:
$ yay -S latuicon
# or
$ paru -S latuicon
./scripts/deploy.sh
Builds a release binary and installs it to ~/.local/bin/latuicon.
The flake also provides the Rust toolchain, Clippy, rustfmt, and rust-analyzer for contributors:
nix develop
nix flake check
latuicon # default theme, opens on emoji tab
latuicon --theme mocha # specific theme
LATUICON_THEME=dracula latuicon
latuicon --default-tab unicode # sets default tab (all, emoji, kaomoji, unicode, nerd font)
LATUICON_DEFAULT_TAB=nerd latuicon
latuicon --search-mode simple # substring-only search (default: fuzzy)
LATUICON_SEARCH=fuzzy latuicon
latuicon --tabs "nerd-font,emoji,all,kaomoji,unicode" # reorder tab strip / Tab cycling
LATUICON_TABS="nerd-font,emoji,all,kaomoji,unicode" latuicon
latuicon --tabs "emoji,kaomoji" # only enable emoji and kaomoji tabs
Prints the chosen icon to stdout.
| Key | Action |
|---|---|
β / β | Navigate list |
Ctrl+K / Ctrl+J | Navigate list (vi-style) |
PgUp / PgDn | Page up / down |
Ctrl+U / Ctrl+D | Half-page up / down |
Tab / Shift+Tab | Switch tab |
Enter | Select and exit |
Esc / Ctrl+C | Exit without selecting |
| Type anything | Filter by name |
Ctrl+Z | Undo search edit |
| Mouse click | Select tab or item |
| Double-click | Select and exit |
| Scroll wheel | Scroll list |
Search supports full emacs cursor movement (Ctrl+A, Ctrl+E, Ctrl+F, Ctrl+B, Ctrl+W, Ctrl+Y, etc.).
U+XXXX / 0xXXXX hex lookup and full Unicode name scanIn my setup, I use floatty.sh to open latuicon in a floating terminal window and pipe the result to the clipboard. Here is my custom Hyprland binding for it:
bindd = $mainMod, comma, laTUIcon icon picker, exec, FLOATTY_CAPTURE_OUTPUT=1 bash floatty.sh latuicon latuicon | wl-copy
And these are the Hyprland window rules for it:
# Special rules for floating/prompt terminals
windowrule {
name = floater-kitty
match:class = ^(floater-kitty-.*)$
no_anim = on
float = on
center = on
size = 1000 800
}
windowrule {
name = floater-kitty-latuicon
match:class = floater-kitty-latuicon
size = 700 700
}
Pressing $mainMod + , opens a floating terminal with the picker; confirming an icon copies it straight to the Wayland clipboard.
You can configure latuicon in config.toml:
~/.config/latuicon/config.toml~/Library/Application Support/latuicon/config.toml%APPDATA%\latuicon\config.tomlExample:
# Set the color theme
theme = "mocha"
# Set the default tab (selected tab on launch)
default_tab = "all"
# Set the search mode:
# - simple: case-insensitive substring match only
# - fuzzy: substring match, using word-level Levenshtein distance for ignoring small typos
search_mode = "fuzzy" # or 'simple'
# Configure the enabled tabs and their display order.
# Missing tabs will not have their icons available through "All".
tabs = ["all", "emoji", "kaomoji", "unicode", "nerd-font"]
# Path to a custom kaomoji file, overrides the built-in list entirely.
# Shell expansions supported (`~`, `$HOME`, `$XDG_CONFIG_HOME`, etc.)
kaomoji_file = "~/.config/latuicon/kaomoji.json"
Override the path with --config <path> / -c <path> / LATUICON_CONFIG.
Precedence: CLI flag > env var > config file > built-in default.
contrast (default), late, purple, mocha, gruvbox, dracula
Set with --theme <name> / -t <name> / LATUICON_THEME / theme in the config file.
Configures which tab is active when latuicon opens: all, emoji, kaomoji, unicode, or nerd-font (default: emoji).
Must be one of the tabs enabled via Tabs.
Set with --default-tab <tab> / -d <tab> / LATUICON_DEFAULT_TAB / default_tab in the config file.
fuzzy (default) β substring match, falling back to word-level Levenshtein distance so small typos still find the right iconsimple β case-insensitive substring match onlySet with --search-mode <mode> / -s <mode> / LATUICON_SEARCH / search_mode in the config file.
You can configure which tabs are enabled, and in what order. To do so, provide a list which corresponds to a subset of the 5 tabs. A tab missing from this subset will be disabled: hidden from UI and excluded from the "All" icon set.
Set with --tabs <list> / -T <list> / LATUICON_TABS / tabs in the config file.
You can override the built-in kaomoji list with your own, by providing a JSON file with this structure:
[
{ "icon": "(a)", "name": "Smile" },
{ "icon": "(β―Β°β‘Β°)β―οΈ΅ β»ββ»", "name": "table flip" }
]
If not set explicitly, latuicon looks for this file at ~/.config/latuicon/kaomoji.json.
It silently falls back to the built-in list if the custom file is missing.
Set with --kaomoji-file <path> / LATUICON_KAOMOJI_FILE / kaomoji_file in the config file.
The project was seeded from the icon-picker component of late.sh at commit 6c670683. Code written after the initial commit is not derived from that project.
The original icon picker was written by @mevanlc; the late.sh project is maintained by @mpiorowski.
A big thanks to the both of them! β¨
[!NOTE] For more details, you can read the full story of how
latuiconstarted: blog.lazyfreax.dev/blog/latuicon-icon-picker
See THIRD_PARTY_LICENSES.md for the license covering the derived code from the initial commit.
Rust
95.0%
Nix
4.9%