labwc-theme(5)
πΈ NAME πΈ
okay so bestie, this is labwc-theme(5), aka the File Formats Manual page for labwc theme files π β yes, the whole vibe is: how theming works, what every theme key means, and how to make your desktop look iconic without breaking anything.
π¦ THEME π¦
The theme engine lowkey aims to be compatible with openbox, and themes get searched for in this exact order:
${XDG_DATA_HOME:-$HOME/.local/share}/themes/<theme-name>/labwc/$HOME/.themes/<theme-name>/labwc//usr/share/themes/<theme-name>/labwc//usr/local/share/themes/<theme-name>/labwc//opt/share/themes/<theme-name>/labwc/${XDG_DATA_HOME:-$HOME/.local/share}/themes/<theme-name>/openbox-3/$HOME/.themes/<theme-name>/openbox-3//usr/share/themes/<theme-name>/openbox-3//usr/local/share/themes/<theme-name>/openbox-3//opt/share/themes/<theme-name>/openbox-3/
When $XDG_DATA_HOME is defined, it replaces (rather than augments) $HOME/.local/share. The same is the case for $XDG_DATA_DIRS and /usr/share/.
Choosing a theme is done by editing the <name> key in the <theme> section of the rc.xml configuration file (labwc-config(5)).
A theme consists of a themerc file and optionally some titlebar icons (referred to as buttons).
Theme settings specified in themerc can be overridden by creating a themerc-override file in the configuration directory, which is normally $HOME/.config/labwc/ but can be a few other locations as described in labwc-config(5).
β¨ DATA TYPES β¨
π¨ color
Colors can be specified by name or hexadecimal Red-Green-Blue (RGB) value:
color name refers to βX11 color nameβ, for example: 'white', 'grey40', 'pink' and 'peach puff'. More information can be found here:
- http://en.wikipedia.org/wiki/Web_colors#X11_color_names
- http://en.wikipedia.org/wiki/X11_color_names
- https://github.com/labwc/labwc/blob/master/src/common/rgb.txt
RGB value:
#rrggbb(hexadecimal RGB values)#rrggbb aaa(same but with decimal alpha value percentage)#rrggbbaa(same but with inline alpha value in hex encoding)#rgb(hexadecimal RGB values where#fffis shorthand for#f0f0f0) (since 0.9.0)
Note: the #rrggbb aaa notation is deprecated starting from labwc 0.7.2 and may be removed in future releases. π
π justification
Justification determines the horizontal alignment of text. Valid options are Left, Center and Right.
π§΅ textures
Textures determine the visual look of an element. They are specified through a text string with a number of fields. Capitalization is not significant. The format is as follows:
(Solid | Gradient <type>)
.. where | stands for βorβ.
Solidmeans that the background of the texture is filled with a single color. The texture must be accompanied by a single color field. For example:
window.*.title.bg: Solid
window.*.title.bg.color: #f8f5f2
Gradientmeans that the background of the texture is filled with a gradient from one color to another. WhenGradientis specified, it must be followed by the gradientβs type. It must also be accompanied by the fieldscolorandcolorTo. Valid gradient types are: (1)Verticalwhere the gradient goes from the top edge to the bottom (2)SplitVerticalwhere the gradient is split in the middle and goes out toward the top and bottom edges.SplitVerticalgradients have two extra, optional color fields:color.splitToandcolorTo.splitTo. These colors are the light colors used on the far top and bottom of theSplitVerticalgradient. When these are omitted, the default values for these arecolor x 5/4andcolorTo x 17/16. Examples:
# Vertical gradient
window.*.title.bg: Gradient Vertical
window.*.title.bg.color: #658fb5
window.*.title.bg.colorTo: #4d6982
# SplitVertical gradient
window.*.title.bg: Gradient SplitVertical
window.*.title.bg.color: #658fb5
window.*.title.bg.color.splitTo: #7595b9
window.*.title.bg.colorTo: #4d6982
window.*.title.bg.colorTo.splitTo: #557485
π THEME ELEMENTS π
border.widthβ Line width (integer) of border drawn around window frames. Default is1.window.titlebar.padding.widthβ Horizontal titlebar padding size, in pixels, between border and first button on the left/right. Default is0.window.titlebar.padding.heightβ Vertical titlebar padding size, in pixels. Default is0.window.active.border.colorβ Border color of active window. Default is#aaaaaa.window.inactive.border.colorβ Border color of inactive window. Default is#aaaaaa.window.active.indicator.toggled-keybind.colorβ Status indicator for theToggleKeybindsaction. Can be set to the same value as set forwindow.active.border.colorto disable the status indicator. Default is#ff0000.window.active.title.bgβ Texture for the focused windowβs titlebar. See texture section above. Default isSolid.window.active.title.bg.colorβ Background color for the focused windowβs titlebar. See texture section for additional color fields associated with gradients. Default is#e1dedb.window.inactive.title.bgβ Texture for non-focused windowsβ titlebars. See texture section above. Default isSolid.window.inactive.title.bg.colorβ Background color for non-focused windowsβ titlebars. See texture section for additional color fields associated with gradients. Default is#f6f5f4.window.active.label.text.colorβ Text color for the focused windowβs titlebar. Default is#000000.window.inactive.label.text.colorβ Text color non-focused windowsβ titlebars. Default is#000000.window.label.text.justifyβ Specifies how window titles are aligned in the titlebar for both focused and unfocused windows. Type justification. Default isCenter.window.button.widthβ Width of a titlebar button, in pixels. Default is26.window.button.heightβ Height of a titlebar button, in pixels. Default is26.window.button.spacingβ Space between titlebar buttons, in pixels. Default is0.
Note: The window.button.hover namespace (below) relates to button hover overlay effects which work with all buttons including svg, png and xbm.
Thewindow.button.hovereffects are only shown if there is no corresponding hover icon, likeclose_hover-active.svg.
Openbox only supports hover effects rendered behind buttons which makes sense for the xbm format, but not for others. For reference, these are defined bywindow.active|inactive.button.STATE.bgwhereSTATEcan be any ofpressed,hoveranddisabled. These are not (yet) supported by labwc and are mentioned here for comparison only.
window.button.hover.bg.colorβ Color of the hover effect of a titlebar button. Default is#80808020.window.button.hover.bg.corner-radiusβ Radius of the hover effect of a titlebar button, in pixels. Default is0.
Note: for a circular hover effect, setwindow.button.widthandwindow.button.heightequal andwindow.button.hover.bg.corner-radiushalf of them. π―
window.active.button.unpressed.image.colorβ Color of the images in titlebar buttons in their default, unpressed, state. This element is for the focused window. Default is#000000.window.inactive.button.unpressed.image.colorβ Color of the images in titlebar buttons in their default, unpressed, state. This element is for non-focused windows. Default is#000000.
Note: Button elements (i.e.window.[in]active.button.*) may be defined uniquely for each type of button ("menu","iconify","max","shade","desk"or"close") by appending the type after the"button"node. For example:
window.active.button.iconify.unpressed.image.colorindicates the color of the iconify button for active windows; whilewindow.inactive.button.close.unpressed.image.colorindicates the color of the close button for inactive windows.
This syntax is not documented by Openbox, but is supported and is used by many popular themes. For the sake of brevity, these elements are not listed here, but all are supported.
window.active.shadow.sizeβ Size of the drop-shadow for the focused window, in pixels. Default is60.window.inactive.shadow.sizeβ Size of drop-shadows for non-focused windows, in pixels. Default is40.window.active.shadow.colorβ Color of the drop-shadow for the focused window, including opacity. Default is#00000060(black with 38% opacity).window.inactive.shadow.colorβ Color of drop-shadows for non-focused windows, including opacity. Default is#00000040(black with 25% opacity).menu.overlap.xβ Horizontal overlap in pixels between submenus and their parents. A positive value move submenus over the top of their parents, whereas a negative value creates a gap between submenus and their parents. Default is0.menu.overlap.yβ Vertical offset in pixels between submenus and their parents. Positive values for downwards and negative for upwards. Default is0.menu.width.minβ Minimal width for menus. Default is20. A fixed width can be achieved by setting.minand.maxto the same value.menu.width.maxβ Maximal width for menus. Default is200. A fixed width can be achieved by setting.minand.maxto the same value.menu.border.widthβ Border width of menus in pixels. Inheritsborder.widthif not set.menu.border.colorβ Border color of menus. Inheritswindow.active.border.colorif not set.menu.items.padding.xβ Horizontal padding of menu text entries in pixels. Default is7.menu.items.padding.yβ Vertical padding of menu text entries in pixels. Default is4.menu.items.bg.colorβ Background color of inactive menu items. Default is#fcfbfa.menu.items.text.colorβ Text color of inactive menu item. Default is#000000.menu.items.active.bg.colorβ Background color of active menu items. Default is#e1dedb.menu.items.active.text.colorβ Text color of active menu item. Default is#000000.menu.separator.widthβ Line thickness of menu separators. Default is1.menu.separator.padding.widthβ Space on the left and right side of each separator line. Default is6.menu.separator.padding.heightβ Space above and below each separator line. Default is3.menu.separator.colorβ Menu separator color. Default is#888888.menu.title.bg.colorβ Menu title color. Default is#589bda. Note: A menu title is a separator with a label.menu.title.text.justifyβ tells you how the menu titles line up in the titlebar β¨ type isjustification, default isCenter. centered queen behavior, periodt.menu.title.text.colorβ the text color of the separator label π default#ffffff.osd.bg.colorβ background color of the on-screen-display π¦ if you don't set it, it inheritswindow.active.title.bg.color.osd.border.colorβ border color of the on-screen-display π inheritsosd.label.text.colorif you leave it blank.osd.border.widthβ border width of the on-screen-display πΈ inheritsborder.widthif not set.osd.label.text.colorβ text color of the on-screen-display π inheritswindow.active.label.text.colorif not set.osd.window-switcher.style-classicβ the theme for the window switcher when you're using<windowSwitcher style="classic" />β the deets are down below.osd.window-switcher.style-classic.widthβ width of the window switcher in pixels π you can also do a percentage of the monitor width by sticking'%'on the end (like70%). default is600.osd.window-switcher.style-classic.paddingβ padding of the window switcher in pixels, aka the space between the window-switcher border and its items π«Ά default is4.osd.window-switcher.style-classic.item.padding.xβ horizontal padding of window switcher entries, in pixels β¨ default is10.osd.window-switcher.style-classic.item.padding.yβ vertical padding of window switcher entries, in pixels π default is1.osd.window-switcher.style-classic.item.active.border.widthβ border width of the selection box in the window switcher, in pixels π₯ default is2.osd.window-switcher.style-classic.item.active.border.colorβ the border color around the selected window switcher item π default isosd.label.text.colorwith 50% opacity.osd.window-switcher.style-classic.item.active.bg.colorβ background color of the selected window switcher item π default isosd.label.text.colorwith 15% opacity.osd.window-switcher.style-classic.item.icon.sizeβ size of the icon in the window switcher, in pixels π if you don't set it, the font size derived from<theme><font place="OnScreenDisplay">gets used instead.osd.window-switcher.style-thumbnailβ the theme for the window switcher when you're using<windowSwitcher style="thumbnail" />π¦ details below.osd.window-switcher.style-thumbnail.width.maxβ maximum width of the window switcher in pixels π again,'%'suffix works for a percentage of the monitor width (like70%). default is80%.osd.window-switcher.style-thumbnail.paddingβ padding of the window switcher in pixels, meaning the space between the window-switcher border and its items πΈ default is4.osd.window-switcher.style-thumbnail.item.widthβ width of window switcher items in pixels β default is300.osd.window-switcher.style-thumbnail.item.heightβ height of window switcher items in pixels π default is250.osd.window-switcher.style-thumbnail.item.paddingβ padding of window switcher items in pixels, aka the space between the border around selected items and the window thumbnail π«Ά default is2.osd.window-switcher.style-thumbnail.item.active.border.widthβ border width of selected window switcher items in pixels π₯ default is2.osd.window-switcher.style-thumbnail.item.active.border.colorβ color of the border around selected window switcher items π default isosd.label.text.colorwith 50% opacity.osd.window-switcher.style-thumbnail.item.active.bg.colorβ color of selected window switcher items π default isosd.label.text.colorwith 15% opacity.osd.window-switcher.style-thumbnail.item.icon.sizeβ size of the window icons in window switcher items, in pixels π default is60.osd.window-switcher.preview.border.widthβ border width of the outlines shown as the preview of the window selected by the window switcher π¦ inheritsosd.border.widthif not set.osd.window-switcher.preview.border.colorβ color(s) of the outlines shown as the preview of the window selected by the window switcher β¨ possible value is a color, or up to 3 colors separated by commas (like"#ffffff,#000000,#ffffff"). when multiple colors are given, a multi-line rectangle gets drawn with each line having the color you specified π if not set, this inherits the on-screen-display theme ("[osd.bg.color],[osd.label.text.color],[osd.bg.color]").osd.workspace-switcher.boxes.widthβ width of boxes in the workspace switcher, in pixels π setting it to0disables boxes. default is20.osd.workspace-switcher.boxes.heightβ height of boxes in the workspace switcher, in pixels πΈ setting it to0disables boxes. default is20.osd.workspace-switcher.boxes.border.widthβ border width of boxes in the workspace switcher, in pixels π₯ default is2.snapping.overlay.region.bg.enabled[yes|no] β shows a filled rectangle as an overlay when a window is snapped to a region π default isyesfor hardware-based renderers andnofor software-based renderers.snapping.overlay.edge.bg.enabled[yes|no] β shows a filled rectangle as an overlay when a window is snapped to an edge π«Ά default isyesfor hardware-based renderer andnofor software-based renderers.snapping.overlay.region.border.enabled[yes|no] β shows an outlined rectangle as an overlay when a window is snapped to a region β default isnofor hardware-based renderers andyesfor software-based renderers.snapping.overlay.edge.border.enabled[yes|no] β shows an outlined rectangle as an overlay when a window is snapped to an edge π¦ default isnofor hardware-based renderer andyesfor software-based renderers.snapping.overlay.region.bg.colorβ color of the filled rectangle shown as an overlay when a window is snapped to a region π default is#8080b380.snapping.overlay.edge.bg.colorβ color of the filled rectangle shown as an overlay when a window is snapped to an edge π default is#8080b380.snapping.overlay.region.border.widthβ border width of the outlined rectangle shown as an overlay when a window is snapped to a region π inheritsosd.border.widthif not set.snapping.overlay.edge.border.widthβ border width of the outlined rectangle shown as an overlay when a window is snapped to an edge π inheritsosd.border.widthif not set.snapping.overlay.region.border.colorβ color(s) of the outlined rectangle shown as an overlay when a window is snapped to a region β¨ possible values and the default value are the same as those ofosd.window-switcher.preview.border.color.snapping.overlay.edge.border.colorβ color(s) of the outlined rectangle shown as an overlay when a window is snapped to an edge πΈ possible values and the default value are the same as those ofosd.window-switcher.preview.border.color.border.colorβ sets bothwindow.active.border.colorandwindow.inactive.border.colorπ heads up bestie, this one is obsolete, but it's still supported for backward compatibility since some themes still contain it.magnifier.border.widthβ width of the magnifier window border, in pixels π₯ default is1.magnifier.border.colorβ color of the magnifier window border π default is#ff0000(red).
π BUTTONS π
okay so the images used for the titlebar icons are what we call buttons π
these are the image formats we support β they're listed in order of precedence, meaning the first format in the list is the one searched for first β
pngsvgxbm
by default, buttons are 1-bit xbm (X Bitmaps) π¦ these are masks where 0=clear and 1=colored. the xbm image files live in the same directory as the themerc file inside a particular theme β¨ here are the xbm buttons you get:
max.xbmiconify.xbmclose.xbmmenu.xbmmax_toggled.xbmdesk.xbmdesk_toggled.xbmshade.xbmshade_toggled.xbm
you can also define extra icons to show when the mouse pointer is hovering over the button in question π«Ά
max_hover.xbmiconify_hover.xbmclose_hover.xbmmenu_hover.xbmmax_toggled_hover.xbmdesk_hover.xbmdesk_toggle_hover.xbmshade_hover.xbmshade_toggle_hover.xbm
one big advantage of xbm buttons over other formats is that they change color based on the theme π other formats use the suffices "-active" and "-inactive" to align with the respective titlebar colors. for example: "close-active.png" π
for compatibility reasons, these alternative names are supported for xbm files πΈ
max_hover_toggled.xbmformax_toggled_hover.xbm
when you're using png or svg icons, for the full theme experience you should add all of the following icons π no cap, all of them:
close-active.[png|svg]close_hover-active.[png|svg]close_hover-inactive.[png|svg]close-inactive.[png|svg]iconify-active.[png|svg]iconify_hover-active.[png|svg]iconify_hover-inactive.[png|svg]iconify-inactive.[png|svg]max-active.[png|svg]max_hover-active.[png|svg]max_hover-inactive.[png|svg]max-inactive.[png|svg]max_toggled-active.[png|svg]max_toggled_hover-active.[png|svg]max_toggled_hover-inactive.[png|svg]max_toggled-inactive.[png|svg]menu-active.[png|svg]menu_hover-active.[png|svg]menu_hover-inactive.[png|svg]menu-inactive.[png|svg]shade-active.[png|svg]shade_hover-active.[png|svg]shade_hover-inactive.[png|svg]shade-inactive.[png|svg]shade_toggled-active.[png|svg]shade_toggled-inactive.[png|svg]shade_toggled_hover-active.[png|svg]shade_toggled_hover-inactive.[png|svg]desk-active.[png|svg]desk_hover-active.[png|svg]desk_hover-inactive.[png|svg]desk-inactive.[png|svg]desk_toggled-active.[png|svg]desk_toggled-inactive.[png|svg]desk_toggled_hover-active.[png|svg]desk_toggled_hover-inactive.[png|svg]
π¦ DEFINITIONS π¦
the handle is the window edge decoration at the bottom of the window π that's it, that's the definition π
π SEE ALSO π
and that's the whole vibe bestie π this was labwc-theme(5), fresh as of 2026-08-22 β go forth and theme slay β¨ππ«Ά
π¦ where this page comes from
- arch rolling: labwc 0.20.2-1 Β· GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms