DEV Community

Cover image for How to make Openbox look good with ease?
José Ricardo
José Ricardo

Posted on

2 2 2 2 2

How to make Openbox look good with ease?

I started using Linux a few years back now. In my learning path, I encountered myself with hundreds of possibilities to do whatever I wanted to do at several aspects, including the chance to get a system that looks how I want it to look. I am the kind of user who like to give a personal touch to what I use and, in the past, that wasn’t easy for me to do with my desktop.

When I finally was able to switch to Linux, I encountered myself with a pretty powerful combination: Openbox + Picom + tint2 + jgmenu; and when I finally gave them most of the personal touches I always had in mind, I made a tutorial at Medium for users like me that may want to have a desktop that looks both good, minimalistic and functional and don’t know exactly where to start. I initially wrote this article at Medium, but now I've decided to give it a shot here as well. All the settings I’ll provide here were done by me after a process of trials, errors, frustrations and successes while reading the guides to use the pieces I putted together to get to the results I’ll share. Everything is customizable beyond the customizations I’ll expose here and I encourage you to do some modifications on your own. The process of creating something as personal as your own desktop with your own hands can be a funny and gratifying process.

What is Openbox?

At the main page of its official wiki, Openbox is described as it follows:

Openbox is a highly configurable, next generation window manager with extensive standards support.
Openbox lets you bring the latest applications outside of a full desktop environment. (…) With support for the latest freedesktop.org standards, as well as careful adherence to previous standards, Openbox provides an environment where applications work the way they were designed to.
Openbox is a highly configurable window manager. It allows you to change almost every aspect of how you interact with your desktop and invent completely new ways to use and control it. It can be like a video game for controlling windows. But Openbox can also be kept extremely simple, as it is in the default setup, meaning that it can suit just about anybody. Openbox gives you control without making you do everything.

Openbox can be used as a replacement of the window managers on desktop environments like XFCE and Mate or it can also be the default one at LXQt (or at its predecessor: LXDE). But one of its most noticeable features is that it can be also used as a standalone solution without any desktop environment at all.

The latest stable version available of Openbox is the 3.6.1 and it was released in 2015. Openbox is open source and its source code can be found in its GitHub repository.

Its installation process is pretty simple and it can be found at the repositories of nearly every distro available nowadays. If you need help to install it or you want to get more info about it, one of the best places to get the help you may need can be its official wiki or the Arch wiki.

What is Picom?

Picom is a lightweight standalone compositor created for the X Window System. It is a fork of Compton (which is a fork of xcompmgr-dana, which is also a fork of xcompmgr) and it is suitable for use with window managers like Openbox that do not provide compositing effects on their own. If you want to learn more about its history, then you should visit this page or, if you are interested in knowing a bit more about it, you can check its page on the Arch wiki.

Picom is also open source and you can find its code at its GitHub repo. The version of Picom used for this tutorial was the 10.2–1 version.

What are tint2 and jgmenu?

At its Arch wiki article you can find that tint2 is described as a simple, unobtrusive and light panel for Xorg. It can be configured to include a system tray, a task list, a battery monitor and more. Its look is configurable and it only has few dependencies, making it ideal for window managers like Openbox that don’t come with panels to show action icons and/or tasks. It is open source as well and you can find its source code at its GitLab repo.

On the other hand, as you can read at its GitHub repo, jgmenu is a simple, independent and contemporary-looking X11 menu, designed for scripting, ricing and tweaking. It is hackable, has a simple code base and does not depend on any toolkits such as GTK and Qt, but uses cairo and pango to render the menu. It can optionally use some appearance settings from XSettings, tint2 and GTK; and it has UTF-8 search support.

The version of tint2 used for this tutorial was the 17.0.2 while, in the other hand, the version of jgmenu used was the 4.4.1.


What settings to use?

Settings for Openbox

Whether you choose to start Openbox from a display manager or not, the result will always be the same when it starts on its own. You’ll always get a black screen without anything else than a menu that appears when you right click anywhere inside of it… and it is completely normal. That is just the starting point and the goal of this guide is precisely to help you to turn that black screen into a good looking workspace.

The first thing you need to do is to install additional tools that we will use later like ObConf (to configure basic settings of Openbox), feh (to set the wallpaper), cbatticon (to have a battery icon for the system tray), volumeicon (to have a volume control applet available) and a network manager applet like, for example, nm-applet.

After that, you need to set up the list of applications that will run automatically when Openbox starts. There are, basically, two ways of doing this: one is modifying the Xorg autostart file and the another one is modifying the autostart file of Openbox itself. Either method you choose, the modifications are almost the same since both files use a similar format to specify the programs to load with Openbox; though I recommend to use Xorg autostart file specially when you don’t use any display manager at all and use Openbox’s autostart files when you do use a display manager.

If you choose to modify the autostart file of Openbox, just open or create the file ~/.config/openbox/autostart and paste the following inside of it:

