A multi-page fuzzy launcher for your terminal, written in Rust.

Overview
 
 
preview

fr33zmenu

A multi-page fuzzy launcher for your terminal, written in Rust.

Supports theming and multiple keybind schemes, including basic vim keybinds.

Installation      Usage      Integration      Configuration
 
 

Installation

If you don't have Rust, follow the installation instructions here.

Run the following command to install fr33zmenu:

cargo install fr33zmenu

Usage

Run the following command to view help: fr33zmenu --help

If the command isn't found, you will need to add ~/.cargo/bin to your path.

echo 'export PATH=$PATH:~/.cargo/bin' >> ~/.bashrc
source ~/.bashrc

If you're using zsh, replace ~/.bashrc with ~/.zshrc.

Integration

This guide will demonstrate how to integrate fr33zmenu with your window manager. You'll need to adapt this to your terminal and window manager (obviously), but for this guide I'm using Hyprland (wayland compositor) and Kitty (terminal).

1. Create a configuration file

See the Configuration section below. I saved mine as ~/.config/fr33menu/menu.toml.

2. Create a script for your window manager to execute

I saved mine as ~/scripts/launcher.

#!/bin/sh

fr33zmenu ~/.config/fr33zmenu/menu.toml \
    --exec-with "nohup hyprctl dispatch exec" \
    --transient

3. Configure window manager / compositor

Through keybinds and window rules, it's possible to make a terminal window behave exactly like a graphical launcher. My goal with these settings is to have the window pop up in the center of the screen at a fixed sized.

The following configuration was added to my ~/.config/hypr/hyprland.conf.

$launcher = kitty --class fr33zmenu ~/scripts/launcher
bind = $mainMod, SPACE, exec, $launcher

windowrulev2 = float, class:fr33zmenu
windowrulev2 = size 600 400, class:fr33zmenu
windowrulev2 = center, class:fr33zmenu

If your terminal doesn't support opening with a provided class, you can use the title of the window instead.

Configuration

  • Supported formats: toml json yaml ini ron json5

Configuration is supported for theming, keybinds, and menus. There is no preset config directory, as the path to your config file will be passed as a positional argument. Even so, you may want to store your config(s) in ~/.config/fr33zmenu for the sake of organization.

Note: All configuration options must reside in the one file passed to the program. There is no support for providing or importing multiple config files (yet?)

Menus

Required

A menu defines the interactive content of the program. Each menu is displayed as a tab on the first line of the interface, and the entries of the current menu are displayed underneath the menu's prompt.

Example

[menus.programs]         # Define a new menu named "programs"
order  = -1              # Ensure it is the first menu
prompt = "launch -> "    # Give it a cool prompt

[menus.programs.entries] # Define the menu's entries
# ↓ Name      ↓ Value
emacs      = "emacsclient -c -a emacs"
librewolf  = "librewolf --browser"
strawberry = "strawberry"
gimp       = "gimp --new-instance"
gajim      = "gajim --show"

[menus.power]            # Another menu
prompt = "power -> "

[menus.power.entries]
shutdown = "shutdown now"
reboot   = "reboot"

Keybinds

Optional - Defaults will be loaded if this section is absent in your config.

  • Keybinds must include at exactly one non-modifier key.
  • One command can have many keybinds, but one keybind cannot be bound to multiple commands.
  • Keybinds are case-insensitive.

Named keys

  • Modifier keys
    • shift
    • control | ctrl
    • alt
    • backspace | back
    • enter | return | ret
  • Non-modifier keys
    • left
    • right
    • up
    • down
    • home
    • end
    • pageup | pgup
    • pagedown | pgdn
    • tab
    • delete | del
    • insert
    • escape | esc

Example (default keybinds)

[keybinds]
exit        = [ "escape", "ctrl+c" ]
submit      = [ "enter" ]
clear       = [ "shift+del", "ctrl+del" ]
delete_next = [ "delete" ]
delete_back = [ "backspace" ]
input_next  = [ "right" ]
input_back  = [ "left" ]
entry_next  = [ "down", "ctrl+down", "ctrl+j", "tab" ]
entry_back  = [ "up", "ctrl+up", "ctrl+k", "shift+tab" ]
menu_next   = [ "ctrl+right", "ctrl+l" ]
menu_back   = [ "ctrl+left", "ctrl+h" ]

Theme

Optional - Defaults will be loaded if this section is absent in your config.

All text in the interface can be themed. Every value in the theme accepts the following properties:

  • fg - Foreground / text color
  • bg - Background color
  • attrs - A comma separated string of text style attributes, e.g. bold, italic, underlined
    • bold
    • dim
    • italic
    • underlined
    • hidden

Any valid CSS color string is accepted, but alpha values will have no effect.

Example (default theme)

