1ROFI-THEME(5)                                                    ROFI-THEME(5)
2
3
4

NAME

6       rofi-theme - Rofi theme format files
7

DESCRIPTION

9       The  need for a new theme format was motivated by the fact that the way
10       rofi handled widgets has changed. From a very static drawing  of  lines
11       and text to a nice structured form of packing widgets. This change made
12       it possible to provide a more flexible theme framework. The  old  theme
13       format  and config file are not flexible enough to expose these options
14       in a user-friendly way. Therefor, a new file format has  been  created,
15       replacing the old one.
16

FORMAT SPECIFICATION

Encoding

19       The  encoding  of  the file is utf-8. Both unix (\n) and windows (\r\n)
20       newlines format are supported. But unix is preferred.
21

Comments

23       C and C++ file comments are supported.
24
25       ·   Anything after // and before a newline is considered a comment.
26
27       ·   Everything between /* and */ is a comment.
28
29
30
31       Comments can be nested and the C comments can be inline.
32
33       The following is valid:
34
35
36
37           // Magic comment.
38           property: /* comment */ value;
39
40
41
42       However, this is not:
43
44
45
46           prop/*comment*/erty: value;
47
48
49

White space

51       White space and newlines, like comments, are ignored by the parser.
52
53       This:
54
55
56
57           property: name;
58
59
60
61       Is identical to:
62
63
64
65                property             :
66           name
67
68           ;
69
70
71

File extension

73       The preferred file extension for the new theme format is rasi. This  is
74       an abbreviation for rofi advanced style information.
75

BASIC STRUCTURE

77       Each  element  has a section with defined properties. Global properties
78       can be defined in section * { }. Sub-section names begin  with  a  hash
79       symbol #.
80
81       It  is  advised  to  define the global properties section on top of the
82       file to make inheritance of properties clearer.
83
84
85
86           /* Global properties section */
87           * {
88               // list of properties
89           }
90
91           /* Element theme section. */
92           {element path} {
93               // list of properties
94           }
95           {elements... } {
96               // list of properties
97           }
98
99
100
101       If there are multiple sections with the same  name,  they  are  merged.
102       Duplicate properties are overwritten and the last parsed entry kept.
103

Global properties section

105       A  theme  can  have one or more global properties sections. If there is
106       more than one, they will be merged.
107
108       The global properties section denotes the defaults  for  each  element.
109       Each property of this section can be referenced with @{identifier} (See
110       Properties section)
111
112       A global properties section is indicated with a * as element path.
113

Element theme section

115       A theme can have multiple element theme sections.
116
117       The element path can consist of multiple names separated by  whitespace
118       or  dots.  Each  element may contain any number of letters, numbers and
119       -´s. The first element in the element path should always start  with  a
120       #. Multiple elements can be specified by a ,.
121
122       This is a valid element name:
123
124
125
126           element normal.normal {
127               background-color: blue;
128           }
129           button {
130               background-color: blue;
131           }
132
133
134
135       And is identical to:
136
137
138
139           element normal normal, button {
140               background-color: blue;
141           }
142
143
144
145       Each  section inherits the global properties. Properties can be explic‐
146       itly inherited from their parent with the inherit keyword. In the  fol‐
147       lowing example:
148
149
150
151           window {
152            a: 1;
153            b: 2;
154           }
155           mainbox {
156               a: inherit;
157               b: 4;
158               c: 8;
159           }
160
161
162
163       The element mainbox will have the following set of properties (if main‐
164       box is a child of window):
165
166
167
168           a: 1;
169           b: 4;
170           c: 8;
171
172
173
174       If multiple sections are defined with the same name, they are merged by
175       the  parser.  If  multiple properties with the same name are defined in
176       one section, the last encountered property is used.
177

PROPERTIES FORMAT

