Understanding the JWM Menu Configuration in FunOS

The JWM (Joe’s Window Manager) environment used in FunOS is fast, lightweight, and highly customizable. One of its essential components is the application menu — the gateway to launching programs and accessing key system functionality. In FunOS, the JWM menu configuration is managed through an XML-based file located at:

~/.config/jwm/menu

This article provides an in-depth explanation of the structure, elements, and customization options of the JWM menu file in FunOS.

1. Backing Up Before Editing

Before making changes to this file, it’s a good idea to back it up:

cp ~/.config/jwm/menu ~/.config/jwm/menu.bak

If anything goes wrong, you can easily restore the original.

2. Accessing the Menu File

You can access the JWM Menu configuration file in two main ways:

a. File Manager

  1. Click Menu > File Manager
  2. Press Ctrl + H or click View > Show Hidden to display hidden files.
  3. Navigate to the .config/jwm/ directory and open the menu file with a text editor.

b. Terminal

mousepad ~/.config/jwm/menu

This opens the file in the Mousepad text editor, allowing you to view or modify its contents.

3. What is the ~/.config/jwm/menu File?

The menu file defines the structure of the main JWM menu. It uses standard XML syntax and includes programs, separators, dynamic includes, and control options like logout and menu reloading.

4. Default Menu Configuration in FunOS

Here is the default contents of the file in FunOS:

<?xml version='1.0' encoding='utf-8'?>
<JWM>   
   <RootMenu onroot="123" height="20">
      <Program icon="lxterminal" label="Terminal" tooltip="Use the command line">lxterminal</Program>
      <Program icon="system-file-manager" label="File Manager" tooltip="Browse the file system and manage the files">pcmanfm</Program>
      <Program icon="org.xfce.mousepad" label="Text Editor" tooltip="Simple Text Editor">mousepad</Program> 
      <Program icon="firefox-esr" label="Web Browser" tooltip="Browse the World Wide Web">firefox-esr</Program>    
      <Program icon="nitrogen" label="Set Wallpaper" tooltip="Browse and set desktop backgrounds">nitrogen</Program>
      <Separator />
      <Program icon="org.gnome.Evince" label="Documentation" tooltip="FunOS Documentation">firefox-esr -new-tab https://funos.org/documentation/</Program>  
      <Separator />
      <Include>$HOME/.jwmrc-mjwm</Include>
      <Separator />
      <Include>$HOME/.config/jwm/themes-list</Include>      
      <Separator />
      <Program icon="system-reboot" label="Reload menu" confirm="false">mjwm --no-backup && jwm -reload</Program>
      <Separator />     
      <Program icon="system-shutdown" label="Log Out">/usr/bin/funos-logout</Program>      
   </RootMenu>   
</JWM>

5. Breakdown of Menu Elements

<RootMenu onroot="123" height="20">

This is the main container for the menu. The onroot="123" attribute indicates that this menu appears when you click the desktop background (root window). The height sets the height of menu entries.

<Program ...>

This element defines a menu entry that launches an application. Key attributes:

  • icon: Icon displayed next to the label.
  • label: Text shown in the menu.
  • tooltip: (Optional) Text shown on hover.
  • Content between tags: The command to execute.

Example:

<Program icon="lxterminal" label="Terminal" tooltip="Use the command line">lxterminal</Program>

This launches the LXTerminal when selected.

<Separator />

Creates a visual break between sections of the menu. Useful for grouping related items.

<Include>...</Include>

Includes external XML files into the menu structure. This allows modular configuration.

a. ~/.jwmrc-mjwm

<Include>$HOME/.jwmrc-mjwm</Include>

This file is automatically generated by mjwm, a FunOS utility that dynamically builds a Freedesktop-compliant application menu from .desktop files. It is updated every time you click “Reload menu” or run:

mjwm --no-backup && jwm -reload

b. ~/.config/jwm/themes-list

<Include>$HOME/.config/jwm/themes-list</Include>

This file adds a submenu that allows users to switch between available JWM themes by copying the selected theme to the ~/.config/jwm/theme file and restarting JWM.

Reload Menu

<Program icon="system-reboot" label="Reload menu" confirm="false">mjwm --no-backup && jwm -reload</Program>

This menu entry rebuilds the application menu and reloads JWM. It’s useful after installing new applications or modifying .desktop files.

Log Out

<Program icon="system-shutdown" label="Log Out">/usr/bin/funos-logout</Program>

Executes the FunOS logout script to end the session.

6. Customizing the Menu

You can edit the menu file directly to:

  • Add new programs (e.g., custom apps or scripts)
  • Reorganize or remove default entries
  • Add your own <Menu> blocks for nested menus

Example: Add GIMP to the menu

<Program icon="gimp" label="GIMP" tooltip="Create images and edit photographs">gimp</Program>

7. Applying Changes

After making changes to the menu configuration (~/.config/jwm/menu), you need to reload or restart JWM to apply the updates.

You can do this in one of the following ways:

Option 1: Run in Terminal

jwm -restart

or

jwm -reload

Option 2: Use the Menu
Click the Menu button in the lower-left corner, then select Reload menu.

8. Summary

The ~/.config/jwm/menu file is the core of the JWM menu system in FunOS. With its clean XML structure, it’s both powerful and easy to customize. By understanding each element — from launching programs to including external configurations — you can tailor your desktop experience to your exact preferences.

Leave a Reply

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