1
0
Fork 0
mirror of https://github.com/coko7/latuicon.git synced 2026-07-20 13:05:08 +00:00
😴 TUI icon picker (emojis / kaomojis / unicode / nerd fonts) ripped from late.sh
  • Rust 99.8%
  • Shell 0.2%
Find a file
github-actions[bot] 1b1124afe9
chore: release v0.1.2 (#3)
* chore: release v0.1.2

* docs: update CHANGELOG for version 0.1.2

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Coko <91132775+coko7@users.noreply.github.com>
2026-07-20 09:48:10 +02:00
.github/workflows chore: add lockfile 2026-07-20 09:34:16 +02:00
assets docs: update README 2026-07-08 06:01:52 +02:00
data refactor(data): move icon data files to dedicated data/ directory 2026-06-16 15:05:25 +02:00
scripts build(deploy): add deploy script for simplified installation 2026-06-16 15:09:27 +02:00
src feat(icon-picker): add "All" tab combining all icon sources 2026-07-03 07:02:14 +02:00
.gitignore chore: add lockfile 2026-07-20 09:34:16 +02:00
build.rs refactor(data): move icon data files to dedicated data/ directory 2026-06-16 15:05:25 +02:00
Cargo.lock chore: release v0.1.2 (#3) 2026-07-20 09:48:10 +02:00
Cargo.toml chore: release v0.1.2 (#3) 2026-07-20 09:48:10 +02:00
CHANGELOG.md chore: release v0.1.2 (#3) 2026-07-20 09:48:10 +02:00
CLAUDE.md feat(icon-picker): add "All" tab combining all icon sources 2026-07-03 07:02:14 +02:00
LICENSE docs: add LICENSE, THIRD_PARTY_LICENSES, and update README credits 2026-07-01 14:55:22 +02:00
README.md docs(readme): mention AUR package 2026-07-20 09:42:04 +02:00
THIRD_PARTY_LICENSES.md docs: add LICENSE, THIRD_PARTY_LICENSES, and update README credits 2026-07-01 14:55:22 +02:00

😴 latuicon

latuicon, the late TUI icon picker: a rip-off of the late.sh embedded icon picker.

latuicon-demo

Crates info License: MIT Rust Tests

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 latuicon in Neovim? Check out the latuicon.nvim wrapper plugin!

What's different from late.sh

The initial commit bootstrapped from the icon-picker component of late.sh (specifically code up until 6c670683). All development since then is independent.

Changes and additions:

  • Fuzzy search 🪄 — word-level Levenshtein matching so small typos still find the right icon (e.g. tumbs up👍)
  • Data files 📂 — emoji, kaomoji, unicode, and nerd font data extracted into editable JSON files under data/
  • Centered layout 🎯 — subtitle under the title, icon-set block sized to content, search and icon list horizontally inset
  • Standalone binary 📦 — packaged as latuicon, decoupled from the late.sh monorepo

Designed for shell capture:

icon=$(latuicon)

Install

Cargo

Install the latuicon bin crate:

cargo install latuicon

Arch Linux (AUR)

Install the latuicon AUR package:

$ yay -S latuicon
# or
$ paru -S latuicon

Build from source

./scripts/deploy.sh

Builds a release binary and installs it to ~/.local/bin/latuicon.

Usage

latuicon                          # default theme
latuicon --theme mocha            # specific theme
ICON_PICKER_THEME=dracula latuicon

Prints the chosen icon to stdout on confirm, nothing on Esc/Ctrl+C.

Desktop integration example (Hyprland)

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

Keybindings

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

Themes

contrast (default), late, purple, mocha, gruvbox, dracula

Tabs

  • All — every icon from every other tab, combined into one searchable set
  • Emoji — common emoji + full emoji set
  • Kaomoji — curated kaomoji collection
  • Unicode — common symbols + Box Drawing, Geometric Shapes, Arrows, Math Operators, Dingbats; search supports U+XXXX / 0xXXXX hex lookup and full Unicode name scan
  • Nerd Font — common glyphs + full Nerd Font glyph set

Credits

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.

See THIRD_PARTY_LICENSES.md for the license covering the derived code from the initial commit.