17 KiB
Rofi menus
A variety of convenient menus made mainly using rofi and its dmenu emulation.
A video showcasing the menus in action is available here.
Here is a showcase of the current colorschemes.
List of menus:
- Apps: call rofi in its drun mode to start desktop programmes
- i3 keybindings: quick way to list out all the keybindings you defined for i3wm
- i3 layout: change the current layout of i3wm
- MPD: control the song you play through mpd (the Music Player Daemon)
- Network: Network Manager menu (a themed version of this original script)
- Network Manager VPN: manage your active vpn connection in a few keystrokes
- Power: a classic power menu
- Screenshot: take screenshots using either scrot or maim
- Prompt: a simple customisable prompt to ask for confirmation before executing some given instruction
Requirements
Fonts
The menus uses 3 fonts:
- Comfortaa (preview and source) used in appsmenu, mpdmenu, nmvpnmenu for the normal text
- Hurmit Nerd Font Mono (preview and source) used in all the menus for the icons
- RobotoMono Nerd Font (preview and source) used in networkmenu for the monospace text
If you wish to change them dig in the resolution file you are using: ~/.config/rofi/themes/shared/resolutions/<your_resolution>.rasi.
Warning: changing the @icon-font variable to another font has a high chance of messing most menus' layout.
Packages
First of all make sure you have rofi installed:
# Arch / Arch-based
pacman -S rofi
# Debian / Ubuntu
apt-get install rofi
# Fedora
dnf install rofi
These menus have been made on my machines (1366x768 and 1920x1080 resolutions) with rofi version 1.5.4, they might not work on earlier version although it should be fine.
Dependencies for each menus
| Menu | Package(s) | Note(s) |
|---|---|---|
| Apps | Paper icon theme | Any icon theme would do the job, you can change this in ~/.config/rofi/config.rasi |
| i3 keybindings | i3 and awk |
awk is used to parse the i3 config file |
| i3 layout | i3 |
- |
| MPD | mpd and mpc |
mpc is used to interact with mpd |
| Network | python |
This script comes from here, so if you encounter problems, check the issues there |
| VPN | nmcli, grep, sed and bash >= 4 |
The mapfile bash command is used, so bash >= 4 is necessary |
| Power | systemctl, light-locker, mpc |
By default systemctl is used for most actions, light-locker is used for locking/sleeping, i3-msg exit is used to log out and mpc/amixer are used to pause and mute the music when going to sleep, you might want to change these commands to match your setup |
| Screenshot | scrot or maim (+ xdotool and xclip) |
- |
Installation
After installing please make sure you're using the right resolution, please see this section.
Arch Linux
The package is available in the Arch User Repository as rofi-menus-git.
yay -S rofi-menus-git
You can then call the menus with these commands:
rofi-appsmenu
rofi-i3layout
rofi-mpd
rofi-network
rofi-power
rofi-scrot
rofi-vpn
Manual installation
# 1. Go in rofi's config folder
cd ~/.config/rofi
# 2. Copy this repo
git clone https://gitlab.com/vahnrr/rofi-menus.git
# 3. Make sure the scripts are executables
cd rofi-menus && chmod +x scripts/*
# 4. Copy necessary files to the right location
cp -r scripts themes config.rasi ~/.config/rofi
cp -r networkmanager-dmenu ~/.config
# 5. Clean up rofi's config folder
cd .. && rm -r rofi-menus
# 6. Call the scripts (from the scripts folder)
cd scripts
./appsmenu.sh
# (or from anywhere)
. ~/.config/rofi/scripts/appsmenu.sh
Note: you might want to summon these menus simply by calling the appsmenu command, if so, please follow these instructions.
Troubleshooting
First, check that you have everything (fonts and packages) you need for the menus you want to use in the Requirements section. Then check your rofi version, I can confirm that it works well with rofi >= 1.5.4, so make sure you have at least this version.
Menus don't show or only show on part of the screen
Currently these menus only support the following resolutions:
- 1366x768
- 1920x1080
So make sure you're using the right resolution in ~/.config/rofi/themes/shared/settings.rasi. If you have a resolution that is not included in the above list, check this section.
Don't find any solution? If you checked all the above then consider opening an issue on this repository.
Tweaks
Simpler menu summoning
You can add your scripts folder to your $PATH variable so that entering appsmenu in the terminal (or executing this command) will summon the appsmenu.
The way I do it:
- I store a symlink to my scripts in ~/.local/bin
- I then add this folder to my
$PATHusing the ~/.profile file
mkdir ~/.local/bin
# Creates the symlinks to the scripts
ln -s ~/.config/rofi/scripts/appsmenu.sh ~/.local/bin/appsmenu
ln -s ~/.config/rofi/scripts/i3keybindingsmenu.sh ~/.local/bin/i3keybindingsmenu
ln -s ~/.config/rofi/scripts/i3layoutmenu.sh ~/.local/bin/i3layoutmenu
ln -s ~/.config/rofi/scripts/maimmenu.sh ~/.local/bin/maimmenu
ln -s ~/.config/rofi/scripts/mpdmenu.sh ~/.local/bin/mpdmenu
ln -s ~/.config/rofi/scripts/networkmenu.py ~/.local/bin/networkmenu
ln -s ~/.config/rofi/scripts/nmvpnmenu.sh ~/.local/bin/nmvpnmenu
ln -s ~/.config/rofi/scripts/powermenu.sh ~/.local/bin/powermenu
ln -s ~/.config/rofi/scripts/promptmenu.sh ~/.local/bin/promptmenu
ln -s ~/.config/rofi/scripts/scrotmenu.sh ~/.local/bin/scrotmenu
# Add our folder to the $PATH variable
echo "PATH=$PATH:~/.local/bin" >> ~/.profile
Note: after doing this your $PATH variable won't be updated, so you will need to log out and then back in to be able to summon the menus this way.
By changing the second path given to ls you can change the command to type to summon the menu.
Change the colorscheme
Here is a showcase of the current colorschemes. The files are stored in ~/.config/rofi/themes/shared/colorschemes. To change the active colorscheme simply change the import line in ~/.config/rofi/themes/shared/settings.rasi.
If you wish to change the colorscheme for only one specific menu, you can add the line bellow to the ~/.config/rofi/themes/.rasi file.
@import "shared/colorschemes/<colorscheme-name>.rasi"
Note: it needs to be added after the @import "shared/settings.rasi" otherwise it would not overwrite the theme from the settings file.
Monitor resolution
By default the menus will use the 1920x1080 resolution. The files are stored in ~/.config/rofi/themes/shared/resolutions. To change the active resolution simply change the import line in ~/.config/rofi/themes/shared/settings.rasi.
If you don't find the resolution you are using, then please check this section.
Use in i3
You can call the scripts by giving their fulls paths like ~/.config/rofi/scripts/<script-name>.sh or follow these instructions to call the menus in one word.
Then add these lines to your i3 config file:
set $mod Mod4
set $Alt Mod1
bindsym $mod+d exec --no-startup-id appsmenu
bindsym $mod+l exec --no-startup-id i3keybindingsmenu
bindsym $mod+l exec --no-startup-id i3layoutmenu
bindsym $mod+m exec --no-startup-id mpdmenu
bindsym $mod+n exec --no-startup-id networkmenu
bindsym $Alt+v exec --no-startup-id nmvpnmenu
bindsym $mod+p exec --no-startup-id powermenu
bindsym $mod+s exec --no-startup-id maimmenu
Parsable keybindings in i3
The i3 keybindings menu parses your config file (the active one so you will need to restart i3 to get changes listed) using awk.
It has been designed to parse my config file, but you may write yours a different way, which might means the parser won't do a great job.
The parser looks for a comment (line starting with # ).
Then sees if the line after is a keybinding by checking if it starts with bindsym .
If it does then it will create an entry in the list.
If there is one comment and several keybindings lines following it.
The parser will create an entry for every keybinding but they will have the same description (the comment).
However if your comment contains $num, this word will be replaced by the number found in the keybinding, e.g.:
# Focus workspace $num
bindsym $Mod+1 workspace $ws1
bindsym $Mod+2 workspace $ws2
bindsym $Mod+3 workspace $ws3
Will create the following entries:
- Mod+1 Focus workspace 1
- Mod+2 Focus workspace 2
- Mod+3 Focus workspace 3
Note: the $ character is stripped from keybindings, so $Mod turns to Mod, $Alt to Alt, etc.
The parser also finds and lists i3's modes and their specific keybindings. As long as your mode definition has this shape:
# Resize mode
bindsym $Mod+r mode "resize"
mode "resize" {
# Shrink the focused window's width
bindsym Left resize shrink width 4
# Grow the focused window's height
bindsym Down resize grow height 4
# Shrink the focused window's height
bindsym Up resize shrink height 4
# Grow the focused window's width
bindsym Right resize grow width 4
# Exit resize mode
bindsym Escape mode "default"
}
It will create the following entries:
- Mod+r Resize mode
RESIZELeft Shrink the focused window's widthRESIZEDown Grow the focused window's heightRESIZEUp Shrink the focused window's heightRESIZERight Grow the focused window's widthRESIZEEscape Exit the
Transparent theme
Because the background variable in colorschemes is re-used in the #horibox and #listview you cannot achieve clean transparency without a few tweaks:
- In ~/.config/rofi/themes/shared/.rasi change the
backgroundvariable to something like#1c1c1caa, the last 2 characters being the amount of transparency to use - Then in ~/.config/rofi/themes/shared/option-menu.rasi add
background-color: #00000000;to the following entries:#horiboxand#listview
Contributing
New resolutions
Copy one of the resolution file in ~/.config/rofi/themes/shared/resolutions to the new one (i.e 1024x768.rasi).
Then tweaks the values so that the menus display properly on your screen, the ones you'll most likely have to change are:
*-window-padding: the whole canvas surounding the controls*-element-padding: the blank space around the icons/texts
New colorschemes
These menus were initially published with 3 colorschemes, a fourth has been added after someone contributed his colorscheme file (gruvbox.rasi). So if you have made your own and want to contribute, don't hesitate to open a merge request, including your .rasi and screenshots (also added to colorschemes.md).
The colorschemes are located in the ~/.config/rofi/themes/shared/colorschemes folder.
Things that could be improved
Universal resolution: by using percentages instead of raw pixel values in the resolution files, it might be possible to create a universal resolution file.
Find a cleaner way to wait for the first nmcli command to be successful in ~/.config/rofi/scripts/nmvpnmenu.sh as without the sleep 1 it will throw an error.
But waiting 1 second is neither a safe nor a clean work around.
Widget themes: for now the menus are full screen, which does not suit everyone, there could be an option to call the scripts with (i.e appsmenu --widget).
This option would load an alternative resolution file (i.e 1920x1080-widget.rasi) and would only display a little window for the menus.
