How to Replace the JWM Menu with jgmenu in FunOS

In FunOS, the default application menu is powered by JWM (Joe’s Window Manager). While functional and lightweight, the JWM menu requires users to manually click “Reload menu” after installing or uninstalling applications for changes to take effect.

By replacing the default JWM menu with jgmenu, you gain a modern and responsive menu experience that automatically refreshes whenever new applications are added or removed. This tutorial will guide you step-by-step on how to configure jgmenu as the main menu in FunOS.

What is jgmenu?

jgmenu is a lightweight, standalone, and highly customizable application menu designed for use with window managers like JWM, Openbox, i3, or Fluxbox. It is written in C and uses Xlib, making it extremely fast and efficient, especially on low-resource systems.

Unlike traditional menus that are hardcoded or static, jgmenu dynamically reads .desktop files and automatically updates its entries when new applications are installed or removed—no need to manually refresh or rebuild the menu.

Key features of jgmenu include:

  • Automatically detects and lists installed applications
  • Highly configurable through csv-style config files
  • Supports submenus, separators, and icons
  • Can be integrated into any panel or tray
  • Works great with minimal desktop environments and standalone window managers

In FunOS, jgmenu can be a powerful replacement for the default JWM menu, offering greater flexibility and ease of use for users who frequently customize or install new applications.

Why Replace the JWM Menu with jgmenu?

  • No more manual “Reload menu”
  • Automatically detects new applications
  • Customizable layout and style
  • Supports icon themes
  • Clean and minimal interface

How to Replace the JWM Menu with jgmenu in FunOS

To replace the default JWM Menu with jgmenu in FunOS, follow these steps:

1. Install jgmenu

Open the Terminal and run the following commands:

sudo apt update
sudo apt install jgmenu

2. Initialize jgmenu Configuration

Initialize the default configuration files with:

jgmenu_run init

This will create a config directory at ~/.config/jgmenu/ containing a default jgmenurc file.

3. Create a Prepend Configuration

Prepend entries are shown before the automatically generated application list. Open the prepend config file:

mousepad $HOME/.config/jgmenu/prepend.csv

Paste the following content:

Terminal,lxterminal,lxterminal
File manager,pcmanfm,system-file-manager
Text Editor,mousepad,org.xfce.mousepad
Web Browser,firefox-esr,firefox-esr
Set Wallpaper,nitrogen,nitrogen
^sep()
Documentation,firefox-esr -new-tab https://funos.org/documentation,org.gnome.Evince
^sep()

The ^sep() line adds a separator in the menu.

Save and close Mousepad.

4. Create an Append Configuration

Append entries are shown after the automatically generated application list. Open the append config file:

mousepad $HOME/.config/jgmenu/append.csv

Paste the following:

^sep()
Themes,^checkout(themes-list),preferences-desktop-theme
^sep()
Log Out,/usr/bin/funos-logout,system-shutdown
^tag(themes-list)
Adwaita Dark,cp -a .config/jwm/themes/Adwaita-Dark .config/jwm/theme && jwm -restart
Black,cp -a .config/jwm/themes/Black .config/jwm/theme && jwm -restart
Blue Day,cp -a .config/jwm/themes/Blue-Day .config/jwm/theme && jwm -restart
Brown,cp -a .config/jwm/themes/Brown .config/jwm/theme && jwm -restart
Cappuccino,cp -a .config/jwm/themes/Cappuccino .config/jwm/theme && jwm -restart
Clearlooks,cp -a .config/jwm/themes/Clearlooks .config/jwm/theme && jwm -restart
Coffee Cream,cp -a .config/jwm/themes/Coffee-Cream .config/jwm/theme && jwm -restart
Coper,cp -a .config/jwm/themes/Coper .config/jwm/theme && jwm -restart
Default,cp -a .config/jwm/themes/Default .config/jwm/theme && jwm -restart
Gold,cp -a .config/jwm/themes/Gold .config/jwm/theme && jwm -restart
Green,cp -a .config/jwm/themes/Green .config/jwm/theme && jwm -restart
Ice,cp -a .config/jwm/themes/Ice .config/jwm/theme && jwm -restart
Military,cp -a .config/jwm/themes/Military .config/jwm/theme && jwm -restart
Pastel,cp -a .config/jwm/themes/Pastel .config/jwm/theme && jwm -restart
Pretty Pink,cp -a .config/jwm/themes/Pretty-Pink .config/jwm/theme && jwm -restart
Red,cp -a .config/jwm/themes/Red .config/jwm/theme && jwm -restart
Shades of Grey,cp -a .config/jwm/themes/Shades-of-Grey .config/jwm/theme && jwm -restart
Sunny Day,cp -a .config/jwm/themes/Sunny-Day .config/jwm/theme && jwm -restart
White,cp -a .config/jwm/themes/White .config/jwm/theme && jwm -restart

Save and close Mousepad.

5. Set an Icon Theme for jgmenu

Open the configuration file:

mousepad $HOME/.config/jgmenu/jgmenurc

Find this line:

# icon_theme =

Replace it with:

icon_theme = Papirus

This enables icons in the jgmenu using the Papirus icon theme.

Save and close Mousepad.

6. Modify JWM Tray to Use jgmenu

Backup your current tray configuration file:

cp $HOME/.config/jwm/tray $HOME/.config/jwm/tray.bak

Edit the tray configuration file:

mousepad $HOME/.config/jwm/tray

Locate this line:

<TrayButton popup="Menu" icon="/opt/artwork/jwmkit/traybutton.svg">root:1</TrayButton>

Replace it with:

<TrayButton popup="Menu" icon="/opt/artwork/jwmkit/traybutton.svg">exec:jgmenu_run</TrayButton>

Save and close Mousepad.

7. Modify JWM Main Configuration

Backup your current JWM main configuration file:

cp $HOME/.jwmrc $HOME/.jwmrc.bak

Edit the JWM main configuration file:

mousepad $HOME/.jwmrc

Find and delete the following line:

<Include>$HOME/.config/jwm/menu</Include>

The final content should look like this:

<?xml version="1.0" encoding="UTF-8"?>
<JWM>
    <Include>$HOME/.config/jwm/keys</Include>
    <Include>$HOME/.config/jwm/preferences</Include>
    <Include>$HOME/.config/jwm/start</Include>
    <Include>$HOME/.config/jwm/theme</Include>
    <Include>$HOME/.config/jwm/tray</Include>
    <Include>$HOME/.config/jwm/icons</Include>
</JWM>

Save and close Mousepad.

8. Restart JWM

To apply all changes:

jwm -restart

9. Hide Screensaver Entries

To remove unnecessary screensaver launchers from the menu:

sudo mv /usr/share/applications/screensavers /opt

Result: jgmenu in Action

Now when you click the Menu button in the lower-left corner, jgmenu will appear instead of the old JWM menu. Any applications you install or uninstall will be automatically reflected in the menu—no more manual reloads!

Before (Default JWM Menu)

After (jgmenu Activated)

Conclusion

Replacing the JWM menu with jgmenu brings a more dynamic and modern menu experience to FunOS, especially for users who frequently install or remove applications. jgmenu not only looks sleek but also improves usability by automatically updating its content.

If you ever want to revert to the original JWM menu, simply restore your backups:

mv $HOME/.config/jwm/tray.bak $HOME/.config/jwm/tray
mv $HOME/.jwmrc.bak $HOME/.jwmrc
jwm -restart

Happy customizing!

Leave a Reply

Your email address will not be published. Required fields are marked *