Plans for the next bspwm edition release

  1. move away from dmenu based menus (except for networkmanager-dmenu), because they don't work well with mouse bindings. Use mygtkmenui alternatives.
  2. add a custom rofi launcher, that combines run, drun, window and file search modes in a combimode. Add possibly also web search. Bound to super key with xcape
  3. Update sterminal to handle application switcher icons properly
  4. make chromium use gtk theme and let window manager handle titlebar
  5. uncouple bspwm-scripts and limepanel
  6. add a close window button to limepanel
  7. make gtk3 applications use client side decorations
  8. adjust Compton settings to avoid tearing in chromium

Preview of the rofi launcher


Post ideas and criticism here


I saw your post in the other thread, but i still don't get the rationale behind this. I have rofi bound to super key (actually, i have everything bound to super + key) using sxhkd and it all works fine.
I have seen people complain about this here and there though.

Do you mean

  1. What is the rationale behind using xcape to bind super key?
  2. what is the rationale behind binding super key to a launcher?

The first one. More specifically, why do you need to use another program for this

@deadguy how do you bind a program to the super key (just the super key, not super key + another key)?

I have a vague memory of some issue in sxhkd repo, where baskerville adviced someone to use xcape in this kind of situation. Therefore I assumed without trying that it would interfere with other keybindings if I used only sxhkd.

Now testing it, sxhkd solution works unreliably. So, I prefer the xcape+sxhkd solution

And why bind super key alone? Well, I used gnome for a while, and got again used to the "press super and start typing" workflow. I kinda like it. Next, I'll work on adding web search mode into this combi monster... Maybe bangs would be appropriate here? Prefix a string with "s " and it does search with, with "w " so search Wikipedia, and with "a " to search arch wiki?

1 Like

Here is my new custom mode script:

# A fuzzy file-finder and opener based on dmenu 
# Requires: dmenu, xdg-utils 
if [ -z "$@" ]; then
	find ~/ -not -path '*/\.*' 2> /dev/null | sed "s+$HOME+~+g" | sort -f
	case "$(echo $@ | cut -d " " -f 1)" in
			exec $BROWSER"$(echo $@ | cut -d " " -f2-)" &> /dev/null &
			exec $BROWSER"$(echo $@ | cut -d " " -f2-)" &> /dev/null &
			exec $BROWSER"$(echo $@ | cut -d " " -f2-)"&cat=web&pl=chrome&language=english &> /dev/null &
			exec xdg-open "$(echo $@ | sed 's/^...//')" &> /dev/null &

It now works as intended, mostly. I tried to set different icons for folders, pictures and documents, but that ended up being too slow. Same thing with including hidden files.

called with

	rofi -show combi -modi combi,Files:rofind -combi-modi window,drun,run,Files:rofind -me-select-entry Mouse2 -me-accept-entry Mouse1
1 Like

So it wasn't just me that saw that.
I suppose nobody has figured out why it only happens sometimes

I've never tried this version / desktop environment before, but it looks amazing. When can we expect this to be released?

Well, the bspwm edition is already released, it uses manjaro-architect as installer, so the old iso will install the new version. The changes discussed here are pretty minimal and easy to do by hand, so you could just install it now and add the rofi. I'm now in the process of writing a package for the rofi configuration.

sorry, but i am a little behind in reading this forum.

rofi sounds really cool - especially the file search functionality.
is your custom mode script (in your last post) the "rofind" file mentioned in the command given below?
where did you put your "rofind" file?

this is my rofi:

i managed to integrate a calculator in rofi. i like this feature a lot.
i used "libqalculate" package (this needs to be installed!) and this config file (look at the "calc" module (between "run" and "window" module) in the first line):