picom -b & # This will start picom in the background
tint2 -c ~/.config/tint2/tint2rc_upper & # This will start the top panel
tint2 & # This will start the bottom panel
feh --bg-fill --randomize /path/to/directory/with/backgrounds/* & # This will pick a random picture from a directory and set it as wallpaper
nm-applet & # This will start the NetworkManager applet
volumeicon & # This will start the applet to control the volume
cbatticon & # This will start the battery icon applet
view raw autostart hosted with ❤ by GitHub

If you had to create the file, don’t forget to make it executable (just to prevent any issue) by executing:

chmod +x ~/.config/openbox/autostart
Enter fullscreen mode Exit fullscreen mode

But if you choose to modify the autostart file of Xorg placed at your home directory instead, just open the ~/.xinitrc file and put the following lines at the end of that file:

picom -b & # This will start picom in the background
tint2 -c ~/.config/tint2/tint2rc_top & # This will start the top panel
tint2 & # This will start the bottom panel
feh --bg-fill --randomize /path/to/directory/with/backgrounds/* & # This will pick a random picture from a directory and set it as wallpaper
nm-applet & # This will start the NetworkManager applet
volumeicon & # This will start the applet to control the volume
cbatticon & # This will start the battery icon applet
exec openbox-session # This will start the Openbox session
view raw .xinitrc hosted with ❤ by GitHub

Remember that, as I’ve said, I strongly recommend you to use the Openbox’s autostart file when you use a display manager. I haven’t tested this last variant when a display manager is in use and I suspect that some issues may appear in that kind of scenario.

After that, you need to set up other aspects of Openbox like the theme you will use for it.

This part takes a little history time. I used Linux Mint in the past. It was the first distro I used for a long period of time and loved the Mint Y themes very much. Then I started using Openbox and I never was able to find themes for Openbox that somehow recreate how Mint Y themes look; so after a few months I came with a decent enough understanding of how Openbox themes are made and I created a Python script to generate themes for Openbox that look somehow similar to Mint Y themes. That script is still a work in progress, but it works decent enough for me at the moment I’m writing this; and you can find it following this link to its GitHub repo.

I currently use the dark red variant of the themes I created, but you can pick any other theme of your choice to set up Openbox using ObConf from the generated themes or from other sources like, for example, this GitHub repo, this webpage or from the following archived website. Now, to ease the process, I’ll just paste here the content of the file ~/.config/openbox/rc.xml I have created. That file is where Openbox stores and reads its settings, and the content of mine is the following:

<?xml version="1.0" encoding="UTF-8"?>
<openbox_config xmlns="http://openbox.org/3.4/rc" xmlns:xi="http://www.w3.org/2001/XInclude">
<resistance>
<strength>10</strength>
<screen_edge_strength>20</screen_edge_strength>
</resistance>
<focus>
<focusNew>yes</focusNew>
<!-- always try to focus new windows when they appear. other rules do
apply -->
<followMouse>no</followMouse>
<!-- move focus to a window when you move the mouse into it -->
<focusLast>yes</focusLast>
<!-- focus the last used window when changing desktops, instead of the one
under the mouse pointer. when followMouse is enabled -->
<underMouse>no</underMouse>
<!-- move focus under the mouse, even when the mouse is not moving -->
<focusDelay>200</focusDelay>
<!-- when followMouse is enabled, the mouse must be inside the window for
this many milliseconds (1000 = 1 sec) before moving focus to it -->
<raiseOnFocus>no</raiseOnFocus>
<!-- when followMouse is enabled, and a window is given focus by moving the
mouse into it, also raise the window -->
</focus>
<placement>
<policy>Smart</policy>
<!-- 'Smart' or 'UnderMouse' -->
<center>yes</center>
<!-- whether to place windows in the center of the free area found or
the top left corner -->
<monitor>Primary</monitor>
<!-- with Smart placement on a multi-monitor system, try to place new windows
on: 'Any' - any monitor, 'Mouse' - where the mouse is, 'Active' - where
the active window is, 'Primary' - only on the primary monitor -->
<primaryMonitor>1</primaryMonitor>
<!-- The monitor where Openbox should place popup dialogs such as the
focus cycling popup, or the desktop switch popup. It can be an index
from 1, specifying a particular monitor. Or it can be one of the
following: 'Mouse' - where the mouse is, or
'Active' - where the active window is -->
</placement>
<theme>
<name>Mint-O-Dark-Red</name>
<titleLayout>NLIMC</titleLayout>
<!--
available characters are NDSLIMC, each can occur at most once.
N: window icon
L: window label (AKA title).
I: iconify
M: maximize
C: close
S: shade (roll up/down)
D: omnipresent (on all desktops).
-->
<keepBorder>yes</keepBorder>
<animateIconify>no</animateIconify>
<font place="ActiveWindow">
<name>Cantarell</name>
<size>11</size>
<!-- font size in points -->
<weight>Bold</weight>
<!-- 'bold' or 'normal' -->
<slant>Normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="InactiveWindow">
<name>Cantarell</name>
<size>11</size>
<!-- font size in points -->
<weight>Bold</weight>
<!-- 'bold' or 'normal' -->
<slant>Normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="MenuHeader">
<name>Cantarell</name>
<size>11</size>
<!-- font size in points -->
<weight>Normal</weight>
<!-- 'bold' or 'normal' -->
<slant>Normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="MenuItem">
<name>Cantarell</name>
<size>11</size>
<!-- font size in points -->
<weight>Normal</weight>
<!-- 'bold' or 'normal' -->
<slant>Normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="ActiveOnScreenDisplay">
<name>sans</name>
<size>11</size>
<!-- font size in points -->
<weight>Bold</weight>
<!-- 'bold' or 'normal' -->
<slant>Normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="InactiveOnScreenDisplay">
<name>sans</name>
<size>11</size>
<!-- font size in points -->
<weight>Bold</weight>
<!-- 'bold' or 'normal' -->
<slant>Normal</slant>
<!-- 'italic' or 'normal' -->
</font>
</theme>
<desktops>
<!-- this stuff is only used at startup, pagers allow you to change them
during a session
these are default values to use when other ones are not already set
by other applications, or saved in your session
use obconf if you want to change these without having to log out
and back in -->
<number>1</number>
<firstdesk>1</firstdesk>
<names>
<!-- set names up here if you want to, like this:
<name>desktop 1</name>
<name>desktop 2</name>
-->
</names>
<popupTime>875</popupTime>
<!-- The number of milliseconds to show the popup for when switching
desktops. Set this to 0 to disable the popup. -->
</desktops>
<resize>
<drawContents>yes</drawContents>
<popupShow>Never</popupShow>
<!-- 'Always', 'Never', or 'Nonpixel' (xterms and such) -->
<popupPosition>Center</popupPosition>
<!-- 'Center', 'Top', or 'Fixed' -->
<popupFixedPosition>
<!-- these are used if popupPosition is set to 'Fixed' -->
<x>10</x>
<!-- positive number for distance from left edge, negative number for
distance from right edge, or 'Center' -->
<y>10</y>
<!-- positive number for distance from top edge, negative number for
distance from bottom edge, or 'Center' -->
</popupFixedPosition>
</resize>
<!-- You can reserve a portion of your screen where windows will not cover when
they are maximized, or when they are initially placed.
Many programs reserve space automatically, but you can use this in other
cases. -->
<margins>
<top>0</top>
<bottom>0</bottom>
<left>0</left>
<right>0</right>
</margins>
<dock>
<position>TopLeft</position>
<!-- (Top|Bottom)(Left|Right|)|Top|Bottom|Left|Right|Floating -->
<floatingX>0</floatingX>
<floatingY>0</floatingY>
<noStrut>no</noStrut>
<stacking>Above</stacking>
<!-- 'Above', 'Normal', or 'Below' -->
<direction>Vertical</direction>
<!-- 'Vertical' or 'Horizontal' -->
<autoHide>no</autoHide>
<hideDelay>300</hideDelay>
<!-- in milliseconds (1000 = 1 second) -->
<showDelay>300</showDelay>
<!-- in milliseconds (1000 = 1 second) -->
<moveButton>Middle</moveButton>
<!-- 'Left', 'Middle', 'Right' -->
</dock>
<keyboard>
<chainQuitKey>C-g</chainQuitKey>
<!-- Keybindings for desktop switching -->
<keybind key="C-A-Left">
<action name="GoToDesktop">
<to>left</to>
<wrap>no</wrap>
</action>
</keybind>
<keybind key="C-A-Right">
<action name="GoToDesktop">
<to>right</to>
<wrap>no</wrap>
</action>
</keybind>
<keybind key="C-A-Up">
<action name="GoToDesktop">
<to>up</to>
<wrap>no</wrap>
</action>
</keybind>
<keybind key="C-A-Down">
<action name="GoToDesktop">
<to>down</to>
<wrap>no</wrap>
</action>
</keybind>
<keybind key="S-A-Left">
<action name="SendToDesktop">
<to>left</to>
<wrap>no</wrap>
</action>
</keybind>
<keybind key="S-A-Right">
<action name="SendToDesktop">
<to>right</to>
<wrap>no</wrap>
</action>
</keybind>
<keybind key="S-A-Up">
<action name="SendToDesktop">
<to>up</to>
<wrap>no</wrap>
</action>
</keybind>
<keybind key="S-A-Down">
<action name="SendToDesktop">
<to>down</to>
<wrap>no</wrap>
</action>
</keybind>
<keybind key="W-F1">
<action name="GoToDesktop">
<to>1</to>
</action>
</keybind>
<keybind key="W-F2">
<action name="GoToDesktop">
<to>2</to>
</action>
</keybind>
<keybind key="W-F3">
<action name="GoToDesktop">
<to>3</to>
</action>
</keybind>
<keybind key="W-F4">
<action name="GoToDesktop">
<to>4</to>
</action>
</keybind>
<keybind key="W-d">
<action name="ToggleShowDesktop"/>
</keybind>
<!-- Keybindings for windows -->
<keybind key="A-F4">
<action name="Close"/>
</keybind>
<keybind key="A-Escape">
<action name="Lower"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
</keybind>
<keybind key="A-space">
<action name="ShowMenu">
<menu>client-menu</menu>
</action>
</keybind>
<!-- Keybindings for window switching -->
<keybind key="A-Tab">
<action name="NextWindow">
<finalactions>
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</finalactions>
</action>
</keybind>
<keybind key="A-S-Tab">
<action name="PreviousWindow">
<finalactions>
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</finalactions>
</action>
</keybind>
<keybind key="C-A-Tab">
<action name="NextWindow">
<panels>yes</panels>
<desktop>yes</desktop>
<finalactions>
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</finalactions>
</action>
</keybind>
<!-- Keybindings for window switching with the arrow keys -->
<keybind key="W-S-Right">
<action name="DirectionalCycleWindows">
<direction>right</direction>
</action>
</keybind>
<keybind key="W-S-Left">
<action name="DirectionalCycleWindows">
<direction>left</direction>
</action>
</keybind>
<keybind key="W-S-Up">
<action name="DirectionalCycleWindows">
<direction>up</direction>
</action>
</keybind>
<keybind key="W-S-Down">
<action name="DirectionalCycleWindows">
<direction>down</direction>
</action>
</keybind>
<!-- Keybindings for running applications -->
<keybind key="W-e">
<action name="Execute">
<startupnotify>
<enabled>true</enabled>
<name>File manager</name>
</startupnotify>
<command>nemo</command>
</action>
</keybind>
<keybind key="C-A-t">
<action name="Execute">
<startupnotify>
<enabled>true</enabled>
<name>Terminal</name>
</startupnotify>
<command>terminator</command>
</action>
</keybind>
<keybind key="C-S-Escape">
<action name="Execute">
<startupnotify>
<enabled>true</enabled>
<name>System Monitor</name>
</startupnotify>
<command>gnome-system-monitor</command>
</action>
</keybind>
<keybind key="C-Escape">
<action name="Execute">
<startupnotify>
<enabled>true</enabled>
<name>jgmenu</name>
</startupnotify>
<command>jgmenu_run</command>
</action>
</keybind>
<!-- Keybindings for "special" actions -->
<keybind key="C-A-BackSpace">
<action name="Reconfigure"/>
</keybind>
<keybind key="XF86WWW">
<action name="Execute">
<startupnotify>
<enabled>true</enabled>
<name>Chromium</name>
</startupnotify>
<command>chromium</command>
</action>
</keybind>
<keybind key="Print">
<action name="Execute">
<command>scrot</command>
</action>
</keybind>
<keybind key="XF86MonBrightnessUp">
<action name="Execute">
<command>brightnessctl set 5%+</command>
</action>
</keybind>
<keybind key="XF86MonBrightnessDown">
<action name="Execute">
<command>brightnessctl set 5%-</command>
</action>
</keybind>
<keybind key="XF86AudioRaiseVolume">
<action name="Execute">
<command>sh -c "pactl set-sink-mute 0 false ; pactl set-sink-volume 0 +5%"</command>
</action>
</keybind>
<keybind key="XF86AudioLowerVolume">
<action name="Execute">
<command>sh -c "pactl set-sink-mute 0 false ; pactl set-sink-volume 0 -5%"</command>
</action>
</keybind>
<keybind key="XF86AudioMute">
<action name="Execute">
<command>sh -c "pactl set-sink-mute 0 true ; pactl set-sink-volume 0 0%"</command>
</action>
</keybind>
<keybind key="C-S-F11">
<action name="ToggleDecorations"/>
</keybind>
<!-- Keybindings for window snapping -->
<keybind key="W-Up">
<action name="Maximize"/>
</keybind>
<keybind key="W-Down">
<action name="If">
<maximized>yes</maximized>
<then>
<action name="Unmaximize"/>
</then>
<else>
<action name="Iconify"/>
</else>
</action>
</keybind>
<keybind key="W-Left">
<action name="UnmaximizeFull"/>
<action name="MaximizeVert"/>
<action name="Raise"/>
<action name="MoveResizeTo">
<width>50%</width>
<x>0</x>
<y>0</y>
</action>
</keybind>
<keybind key="W-Right">
<action name="UnmaximizeFull"/>
<action name="MaximizeVert"/>
<action name="Raise"/>
<action name="MoveResizeTo">
<width>50%</width>
<x>50%</x>
<y>0</y>
</action>
</keybind>
</keyboard>
<mouse>
<dragThreshold>1</dragThreshold>
<!-- number of pixels the mouse must move before a drag begins -->
<doubleClickTime>500</doubleClickTime>
<!-- in milliseconds (1000 = 1 second) -->
<screenEdgeWarpTime>400</screenEdgeWarpTime>
<!-- Time before changing desktops when the pointer touches the edge of the
screen while moving a window, in milliseconds (1000 = 1 second).
Set this to 0 to disable warping -->
<screenEdgeWarpMouse>false</screenEdgeWarpMouse>
<!-- Set this to TRUE to move the mouse pointer across the desktop when
switching due to hitting the edge of the screen -->
<context name="Frame">
<mousebind button="A-Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="A-Left" action="Click">
<action name="Unshade"/>
</mousebind>
<mousebind button="A-Left" action="Drag">
<action name="Move"/>
</mousebind>
<mousebind button="A-Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="A-Right" action="Drag">
<action name="Resize"/>
</mousebind>
<mousebind button="A-Middle" action="Press">
<action name="Lower"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
</mousebind>
<mousebind button="A-Up" action="Click">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind button="A-Down" action="Click">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
<mousebind button="C-A-Up" action="Click">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind button="C-A-Down" action="Click">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
<mousebind button="A-S-Up" action="Click">
<action name="SendToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind button="A-S-Down" action="Click">
<action name="SendToDesktop">
<to>next</to>
</action>
</mousebind>
</context>
<context name="Titlebar">
<mousebind button="Left" action="Drag">
<action name="Move"/>
</mousebind>
<mousebind button="Left" action="DoubleClick">
<action name="ToggleMaximizeFull"/>
</mousebind>
<mousebind button="Up" action="Click">
<action name="if">
<shaded>no</shaded>
<then>
<action name="Shade"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
<action name="Lower"/>
</then>
</action>
</mousebind>
<mousebind button="Down" action="Click">
<action name="if">
<shaded>yes</shaded>
<then>
<action name="Unshade"/>
<action name="Raise"/>
</then>
</action>
</mousebind>
</context>
<context name="Titlebar Top Right Bottom Left TLCorner TRCorner BRCorner BLCorner">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Middle" action="Press">
<action name="Lower"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu">
<menu>client-menu</menu>
</action>
</mousebind>
</context>
<context name="Top">
<mousebind button="Left" action="Drag">
<action name="Resize">
<edge>top</edge>
</action>
</mousebind>
</context>
<context name="Left">
<mousebind button="Left" action="Drag">
<action name="Resize">
<edge>left</edge>
</action>
</mousebind>
</context>
<context name="Right">
<mousebind button="Left" action="Drag">
<action name="Resize">
<edge>right</edge>
</action>
</mousebind>
</context>
<context name="Bottom">
<mousebind button="Left" action="Drag">
<action name="Resize">
<edge>bottom</edge>
</action>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu">
<menu>client-menu</menu>
</action>
</mousebind>
</context>
<context name="TRCorner BRCorner TLCorner BLCorner">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Drag">
<action name="Resize"/>
</mousebind>
</context>
<context name="Client">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Middle" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
</context>
<context name="Icon">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
<action name="ShowMenu">
<menu>client-menu</menu>
</action>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu">
<menu>client-menu</menu>
</action>
</mousebind>
</context>
<context name="AllDesktops">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="ToggleOmnipresent"/>
</mousebind>
</context>
<context name="Shade">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="ToggleShade"/>
</mousebind>
</context>
<context name="Iconify">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="Iconify"/>
</mousebind>
</context>
<context name="Maximize">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Middle" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="ToggleMaximize"/>
</mousebind>
<mousebind button="Middle" action="Click">
<action name="ToggleMaximize">
<direction>vertical</direction>
</action>
</mousebind>
<mousebind button="Right" action="Click">
<action name="ToggleMaximize">
<direction>horizontal</direction>
</action>
</mousebind>
</context>
<context name="Close">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="Close"/>
</mousebind>
</context>
<context name="Desktop">
<mousebind button="Up" action="Click">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind button="Down" action="Click">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
<mousebind button="A-Up" action="Click">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind button="A-Down" action="Click">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
<mousebind button="C-A-Up" action="Click">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind button="C-A-Down" action="Click">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
</context>
<context name="Root">
<!-- Menus -->
<mousebind button="Middle" action="Press">
<action name="ShowMenu">
<menu>client-list-combined-menu</menu>
</action>
</mousebind>
<mousebind button="Right" action="Press">
<action name="ShowMenu">
<menu>root-menu</menu>
</action>
</mousebind>
</context>
<context name="MoveResize">
<mousebind button="Up" action="Click">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind button="Down" action="Click">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
<mousebind button="A-Up" action="Click">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind button="A-Down" action="Click">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
</context>
</mouse>
<menu>
<!-- You can specify more than one menu file in here and they are all loaded,
just don't make menu ids clash or, well, it'll be kind of pointless -->
<!-- default menu file (or custom one in $HOME/.config/openbox/) -->
<file>menu.xml</file>
<hideDelay>200</hideDelay>
<!-- if a press-release lasts longer than this setting (in milliseconds), the
menu is hidden again -->
<middle>no</middle>
<!-- center submenus vertically about the parent entry -->
<submenuShowDelay>100</submenuShowDelay>
<!-- time to delay before showing a submenu after hovering over the parent
entry.
if this is a negative value, then the delay is infinite and the
submenu will not be shown until it is clicked on -->
<submenuHideDelay>400</submenuHideDelay>
<!-- time to delay before hiding a submenu when selecting another
entry in parent menu
if this is a negative value, then the delay is infinite and the
submenu will not be hidden until a different submenu is opened -->
<showIcons>yes</showIcons>
<!-- controls if icons appear in the client-list-(combined-)menu -->
<manageDesktops>yes</manageDesktops>
<!-- show the manage desktops section in the client-list-(combined-)menu -->
</menu>
<applications>
<!--
# this is an example with comments through out. use these to make your
# own rules, but without the comments of course.
# you may use one or more of the name/class/role/title/type rules to specify
# windows to match
<application name="the window's _OB_APP_NAME property (see obxprop)"
class="the window's _OB_APP_CLASS property (see obxprop)"
groupname="the window's _OB_APP_GROUP_NAME property (see obxprop)"
groupclass="the window's _OB_APP_GROUP_CLASS property (see obxprop)"
role="the window's _OB_APP_ROLE property (see obxprop)"
title="the window's _OB_APP_TITLE property (see obxprop)"
type="the window's _OB_APP_TYPE property (see obxprob)..
(if unspecified, then it is 'dialog' for child windows)">
# you may set only one of name/class/role/title/type, or you may use more
# than one together to restrict your matches.
# the name, class, role, and title use simple wildcard matching such as those
# used by a shell. you can use * to match any characters and ? to match
# any single character.
# the type is one of: normal, dialog, splash, utility, menu, toolbar, dock,
# or desktop
# when multiple rules match a window, they will all be applied, in the
# order that they appear in this list
# each rule element can be left out or set to 'default' to specify to not
# change that attribute of the window
<decor>yes</decor>
# enable or disable window decorations
<shade>no</shade>
# make the window shaded when it appears, or not
<position force="no">
# the position is only used if both an x and y coordinate are provided
# (and not set to 'default')
# when force is "yes", then the window will be placed here even if it
# says you want it placed elsewhere. this is to override buggy
# applications who refuse to behave
<x>center</x>
# a number like 50, or 'center' to center on screen. use a negative number
# to start from the right (or bottom for <y>), ie -50 is 50 pixels from
# the right edge (or bottom). use 'default' to specify using value
# provided by the application, or chosen by openbox, instead.
<y>200</y>
<monitor>1</monitor>
# specifies the monitor in a xinerama setup.
# 1 is the first head, or 'mouse' for wherever the mouse is
</position>
<size>
# the size to make the window.
<width>20</width>
# a number like 20, or 'default' to use the size given by the application.
# you can use fractions such as 1/2 or percentages such as 75% in which
# case the value is relative to the size of the monitor that the window
# appears on.
<height>30%</height>
</size>
<focus>yes</focus>
# if the window should try be given focus when it appears. if this is set
# to yes it doesn't guarantee the window will be given focus. some
# restrictions may apply, but Openbox will try to
<desktop>1</desktop>
# 1 is the first desktop, 'all' for all desktops
<layer>normal</layer>
# 'above', 'normal', or 'below'
<iconic>no</iconic>
# make the window iconified when it appears, or not
<skip_pager>no</skip_pager>
# asks to not be shown in pagers
<skip_taskbar>no</skip_taskbar>
# asks to not be shown in taskbars. window cycling actions will also
# skip past such windows
<fullscreen>yes</fullscreen>
# make the window in fullscreen mode when it appears
<maximized>true</maximized>
# 'Horizontal', 'Vertical' or boolean (yes/no)
</application>
# end of the example
-->
</applications>
</openbox_config>
view raw rc.xml hosted with ❤ by GitHub

Settings for tint2

As you may have noticed in the initial screenshot, I use two panels: one placed in the bottom of the screen and another one on top. I always use the top panel to place the applets, the clock and the action buttons to shutdown the computer, reboot it or finish my session; and then I leave the second panel to add a button to open the applications menu, show the list of running tasks in the middle of it and put a button to minimize/restore running apps. To achieve that with tint2, we only need to start two instances of it with different settings.

The first settings file you’ll need to edit is the default one. Just open ~/.config/tint2/tint2rc and replace its content with the following:

#---- Generated by tint2conf 5a80 ----
# See https://gitlab.com/o9000/tint2/wikis/Configure for
# full documentation of the configuration options.
#-------------------------------------
# Gradients
#-------------------------------------
# Backgrounds
# Background 1: Panel
rounded = 12
border_width = 0
border_sides = TBLR
border_content_tint_weight = 0
background_content_tint_weight = 0
background_color = #000000 18
border_color = #000000 30
background_color_hover = #000000 60
border_color_hover = #000000 30
background_color_pressed = #000000 60
border_color_pressed = #000000 30
# Background 2: Minimized task, Default task
rounded = 10
border_width = 1
border_sides = B
border_content_tint_weight = 0
background_content_tint_weight = 0
background_color = #000000 0
border_color = #ffffff 100
background_color_hover = #555555 4
border_color_hover = #adadad 100
background_color_pressed = #000000 0
border_color_pressed = #8d8d8d 100
# Background 3: Launcher
rounded = 0
border_width = 0
border_sides =
border_content_tint_weight = 0
background_content_tint_weight = 0
background_color = #2d2d2d 50
border_color = #000000 0
background_color_hover = #aaaaaa 22
border_color_hover = #eaeaea 44
background_color_pressed = #555555 4
border_color_pressed = #eaeaea 44
# Background 4: Urgent task
rounded = 4
border_width = 1
border_sides = TBLR
border_content_tint_weight = 0
background_content_tint_weight = 0
background_color = #aa4400 100
border_color = #aa7733 100
background_color_hover = #cc7700 100
border_color_hover = #aa7733 100
background_color_pressed = #555555 4
border_color_pressed = #aa7733 100
# Background 5: Popup message
rounded = 1
border_width = 1
border_sides = TBLR
border_content_tint_weight = 0
background_content_tint_weight = 0
background_color = #222222 100
border_color = #333333 100
background_color_hover = #ffffaa 100
border_color_hover = #000000 100
background_color_pressed = #ffffaa 100
border_color_pressed = #000000 100
# Background 6: Battery
rounded = 18
border_width = 1
border_sides =
border_content_tint_weight = 0
background_content_tint_weight = 0
background_color = #555555 4
border_color = #bf3f3f 0
background_color_hover = #aaaaaa 22
border_color_hover = #eaeaea 44
background_color_pressed = #555555 4
border_color_pressed = #eaeaea 44
# Background 7: System tray
rounded = 0
border_width = 0
border_sides = TBLR
border_content_tint_weight = 0
background_content_tint_weight = 0
background_color = #000000 0
border_color = #000000 0
background_color_hover = #f6f5f4 100
border_color_hover = #000000 0
background_color_pressed = #ffffff 100
border_color_pressed = #000000 0
# Background 8: Active task
rounded = 8
border_width = 2
border_sides = B
border_content_tint_weight = 0
background_content_tint_weight = 0
background_color = #000000 0
border_color = #e82127 100
background_color_hover = #555555 4
border_color_hover = #ee595d 100
background_color_pressed = #555555 4
border_color_pressed = #ae1910 100
#-------------------------------------
# Panel
panel_items = PTP
panel_size = 45% 40
panel_margin = 0 0
panel_padding = 10 0 5
panel_background_id = 1
wm_menu = 1
panel_dock = 0
panel_pivot_struts = 0
panel_position = bottom center horizontal
panel_layer = top
panel_monitor = all
panel_shrink = 0
autohide = 1
autohide_show_timeout = 0.4
autohide_hide_timeout = 1
autohide_height = 1
strut_policy = none
panel_window_name = tint2_bottom
disable_transparency = 0
mouse_effects = 1
font_shadow = 0
mouse_hover_icon_asb = 100 0 10
mouse_pressed_icon_asb = 100 0 0
scale_relative_to_dpi = 0
scale_relative_to_screen_height = 0
#-------------------------------------
# Taskbar
taskbar_mode = single_desktop
taskbar_hide_if_empty = 0
taskbar_padding = 0 0 2
taskbar_background_id = 0
taskbar_active_background_id = 0
taskbar_name = 0
taskbar_hide_inactive_tasks = 0
taskbar_hide_different_monitor = 0
taskbar_hide_different_desktop = 0
taskbar_always_show_all_desktop_tasks = 0
taskbar_name_padding = 2 2
taskbar_name_background_id = 0
taskbar_name_active_background_id = 0
taskbar_name_font_color = #e3e3e3 100
taskbar_name_active_font_color = #ffffff 100
taskbar_distribute_size = 0
taskbar_sort_order = none
task_align = center
#-------------------------------------
# Task
task_text = 0
task_icon = 1
task_centered = 1
urgent_nb_of_blink = 100000
task_maximum_size = 40 40
task_padding = 2 2 4
task_tooltip = 1
task_thumbnail = 1
task_thumbnail_size = 350
task_font_color = #ffffff 100
task_background_id = 2
task_active_background_id = 8
task_urgent_background_id = 4
task_iconified_background_id = 2
mouse_left = toggle_iconify
mouse_middle = none
mouse_right = close
mouse_scroll_up = none
mouse_scroll_down = none
#-------------------------------------
# System tray (notification area)
systray_padding = 0 4 2
systray_background_id = 7
systray_sort = ascending
systray_icon_size = 25
systray_icon_asb = 100 0 0
systray_monitor = 1
systray_name_filter =
#-------------------------------------
# Launcher
launcher_padding = 2 4 2
launcher_background_id = 3
launcher_icon_background_id = 0
launcher_icon_size = 24
launcher_icon_asb = 100 0 0
launcher_icon_theme_override = 0
startup_notifications = 1
launcher_tooltip = 1
#-------------------------------------
# Clock
time1_format = %I:%M %p
time2_format = %a., %d de %b de %Y
time1_timezone =
time2_timezone =
clock_font_color = #ffffff 100
clock_padding = 2 0
clock_background_id = 0
clock_tooltip =
clock_tooltip_timezone =
clock_lclick_command =
clock_rclick_command = orage
clock_mclick_command =
clock_uwheel_command =
clock_dwheel_command =
#-------------------------------------
# Battery
battery_tooltip = 1
battery_low_status = 21
battery_low_cmd = xmessage 'tint2: Battery low!'
battery_full_cmd =
bat1_font = Sans Bold 10
bat2_font = Sans 8
battery_font_color = #ffffff 100
bat1_format = %p
bat2_format = (%s)
battery_padding = 1 0
battery_background_id = 6
battery_hide = 101
battery_lclick_command =
battery_rclick_command =
battery_mclick_command =
battery_uwheel_command =
battery_dwheel_command =
ac_connected_cmd =
ac_disconnected_cmd =
#-------------------------------------
# Button 1
button = new
button_icon = ~/ic_menu.png
button_text =
button_tooltip = Show applications menu
button_lclick_command = jgmenu_run
button_rclick_command =
button_mclick_command =
button_uwheel_command =
button_dwheel_command =
button_font_color = #f7f7f7 100
button_padding = 0 0
button_background_id = 0
button_centered = 1
button_max_icon_size = 32
#-------------------------------------
# Button 2
button = new
button_icon = desktop
button_text =
button_tooltip = Show desktop
button_lclick_command = xdotool key --clearmodifiers Super+d
button_rclick_command =
button_mclick_command =
button_uwheel_command =
button_dwheel_command =
button_font_color = #000000 100
button_padding = 0 0
button_background_id = 0
button_centered = 1
button_max_icon_size = 32
#-------------------------------------
# Tooltip
tooltip_show_timeout = 0.5
tooltip_hide_timeout = 0.1
tooltip_padding = 4 4
tooltip_background_id = 5
tooltip_font_color = #ffffff 100
tooltip_font = Noto Sans 12
view raw tint2rc hosted with ❤ by GitHub

To finalize the configuration of the bottom panel of tint2, you’ll only have to place an image icon at your home directory with the name ic_menu.png. That picture file will be the source for the image that will be showed in the button of the panel to show the applications menu.

After that, you need to define the settings for the top panel. As you may have noticed after reading the list of programs that will run with Openbox, the file you need to create and edit is ~/.config/tint2/tint2rc_top. Just create it, open it and paste the following inside of it:

#---- Generated by tint2conf 5006 ----
# See https://gitlab.com/o9000/tint2/wikis/Configure for
# full documentation of the configuration options.
#-------------------------------------
# Gradients
#-------------------------------------
# Backgrounds
# Background 1: Panel
rounded = 12
border_width = 0
border_sides = TBLR
border_content_tint_weight = 0
background_content_tint_weight = 0
background_color = #000000 18
border_color = #000000 30
background_color_hover = #000000 60
border_color_hover = #000000 30
background_color_pressed = #000000 60
border_color_pressed = #000000 30
# Background 2: Popup message
rounded = 1
border_width = 1
border_sides = TBLR
border_content_tint_weight = 0
background_content_tint_weight = 0
background_color = #222222 100
border_color = #333333 100
background_color_hover = #ffffaa 100
border_color_hover = #000000 100
background_color_pressed = #ffffaa 100
border_color_pressed = #000000 100
# Background 3: Battery
rounded = 18
border_width = 1
border_sides =
border_content_tint_weight = 0
background_content_tint_weight = 0
background_color = #555555 4
border_color = #bf3f3f 0
background_color_hover = #aaaaaa 22
border_color_hover = #eaeaea 44
background_color_pressed = #555555 4
border_color_pressed = #eaeaea 44
# Background 4: System tray
rounded = 0
border_width = 0
border_sides = TBLR
border_content_tint_weight = 0
background_content_tint_weight = 0
background_color = #000000 0
border_color = #000000 0
background_color_hover = #f6f5f4 100
border_color_hover = #000000 0
background_color_pressed = #ffffff 100
border_color_pressed = #000000 0
#-------------------------------------
# Panel
panel_items = PPPFCFS:
panel_size = 60% 32
panel_margin = 0 0
panel_padding = 10 0 5
panel_background_id = 1
wm_menu = 1
panel_dock = 0
panel_pivot_struts = 0
panel_position = top center horizontal
panel_layer = top
panel_monitor = all
panel_shrink = 0
autohide = 1
autohide_show_timeout = 1
autohide_hide_timeout = 1
autohide_height = 1
strut_policy = none
panel_window_name = tint2_top
disable_transparency = 0
mouse_effects = 1
font_shadow = 0
mouse_hover_icon_asb = 100 0 10
mouse_pressed_icon_asb = 100 0 0
scale_relative_to_dpi = 0
scale_relative_to_screen_height = 0
#-------------------------------------
# Taskbar
taskbar_mode = single_desktop
taskbar_hide_if_empty = 0
taskbar_padding = 0 0 2
taskbar_background_id = 0
taskbar_active_background_id = 0
taskbar_name = 0
taskbar_hide_inactive_tasks = 0
taskbar_hide_different_monitor = 0
taskbar_hide_different_desktop = 0
taskbar_always_show_all_desktop_tasks = 0
taskbar_name_padding = 2 2
taskbar_name_background_id = 0
taskbar_name_active_background_id = 0
taskbar_name_font_color = #e3e3e3 100
taskbar_name_active_font_color = #ffffff 100
taskbar_distribute_size = 0
taskbar_sort_order = none
task_align = center
#-------------------------------------
# Task
task_text = 0
task_icon = 1
task_centered = 1
urgent_nb_of_blink = 100000
task_maximum_size = 40 40
task_padding = 2 2 4
task_tooltip = 1
task_thumbnail = 1
task_thumbnail_size = 350
task_font_color = #ffffff 100
task_background_id = 0
task_active_background_id = 0
task_urgent_background_id = 0
task_iconified_background_id = 0
mouse_left = toggle_iconify
mouse_middle = none
mouse_right = close
mouse_scroll_up = none
mouse_scroll_down = none
#-------------------------------------
# System tray (notification area)
systray_padding = 0 4 2
systray_background_id = 4
systray_sort = left2right
systray_icon_size = 25
systray_icon_asb = 100 0 0
systray_monitor = 1
systray_name_filter =
#-------------------------------------
# Launcher
launcher_padding = 2 4 2
launcher_background_id = 0
launcher_icon_background_id = 0
launcher_icon_size = 24
launcher_icon_asb = 100 0 0
launcher_icon_theme_override = 0
startup_notifications = 1
launcher_tooltip = 1
#-------------------------------------
# Clock
time1_format = %I:%M %p - %a., %d de %b de %Y
time2_format =
time1_timezone =
time2_timezone =
clock_font_color = #ffffff 100
clock_padding = 2 0
clock_background_id = 0
clock_tooltip =
clock_tooltip_timezone =
clock_lclick_command =
clock_rclick_command = orage
clock_mclick_command =
clock_uwheel_command =
clock_dwheel_command =
#-------------------------------------
# Battery
battery_tooltip = 1
battery_low_status = 21
battery_low_cmd = xmessage 'tint2: Battery low!'
battery_full_cmd =
bat1_font = Sans Bold 10
bat2_font = Sans 7
battery_font_color = #ffffff 100
bat1_format = %p
bat2_format = (%s)
battery_padding = 0 0
battery_background_id = 3
battery_hide = 101
battery_lclick_command =
battery_rclick_command =
battery_mclick_command =
battery_uwheel_command =
battery_dwheel_command =
ac_connected_cmd =
ac_disconnected_cmd =
#-------------------------------------
# Separator 1
separator = new
separator_background_id = 0
separator_color = #777777 80
separator_style = empty
separator_size = 10
separator_padding = 1 0
#-------------------------------------
# Button 1
button = new
button_icon = system-shutdown
button_text =
button_tooltip = Shutdown
button_lclick_command = systemctl -i poweroff
button_rclick_command =
button_mclick_command =
button_uwheel_command =
button_dwheel_command =
button_font_color = #f7f7f7 100
button_padding = 0 0
button_background_id = 0
button_centered = 1
button_max_icon_size = 25
#-------------------------------------
# Button 2
button = new
button_icon = system-reboot
button_text =
button_tooltip = Reboot
button_lclick_command = systemctl -i reboot
button_rclick_command =
button_mclick_command =
button_uwheel_command =
button_dwheel_command =
button_font_color = #000000 100
button_padding = 0 0
button_background_id = 0
button_centered = 1
button_max_icon_size = 25
#-------------------------------------
# Button 3
button = new
button_icon = system-log-out
button_text =
button_tooltip = Logout
button_lclick_command = openbox --exit
button_rclick_command =
button_mclick_command =
button_uwheel_command =
button_dwheel_command =
button_font_color = #000000 100
button_padding = 0 0
button_background_id = 0
button_centered = 1
button_max_icon_size = 25
#-------------------------------------
# Tooltip
tooltip_show_timeout = 0.5
tooltip_hide_timeout = 0.1
tooltip_padding = 4 4
tooltip_background_id = 2
tooltip_font_color = #ffffff 100
tooltip_font = Noto Sans 12
view raw tint2rc_top hosted with ❤ by GitHub

Settings for jgmenu

When you read the guides to set up jgmenu, you will find that it is pretty customizable and that you can give your own touch to it with ease. In my case, as I use a dark red theme for Openbox, I setted it to match that theme; but you can make it look the way you want by just following the guides to set it up.

My current setup for jgmenu requires three files. The first file you need to create or modify is ~/.config/jgmenu/jgmenurc. You only need to copy and paste the following lines inside of it:

tint2_look = 0
position_mode = ipc
menu_width = 250
menu_height_mode = dynamic
menu_padding_top = 45
menu_padding_right = 8
menu_padding_bottom = 8
menu_padding_left = 8
menu_radius = 12
menu_border = 0
item_height = 38
item_radius = 12
font = Noto Sans Regular 12
icon_size = 32
color_title_bg = #c21419 100
color_title_border = #c21419 100
color_title_fg = #ffffff 100
sep_halign = center
color_menu_bg = #1F1F1F 65
color_norm_fg = #ffffff 100
color_sel_bg = #e82127 80
color_sel_border = #e82127 100
color_sel_fg = #ffffff 100
arrow_string = »
view raw jgmenurc hosted with ❤ by GitHub

The next file you need to create or modify is ~/.config/jgmenu/append.csv. Then just replace its content with the following:

^sep()
Logout, openbox --exit, system-log-out
Power options, ^checkout(energy), system
^tag(energy)
Suspend, systemctl -i suspend, system-suspend
Reboot, systemctl -i reboot, system-reboot
Shutdown, systemctl -i poweroff, system-shutdown
view raw append hosted with ❤ by GitHub

After doing that, the last file you need to create is ~/.config/jgmenu/prepend.csv and, then, just replace its content with the following:

@rect,,10,10,230,30,5,left,top,auto,#000000 0,
@search,,14,14,230,20,0,left,top,auto,#000000 0,Search application...
@text,,210,15,23,23,0,left,top,#ffffff 255,#000000 0,🔍
view raw prepend hosted with ❤ by GitHub

What we just did was to define the settings of jgmenu while adding some special items at the top and bottom parts of the menu that jgmenu will render. In the ~/.config/jgmenu/append.csv file is where we define the set of stuffs that will be showed in the bottom part of the rendered menu while at the ~/.config/jgmenu/prepend.csv file we define the stuffs that will be showed at the top part of the rendered menu. In this case, we are adding a search box on top of the menu while placing a button to finish the session and grouping other buttons to suspend, reboot or shutdown the computer from the menu on the bottom.

Picom settings

I left Picom as the last one because is the one I think that will cause more “troubles” outside of Arch. Even when its settings are almost the same everywhere, if you don’t use Arch, I truly recommend you to read the documentations of the distro you are using to find out the version they are currently distributing in their official repositories and find information of the settings available there for Picom. You will also have to read the docs and experiment a bit with the backends they provide to get to the best result for you. Another thing that you must have in mind is that the settings I’ll place here were made while using the newest versions of the backends and that some issues may appear if you use them with the legacy backends.

To set up Picom, all you have to do is to create a file named picom.conf and place it either at the ~/.config directory or at the ~/.config/picom directory. The directory you choose to place the file doesn’t make much difference, but it is usually located at ~/.config.

Once you’ve created the picom.conf file, just open it and put the following lines inside of it:

shadow = true; # This enables shadows for windows
fading = true; # This enables the fade in and fade out animations
backend = "glx"; # This sets GLX as the default backend
vsync = true; # This enables vertical syncronization
corner-radius = 12; # This sets how rounded the windows will be
shadow-radius = 20; # This sets how scattered the shadows will be
shadow-opacity = 0.7; # This sets the opacity of the shadows
shadow-color = "#252525"; # This sets the color of the shadows
shadow-offset-x = -20; # This sets the horizontal displacement of shadows
shadow-offset-y = -20; # This sets the vertical displacement of shadows
blur-method = "dual_kawase"; # This sets the method to blur the backgrounds
blur-strength = 3; # This sets the strength of the blur
wintypes: # These are individual settings for determined types of windows
{
tooltip = { opacity = 0.75; };
popup_menu = { opacity = 0.92; }
dropdown_menu = { opacity = 0.92; }
menu = { opacity = 0.92; }
dialog = { opacity = 0.97; }
combo = { shadow = false; opacity = 0.85; }
};
view raw picom.conf hosted with ❤ by GitHub

Additional recommendations

By following this guide and performing the aforementioned configurations, we are able to get a pretty good looking, minimalistic and functional workplace indeed; but we may be still missing some components like, for example, a file manager app, an application to configure GTK themes, a text editor, a calculator, a web browser or a media player. For those tasks and any other remaining customization tasks like, for example, customizing the mouse pointer, all I can say is that I encourage you to find the solutions that suits you the best.

Just in case you wonder, I personally use Nemo as file manager. I also use the GTK+ 3 version of LXAppearance to configure the GTK themes, Xed as text editor, galculator as calculator app, Chromium is my web browser, SMPlayer is my media player and I haven’t customized anything else… yet.

I hope this guide has been helpful for you and, please, always have in mind that the customizations I shared here were done by me to build my own environment and I decided to share them as a guide for people who may not know how to turn Openbox into more than just a black screen, for those who may want to customize Openbox quickly and for anybody else that may find here some piece of information they may find helpful. Feel free to modify the settings you find here as much as you want and, please, leave an upvote here and/or at the original Medium article if you found this article helpful.

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more