this post was submitted on 29 Sep 2024
66 points (97.1% liked)

Linux

48315 readers
750 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

Looking for a good app launcher for Linux. Currently looking for something for Arch and I see there's a lot of options liks rofi and wofi. What are your favourite app launchers and why?

you are viewing a single comment's thread
view the rest of the comments
[–] ctr1@fl0w.cc 4 points 1 month ago (1 children)

I use fzf with a popup terminal:

# example for i3
bindsym $mod+Return exec --no-startup-id kitty -T _menu_ -e bash -c 'ls $HOME/.local/bin/ | fzf | xargs -r -I{} i3-msg -t command exec $HOME/.local/bin/{}'
for_window [title="_menu_"] floating enable
for_window [title="_menu_"] resize set 600 800

I like this approach because it's simple and configurable. I prefer to see only the symlinks/scripts that I put in my local bin folder, but it can easily be extended to support .desktop files, multiple folders, filtering, etc.

[–] thingsiplay@beehaw.org 4 points 1 month ago* (last edited 1 month ago) (1 children)

I like these self made scripts. Some ideas to improve this: a) instead ls, use find command if you want use its output as input in another program (will yield fullpath too), b) fzf has a preview functionality, which I like a lot to use when it comes to directories or script files. As for the run command, I'm not sure why you use xargs and what i3-msg is needed for. Here is an alternative way.

(Edit: I always forget that beehaw will convert my ampersand to &. Have this in mind if you read the below code.)

bash -c 'cd "${HOME}/.local/bin"; path="$(find . -maxdepth 1 -type f -executable -printf "%f\n" | fzf --preview "cat {}")" && "${path}"'

below same command in a bit more readable standalone script:

#!/usr/bin/env bash
cd "${HOME}/.local/bin" || exit 1
path="$( \
    find . -maxdepth 1 -type f -executable -printf "%f\n" | \
    fzf --preview "cat {}" \
)" && "${path}"

The biggest problem with fzf is, that scripts that need an argument are not covered here. One could either use the input string from fzf as arguments or like that, or an optional input after fzf selection.

[–] ctr1@fl0w.cc 2 points 1 month ago

Ah nice! Thanks for the suggestion. Yeah --preview is a great feature that is good to remember.

And true, it's better to use find -executable than ls. Although in my case I would use -type f -o -type l since I want to include symlinks (often I will cd into my local bin folder and ln -s $(which ) to add it to my launcher). I'm using ls since I only put executables in there and using relative file paths so that it's nicer to look at. But cd or sed would work as well

Yeah the xargs + i3-msg part is a bit clunky but I'm not sure what else to do, since the terminal window needs to close immediately, which prevents the application from running. I tried a few variations with nohup and launching in the background, but haven't found another solution. But I'm sure there's a way