rofi/doc/themer.md

2.3 KiB

Basic Organization

Each widget has:

Class

Class: Type of widget.

Example: textbox, scrollbar, separator

Class are prefixed with a @

List of classes in rofi:

  • @textbox
  • @scrollbar
  • @window
  • @separator
  • @listview
  • @box

Name

Name: Internal name of the widget.

Sub-widgets are {Parent}.{Child}.

Example: listview, listview.element, listview.scrollbar

Names are prefixed with a #

List of names in rofi:

  • #window
  • #mainbox
    • #mainbox.box: The main vertical @box
  • #inputbar
    • #inputbar.box: The horizontal @box packing the widgets.
    • #inputbar.separator: The separator under/above the inputbar.
    • #inputbar.case-indicator: The case/sort indicator @textbox
    • #inputbar.prompt: The prompt @textbox
    • #inputbar.entry: The main entry @textbox
  • #listview
    • #listview.scrollbar: The listview scrollbar
    • #listview.element: The entries in the listview
  • #sidebar
    • #sidebar.box: The main horizontal @box packing the buttons.
    • #sidebar.button: The buttons @textbox for each mode.
    • #sidebar.separator: The separator under/above the sidebar.
  • #message
    • #message.textbox: The message textbox.
    • #message.separator: The separator under/above the sidebar.

State

State: State of widget

Optional flag(s) indicating state.

These are appended after the name or class of the widget.

@textbox selected.normal { }

#listview.element selected.urgent { }

Currently only the @entrybox has states:

{visible modifier}.{state}

Where visible modifier can be:

  • normal: No modification.
  • selected: The entry is selected/highlighted by user.
  • alternate: The entry is at an alternating row. (uneven row)

Where state is:

  • normal: No modification.
  • urgent: This entry is marked urgent.
  • activE: This entry is marked active.

These can be mixed.

Example:

@textbox selected.active { 
    background: #003642;
    foreground: #008ed4;
}

Sets all selected textboxes marked active to the given foreground and background color.

File structure

The file is structured as follows

/* Global properties, that apply as default to all widgets. */
{list of properties}

@{class} {optional state} {
    {list of properties}
}
@{name}.{name} {optional state} {
    {list of properties}
}

The global properties has to be at the top of the file, the rest can freeĺy be mixed.