configuration {
	modi: "combi,run,calc:qalc +u8 -nocurrencies,window,keys";
	width: 40;
	lines: 12;
/*	columns: 1;*/
	font: "Noto Mono 12";
	bw: 2;
/*	location: 0;*/
/*	padding: 5;*/
/*	yoffset: 0;*/
/*	xoffset: 0;*/
/*	fixed-num-lines: true;*/
	show-icons: true;
/*	terminal: "rofi-sensible-terminal";*/
/*	ssh-client: "ssh";*/
/*	ssh-command: "{terminal} -e {ssh-client} {host}";*/
/*	run-command: "{cmd}";*/
/*	run-list-command: "";*/
/*	run-shell-command: "{terminal} -e {cmd}";*/
/*	window-command: "xkill -id {window}";*/
/*	drun-icon-theme: ;*/
/*	disable-history: false;*/
/*	sort: false;*/
/*	levenshtein-sort: true;*/
/*	case-sensitive: false;*/
/*	cycle: true;*/
	sidebar-mode: true;
/*	eh: 1;*/
/*	auto-select: false;*/
/*	parse-hosts: false;*/
/*	parse-known-hosts: true;*/
	combi-modi: "drun,run";
	matching: "fuzzy";
/*	tokenize: true;*/
/*	m: "-5";*/
/*	line-margin: 2;*/
/*	line-padding: 1;*/
/*	filter: ;*/
	separator-style: "solid";
	hide-scrollbar: true;
/*	fullscreen: false;*/
/*	fake-transparency: false;*/
/*	dpi: -1;*/
	threads: 4;
/*	scrollbar-width: 8;*/
	scroll-method: 1;
/*	fake-background: "screenshot";*/
/*	window-format: "{w}    {i}{c}   {t}";*/
	click-to-exit: true;
/*	show-match: true;*/
/*	theme: ;*/
	color-normal: "#212121, #afafaf, #212121, #4084d6, #ffffff";
	color-urgent: "#337635, #e1e1e1, #337635, #4084d6, #ffffff";
	color-active: "#212121, #d5d5d5, #212121, #4084d6, #ffffff";
	color-window: "#212121, #000000, #4084d6";
/*	plugin-path: "/usr/lib/rofi";*/
/*	pid: "/run/user/1000/";*/
/*	display-window: ;*/
/*	display-windowcd: ;*/
/*	display-run: ;*/
/*	display-ssh: ;*/
/*	display-drun: ;*/
/*	display-combi: ;*/
/*	display-keys: ;*/
/*	kb-primary-paste: "Control+V,Shift+Insert";*/
/*	kb-secondary-paste: "Control+v,Insert";*/
/*	kb-clear-line: "Control+w";*/
/*	kb-move-front: "Control+a";*/
/*	kb-move-end: "Control+e";*/
/*	kb-move-word-back: "Alt+b";*/
/*	kb-move-word-forward: "Alt+f";*/
/*	kb-move-char-back: "Left,Control+b";*/
/*	kb-move-char-forward: "Right,Control+f";*/
/*	kb-remove-word-back: "Control+Alt+h,Control+BackSpace";*/
/*	kb-remove-word-forward: "Control+Alt+d";*/
/*	kb-remove-char-forward: "Delete,Control+d";*/
/*	kb-remove-char-back: "BackSpace,Control+h";*/
/*	kb-remove-to-eol: "Control+k";*/
/*	kb-remove-to-sol: "Control+u";*/
/*	kb-accept-entry: "Control+j,Control+m,Return,KP_Enter";*/
/*	kb-accept-custom: "Control+Return";*/
/*	kb-accept-alt: "Shift+Return";*/
/*	kb-delete-entry: "Shift+Delete";*/
/*	kb-mode-next: "Shift+Right,Control+Tab";*/
/*	kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab";*/
/*	kb-row-left: "Control+Page_Up";*/
/*	kb-row-right: "Control+Page_Down";*/
/*	kb-row-up: "Up,Control+p,ISO_Left_Tab";*/
/*	kb-row-down: "Down,Control+n";*/
/*	kb-row-tab: "Tab";*/
/*	kb-page-prev: "Page_Up";*/
/*	kb-page-next: "Page_Down";*/
/*	kb-row-first: "Home,KP_Home";*/
/*	kb-row-last: "End,KP_End";*/
/*	kb-row-select: "Control+space";*/
/*	kb-screenshot: "Alt+S";*/
/*	kb-toggle-case-sensitivity: "grave,dead_grave";*/
/*	kb-toggle-sort: "Alt+grave";*/
/*	kb-cancel: "Escape,Control+g,Control+bracketleft";*/
/*	kb-custom-1: "Alt+1";*/
/*	kb-custom-2: "Alt+2";*/
/*	kb-custom-3: "Alt+3";*/
/*	kb-custom-4: "Alt+4";*/
/*	kb-custom-5: "Alt+5";*/
/*	kb-custom-6: "Alt+6";*/
/*	kb-custom-7: "Alt+7";*/
/*	kb-custom-8: "Alt+8";*/
/*	kb-custom-9: "Alt+9";*/
/*	kb-custom-10: "Alt+0";*/
/*	kb-custom-11: "Alt+exclam";*/
/*	kb-custom-12: "Alt+at";*/
/*	kb-custom-13: "Alt+numbersign";*/
/*	kb-custom-14: "Alt+dollar";*/
/*	kb-custom-15: "Alt+percent";*/
/*	kb-custom-16: "Alt+dead_circumflex";*/
/*	kb-custom-17: "Alt+ampersand";*/
/*	kb-custom-18: "Alt+asterisk";*/
/*	kb-custom-19: "Alt+parenleft";*/
/*	kb-select-1: "Super+1";*/
/*	kb-select-2: "Super+2";*/
/*	kb-select-3: "Super+3";*/
/*	kb-select-4: "Super+4";*/
/*	kb-select-5: "Super+5";*/
/*	kb-select-6: "Super+6";*/
/*	kb-select-7: "Super+7";*/
/*	kb-select-8: "Super+8";*/
/*	kb-select-9: "Super+9";*/
/*	kb-select-10: "Super+0";*/
/*	ml-row-left: "Mouse6";*/
/*	ml-row-right: "Mouse7";*/
/*	ml-row-up: "Mouse4";*/
/*	ml-row-down: "Mouse5";*/
/*	me-select-entry: "Mouse1";*/
/*	me-accept-entry: "MouseD1";*/
/*	me-accept-custom: "Control+MouseD1";*/

i also open/close rofi with the super/meta/windows key. in order to achieve that, i have remapped this key to "F14" and i use lxqt to run the following command with my custom "F14" key:

rofi -show combi -kb-cancel F14

maybe this helps someone.
how about a new topic dedicated to "rofi" tips and tricks?


You can put it anywhere on your path (I put it in ~/.bin/rofind). When I make it into a package it goes to /usr/bin. You can also put it anywhere if use it like

  rofi -modi Files:/path/to/rofind

F14 seems an excellent candidate!

Good idea

1 Like

even if i just use this command to search files in rofi, it takes about 8 seconds (every time!) to start it.
the reason might be this:

~ > find ~/ -not -path '*/\.*' 2>/dev/null | wc -l                                                                                       

240k lines is a little heavy for rofi to load and filter. even when i use fuzzy logic (like fzf) to filter, it is still unbearably slow:
rofi -show combi -no-levenshtein-sort -matching fuzzy

it looks like file searching in rofi is not really feasible for me.

if i do file searching in fzf using the same command, it displays the file list immediately (but needs about 4 seconds (only the first time!) to display it completely):

find ~/ -not -path '*/\.*' 2>/dev/null | fzf

(the full command find ~/ -not -path '*/\.*' 2&>/dev/null | sed "s+$HOME+~+g" | sort -f | fzf also needs 8 seconds until fzf displays the file list)

Yeah, I have tested it only on fairly new $HOME on ssd, and even there delay is almost a second. A faster alternative would be needed.

1 Like


tree -nif --noreport


 echo **/*  | xargs -n1

faster than the find command for you?

it needs about 14 seconds until the list of files starts to be shown and longer than a minute to display the entire list (240k files).

the list of packages starts to be displayed immediately, but it needs about 4 seconds to be displayed.

find ~/ -not -path '*/\.*' 2>/dev/null | fzf

the list of packages starts to be displayed immediately, but it needs about 2 seconds to be displayed.
it looks like this command is the fastest. but it is still unbearably slow when using it in rofi.

in general, i think fzf is crazily optimized. i was really impressed when i did "pacui s c" (=search for files in all local and online packages, which name contains "c") the first time by accident. it needs about 10-15 seconds and then displays a list of 2 million files. you can search that list inside of fzf almost in realtime. the list is saved in a file, which is ~200mb. in order to display that list, i use the "--ansi" flag for fzf (in order to display bold font), which is not recommended by the author, because it slows down fzf noticeably.

... rofi does not have a chance against that level of performance.

Yeah, fzf is really nice, especially since it starts the menu when stdin is still open.

So, find was the fastest? For me, tree and echo were faster. Locate is supposed to be faster than find, but for me it was the slowest of them all. It seems to depend on the number of files. And maybe shell. I did echo in zsh. If dash has globbing, it would probably be even faster.

i used the zsh shell and my home directory is on a HDD.

it might not be exactly what you are looking for, but have you tested "ag" yet? i have read on multiple occasions that it is noticeably faster, but i have not tested it myself.

"ripgrep" might also be worth a try:

i am doubtful that any of those tool can be faster than "find", though. but it might be worth a try.

I'll try. I tried fd, which was supposed to be a faster find alternative, but it turned out to be slower.

1 Like

Forum kindly sponsored by