1
0
Fork 0
mirror of https://github.com/coko7/latuicon.git synced 2026-09-17 14:55:39 +00:00
😴 TUI icon picker (emojis / kaomojis / unicode / nerd fonts) ripped from late.sh
  • Rust 94.8%
  • Nix 5.1%
  • Shell 0.1%
Find a file
2026-09-08 20:57:07 +02:00
.github/workflows chore: add lockfile 2026-07-20 09:34:16 +02:00
assets docs(README): update banner image 2026-08-27 20:19:47 +02:00
data chore(icons): update Nerd Font glyphnames to v3.5.1 (2026-08-21 13:56:47) (#19) 2026-09-01 09:10:15 +02:00
nix chore: add nixflake (#6) 2026-07-28 21:36:25 +02:00
scripts build(deploy): add deploy script for simplified installation 2026-06-16 15:09:27 +02:00
src feat(cli): rename --tab to --default-tab, add -T short flag for tabs 2026-08-30 16:33:57 +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.6 (#14) 2026-08-29 16:40:11 +02:00
Cargo.toml chore: release v0.1.6 (#14) 2026-08-29 16:40:11 +02:00
CHANGELOG.md chore: release v0.1.6 (#14) 2026-08-29 16:40:11 +02:00
CLAUDE.md feat(cli): add --tab flag and LATUICON_TAB env var for startup tab selection (#8) 2026-07-31 13:57:25 +02:00
flake.lock chore: add nixflake (#6) 2026-07-28 21:36:25 +02:00
flake.nix chore: add nixflake (#6) 2026-07-28 21:36:25 +02:00
LICENSE docs: add LICENSE, THIRD_PARTY_LICENSES, and update README credits 2026-07-01 14:55:22 +02:00
README.md docs: center title because it annoyed one person 2026-09-08 20:57:07 +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!

Table of Contents

Install

Nix

Run without installing:

nix run github:coko7/latuicon

Or install it into your Nix profile:

nix profile add github:coko7/latuicon

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.

Nix development environment

The flake also provides the Rust toolchain, Clippy, rustfmt, and rust-analyzer for contributors:

nix develop
nix flake check

Usage

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.

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

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

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.

Configuration

You can configure latuicon in config.toml:

  • Linux: ~/.config/latuicon/config.toml
  • macOS: ~/Library/Application Support/latuicon/config.toml
  • Windows: %APPDATA%\latuicon\config.toml

Example:

# 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"] 

Override the path with --config <path> / -c <path> / LATUICON_CONFIG. Precedence: CLI flag > env var > config file > built-in default.

Themes

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

Set with --theme <name> / -t <name> / LATUICON_THEME / theme in the config file.

Default tab

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.

Search mode

  • fuzzy (default) — substring match, falling back to word-level Levenshtein distance so small typos still find the right icon
  • simple — case-insensitive substring match only

Set with --search-mode <mode> / -s <mode> / LATUICON_SEARCH / search_mode in the config file.

Tabs

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.

What's the relationship with late.sh?

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 latuicon started: blog.lazyfreax.dev/blog/latuicon-icon-picker

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