Skip to content
 
 

Repository files navigation

Flemozi

A simple✨, fast⚡ and lightweight🪶 emoji picker for desktop operating systems🫶
Available for Linux🐧, Windows🪟 and macOS🍎.

🍴 Fork additions (Linux / Wayland)

This fork of Flemozi adds Windows-style "paste on click" behaviour to the emoji, emoticon and GIF pickers, plus a couple of Linux quality-of-life fixes. Built from the v0.2.0 (Flutter) release.

Windows Win + . style auto-paste

On upstream Flemozi you click an emoji, it goes to the clipboard, the window closes, and you paste it yourself. Here, selecting an emoji / emoticon / GIF pastes it straight into the window you were typing in, and the picker stays open so you can insert several in a row — just like the Windows emoji picker. Press Esc (or close the window) when you are done.

Wayland does not let an application type into another window, so this uses ydotool (a kernel uinput virtual input device) to send Ctrl+V to the previously focused window. Requirements:

  • ydotool plus a running ydotoold (for example a systemd --user service), and read/write access to /dev/uinput.
  • The focus hand-off delay (default 160 ms) is tunable without rebuilding: write a number of milliseconds to ~/.config/flemozi/paste_delay_ms, or set the FLEMOZI_PASTE_DELAY_MS environment variable.

Runtime GIF API key (no baked-in keys)

The GIF tab no longer depends on API keys compiled into the binary (those break the moment they are revoked). Provide your own free Giphy key at runtime:

  • write it to ~/.config/flemozi/giphy.key, or set GIPHY_API_KEY.

No rebuild is needed to change it. Tenor is disabled by default; add a key at ~/.config/flemozi/tenor.key (or TENOR_API_KEY) to re-enable it.

GIF search TLS fix

Flutter Linux binaries do not bundle a trusted-root certificate store, so HTTPS requests can fail with CERTIFICATE_VERIFY_FAILED on distros whose CA bundle Dart cannot locate (for example a binary built on Ubuntu running on Fedora). This fork loads the system CA bundle explicitly at startup, so the GIF tab can reach Giphy.

Animated GIF paste in Chromium apps

Chromium-based apps (Messenger in a browser, Caprine, Discord) turn clipboard image data into a still bitmap, so pasted GIFs lost their animation. GIFs are now saved to ~/Downloads/.flemozi/ and copied as a file (text/uri-list), which these apps upload as the real animated .gif. ~/Downloads is used so Flatpak browsers can read it; files older than a day are cleaned up.

No secrets or API keys are included in this repository.

Highlights🚀

  • Not Electron based🙃
  • Configurable Global🪩 shortcut🩳✂️ to open the emoji picker
  • Launches on system startup, runs in the background and can invoked from anywhere👻
  • Supports GIFs📼, stickers🎟️ and ASCII emojis👴 too
  • Copies the selected emoji to the clipboard📋 and automatically closes the picker obviously🤦‍♂️

Installation📦

Linux Windows macOS
AppImage⚙️ exe🪟 DMG💿
Debian🍥/Ubuntu⭕ WinGet🪟🌈 (Soon) Homebrew🍺 (Soon)
Fedora🎩/OpenSuse🦎 Chocolatey🍫 (Soon)
Tarball
Flatpak📦 (Soon)
AUR🌁
yay -S flemozi

Sponsor☕💘

"Buy Me A Coffee"

Screenshots

One Two Three

Contributing🤝

Contributions are always welcome! Please read the contribution guidelines first.

Building from source🛠️

Prerequisites📋

  • Flutter SDK v3.7.0 or higher
  • Rust v1.65.0 or higher

Building🏗️

You'll need your own giphy and tenor api keys. Create a .env file in the root of the project and fill following the .env.example file

$ git clone https://github.com/KRTirtho/flemozi.git
$ cd flemozi
$ flutter pub get
$ flutter config --enable-<linux/windows/macos>-desktop
$ flutter pub run build_runner build --delete-conflicting-outputs
$ flutter build <linux/windows/macos>

Credits🙇

Acknowledgements🙏

Libraries Credit📚