179       The properties in a section consist of:
180
181
182
183           {identifier}: {value};
184
185
186
187       Both fields are mandatory for a property.
188
189       The identifier names the specified property. Identifiers can consist of
190       any  combination  of  numbers, letters and ´-´. It must not contain any
191       whitespace. The structure of the value defines the type  of  the  prop‐
192       erty. The current parser does not define or enforce a certain type of a
193       particular identifier. When used, values with the wrong type that  can‐
194       not be converted are ignored.
195
196       The current theme format supports different types:
197
198       ·   a string
199
200       ·   an integer number
201
202       ·   a fractional number
203
204       ·   a boolean value
205
206       ·   a color
207
208       ·   text style
209
210       ·   line style
211
212       ·   a distance
213
214       ·   a padding
215
216       ·   a border
217
218       ·   a position
219
220       ·   a reference
221
222       ·   an orientation
223
224       ·   a list of keywords
225
226       ·   Inherit
227
228
229
230       Some of these types are a combination of other types.
231

String

233       ·   Format: "[:print:]+"
234
235
236
237       A  string is always surrounded by double quotes ("). Between the quotes
238       there can be any printable character.
239
240       For example:
241
242
243
244           font: "Awasome 12";
245
246
247
248       The string must be valid UTF-8.
249

Integer

251       ·   Format: [-+]?[:digit:]+
252
253
254
255       An integer may contain any number.
256
257       For examples:
258
259
260
261           lines: 12;
262
263
264

Real

266       ·   Format: [-+]?[:digit:]+(\.[:digit:]+)?
267
268
269
270       A real is an integer with an optional fraction.
271
272       For example:
273
274
275
276           real: 3.4;
277
278
279
280       The following is not valid: .3, 3. or scientific notation: 3.4e-3.
281

Boolean

283       ·   Format: (true|false)
284
285
286
287       Boolean value is either true or false. This is case-sensitive.
288
289       For example:
290
291
292
293           dynamic: false;
294
295
296

Color

298       rofi supports the color formats as specified in the CSS standard (1,2,3
299       and some of CSS 4)
300
301       ·   Format: #{HEX}{3} (rgb)
302
303       ·   Format: #{HEX}{4} (rgba)
304
305       ·   Format: #{HEX}{6} (rrggbb)
306
307       ·   Format: #{HEX}{8} (rrggbbaa)
308
309       ·   Format: rgb[a]({INTEGER},{INTEGER},{INTEGER}[, {PERCENTAGE}])
310
311       ·   Format: rgb[a]({INTEGER}%,{INTEGER}%,{INTEGER}%[, {PERCENTAGE}])
312
313       ·   Format:  hsl[a](  {ANGLE},  {PERCENTAGE}, {PERCENTAGE} [, {PERCENT‐
314           AGE}])
315
316       ·   Format: hwb[a]( {ANGLE}, {PERCENTAGE},  {PERCENTAGE}  [,  {PERCENT‐
317           AGE}])
318
319       ·   Format:  cmyk(  {PERCENTAGE}, {PERCENTAGE}, {PERCENTAGE}, {PERCENT‐
320           AGE} [, {PERCENTAGE} ])
321
322       ·   Format: {named-color} [ / {PERCENTAGE} ]
323
324
325
326       The white-space format proposed in CSS4 is also supported.
327
328       The different values are:
329
330       ·   {HEX} is a hexadecimal number (´0-9a-f´ case insensitive).
331
332       ·   {INTEGER} value can be between 0 and 255 or 0-100 when representing
333           percentage.
334
335       ·   {ANGLE}  is  the angle on the color wheel, can be in deg, rad, grad
336           or turn. When no unit is specified, degrees is assumed.
337
338       ·   {PERCENTAGE} can be between 0-1.0, or 0%-100%
339
340       ·   {named-color} is one of the following colors:
341
342           AliceBlue, AntiqueWhite, Aqua, Aquamarine,  Azure,  Beige,  Bisque,
343           Black,  BlanchedAlmond,  Blue, BlueViolet, Brown, BurlyWood, Cadet‐
344           Blue, Chartreuse, Chocolate, Coral, CornflowerBlue, Cornsilk, Crim‐
345           son,  Cyan,  DarkBlue, DarkCyan, DarkGoldenRod, DarkGray, DarkGrey,
346           DarkGreen,  DarkKhaki,  DarkMagenta,  DarkOliveGreen,   DarkOrange,
347           DarkOrchid, DarkRed, DarkSalmon, DarkSeaGreen, DarkSlateBlue, Dark‐
348           SlateGray,  DarkSlateGrey,  DarkTurquoise,  DarkViolet,   DeepPink,
349           DeepSkyBlue,  DimGray, DimGrey, DodgerBlue, FireBrick, FloralWhite,
350           ForestGreen, Fuchsia, Gainsboro, GhostWhite, Gold, GoldenRod, Gray,
351           Grey,  Green,  GreenYellow,  HoneyDew,  HotPink, IndianRed, Indigo,
352           Ivory, Khaki,  Lavender,  LavenderBlush,  LawnGreen,  LemonChiffon,
353           LightBlue,  LightCoral, LightCyan, LightGoldenRodYellow, LightGray,
354           LightGrey,  LightGreen,  LightPink,   LightSalmon,   LightSeaGreen,
355           LightSkyBlue,   LightSlateGray,   LightSlateGrey,   LightSteelBlue,
356           LightYellow, Lime, LimeGreen, Linen, Magenta, Maroon, MediumAquaMa‐
357           rine, MediumBlue, MediumOrchid, MediumPurple, MediumSeaGreen, Medi‐
358           umSlateBlue, MediumSpringGreen,  MediumTurquoise,  MediumVioletRed,
359           MidnightBlue,  MintCream,  MistyRose,  Moccasin, NavajoWhite, Navy,
360           OldLace, Olive, OliveDrab, Orange, OrangeRed,  Orchid,  PaleGolden‐
361           Rod,  PaleGreen,  PaleTurquoise,  PaleVioletRed, PapayaWhip, Peach‐
362           Puff, Peru, Pink, Plum,  PowderBlue,  Purple,  RebeccaPurple,  Red,
363           RosyBrown,  RoyalBlue,  SaddleBrown,  Salmon, SandyBrown, SeaGreen,
364           SeaShell, Sienna, Silver, SkyBlue, SlateBlue, SlateGray, SlateGrey,
365           Snow,   SpringGreen,   SteelBlue,   Tan,   Teal,  Thistle,  Tomato,
366           Turquoise,  Violet,  Wheat,  White,  WhiteSmoke,  Yellow,   Yellow‐
367           Green,transparent
368
369
370
371       For example:
372
373
374
375           background-color: #FF0000;
376           border-color: rgba(0,0,1, 0.5);
377           text-color: SeaGreen;
378
379
380
381       or
382
383
384
385           background-color: transparent;
386           text-color: Black;
387
388
389

Text style

391       ·   Format: (bold|italic|underline|strikethrough|none)
392
393
394
395       Text style indicates how the highlighted text is emphasized. None indi‐
396       cates that no emphasis should be applied.
397
398       ·   bold: make the text thicker then the surrounding text.
399
400       ·   italic: put the highlighted text in script type (slanted).
401
402       ·   underline: put a line under the highlighted text.
403
404       ·   strikethrough: put a line through the highlighted text.
405
406       ·   small caps: emphasise the text using capitalization.
407
408
409

Line style

411       ·   Format: (dash|solid)
412
413
414
415       Indicates how a line should be drawn. It currently supports: * dash:  a
416       dashed  line,  where  the  gap is the same width as the dash * solid: a
417       solid line
418

Distance

420       ·   Format: {Integer}px
421
422       ·   Format: {Real}em
423
424       ·   Format: {Real}ch
425
426       ·   Format: {Real}%
427
428
429
430       A distance can be specified in 3 different units:
431
432       ·   px: Screen pixels.
433
434       ·   em: Relative to text height.
435
436       ·   ch: Relative to width of a single number.
437
438       ·   %: Percentage of the monitor size.
439
440
441
442       Distances used in the horizontal direction use the monitor width.  Dis‐
443       tances in the vertical direction use the monitor height. For example:
444
445
446
447              padding: 10%;
448
449
450
451       On a full-HD (1920x1080) monitor, it defines a padding of 192 pixels on
452       the left and right side and 108 pixels on the top and bottom.
453

Padding

455       ·   Format: {Integer}
456
457       ·   Format: {Distance}
458
459       ·   Format: {Distance} {Distance}
460
461       ·   Format: {Distance} {Distance} {Distance}
462
463       ·   Format: {Distance} {Distance} {Distance} {Distance}
464
465
466
467       If no unit is specified, pixels are used.
468
469       The different number of fields in the formats are parsed like:
470
471       ·   1 field: all
472
473       ·   2 fields: top&bottom left&right
474
475       ·   3 fields: top, left&right, bottom
476
477       ·   4 fields: top, right, bottom, left
478
479
480

Border

482       ·   Format: {Integer}
483
484       ·   Format: {Distance}
485
486       ·   Format: {Distance} {Distance}
487
488       ·   Format: {Distance} {Distance} {Distance}
489
490       ·   Format: {Distance} {Distance} {Distance} {Distance}
491
492       ·   Format: {Distance} {Line style}
493
494       ·   Format: {Distance} {Line style} {Distance} {Line style}
495
496       ·   Format: {Distance} {Line style} {Distance} {Line style}  {Distance}
497           {Line style}
498
499       ·   Format:  {Distance} {Line style} {Distance} {Line style} {Distance}
500           {Line style} {Distance} {Line style}
501
502
503
504       Borders are identical to padding, except that each distance field has a
505       line style property.
506

Position

508       Indicate a place on the window/monitor.
509
510       ·   Format:  (center|east|north|west|south|north  east|north west|south
511           west|south east)
512
513
514
515
516
517
518           north west   |    north    |  north east
519           -------------|-------------|------------
520                 west   |   center    |  east
521           -------------|-------------|------------
522           south west   |    south    |  south east
523
524
525

Visibility

527       It is possible to hide widgets:
528
529       inputbar { enabled: false; }
530

Reference

532       ·   Format: @{PROPERTY NAME}
533
534
535
536       A reference can point to another reference. Currently, the maximum num‐
537       ber  of  redirects is 20. A property always refers to another property.
538       It cannot be used for a subpart of the property. For example,  this  is
539       not valid:
540
541
542
543           highlight: bold @pink;
544
545
546
547       But this is:
548
549
550
551           * {
552               myhigh: bold #FAA;
553           }
554
555           window {
556               highlight: @myhigh;
557           }
558
559
560

Orientation

562       ·   Format: (horizontal|vertical)
563
564
565
566       Specify the orientation of the widget.
567

List of keywords

569       ·   Format: [ keyword, keyword ]
570
571
572
573       A  list  starts with a ´[´ and ends with a ´]´. The entries in the list
574       are comma-separated. The keyword in the list refers to an widget name.
575

Inherit

577       ·   Format: inherit
578
579
580
581       Inherits the property from its parent widget.
582
583
584
585           mainbox {
586               border-color: inherit;
587           }
588
589
590

ELEMENTS PATHS

592       Element paths exists of two parts, the first part refers to the  actual
593       widget by name. Some widgets have an extra state.
594
595       For example:
596
597
598
599           element selected {
600           }
601
602
603
604       Here  element selected is the name of the widget, selected is the state
605       of the widget.
606
607       The difference between dots and spaces is purely  cosmetic.  These  are
608       all the same:
609
610
611
612           element .selected {
613
614           element.selected {
615           }
616           element selected {
617           }
618
619
620

SUPPORTED ELEMENT PATH

Name

623       The current widgets available in rofi:
624
625       ·
626
627       ·   overlay: the overlay widget.
628
629       ·
630
631       ·
632
633       ·   box: the horizontal @box packing the widgets
634
635       ·   case-indicator: the case/sort indicator @textbox
636
637       ·   prompt: the prompt @textbox
638
639       ·   entry: the main entry @textbox
640
641
642
643
644       ·
645
646       ·   scrollbar: the listview scrollbar
647
648       ·   element: the entries in the listview
649
650
651
652
653       ·
654
655       ·   button: the buttons @textbox for each mode
656
657
658
659
660       ·
661
662       ·   textbox: the message textbox
663
664
665
666
667
668
669
670
671
672
673
674
675       Note that these path names match the default theme. Themes that provide
676       a custom layout will have different element paths.
677

State

679       State: State of widget
680
681       Optional flag(s) indicating state of the widget, used for theming.
682
683       These are appended after the name or class of the widget.
684
685   Example:
686       button selected.normal { }
687
688       element selected.urgent { }
689
690       Currently only the entrybox and scrollbar have states:
691
692   Entrybox:
693       {visible modifier}.{state}
694
695       Where visible modifier can be: * normal: no  modification  *  selected:
696       the  entry is selected/highlighted by user * alternate: the entry is at
697       an alternating row (uneven row)
698
699       Where state is: * normal: no  modification  *  urgent:  this  entry  is
700       marked urgent * active: this entry is marked active
701
702       These can be mixed.
703
704       Example:
705
706
707
708           nametotextbox selected.active {
709               background-color: #003642;
710               text-color: #008ed4;
711           }
712
713
714
715       Sets  all  selected textboxes marked active to the given foreground and
716       background color. Note that a state modifies the original  element,  it
717       therefore contains all the properties of that element.
718
719   Scrollbar
720       The  scrollbar  uses  the handle state when drawing the small scrollbar
721       handle. This allows the colors used for drawing the handle  to  be  set
722       independently.
723

SUPPORTED PROPERTIES

725       The following properties are currently supported:
726
727   all widgets:
728       ·   padding: padding Padding on the inside of the widget
729
730       ·   margin: padding Margin on the outside of the widget
731
732       ·   border:  border  Border around the widget (between padding and mar‐
733           gin)/
734
735       ·   border-radius: padding Sets a radius on the corners of the borders.
736
737       ·   background: color Background color
738
739       ·   foreground: color Foreground color
740
741       ·   index: integer (This one does not inherit it value from the  parent
742           widget)
743
744
745
746   window:
747       ·   font: string The font used in the window
748
749       ·   transparency:  string Indicating if transparency should be used and
750           what type: real - True transparency. Only works with a  compositor.
751           background  -  Take  a  screenshot  of the background image and use
752           that. screenshot - Take a screenshot of the screen  and  use  that.
753           Path to png file - Use an image.
754
755       ·   location: position The place of the anchor on the monitor
756
757       ·   anchor: anchor The anchor position on the window
758
759       ·   fullscreen: boolean Window is fullscreen.
760
761       ·   width: distance The width of the window
762
763       ·   x-offset: distance
764
765       ·   y-offset:  distance  The  offset of the window to the anchor point,
766           allowing you to push the window left/right/up/down
767
768
769
770   scrollbar:
771       ·   background-color: color
772
773       ·   handle-width: distance
774
775       ·   handle-color: color
776
777       ·   border-color: color
778
779
780
781   box:
782       ·   orientation: orientation Set the direction the elements are packed.
783
784       ·   spacing: distance Distance between the packed elements.
785
786
787
788   textbox:
789       ·   background: color
790
791       ·   foreground: color
792
793       ·   font: the font used by this textbox (string)
794
795       ·   str: the string to display by this textbox (string)
796
797       ·   vertical-align: vertical alignment of the text (0 top, 1 bottom)
798
799       ·   horizontal-align: horizontal alignment  of  the  text  (0  left,  1
800           right)
801
802       ·   text: the text color to use (falls back to foreground if not set)
803
804       ·   highlight: text style {color} color is optional, multiple highlight
805           styles can be added like: bold underline italic #000000;
806
807       ·   width: override the desired width for the textbox
808
809
810
811   listview:
812       ·   columns: integer Number of columns to show (at least 1)
813
814       ·   fixed-height: boolean Always show lines rows, even  if  fewer  ele‐
815           ments are available.
816
817       ·   dynamic:  boolean True if the size should change when filtering the
818           list, False if it should keep the original height.
819
820       ·   scrollbar: boolean If the scrollbar should be enabled/disabled.
821
822       ·   scrollbar-width: distance Width of the scrollbar
823
824       ·   cycle: boolean When navigating, it should wrap around
825
826       ·   spacing: distance Spacing between the elements (both  vertical  and
827           horizontal)
828
829       ·   lines: integer Number of rows to show in the list view.
830
831       ·   layout:  orientation  Indicate how elements are stacked. Horizontal
832           implements the dmenu style.
833
834
835

Layout

837       The new format allows the layout of  the  rofi  window  to  be  tweaked
838       extensively.  For  each widget, the themer can specify padding, margin,
839       border, font, and more. It even allows, as an advanced feature, to pack
840       widgets in a custom structure.
841
842   Basic structure
843       The  whole  view is made out of boxes that pack other boxes or widgets.
844       The box can be vertical or horizontal. This is loosely inspired by  GTK
845       http://gtk.org/.
846
847       The current layout of rofi is structured as follows:
848
849
850
851           |------------------------------------------------------------------------------------|
852           | window {BOX:vertical}                                                              |
853           | |-------------------------------------------------------------------------------|  |
854           | | mainbox  {BOX:vertical}                                                       |  |
855           | | |---------------------------------------------------------------------------| |  |
856           | | | inputbar {BOX:horizontal}                                                 | |  |
857           | | | |---------| |-----------------------------------------------------| |---| | |  |
858           | | | | prompt  | | entry                                               | |ci | | |  |
859           | | | |---------| |-----------------------------------------------------| |---| | |  |
860           | | |---------------------------------------------------------------------------| |  |
861           | |                                                                               |  |
862           | | |---------------------------------------------------------------------------| |  |
863           | | | message                                                                   | |  |
864           | | | |-----------------------------------------------------------------------| | |  |
865           | | | | textbox                                                               | | |  |
866           | | | |-----------------------------------------------------------------------| | |  |
867           | | |---------------------------------------------------------------------------| |  |
868           | |                                                                               |  |
869           | | |-----------------------------------------------------------------------------|  |
870           | | | listview                                                                    |  |
871           | | |-----------------------------------------------------------------------------|  |
872           | |                                                                               |  |
873           | | |---------------------------------------------------------------------------| |  |
874           | | |  sidebar {BOX:horizontal}                                                 | |  |
875           | | | |---------------|   |---------------|  |--------------| |---------------| | |  |
876           | | | | Button        |   | Button        |  | Button       | | Button        | | |  |
877           | | | |---------------|   |---------------|  |--------------| |---------------| | |  |
878           | | |---------------------------------------------------------------------------| |  |
879           | |-------------------------------------------------------------------------------|  |
880           |------------------------------------------------------------------------------------|
881
882
883
884   Advanced layout
885       The  layout  of rofi can be tweaked by packing the ´fixed´ widgets in a
886       custom structure.
887
888       The following widgets are fixed, as they provide core rofi  functional‐
889       ity:
890
891       ·   prompt
892
893       ·   entry
894
895       ·   case-indicator
896
897       ·   message
898
899       ·   listview
900
901       ·   sidebar
902
903
904
905       The  following  keywords  are  defined and can be used to automatically
906       pack a subset of the widgets. These are used in the  default  theme  as
907       depicted in the figure above.
908
909       ·   mainbox Packs: inputbar, message, listview, sidebar
910
911       ·   inputbar Packs: prompt,entry,case-indicator
912
913
914
915       Any  widget  name starting with textbox is a textbox widget, others are
916       box widgets and can pack other widgets. To specify  children,  set  the
917       children  property  (this  always happens on the box child, see example
918       below):
919
920
921
922           children: [prompt,entry,case-indicator];
923
924
925
926       The theme needs to be updated to match the hierarchy specified.
927
928       Below is an example of a theme emulating dmenu:
929
930
931
932           * {
933               background-color:      Black;
934               text-color:            White;
935               border-color:          White;
936               font:            "Times New Roman 12";
937           }
938
939           window {
940               anchor:     north;
941               location:   north;
942               width:      100%;
943               padding:    4px;
944               children:   [ horibox ];
945           }
946
947           horibox {
948               orientation: horizontal;
949               children:   [ prompt, entry, listview ];
950           }
951
952           listview {
953               layout:     horizontal;
954               spacing:    5px;
955               lines:      10;
956           }
957
958           entry {
959               expand:     false;
960               width:      10em;
961           }
962
963           element {
964               padding: 0px 2px;
965           }
966           element selected {
967               background-color: SteelBlue;
968           }
969
970
971
972   Padding and margin
973       Just like CSS, rofi uses the box model for each widget.
974
975
976
977           |-------------------------------------------------------------------|
978           | margin                                                            |
979           |  |-------------------------------------------------------------|  |
980           |  | border                                                      |  |
981           |  | |---------------------------------------------------------| |  |
982           |  | | padding                                                 | |  |
983           |  | | |-----------------------------------------------------| | |  |
984           |  | | | content                                             | | |  |
985           |  | | |-----------------------------------------------------| | |  |
986           |  | |---------------------------------------------------------| |  |
987           |  |-------------------------------------------------------------|  |
988           |-------------------------------------------------------------------|
989
990
991
992       Explanation of the different parts:
993
994       ·   Content - The content of the widget.
995
996       ·   Padding - Clears an area around the widget. The padding  shows  the
997           background color of the widget.
998
999       ·   Border  -  A  border  that goes around the padding and content. The
1000           border use the foreground color of the widget.
1001
1002       ·   Margin - Clears an area outside the border. The margin is transpar‐
1003           ent.
1004
1005
1006
1007       The  box model allows us to add a border around elements, and to define
1008       space between elements.
1009
1010       The size of each margin, border, and padding can be set. For  the  bor‐
1011       der, a linestyle and radius can be set.
1012
1013   Spacing
1014       Widgets  that  can  pack  more then one child widget (currently box and
1015       listview) have the spacing property. This property  sets  the  distance
1016       between the packed widgets (both horizontally and vertically).
1017
1018
1019
1020           |---------------------------------------|
1021           |  |--------| s |--------| s |-------|  |
1022           |  | child  | p | child  | p | child |  |
1023           |  |        | a |        | a |       |  |
1024           |  |        | c |        | c |       |  |
1025           |  |        | i |        | i |       |  |
1026           |  |        | n |        | n |       |  |
1027           |  |--------| g |--------| g |-------|  |
1028           |---------------------------------------|
1029
1030
1031
1032   Advanced box packing
1033       More dynamic spacing can be achieved by adding dummy widgets, for exam‐
1034       ple to make one widget centered:
1035
1036
1037
1038           |--------------------------------------------|
1039           |  |-----------|  |--------|  |-----------|  |
1040           |  | dummy     |  | child  |  | dummy     |  |
1041           |  | expand: y |  |        |  | expand: y |  |
1042           |  |           |  |        |  |           |  |
1043           |  |           |  |        |  |           |  |
1044           |  |           |  |        |  |           |  |
1045           |  |-----------|  |--------|  |-----------|  |
1046           |--------------------------------------------|
1047
1048
1049
1050       If both dummy widgets are  set  to  expand,  child  will  be  centered.
1051       Depending  on  the  expand  flag  of  child the remaining space will be
1052       equally divided between both dummy and child widget  (expand  enabled),
1053       or both dummy widgets (expand disabled).
1054

DEBUGGING

1056       To get debug information from the parser, run rofi like:
1057
1058
1059
1060           G_MESSAGES_DEBUG=Parser rofi -show run
1061
1062
1063
1064       Syntax errors are shown in a popup and printed out to command line with
1065       the above command.
1066
1067       To see the elements queried during running, run:
1068
1069
1070
1071           G_MESSAGES_DEBUG=Theme rofi -show run
1072
1073
1074
1075       To test minor changes, part of the theme can be passed on  the  command
1076       line, for example to set it to full-screen:
1077
1078
1079
1080           rofi -theme-str ´#window { fullscreen:true;}´ -show run
1081
1082
1083
1084       To print the current theme, run:
1085
1086
1087
1088           rofi -dump-theme
1089
1090
1091

EXAMPLES

1093       Several  examples  are installed together with rofi. These can be found
1094       in {datadir}/rofi/themes/, where {datadir} is the install path of  rofi
1095       data.  When  installed  using  a  package  manager,  this  is  usually:
1096       /usr/share/.
1097

SEE ALSO

1099       rofi(1)
1100
1101
1102
1103                                 February 2018                   ROFI-THEME(5)
Impressum