[theme]
prompt             = { fg = "#a6e3a1", attrs = "bold" }
input              = { fg = "#cdd6f4" }
entry_name         = { fg = "#cdd6f4" }
entry_value        = { fg = "#6c7086" }
entry_match        = { fg = "#74c7ec", attrs = "bold" }
entry_hidden       = { fg = "#45475a" }
entry_cursor       = { fg = "#1e1e2e", bg = "#cdd6f4", attrs = "bold" }
entry_cursor_match = { fg = "#1e1e2e", bg = "#74c7ec", attrs = "bold" }
menu_name          = { fg = "#f38ba8" }
menu_cursor        = { fg = "#1e1e2e", bg = "#f38ba8", attrs = "bold" }
overflow           = { fg = "#f9e2af", attrs = "bold" }
You might also like...
Bullet Force launcher and MITM-based hax

BulletForceHaxV2 This repository holds a launcher and MITM-based cheat for Bullet Force. It allows you both a convenient way to launch the game withou

Bullet Force launcher and MITM-based hax

BulletForceHaxV2 This repository holds a launcher and MITM-based cheat for Bullet Force. It allows you both a convenient way to launch the game withou

Honkers launcher for Linux with automatic patching and telemetry disabling
Honkers launcher for Linux with automatic patching and telemetry disabling

Honkers launcher for Linux with automatic patching and telemetry disabling

A small program which makes a rofi game launcher menu possible by creating .desktop entries for games
A small program which makes a rofi game launcher menu possible by creating .desktop entries for games

rofi-games A small program which makes a `rofi` game launcher menu possible by creating `.desktop` entries for games Installation Manual Clone repo: g

The Honkers Railway launcher for Linux with automatic patching and telemetry disabling
The Honkers Railway launcher for Linux with automatic patching and telemetry disabling

The Honkers Railway launcher for Linux with automatic patching and telemetry disabling

AlterWare game modification updater & launcher

alterware-launcher Download latest release Unpack the archive and place alterware-launcher.exe in the game directory Run alterware-launcher.exe, after

A self-contained, unopinionated, fast and lightweight executable launcher.

Kickoff 🥾 A self-contained, unopinionated, fast and lightweight executable launcher. Supported Platforms Platform Host Target aarch64-apple-macos-non

ask.sh: AI terminal assistant that can read and write your terminal directly!
ask.sh: AI terminal assistant that can read and write your terminal directly!

ask.sh: AI terminal assistant that read from & write to your terminal ask.sh is an AI terminal assistant based on OpenAI APIs such as GPT-3.5/4! What'

Print your git contributions in your terminal, blazingly fast
Print your git contributions in your terminal, blazingly fast

Takoyaki Blazingly fast git contribution graph in your terminal Features ✔️ Customizable ✔️ Plugins to support a bunch of cloud based git repositories

Fuzzy Index for Python, written in Rust. Works like error-tolerant dict, keyed by a human input.

FuzzDex FuzzDex is a fast Python library, written in Rust. It implements an in-memory fuzzy index that works like an error-tolerant dictionary keyed b

Tomasz bla Fortuna 8 Dec 15, 2022
A launcher/menu program written in Rust for wlroots-based Wayland compositors

tehda tehda (ᴛᴀʏ-dah /ˈteɪ̯.dæ/ or /teh.da/; Finnish for "to do, perform, execute") is a launcher/menu program, like dmenu, rofi, or wofi, written in

Nadia 4 Jan 29, 2023
Skim - Fuzzy Finder in rust!

Life is short, skim! Half of our life is spent on navigation: files, lines, commands… You need skim! It is a general fuzzy finder that saves you time.

Takayuki Maeda 0 May 16, 2021
Fast TLSH-compatible Fuzzy Hashing Library in pure Rust

fast-tlsh: Fast TLSH-compatible Fuzzy Hashing Library in pure Rust TLSH stands for Trendmicro Locality Sensitive Hash. TLSH can be used to detect simi

Tsukasa OI 4 Mar 27, 2024
Save cli commands and fuzzy find them later

crow - cli command memorizer What is crow? | Installation | Usage | FAQ What is crow? crow (command row) is a CLI tool to help you memorize CLI comman

sandstorm 7 Feb 17, 2022
Fzf - A command-line fuzzy finder

fzf is a general-purpose command-line fuzzy finder. It's an interactive Unix filter for command-line that can be used with any list; files, command hi

Junegunn Choi 49.1k Jan 8, 2023
🧠 A command-line utility for switching git branches more easily. Switch branches interactively or use a fuzzy search to find that long-forgotten branch name.

git-smart-checkout A git command extension for switching git branches more efficiently. About Interactively switch branches or fuzzy search for that f

Cezar Craciun 51 Dec 29, 2022
A simple, modern fuzzy finder tool to run examples in a Cargo project.

cargo-rx cargo-rx is a simple, modern Runner for Examples in a Cargo project. This crate provides a single executable: rx. Basically anywhere you woul

Ritvik Nag 14 Dec 2, 2022
Integrate Mcfly with fzf to combine a solid command history database with a widely-loved fuzzy search UI

McFly fzf integration Integrate McFly with fzf to combine a solid command history database with a widely-loved fuzzy search UI Features: Advanced hist

null 11 Jan 25, 2023
Open-source Fortnite launcher, built in Rust.

Instigator Instigator is a basic command-line Fortnite launcher I've been working on for the last day and a bit. It is extremely basic. It injects con

jacksta 9 Feb 3, 2023