Click to expand! (Reveal those gems💎)
  • cached_network_image - Flutter library to load and cache network images. Can also be used with placeholder and error widgets.
  • collection - Collections and utilities functions and classes related to collections.
  • flutter_hooks - A flutter implementation of React hooks. It adds a new kind of widget with enhanced code reuse.
  • fuzzywuzzy - An implementation of the popular fuzzywuzzy package in Dart, to suit all your fuzzy string matching/searching needs!
  • google_fonts - A Flutter package to use fonts from fonts.google.com. Supports HTTP fetching, caching, and asset bundling.
  • hooks_riverpod - A simple way to access state from anywhere in your application while robust and testable.
  • http - A composable, multi-platform, Future-based API for HTTP requests.
  • riverpod - A simple way to access state from anywhere in your application while robust and testable.
  • window_manager - This plugin allows Flutter desktop apps to resizing and repositioning the window.
  • launch_at_startup - This plugin allows Flutter desktop apps to Auto launch on startup / login.
  • package_info_plus - Flutter plugin for querying information about the application package, such as CFBundleVersion on iOS or versionCode on Android.
  • shared_preferences - Flutter plugin for reading and writing simple key-value pairs. Wraps NSUserDefaults on iOS and SharedPreferences on Android.
  • alfred - A performant, expressjs like web server / rest api framework thats easy to use and has all the bits in one place.
  • system_theme - A plugin to get the current system theme info. Supports Android, Web, Windows, Linux and macOS
  • flutter_svg - An SVG rendering and widget library for Flutter, which allows painting and displaying Scalable Vector Graphics 1.1 files.
  • url_launcher - Flutter plugin for launching a URL. Supports web, phone, SMS, and email schemes.
  • fl_query - Asynchronous data caching, refetching & invalidation library for Flutter
  • fl_query_hooks - Elite flutter_hooks compatible library for fl_query, the Asynchronous data caching, refetching & invalidation library for Flutter
  • giphy_api_client - A Giphy API Client for Dart compatible Web, Flutter, and server-side dart
  • flutter_dotenv - Easily configure any flutter application with global variables using a `.env` file.
  • json_annotation - Classes and helper functions that support JSON code generation via the `json_serializable` package.
  • visibility_detector - A widget that detects the visibility of its child and notifies a callback.
  • pasteboard - A flutter plugin which could read image,files from clipboard and write files to clipboard.
  • flutter_cache_manager - Generic cache manager for flutter. Saves web files on the storages of the device and saves the cache info using sqflite.
  • super_clipboard - Comprehensive clipboard access package for Flutter. Supports reading and writing of rich text, images and other formats.
  • path - A string-based path manipulation library. All of the path operations you know and love, with solid support for Windows, POSIX (Linux and Mac OS X), and the web.
  • easy_debounce - An extremely easy-to-use method call debouncer package for Dart/Flutter.
  • uuid - RFC4122 (v1, v4, v5) UUID Generator and Parser for all Dart platforms (Web, VM, Flutter)
  • shimmer - A package provides an easy way to add shimmer effect in Flutter project
  • hive_flutter - Extension for Hive. Makes it easier to use Hive in Flutter apps.
  • auto_size_text - Flutter widget that automatically resizes text to fit perfectly within its bounds.
  • path_provider - Flutter plugin for getting commonly used locations on host platform file systems, such as the temp and app data directories.
  • flutter_lints - Recommended lints for Flutter apps, packages, and plugins to encourage good coding practices.
  • melos - A tool for managing Dart & Flutter repositories with multiple packages (monorepo). Supports automated versioning via Conventional Commits. Inspired by JavaScripts Lerna package.
  • json_serializable - Automatically generate code for converting to and from JSON by annotating Dart classes.
  • build_runner - A build system for Dart code generation and modular compilation.
  • flutter_launcher_icons - A package which simplifies the task of updating your Flutter app's launcher icon.
  • html - APIs for parsing and manipulating HTML content outside the browser.
  • pub_api_client - An API Client for Pub to interact with public package information.
  • window_size - Allows resizing and repositioning the window containing Flutter.
  • hotkey_manager - This plugin allows Flutter desktop apps to defines system/inapp wide hotkey (i.e. shortcut).

License📜

This project is licensed under the GPLv3 license.

  Copyright© 2023 Kingkor Roy Tirtho

About

Flemozi fork: Windows Win+. style auto-paste — clicking an emoji/GIF pastes into your last active window and the picker stays open for multiple inserts (Linux/Wayland via ydotool). GIF key read at runtime, no baked-in keys.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages