free-launch 0.2.0

A simple fuzzy launcher written in Rust.
Documentation
# Free Launch

A fuzzy launcher written in Rust to replace [Ulauncher](https://github.com/Ulauncher/Ulauncher).

Because there is no such thing as a free launch.

## Why Build This

NixOS warned me of multiple security issues in `libsoup-2.74.3` which was a dependency for [Ulauncher](https://github.com/Ulauncher/Ulauncher).

Other Rust-based launchers don't meet my requirements:

- They are not being actively developed.
- They don't run on my setup.

## Versions

Version [v0.1.0](https://github.com/symplasma/free-launch/tree/v0.1.0) was written with GTK bindings. The code is still available under the [gtk_based](https://github.com/symplasma/free-launch/tree/gtk_based) branch.

Managing additional state was proving to be overly complicated in GTK so the current version was rewritten in [egui](https://github.com/emilk/egui?tab=readme-ov-file)/[eframe](https://github.com/emilk/egui/tree/main/crates/eframe) which is proving far easier to work with. Additionally, the app seems to launch faster and do not miss the first keystroke anymore, even when typing very quickly.

### Launchers in C and Other Languages

This is far from an exhaustive list. I'm mostly focusing on Rust based launchers for Linux.

- [Ulauncher]https://github.com/Ulauncher/Ulauncher: The best option I had found, but unfortunately it depends on `libsoup-2.74.3` which is marked as insecure in [nixpkgs]https://github.com/nixos/nixpkgs.
- [albert]https://github.com/albertlauncher/albert: I was actually using this first but it had a few issues. Can't remember what they were at the moment but I left it for Ulauncher.
- [rofi]https://github.com/davatorium/rofi: Not a big fan of the interface on this one, even though it's very popular.
- [Krunner]https://userbase.kde.org/Plasma/Krunner: This looks decent, worth trying for those on KDE. Actually, it should be usable on NixOS even without running KDE as the window manager.

### Rust Based Launchers

- [Loungy]https://github.com/MatthiasGrandl/loungy: This looks really excellent but: "Loungy is currently not in active development. As a new dad, my development resources have dwindled."
- [gauntlet]https://github.com/project-gauntlet/gauntlet: Recommended by Matthias Grandl, creator of Loungy but: "Web-first cross-platform application launcher with React-based plugins". No thank you.
- [kickoff]https://github.com/j0ru/kickoff: Looks great but panics with: `layer shell is not available: NotPresent`
- [elbey]https://github.com/kgilmer/elbey: Incomplete, but worth keeping an eye on.
- [raffi]https://github.com/chmouel/raffi: Fully config based. Does not auto-discover apps.
- [jolly]https://github.com/apgoetz/jolly: Looks good but panics with: `Failed to initialize any backend! Wayland status: NoWaylandLib`
- [dlauncher]https://github.com/diced/dlauncher: Based on Ulauncher which sounds good. Just need to get it to compile...
- [sklauncher]https://github.com/miyakogi/sklauncher: Not bad, but I don't love the interface, even though it reminds me of [fzf]https://github.com/junegunn/fzf/[skim]https://github.com/skim-rs/skim/[picleo]https://github.com/symplasma/picleo which is kinda awesome.
- [fuzzle]https://github.com/Psykopear/fuzzle: Looks good but is not on [crates.io]https://crates.io/search?q=fuzzle.

More Rust based launchers can be found here for those that want to keep digging: [‘fuzzy launcher’ search on Lib.rs](https://lib.rs/search?q=fuzzy+launcher).

## Features

- [x] Written entirely in Rust
- [x] Show all `*.desktop` files and allow launching them
- [x] Show all executables in path and allow launching them
- [ ] Allow launching of shell aliases and functions?
- [x] Fast launch, but could always be faster...
- [ ] Load items in separate thread
- [ ] Daemon mode with visibility switch command like Ulauncher for instantaneous invocation
- [ ] System commands: lock screen, sleep, hibernate, reboot, shutdown
- [ ] Interactive help screen
- [ ] Run or raise functionality
- [ ] Custom commands via a config file
- [ ] Browser search templates according to config
- [ ] Synonyms/keywords from config
- [ ] Frecency based sorting
- [ ] Show running apps
- [ ] Show running windows
- [ ] Browser tabs
- [ ] Path navigation with autocomplete
- [ ] Actions besides launch via Tab
- [ ] Integration with Symplasma