# 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