This is a Program Launcher written in Rust. For the moment it uses multiple different UI toolkits, namely:
- egui
- iced
- gtk
- Searches for all desktop files in most of the common linux application paths
- Can be extended using the config file (See
Configuration->app_cfg->paths
)
- Can be extended using the config file (See
- Can be used for dmenu type selection of piped in applications
I started using egui for this, which is a great toolkit, but it has some limitations. So I thought I'd try some other toolkits. This I think is a reasonably simple UI, but with some quirks (like the keyboard scrolling) which I can use to compare ease of use and feature sets.
There are several reasons I wanted a new program launcher:
Most good program launchers like Rofi, Fuzzel etc. only support either X11 or wayland. Since I still sometimes switch between X11 and Wayland I wanted a launcher, that ran on both systems
There are some cool projects like Wofi that aim to port X11 programs to Wayland. However I found at least Wofi to have some bugs with my window setup.
I tend to take on huge projects which never end. I saw this as a comparatively simple project.
Allows piping a newline separated list into Aphorme, which will replace the normal program list. Useful for custom scripts e.g. a shutdown/reboot etc. script. Echoes the selected option.
Configuration is now found in $HOME/.config/aphorme/config.toml
Options for the gui.
Enable or disable icon loading. True by default.
Which GuiFramework to used. At the moment EGUI and ICED.
Note that at the moment ICED is not compiled into the launcher by default. To do so compile with the feature iced-ui
Forces window to remain in focus even if other windows try to grab focus.
Known issues: Doesn't work with egui + wayland.
Size of font. Also affects icon size.
X and Y dimensions of the launcher. Does not affect font size.
App spanning options.
List of additional paths to search. Home directory can only be denoted by using $HOME
Defaults to an empty list.
Search default paths. If paths is defined appends them to the default.
Defaults to true
Default paths are
"/usr/share/applications",
"/usr/local/share/applications",
"$HOME/.local/share/applications",
"/var/lib/flatpak/exports/share/applications"
Contains configuration for the preferred apps (aka. the last used apps)
Maximum weight allowed. Defaults to 10.
[gui_cfg]
icon = true
ui_framework = 'EGUI'
font_size = 12
window_size = [
300,
300,
]
[app_cfg]
paths = ["$HOME/Desktop"]
The egui ScrollArea does not allow for movement using the arrow keys. This means I had to implement that myself. The method I chose (just remembering the index) does however overwrite the scrolling using the mousewheel/touchpad gestures etc. This means I had to implement the scrolling with the scrollwheel myself, which 'fights' against the default scrolling. This causes minor visual glitches but so far no actual bugs
For previous versions see CHANGELOG.md
- Direct input piping now requires the --select-from-stdin argument
- Delay before stdin handling was too short. Now requires --select-from-stdin argument to work.
- Updated libraries
- EGUIs RetainedImage is deprecated. Will be removed in a future released of Aphorme
- Added option to retain focus on the launcher. Useful if starting multiple slow launching programs
- Focus retention only working with egui + X11. egui does not support focus grabbing on wayland
- Started work on Nix support
- Updated to egui 0.26
- Nix support
- Removed erroneous error message on program launch
- Window size settable in 'gui_cfg'
- Font size settable in 'gui_cfg'
- Nix "Home Manager" path added to default paths. These should now be also searched.
- Some other Nix related simplifications