{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Config",
  "description": "The following is a list of all top-level bar config options.\n\nThese options can either be written at the very top object of your config,\nor within an object in the [monitors](#monitors) config,\ndepending on your [use-case](#2-pick-your-use-case).",
  "type": "object",
  "properties": {
    "anchor_to_edges": {
      "description": "Whether to anchor the bar to the edges of the screen.\nSetting to false centers the bar.\n\n**Default**: `true`",
      "type": "boolean",
      "default": true
    },
    "autohide": {
      "description": "The duration in milliseconds before the bar is hidden after the cursor leaves.\nLeave unset to disable auto-hide behaviour.\n\n**Default**: `null`",
      "type": [
        "integer",
        "null"
      ],
      "format": "uint64",
      "default": null,
      "minimum": 0
    },
    "center": {
      "description": "An array of modules to append to the center of the bar.\n\n**Default**: `[]`",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "$ref": "#/$defs/ModuleConfig"
      }
    },
    "double_click_time": {
      "description": "The time in milliseconds to wait for a double-click.\nCan be set to a number (e.g., `250`) or `\"gtk\"` to use GTK's setting.\n\n**Default**: `250`",
      "$ref": "#/$defs/DoubleClickTime"
    },
    "end": {
      "description": "An array of modules to append to the end of the bar.\nDepending on the orientation, this is either the bottom or right edge.\n\n**Default**: `[]`",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "$ref": "#/$defs/ModuleConfig"
      }
    },
    "exclusive_zone": {
      "description": "Whether the bar should reserve an exclusive zone around it.\n\nWhen true, this prevents windows from rendering in the same space\nas the bar, causing them to shift.\n\n**Default**: `true` unless `start_hidden` is set.",
      "type": [
        "boolean",
        "null"
      ],
      "default": null
    },
    "height": {
      "description": "The bar's height in pixels.\n\nNote that GTK treats this as a target minimum,\nand if content inside the bar is over this,\nit will automatically expand to fit.\n\n**Default**: `42`",
      "type": "integer",
      "format": "int32",
      "default": 42
    },
    "icon_overrides": {
      "description": "Map of app IDs (or classes) to icon names,\noverriding the app's default icon.\n\n**Default**: `{}`",
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "default": {}
    },
    "icon_theme": {
      "description": "The name of the GTK icon theme to use.\nLeave unset to use the default system theme.\n\n**Default**: `null`",
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "ironvar_defaults": {
      "description": "A map of [ironvar](ironvar) keys and values\nto initialize Ironbar with on startup.\n\n**Default**: `{}`\n\n# Example\n\nThe following initializes an ironvar called `foo` set to `bar` on startup:\n\n```corn\n{ ironvar_defaults.foo = \"bar\" }\n```\n\nThe variable can then be immediately fetched without needing to be manually set:\n\n```sh\n$ ironbar get foo\nok\nbar\n```",
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": {
        "type": "string"
      },
      "default": null
    },
    "layer": {
      "description": "The layer-shell layer to place the bar on.\n\nTaken from the\n[wlr_layer_shell](https://wayland.app/protocols/wlr-layer-shell-unstable-v1#zwlr_layer_shell_v1:enum:layer) definition:\n\n> These values indicate which layers a surface can be rendered in.\n> They are ordered by z depth, bottom-most first.\n> Traditional shell surfaces will typically be rendered between the bottom and top layers.\n> Fullscreen shell surfaces are typically rendered at the top layer.\n> Multiple surfaces can share a single layer, and ordering within a single layer is undefined.\n\n**Valid options**: `background`, `bottom`, `top`, `overlay`\n<br>\n**Default**: `top`",
      "type": "string",
      "enum": [
        "background",
        "bottom",
        "top",
        "overlay"
      ]
    },
    "margin": {
      "description": "The margin to use on each side of the bar, in pixels.\nObject which takes `top`, `bottom`, `left` and `right` keys.\n\n**Default**: `0` on all sides.\n\n# Example\n\nThe following would set a 10px margin around each edge.\n\n```corn\n{\n    margin.top = 10\n    margin.bottom = 10\n    margin.left = 10\n    margin.right = 10\n}\n```",
      "$ref": "#/$defs/MarginConfig"
    },
    "monitors": {
      "description": "A map of monitor names to configs.\nMonitor names can be supplied in two formats:\n\n- Connector names (`DP-1`, `HDMI-2`)\n- Descriptions (`ASUSTek COMPUTER INC PA278QV M4LMQS060475`).\n  A `starts_with` is applied allowing you to omit part of the description if convenient.\n\nThe config values can be either:\n\n- a single object, which denotes a single bar for that monitor,\n- an array of multiple objects, which denotes multiple for that monitor.\n\nProviding this option overrides the single, global `bar` option.",
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": {
        "$ref": "#/$defs/MonitorConfig"
      }
    },
    "name": {
      "description": "A unique identifier for the bar, used for controlling it over IPC.\nIf not set, uses a generated integer suffix.\n\n**Default**: `bar-n`",
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "popup_autohide": {
      "description": "Whether to enable autohide behaviour on the popup.\n\nWhen enabled, clicking outside the popup will close it.\nOn some compositors, this may also aggressively steal mouse/keyboard focus.\n\n**Default**: `false`",
      "type": "boolean",
      "default": false
    },
    "popup_gap": {
      "description": "The size of the gap in pixels\nbetween the bar and the popup window.\n\n**Default**: `5`",
      "type": "integer",
      "format": "int32",
      "default": 5
    },
    "position": {
      "description": "The bar's position on screen.\n\n**Valid options**: `top`, `bottom`, `left`, `right`\n<br>\n**Default**: `bottom`",
      "$ref": "#/$defs/BarPosition"
    },
    "start": {
      "description": "An array of modules to append to the start of the bar.\nDepending on the orientation, this is either the top of the left edge.\n\n**Default**: `[]`",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "$ref": "#/$defs/ModuleConfig"
      }
    },
    "start_hidden": {
      "description": "Whether the bar should be hidden when Ironbar starts.\n\n**Default**: `false`, unless `autohide` is set.",
      "type": [
        "boolean",
        "null"
      ],
      "default": null
    }
  },
  "$defs": {
    "AdapterStatus": {
      "type": "object",
      "properties": {
        "disabled": {
          "description": "The value of `{adapter_status}` formatting token when adapter is disabled.\n\n**Default**: `\"Bluetooth disabled\"`",
          "type": "string",
          "default": "Bluetooth disabled"
        },
        "disabling": {
          "description": "The value of `{adapter_status}` formatting token when adapter is disabling.\n\n**Default**: `\"Disabling Bluetooth...\"`",
          "type": "string",
          "default": "Disabling Bluetooth..."
        },
        "enabled": {
          "description": "The value of `{adapter_status}` formatting token when adapter is enabled.\n\n**Default**: `\"Bluetooth enabled\"`",
          "type": "string",
          "default": "Bluetooth enabled"
        },
        "enabling": {
          "description": "The value of `{adapter_status}` formatting token when adapter is enabling.\n\n**Default**: `\"Enabling Bluetooth...\"`",
          "type": "string",
          "default": "Enabling Bluetooth..."
        },
        "not_found": {
          "description": "The value of `{adapter_status}` formatting token when adapter not found.\n\n**Default**: `\"No Bluetooth adapters found\"`",
          "type": "string",
          "default": "No Bluetooth adapters found"
        }
      }
    },
    "BarConfig": {
      "description": "The following is a list of all top-level bar config options.\n\nThese options can either be written at the very top object of your config,\nor within an object in the [monitors](#monitors) config,\ndepending on your [use-case](#2-pick-your-use-case).",
      "type": "object",
      "properties": {
        "anchor_to_edges": {
          "description": "Whether to anchor the bar to the edges of the screen.\nSetting to false centers the bar.\n\n**Default**: `true`",
          "type": "boolean",
          "default": true
        },
        "autohide": {
          "description": "The duration in milliseconds before the bar is hidden after the cursor leaves.\nLeave unset to disable auto-hide behaviour.\n\n**Default**: `null`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint64",
          "default": null,
          "minimum": 0
        },
        "center": {
          "description": "An array of modules to append to the center of the bar.\n\n**Default**: `[]`",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "$ref": "#/$defs/ModuleConfig"
          }
        },
        "end": {
          "description": "An array of modules to append to the end of the bar.\nDepending on the orientation, this is either the bottom or right edge.\n\n**Default**: `[]`",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "$ref": "#/$defs/ModuleConfig"
          }
        },
        "exclusive_zone": {
          "description": "Whether the bar should reserve an exclusive zone around it.\n\nWhen true, this prevents windows from rendering in the same space\nas the bar, causing them to shift.\n\n**Default**: `true` unless `start_hidden` is set.",
          "type": [
            "boolean",
            "null"
          ],
          "default": null
        },
        "height": {
          "description": "The bar's height in pixels.\n\nNote that GTK treats this as a target minimum,\nand if content inside the bar is over this,\nit will automatically expand to fit.\n\n**Default**: `42`",
          "type": "integer",
          "format": "int32",
          "default": 42
        },
        "layer": {
          "description": "The layer-shell layer to place the bar on.\n\nTaken from the\n[wlr_layer_shell](https://wayland.app/protocols/wlr-layer-shell-unstable-v1#zwlr_layer_shell_v1:enum:layer) definition:\n\n> These values indicate which layers a surface can be rendered in.\n> They are ordered by z depth, bottom-most first.\n> Traditional shell surfaces will typically be rendered between the bottom and top layers.\n> Fullscreen shell surfaces are typically rendered at the top layer.\n> Multiple surfaces can share a single layer, and ordering within a single layer is undefined.\n\n**Valid options**: `background`, `bottom`, `top`, `overlay`\n<br>\n**Default**: `top`",
          "type": "string",
          "enum": [
            "background",
            "bottom",
            "top",
            "overlay"
          ]
        },
        "margin": {
          "description": "The margin to use on each side of the bar, in pixels.\nObject which takes `top`, `bottom`, `left` and `right` keys.\n\n**Default**: `0` on all sides.\n\n# Example\n\nThe following would set a 10px margin around each edge.\n\n```corn\n{\n    margin.top = 10\n    margin.bottom = 10\n    margin.left = 10\n    margin.right = 10\n}\n```",
          "$ref": "#/$defs/MarginConfig"
        },
        "name": {
          "description": "A unique identifier for the bar, used for controlling it over IPC.\nIf not set, uses a generated integer suffix.\n\n**Default**: `bar-n`",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "popup_autohide": {
          "description": "Whether to enable autohide behaviour on the popup.\n\nWhen enabled, clicking outside the popup will close it.\nOn some compositors, this may also aggressively steal mouse/keyboard focus.\n\n**Default**: `false`",
          "type": "boolean",
          "default": false
        },
        "popup_gap": {
          "description": "The size of the gap in pixels\nbetween the bar and the popup window.\n\n**Default**: `5`",
          "type": "integer",
          "format": "int32",
          "default": 5
        },
        "position": {
          "description": "The bar's position on screen.\n\n**Valid options**: `top`, `bottom`, `left`, `right`\n<br>\n**Default**: `bottom`",
          "$ref": "#/$defs/BarPosition"
        },
        "start": {
          "description": "An array of modules to append to the start of the bar.\nDepending on the orientation, this is either the top of the left edge.\n\n**Default**: `[]`",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "$ref": "#/$defs/ModuleConfig"
          }
        },
        "start_hidden": {
          "description": "Whether the bar should be hidden when Ironbar starts.\n\n**Default**: `false`, unless `autohide` is set.",
          "type": [
            "boolean",
            "null"
          ],
          "default": null
        }
      }
    },
    "BarPosition": {
      "type": "string",
      "enum": [
        "top",
        "bottom",
        "left",
        "right"
      ]
    },
    "BatteryModule": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "format": {
          "description": "The format string to use for the widget button label.\nFor available tokens, see [below](#formatting-tokens).\n\n**Default**: `{percentage}%`",
          "type": "string",
          "default": "{percentage}%"
        },
        "icon_size": {
          "description": "The size to render the icon at, in pixels.\n\n**Default**: `24`",
          "type": "integer",
          "format": "int32",
          "default": 24
        },
        "justify": {
          "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n<br>\n**Default**: `left`",
          "$ref": "#/$defs/ModuleJustification"
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "orientation": {
          "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n<br>\n**Default**: `horizontal`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "thresholds": {
          "description": "A map of threshold names to apply as classes,\nagainst the battery percentage at which to apply them.\n\nThresholds work by applying the nearest value\nabove the current percentage, if present.\n\nFor example, using the below config:\n```corn\n{\n  end = [\n    {\n      type = \"battery\"\n      format = \"{percentage}%\"\n      thresholds.warning = 20\n      thresholds.critical = 5\n    }\n  ]\n}\n```\nAt battery levels below 20%,\nthe `.warning` class will be applied to the top-level widget.\nBelow 5%, `.critical` will be applied instead.\nAbove 20%, no class applies.\n\n**Default**: `{}`",
          "type": "object",
          "additionalProperties": {
            "type": "number",
            "format": "double"
          },
          "default": {}
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "Bindmode": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "justify": {
          "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n<br>\n**Default**: `left`",
          "$ref": "#/$defs/ModuleJustification"
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "orientation": {
          "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n<br>\n**Default**: `horizontal`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        },
        "truncate": {
          "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/TruncateMode"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "BluetoothModule": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "adapter_status": {
          "description": "Values of `{adapter_status}` formatting token.",
          "$ref": "#/$defs/AdapterStatus"
        },
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "device_status": {
          "description": "Values of `{device_status}` formatting token.",
          "$ref": "#/$defs/DeviceStatus"
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "format": {
          "description": "Format strings for on-bar button.",
          "$ref": "#/$defs/FormatConfig"
        },
        "icon_size": {
          "description": "Size to render the icons at, in pixels (image icons only).\n\n**Default** `32`",
          "type": "integer",
          "format": "int32",
          "default": 32
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "popup": {
          "description": "Popup related configuration.",
          "$ref": "#/$defs/PopupConfig"
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "BoxWidget": {
      "type": "object",
      "properties": {
        "class": {
          "description": "Widget class name.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "halign": {
          "description": "Horizontal alignment of the box relative to its parent.\n\n**Valid options**: `start`, `center`, `end`, `fill`\n**Default**: `fill`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleAlignment"
            },
            {
              "type": "null"
            }
          ]
        },
        "name": {
          "description": "Widget name.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "orientation": {
          "description": "Whether child widgets should be horizontally or vertically added.\n\n**Valid options**: `horizontal`, `vertical`, `h`, `v`\n**Default**: `horizontal`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "valign": {
          "description": "Vertical alignment of the box relative to its parent.\n\n**Valid options**: `start`, `center`, `end`, `fill`\n**Default**: `fill`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleAlignment"
            },
            {
              "type": "null"
            }
          ]
        },
        "widgets": {
          "description": "Modules and widgets to add to this box.\n\n**Default**: `null`",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "$ref": "#/$defs/WidgetConfig"
          }
        }
      }
    },
    "ButtonWidget": {
      "type": "object",
      "properties": {
        "class": {
          "description": "Widget class name.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "justify": {
          "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n<br>\n**Default**: `left`",
          "$ref": "#/$defs/ModuleJustification"
        },
        "label": {
          "description": "Widget text label. Pango markup and embedded scripts are supported.\n\nThis is a shorthand for adding a label widget to the button.\nIgnored if `widgets` is set.\n\nThis is a [Dynamic String](dynamic-values#dynamic-string).\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "name": {
          "description": "Widget name.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click": {
          "description": "Command to execute. More on this [below](#commands).\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "orientation": {
          "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n<br>\n**Default**: `horizontal`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "widgets": {
          "description": "Modules and widgets to add to this box.\n\n**Default**: `null`",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "$ref": "#/$defs/WidgetConfig"
          }
        }
      }
    },
    "CairoModule": {
      "type": "object",
      "properties": {
        "common": {
          "description": "See [common options](module-level-options#common-options).",
          "anyOf": [
            {
              "$ref": "#/$defs/CommonConfig"
            },
            {
              "type": "null"
            }
          ]
        },
        "frequency": {
          "description": "The number of milliseconds between each draw call.\n\n**Default**: `200`",
          "type": "integer",
          "format": "uint64",
          "default": 200,
          "minimum": 0
        },
        "height": {
          "description": "The canvas height in pixels.\n\n**Default**: `42`",
          "type": "integer",
          "format": "uint32",
          "default": 42,
          "minimum": 0
        },
        "path": {
          "description": "The path to the Lua script to load.\nThis can be absolute, or relative to the working directory.\n\nThe script must contain the entry `draw` function.\n\n**Required**",
          "type": "string",
          "default": ""
        },
        "width": {
          "description": "The canvas width in pixels.\n\n**Default**: `42`",
          "type": "integer",
          "format": "uint32",
          "default": 42,
          "minimum": 0
        }
      }
    },
    "ClipboardModule": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "icon": {
          "description": "The icon to show on the bar widget button.\nSupports [image](images) icons.\n\n**Default**: `󰨸`",
          "type": "string",
          "default": "󰨸"
        },
        "icon_size": {
          "description": "The size to render the icon at.\nNote this only applies to image-type icons.\n\n**Default**: `32`",
          "type": "integer",
          "format": "int32",
          "default": 32
        },
        "image_max_height": {
          "description": "The maximum height to render copied images at.\n\n**Default**: `64.0`",
          "type": "number",
          "format": "double",
          "default": 64.0
        },
        "image_max_width": {
          "description": "The maximum width to render copied images at.\n\n**Default**: `256.0`",
          "type": "number",
          "format": "double",
          "default": 256.0
        },
        "justify": {
          "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n<br>\n**Default**: `left`",
          "$ref": "#/$defs/ModuleJustification"
        },
        "max_items": {
          "description": "The maximum number of items to keep in the history,\nand to show in the popup.\n\n**Default**: `10`",
          "type": "integer",
          "format": "uint",
          "default": 10,
          "minimum": 0
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "orientation": {
          "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n<br>\n**Default**: `horizontal`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        },
        "truncate": {
          "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/TruncateMode"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "ClockModule": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "format": {
          "description": "The format string to use for the date/time shown on the bar.\nPango markup is supported.\n\nDetail on available tokens can be found here:\n<https://docs.rs/chrono/latest/chrono/format/strftime/index.html>\n\n**Default**: `%d/%m/%Y %H:%M`",
          "type": "string",
          "default": "%d/%m/%Y %H:%M"
        },
        "format_popup": {
          "description": "The format string to use for the date/time shown in the popup header.\nPango markup is supported.\n\nDetail on available tokens can be found here:\n<https://docs.rs/chrono/latest/chrono/format/strftime/index.html>\n\n**Default**: `%H:%M:%S`",
          "type": "string",
          "default": "%H:%M:%S"
        },
        "justify": {
          "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n<br>\n**Default**: `left`",
          "$ref": "#/$defs/ModuleJustification"
        },
        "locale": {
          "description": "The locale to use when formatting dates.\n\nNote this will not control the calendar -\nfor that you must set `LC_TIME`.\n\n**Valid options**: See [here](https://docs.rs/pure-rust-locales/0.8.1/pure_rust_locales/enum.Locale.html#variants)\n<br>\n**Default**: `$LC_TIME` or `$LANG` or `'POSIX'`",
          "type": "string",
          "default": "en_GB"
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "orientation": {
          "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n<br>\n**Default**: `horizontal`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "CommonConfig": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "CustomEntry": {
      "description": "Individual shell command entry.",
      "type": "object",
      "properties": {
        "icon": {
          "description": "Name of the image icon to show next to the label.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "label": {
          "description": "Text to display on the button.",
          "type": "string",
          "default": ""
        },
        "on_click": {
          "description": "Shell command to execute when the button is clicked.\nThis is run using `sh -c`.",
          "type": "string",
          "default": ""
        }
      }
    },
    "CustomModule": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "bar": {
          "description": "Modules and widgets to add to the bar container.\n\n**Default**: `[]`",
          "type": "array",
          "items": {
            "$ref": "#/$defs/WidgetConfig"
          }
        },
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "popup": {
          "description": "Modules and widgets to add to the popup container.\n\n**Default**: `null`",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "$ref": "#/$defs/WidgetConfig"
          }
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "bar"
      ]
    },
    "DeviceStatus": {
      "type": "object",
      "properties": {
        "connected": {
          "description": "The value of `{device_status}` formatting token when device is connected.\n\n**Default**: `\"Connected\"`",
          "type": "string",
          "default": "Connected"
        },
        "connecting": {
          "description": "The value of `{device_status}` formatting token when device is connecting.\n\n**Default**: `\"Connecting...\"`",
          "type": "string",
          "default": "Connecting..."
        },
        "disconnected": {
          "description": "The value of `{device_status}` formatting token when device is disconnected.\n\n**Default**: `\"Disconnect\"`",
          "type": "string",
          "default": "Disconnected"
        },
        "disconnecting": {
          "description": "The value of `{device_status}` formatting token when device is disconnecting.\n\n**Default**: `\"Disconnecting...\"`",
          "type": "string",
          "default": "Disconnecting..."
        }
      }
    },
    "DoubleClickTime": {
      "description": "Double-click time configuration",
      "anyOf": [
        {
          "description": "Use GTK's gtk-double-click-time setting",
          "type": "string",
          "const": "gtk"
        },
        {
          "description": "Milliseconds",
          "type": "integer",
          "format": "uint64",
          "minimum": 0
        }
      ]
    },
    "DynamicBool": {
      "anyOf": [
        {
          "description": "Either a script or variable, to be determined.",
          "type": "string"
        },
        {
          "$ref": "#/$defs/Script"
        },
        {
          "type": "string"
        }
      ]
    },
    "EllipsizeMode": {
      "type": "string",
      "enum": [
        "none",
        "start",
        "middle",
        "end"
      ]
    },
    "Favorites": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ]
    },
    "FocusedModule": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "icon_size": {
          "description": "Icon size in pixels.\n\n**Default**: `32`",
          "type": "integer",
          "format": "int32",
          "default": 32
        },
        "justify": {
          "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n<br>\n**Default**: `left`",
          "$ref": "#/$defs/ModuleJustification"
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "orientation": {
          "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n<br>\n**Default**: `horizontal`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_icon": {
          "description": "Whether to show icon on the bar.\n\n**Default**: `true`",
          "type": "boolean",
          "default": true
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_title": {
          "description": "Whether to show app name on the bar.\n\n**Default**: `true`",
          "type": "boolean",
          "default": true
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        },
        "truncate": {
          "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/TruncateMode"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "FormatConfig": {
      "type": "object",
      "properties": {
        "connected": {
          "description": "Format string to use for the widget button when bluetooth adapter is enabled and a device is connected.\n\n**Default**: `\" {device_alias}\"`",
          "type": "string",
          "default": " {device_alias}"
        },
        "connected_battery": {
          "description": "Format string to use for the widget button when bluetooth adapter is enabled, a device is connected and `{device_battery_percent}` is available.\n\n**Default**: `\" {device_alias} • {device_battery_percent}%\"`",
          "type": "string",
          "default": " {device_alias} • {device_battery_percent}%"
        },
        "disabled": {
          "description": "Format string to use for the widget button when bluetooth adapter is disabled.\n\n**Default**: `\" Off\"`",
          "type": "string",
          "default": " Off"
        },
        "enabled": {
          "description": "Format string to use for the widget button when bluetooth adapter is enabled but no devices are connected.\n\n**Default**: `\" On\"`",
          "type": "string",
          "default": " On"
        },
        "not_found": {
          "description": "Format string to use for the widget button when bluetooth adapter not found.\n\n**Default**: `\"\"`",
          "type": "string",
          "default": ""
        }
      }
    },
    "Icons": {
      "type": "object",
      "properties": {
        "caps_off": {
          "description": "Icon to show when capslock is disabled.\n\n**Default**: `\"\"`",
          "type": "string",
          "default": ""
        },
        "caps_on": {
          "description": "Icon to show when capslock is enabled.\n\n**Default**: `󰪛`",
          "type": "string",
          "default": "󰪛"
        },
        "layout_map": {
          "description": "Map of icons or labels to show for a particular keyboard layout.\n\nIf a layout is not present in the map,\nit will fall back to using its actual name.\n\n**Default**: `{}`\n\n# Example\n\n```corn\n{\n  type = \"keyboard\"\n  show_layout = true\n  icons.layout_map.'English (US)' = \"EN\"\n  icons.layout_map.Ukrainian = \"UA\"\n}\n```",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "default": {}
        },
        "num_off": {
          "description": "Icon to show when num lock is disabled.\n\n**Default**: `\"\"`",
          "type": "string",
          "default": ""
        },
        "num_on": {
          "description": "Icon to show when num lock is enabled.\n\n**Default**: ``",
          "type": "string",
          "default": ""
        },
        "scroll_off": {
          "description": "Icon to show when scroll lock is disabled.\n\n**Default**: `\"\"`",
          "type": "string",
          "default": ""
        },
        "scroll_on": {
          "description": "Icon to show when scroll lock is enabled.\n\n**Default**: ``",
          "type": "string",
          "default": ""
        }
      }
    },
    "Icons2": {
      "type": "object",
      "properties": {
        "page_back": {
          "description": "Icon to show for page back button.\n\n**Default**: `󰅁`",
          "type": "string",
          "default": "󰅁"
        },
        "page_forward": {
          "description": "Icon to show for page back button.\n\n**Default**: `>`",
          "type": "string",
          "default": "󰅂"
        }
      }
    },
    "Icons3": {
      "type": "object",
      "properties": {
        "album": {
          "description": "Icon to display nex to album name.\n\n**Default**: `󰀥`",
          "type": "string",
          "default": "󰀥"
        },
        "artist": {
          "description": "Icon to display nex to artist name.\n\n**Default**: `󰠃`",
          "type": "string",
          "default": "󰠃"
        },
        "next": {
          "description": "Icon to display for next button.\n\n**Default**: `󰒭`",
          "type": "string",
          "default": "󰒭"
        },
        "pause": {
          "description": "Icon to display when paused.\n\n**Default**: ``",
          "type": "string",
          "default": ""
        },
        "play": {
          "description": "Icon to display when playing.\n\n**Default**: ``",
          "type": "string",
          "default": ""
        },
        "prev": {
          "description": "Icon to display for previous button.\n\n**Default**: `󰒮`",
          "type": "string",
          "default": "󰒮"
        },
        "track": {
          "description": "Icon to display nex to track title.\n\n**Default**: `󰎈`",
          "type": "string",
          "default": "󰎈"
        },
        "volume": {
          "description": "Icon to display under volume slider.\n\n**Default**: `󰕾`",
          "type": "string",
          "default": "󰕾"
        }
      }
    },
    "Icons4": {
      "type": "object",
      "properties": {
        "closed_dnd": {
          "description": "Icon to show when the panel is closed, with DnD enabled.\nTakes higher priority than count-based icons.\n\n**Default**: `󱅯`",
          "type": "string",
          "default": "󱅯"
        },
        "closed_none": {
          "description": "Icon to show when the panel is closed, with no notifications.\n\n**Default**: `󰍥`",
          "type": "string",
          "default": "󰍥"
        },
        "closed_some": {
          "description": "Icon to show when the panel is closed, with notifications.\n\n**Default**: `󱥂`",
          "type": "string",
          "default": "󱥂"
        },
        "open_dnd": {
          "description": "Icon to show when the panel is open, with DnD enabled.\nTakes higher priority than count-based icons.\n\n**Default**: `󱅮`",
          "type": "string",
          "default": "󱅮"
        },
        "open_none": {
          "description": "Icon to show when the panel is open, with no notifications.\n\n**Default**: `󰍡`",
          "type": "string",
          "default": "󰍡"
        },
        "open_some": {
          "description": "Icon to show when the panel is open, with notifications.\n\n**Default**: `󱥁`",
          "type": "string",
          "default": "󱥁"
        }
      }
    },
    "Icons5": {
      "type": "object",
      "properties": {
        "muted": {
          "description": "Icon to show for muted outputs.\n\n**Default**: `󰝟`",
          "type": "string",
          "default": "󰝟"
        },
        "volume_high": {
          "description": "Icon to show for high volume levels.\n\n**Default**: `󰕾`",
          "type": "string",
          "default": "󰕾"
        },
        "volume_low": {
          "description": "Icon to show for low volume levels.\n\n**Default**: `󰕿`",
          "type": "string",
          "default": "󰕿"
        },
        "volume_medium": {
          "description": "Icon to show for medium volume levels.\n\n**Default**: `󰖀`",
          "type": "string",
          "default": "󰖀"
        }
      }
    },
    "ImageWidget": {
      "type": "object",
      "properties": {
        "class": {
          "description": "Widget class name.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "name": {
          "description": "Widget name.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "size": {
          "description": "The width/height of the image.\nAspect ratio is preserved.\n\n**Default**: `32`",
          "type": "integer",
          "format": "int32",
          "default": 32
        },
        "src": {
          "description": "Image source.\n\nThis is an [image](image) via [Dynamic String](dynamic-values#dynamic-string).\n\n**Required**",
          "type": "string",
          "default": ""
        }
      }
    },
    "Interval": {
      "anyOf": [
        {
          "type": "integer",
          "format": "uint64",
          "minimum": 0
        },
        {
          "$ref": "#/$defs/Intervals"
        }
      ]
    },
    "Intervals": {
      "type": "object",
      "properties": {
        "cpu": {
          "description": "The number of seconds between refreshing CPU data.\n\n**Default**: `5`",
          "type": "integer",
          "format": "uint64",
          "default": 5,
          "minimum": 0
        },
        "disks": {
          "description": "The number of seconds between refreshing disk data.\n\n**Default**: `5`",
          "type": "integer",
          "format": "uint64",
          "default": 5,
          "minimum": 0
        },
        "memory": {
          "description": "The number of seconds between refreshing memory data.\n\n**Default**: `5`",
          "type": "integer",
          "format": "uint64",
          "default": 5,
          "minimum": 0
        },
        "networks": {
          "description": "The number of seconds between refreshing network data.\n\n**Default**: `5`",
          "type": "integer",
          "format": "uint64",
          "default": 5,
          "minimum": 0
        },
        "system": {
          "description": "The number of seconds between refreshing system data.\n\n**Default**: `5`",
          "type": "integer",
          "format": "uint64",
          "default": 5,
          "minimum": 0
        },
        "temps": {
          "description": "The number of seconds between refreshing temperature data.\n\n**Default**: `5`",
          "type": "integer",
          "format": "uint64",
          "default": 5,
          "minimum": 0
        }
      }
    },
    "KeyboardModule": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "icon_size": {
          "description": "Size to render the icons at, in pixels (image icons only).\n\n**Default** `32`",
          "type": "integer",
          "format": "int32",
          "default": 32
        },
        "icons": {
          "description": "Player state icons.\n\nSee [icons](#icons).",
          "$ref": "#/$defs/Icons"
        },
        "justify": {
          "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n<br>\n**Default**: `left`",
          "$ref": "#/$defs/ModuleJustification"
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "orientation": {
          "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n<br>\n**Default**: `horizontal`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "seat": {
          "description": "The Wayland seat to attach to.\nYou almost certainly do not need to change this.\n\n**Default**: `seat0`",
          "type": "string",
          "default": "seat0"
        },
        "show_caps": {
          "description": "Whether to show capslock indicator.\n\n**Default**: `true`",
          "type": "boolean",
          "default": true
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_layout": {
          "description": "Whether to show the current keyboard layout.\n\n **Default**: `true`",
          "type": "boolean",
          "default": true
        },
        "show_num": {
          "description": "Whether to show num lock indicator.\n\n **Default**: `true`",
          "type": "boolean",
          "default": true
        },
        "show_scroll": {
          "description": "Whether to show scroll lock indicator.\n\n **Default**: `true`",
          "type": "boolean",
          "default": true
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "LabelModule": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "justify": {
          "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n<br>\n**Default**: `left`",
          "$ref": "#/$defs/ModuleJustification"
        },
        "label": {
          "description": "The text to show on the label.\nThis is a [Dynamic String](dynamic-values#dynamic-string).\n\n**Required**",
          "type": "string"
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "orientation": {
          "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n<br>\n**Default**: `horizontal`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        },
        "truncate": {
          "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/TruncateMode"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "label"
      ]
    },
    "LabelWidget": {
      "type": "object",
      "properties": {
        "class": {
          "description": "Widget class name.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "justify": {
          "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n<br>\n**Default**: `left`",
          "$ref": "#/$defs/ModuleJustification"
        },
        "label": {
          "description": "Widget text label. Pango markup and embedded scripts are supported.\n\nThis is a [Dynamic String](dynamic-values#dynamic-string).\n\n**Required**",
          "type": "string"
        },
        "name": {
          "description": "Widget name.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "orientation": {
          "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n<br>\n**Default**: `horizontal`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "truncate": {
          "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/TruncateMode"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "label"
      ]
    },
    "LauncherModule": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "favorites": {
          "description": "List of app IDs (or classes) to always show regardless of open state,\nin the order specified.\n\n**Default**: `null`",
          "type": [
            "array",
            "null"
          ],
          "default": null,
          "items": {
            "type": "string"
          }
        },
        "icon_size": {
          "description": "Size in pixels to render icon at (image icons only).\n\n**Default**: `32`",
          "type": "integer",
          "format": "int32",
          "default": 32
        },
        "icons": {
          "description": "Module UI icons (separate from app icons shown for items).\n\nSee [icons](#icons).",
          "$ref": "#/$defs/Icons2"
        },
        "justify": {
          "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n<br>\n**Default**: `left`",
          "$ref": "#/$defs/ModuleJustification"
        },
        "launch_command": {
          "description": "Command used to launch applications.\n\n**Default**: `gtk-launch`",
          "type": "string",
          "default": "gtk-launch {app_name}"
        },
        "minimize_focused": {
          "description": "Whether to minimize a window if it is focused when clicked.\n\n**Default**: `true`",
          "type": "boolean",
          "default": true
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "orientation": {
          "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n<br>\n**Default**: `horizontal`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "page_size": {
          "description": "The number of items to show on a page.\n\nWhen the number of items reaches the page size,\npagination controls appear at the start of the widget\nwhich can be used to move forward/back through the list of items.\n\nIf there are too many to fit, the overflow will be truncated\nby the next widget.\n\n**Default**: `1000`.",
          "type": "integer",
          "format": "uint",
          "default": 1000,
          "minimum": 0
        },
        "pagination_icon_size": {
          "description": "Size in pixels to render pagination icons at (image icons only).\n\n**Default**: `16`",
          "type": "integer",
          "format": "int32",
          "default": 16
        },
        "reversed": {
          "description": "Whether items should be added from right-to-left\ninstead of left-to-right.\n\nThis includes favourites.\n\n**Default**: `false`",
          "type": "boolean",
          "default": false
        },
        "show_icons": {
          "description": "Whether to show application icons on the bar.\n\n**Default**: `true`",
          "type": "boolean",
          "default": true
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_names": {
          "description": "Whether to show application names on the bar.\n\n**Default**: `false`",
          "type": "boolean",
          "default": false
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        },
        "truncate": {
          "description": "Truncate application names on the bar if they get too long.\nSee [truncate options](module-level-options#truncate-mode).\n\n**Default**: `Auto (end)`",
          "$ref": "#/$defs/TruncateMode"
        },
        "truncate_popup": {
          "description": "Truncate application names in popups if they get too long.\nSee [truncate options](module-level-options#truncate-mode).\n\n**Default**: `{ mode = \"middle\" max_length = 25 }`",
          "$ref": "#/$defs/TruncateMode"
        }
      }
    },
    "MarginConfig": {
      "type": "object",
      "properties": {
        "bottom": {
          "type": "integer",
          "format": "int32",
          "default": 0
        },
        "left": {
          "type": "integer",
          "format": "int32",
          "default": 0
        },
        "right": {
          "type": "integer",
          "format": "int32",
          "default": 0
        },
        "top": {
          "type": "integer",
          "format": "int32",
          "default": 0
        }
      }
    },
    "MenuConfig": {
      "description": "An individual entry in the main menu section.",
      "oneOf": [
        {
          "description": "Contains all applications matching the configured `categories`.",
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "xdg_entry"
            }
          },
          "$ref": "#/$defs/XdgEntry",
          "required": [
            "type"
          ]
        },
        {
          "description": "Contains all applications not covered by `xdg_entry` categories.",
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "xdg_other"
            }
          },
          "required": [
            "type"
          ]
        },
        {
          "description": "Individual shell command entry.",
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "custom"
            }
          },
          "$ref": "#/$defs/CustomEntry",
          "required": [
            "type"
          ]
        }
      ]
    },
    "MenuModule": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "center": {
          "description": "Items to add to the start of the main menu.\n\nBy default, this shows a number of XDG entries\nthat should cover all common applications.\n\n**Default**: See `examples/menu/default`",
          "type": "array",
          "items": {
            "$ref": "#/$defs/MenuConfig"
          }
        },
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "end": {
          "description": "Items to add to the end of the main menu.\n\n**Default**: `[]`",
          "type": "array",
          "items": {
            "$ref": "#/$defs/MenuConfig"
          }
        },
        "height": {
          "description": "Fixed height of the menu.\n\nWhen set, if the number of (sub)menu entries exceeds this value,\na scrollbar will be shown.\n\nLeave null to resize dynamically.\n\n**Default**: `null`",
          "type": [
            "integer",
            "null"
          ],
          "format": "int32",
          "default": null
        },
        "label": {
          "description": "Label to show on the menu button on the bar.\n\n**Default**: `≡`",
          "type": [
            "string",
            "null"
          ],
          "default": "≡"
        },
        "label_icon": {
          "description": "Icon to show on the menu button on the bar.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "label_icon_size": {
          "description": "Size of the `label_icon` image.",
          "type": "integer",
          "format": "int32",
          "default": 16
        },
        "launch_command": {
          "description": "Command used to launch applications.\n\n**Default**: `gtk-launch`",
          "type": "string",
          "default": "gtk-launch {app_name}"
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "start": {
          "description": "Items to add to the start of the main menu.\n\n**Default**: `[]`",
          "type": "array",
          "items": {
            "$ref": "#/$defs/MenuConfig"
          }
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        },
        "truncate": {
          "description": "Truncate options to apply to (sub)menu item labels.\n\nSee [truncate options](module-level-options#truncate-mode).\n\n**Default**: `Auto (end)`",
          "$ref": "#/$defs/TruncateMode"
        },
        "width": {
          "description": "Fixed width of the menu.\n\nCan be used with `truncate` options\nto customise how item labels are truncated.\n\n**Default**: `null`",
          "type": [
            "integer",
            "null"
          ],
          "format": "int32",
          "default": null
        }
      }
    },
    "ModuleAlignment": {
      "oneOf": [
        {
          "description": "Align widget to the start (left for horizontal, top for vertical).",
          "type": "string",
          "const": "start"
        },
        {
          "description": "Align widget to the center.",
          "type": "string",
          "const": "center"
        },
        {
          "description": "Align widget to the end (right for horizontal, bottom for vertical).",
          "type": "string",
          "const": "end"
        },
        {
          "description": "Stretch widget to fill available space.",
          "type": "string",
          "const": "fill"
        }
      ]
    },
    "ModuleConfig": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "battery"
            }
          },
          "$ref": "#/$defs/BatteryModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "bindmode"
            }
          },
          "$ref": "#/$defs/Bindmode",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "bluetooth"
            }
          },
          "$ref": "#/$defs/BluetoothModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "cairo"
            }
          },
          "$ref": "#/$defs/CairoModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "clipboard"
            }
          },
          "$ref": "#/$defs/ClipboardModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "clock"
            }
          },
          "$ref": "#/$defs/ClockModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "custom"
            }
          },
          "$ref": "#/$defs/CustomModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "focused"
            }
          },
          "$ref": "#/$defs/FocusedModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "keyboard"
            }
          },
          "$ref": "#/$defs/KeyboardModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "label"
            }
          },
          "$ref": "#/$defs/LabelModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "launcher"
            }
          },
          "$ref": "#/$defs/LauncherModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "menu"
            }
          },
          "$ref": "#/$defs/MenuModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "music"
            }
          },
          "$ref": "#/$defs/MusicModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "network_manager"
            }
          },
          "$ref": "#/$defs/NetworkManagerModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "notifications"
            }
          },
          "$ref": "#/$defs/NotificationsModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "script"
            }
          },
          "$ref": "#/$defs/ScriptModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "sys_info"
            }
          },
          "$ref": "#/$defs/SysInfoModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "tray"
            }
          },
          "$ref": "#/$defs/TrayModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "volume"
            }
          },
          "$ref": "#/$defs/VolumeModule",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "workspaces"
            }
          },
          "$ref": "#/$defs/WorkspacesModule",
          "required": [
            "type"
          ]
        }
      ]
    },
    "ModuleJustification": {
      "type": "string",
      "enum": [
        "left",
        "right",
        "center",
        "fill"
      ]
    },
    "ModuleOrientation": {
      "type": "string",
      "enum": [
        "horizontal",
        "vertical"
      ]
    },
    "MonitorConfig": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "Single": {
              "$ref": "#/$defs/BarConfig"
            }
          },
          "additionalProperties": false,
          "required": [
            "Single"
          ]
        },
        {
          "type": "object",
          "properties": {
            "Multiple": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/BarConfig"
              }
            }
          },
          "additionalProperties": false,
          "required": [
            "Multiple"
          ]
        }
      ]
    },
    "MusicModule": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "cover_image_size": {
          "description": "Size to render the album art image at inside the popup, in pixels.\n\n**Default**: `128`",
          "type": "integer",
          "format": "int32",
          "default": 128
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "format": {
          "description": "Format of current song info to display on the bar.\n\nInfo on formatting tokens [below](#formatting-tokens).\n\n**Default**: `{title} / {artist}`",
          "type": "string",
          "default": "{title} / {artist}"
        },
        "host": {
          "description": "*[MPD Only]*\nTCP or Unix socket address of the MPD server.\nFor TCP, this should include the port number.\n\n**Default**: `localhost:6600`",
          "type": "string",
          "default": "localhost:6600"
        },
        "icon_size": {
          "description": "Size to render the icons at, in pixels (image icons only).\n\n**Default** `32`",
          "type": "integer",
          "format": "int32",
          "default": 32
        },
        "icons": {
          "description": "Player state icons.\n\nSee [icons](#icons).",
          "$ref": "#/$defs/Icons3"
        },
        "justify": {
          "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n<br>\n**Default**: `left`",
          "$ref": "#/$defs/ModuleJustification"
        },
        "music_dir": {
          "description": "*[MPD Only]*\nPath to root of the MPD server's music directory.\nThis is required for displaying album art.\n\n**Default**: `$HOME/Music`",
          "type": "string",
          "default": "/home/jake/Music"
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "orientation": {
          "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n<br>\n**Default**: `horizontal`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "player_type": {
          "description": "Type of player to connect to",
          "$ref": "#/$defs/PlayerType"
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_status_icon": {
          "description": "Whether to show the play/pause status icon\non the bar.\n\n**Default**: `true`",
          "type": "boolean",
          "default": true
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        },
        "truncate": {
          "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/TruncateMode"
            },
            {
              "type": "null"
            }
          ]
        },
        "truncate_popup_album": {
          "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/TruncateMode"
            },
            {
              "type": "null"
            }
          ]
        },
        "truncate_popup_artist": {
          "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/TruncateMode"
            },
            {
              "type": "null"
            }
          ]
        },
        "truncate_popup_title": {
          "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/TruncateMode"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "NetworkManagerModule": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "icon_size": {
          "type": "integer",
          "format": "int32",
          "default": 24
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "NotificationsModule": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "icons": {
          "description": "SwayNC state icons.\n\nSee [icons](#icons).",
          "$ref": "#/$defs/Icons4"
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_count": {
          "description": "Whether to show the current notification count.\n\n**Default**: `true`",
          "type": "boolean",
          "default": true
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "PlayerType": {
      "type": "string",
      "enum": [
        "mpd",
        "mpris"
      ]
    },
    "PopupConfig": {
      "type": "object",
      "properties": {
        "device": {
          "description": "Device box related configuration",
          "$ref": "#/$defs/PopupDeviceConfig"
        },
        "disabled": {
          "description": "Format string to use for the message that is displayed when the adapter is not found or disabled.\n\n**Default**: `\"{adapter_status}\"`",
          "type": "string",
          "default": "{adapter_status}"
        },
        "header": {
          "description": "Format string to use for the header of popup window.\n\n**Default**: `\" Enable Bluetooth\"`",
          "type": "string",
          "default": " Enable Bluetooth"
        },
        "max_height": {
          "description": "The maximum height the window can reach before scrolling.\nSpecify either as `pixels` or `devices`.\nLeave blank to allow the popup to grow indefinitely.\n\n**Default**: `Some(SizeLimit::Pixel(330))`",
          "anyOf": [
            {
              "$ref": "#/$defs/SizeLimit"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "PopupDeviceConfig": {
      "type": "object",
      "properties": {
        "footer": {
          "description": "Format string to use for the footer of device box.\n\n**Default**: `\"{device_status}\"`",
          "type": "string",
          "default": "{device_status}"
        },
        "footer_battery": {
          "description": "Format string to use for the footer of device box when `{device_battery_percent}` is available.\n\n**Default**: `\"{device_status} • Battery {device_battery_percent}%\"`",
          "type": "string",
          "default": "{device_status} • Battery {device_battery_percent}%"
        },
        "header": {
          "description": "Format string to use for the header of device box.\n\n**Default**: `\"{device_alias}\"`",
          "type": "string",
          "default": "{device_alias}"
        },
        "header_battery": {
          "description": "Format string to use for the header of device box when `{device_battery_percent}` is available.\n\n**Default**: `\"{device_alias}\"`",
          "type": "string",
          "default": "{device_alias}"
        }
      }
    },
    "ProgressWidget": {
      "type": "object",
      "properties": {
        "class": {
          "description": "Widget class name.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "label": {
          "description": "Text label to show for the progress bar.\n\nThis is a [Dynamic String](dynamic-values#dynamic-string).\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "length": {
          "description": "The progress bar length, in pixels.\nGTK will automatically determine the size if left blank.\n\n**Default**: `null`",
          "type": [
            "integer",
            "null"
          ],
          "format": "int32",
          "default": null
        },
        "max": {
          "description": "The maximum progress bar value.\n\n**Default**: `100`",
          "type": "number",
          "format": "double",
          "default": 100.0
        },
        "name": {
          "description": "Widget name.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "orientation": {
          "description": "Orientation of the progress bar.\n\n**Valid options**: `horizontal`, `vertical`, `h`, `v`\n<br />\n**Default**: `horizontal`",
          "$ref": "#/$defs/ModuleOrientation"
        },
        "value": {
          "description": "Script to run to get the progress bar value.\nOutput must be a valid percentage.\n\nNote that this expects a numeric value between `0`-`max` as output.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "ReservedTrayAction": {
      "description": "Reserved tray click actions",
      "oneOf": [
        {
          "description": "Open the tray icon's popup menu",
          "type": "string",
          "const": "menu"
        },
        {
          "description": "Trigger the tray icon's default (primary) action",
          "type": "string",
          "const": "default"
        },
        {
          "description": "Trigger the tray icon's secondary action",
          "type": "string",
          "const": "secondary"
        },
        {
          "description": "Do nothing",
          "type": "string",
          "const": "none"
        }
      ]
    },
    "Script": {
      "type": "object",
      "properties": {
        "cmd": {
          "type": "string",
          "default": ""
        },
        "interval": {
          "type": "integer",
          "format": "uint64",
          "default": 5000,
          "minimum": 0
        },
        "mode": {
          "$ref": "#/$defs/ScriptMode"
        }
      }
    },
    "ScriptInput": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "$ref": "#/$defs/Script"
        }
      ]
    },
    "ScriptMode": {
      "type": "string",
      "enum": [
        "poll",
        "watch"
      ]
    },
    "ScriptModule": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "cmd": {
          "description": "Path to script to execute.\n\nThis can be an absolute path,\nor relative to the working directory.\n\n**Required**",
          "type": "string",
          "default": ""
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "interval": {
          "description": "Time in milliseconds between executions.\n\n**Default**: `5000`",
          "type": "integer",
          "format": "uint64",
          "default": 5000,
          "minimum": 0
        },
        "justify": {
          "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n<br>\n**Default**: `left`",
          "$ref": "#/$defs/ModuleJustification"
        },
        "mode": {
          "description": "Script execution mode.\nSee [modes](#modes) for more info.\n\n**Valid options**: `poll`, `watch`\n<br />\n**Default**: `poll`",
          "$ref": "#/$defs/ScriptMode"
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "orientation": {
          "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n<br>\n**Default**: `horizontal`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "SizeLimit": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "devices": {
              "type": "integer",
              "format": "int32"
            }
          },
          "additionalProperties": false,
          "required": [
            "devices"
          ]
        },
        {
          "type": "object",
          "properties": {
            "pixels": {
              "type": "integer",
              "format": "int32"
            }
          },
          "additionalProperties": false,
          "required": [
            "pixels"
          ]
        }
      ]
    },
    "SliderWidget": {
      "type": "object",
      "properties": {
        "class": {
          "description": "Widget class name.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "length": {
          "description": "The slider length.\nGTK will automatically determine the size if left blank.\n\n**Default**: `null`",
          "type": [
            "integer",
            "null"
          ],
          "format": "int32",
          "default": null
        },
        "max": {
          "description": "Maximum slider value.\n\n**Default**: `100`",
          "type": "number",
          "format": "double",
          "default": 100.0
        },
        "min": {
          "description": "Minimum slider value.\n\n**Default**: `0`",
          "type": "number",
          "format": "double",
          "default": 0.0
        },
        "name": {
          "description": "Widget name.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "on_change": {
          "description": "Command to execute when the slider changes.\nMore on this [below](#slider).\n\nNote that this will provide the floating point value as an argument.\nIf your input program requires an integer, you will need to round it.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "orientation": {
          "description": "Orientation of the slider.\n\n**Valid options**: `horizontal`, `vertical`, `h`, `v`\n<br />\n**Default**: `horizontal`",
          "$ref": "#/$defs/ModuleOrientation"
        },
        "show_label": {
          "description": "Whether to show the value label above the slider.\n\n**Default**: `true`",
          "type": "boolean",
          "default": true
        },
        "step": {
          "description": "If the increment to change when scrolling with the mousewheel.\nIf left blank, GTK will use the default value,\ndetermined by the current environment.\n\n**Default**: `null`",
          "type": [
            "number",
            "null"
          ],
          "format": "double",
          "default": null
        },
        "value": {
          "description": "Script to run to get the slider value.\nOutput must be a valid number.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "SortOrder": {
      "oneOf": [
        {
          "description": "Shows workspaces in the order they're added",
          "type": "string",
          "const": "added"
        },
        {
          "description": "Shows workspaces in the order of their displayed labels,\naccounting for any mappings supplied in `name_map`.\nIn most cases, this is likely their number.\n\nWorkspaces are sorted numerically first,\nand named workspaces are added to the end in alphabetical order.",
          "type": "string",
          "const": "label"
        },
        {
          "description": "Shows workspaces in the order of their real names,\nas supplied by the compositor.\nIn most cases, this is likely their number.\n\nWorkspaces are sorted numerically first,\nand named workspaces are added to the end in alphabetical order.",
          "type": "string",
          "const": "name"
        }
      ]
    },
    "SysInfoModule": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "direction": {
          "description": "The orientation by which the labels are laid out.\n\n**Valid options**: `horizontal`, `vertical`, `h`, `v`\n<br>\n**Default** : `horizontal`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "format": {
          "description": "List of strings including formatting tokens.\nFor available tokens, see [below](#formatting-tokens).\n\n**Required**",
          "type": "array",
          "default": [],
          "items": {
            "type": "string"
          }
        },
        "interval": {
          "description": "Number of seconds between refresh.\n\nThis can be set as a global interval,\nor passed as an object to customize the interval per-system.\n\n**Default**: `5`",
          "$ref": "#/$defs/Interval"
        },
        "justify": {
          "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n<br>\n**Default**: `left`",
          "$ref": "#/$defs/ModuleJustification"
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "orientation": {
          "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n<br>\n**Default**: `horizontal`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "TransitionType": {
      "type": "string",
      "enum": [
        "none",
        "crossfade",
        "slide_start",
        "slide_end"
      ]
    },
    "TrayClickAction": {
      "description": "Action to perform when clicking on a tray icon",
      "anyOf": [
        {
          "description": "Reserved action",
          "$ref": "#/$defs/ReservedTrayAction"
        },
        {
          "description": "Run a custom shell command",
          "type": "string"
        }
      ]
    },
    "TrayModule": {
      "description": "Click action handlers for tray icons",
      "type": "object",
      "properties": {
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "direction": {
          "description": "The direction in which to pack tray icons.\n\n**Valid options**: `horizontal`, `vertical`\n<br>\n**Default**: `horizontal` for horizontal bars, `vertical` for vertical bars",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "icon_size": {
          "description": "Size in pixels to display the tray icons as.\n\n**Default**: `16`",
          "type": "integer",
          "format": "uint32",
          "default": 16,
          "minimum": 0
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "prefer_theme_icons": {
          "description": "Requests that icons from the theme be used over the item-provided item.\nMost items only provide one or the other so this will have no effect in most circumstances.\n\n**Default**: `true`",
          "type": "boolean",
          "default": true
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "TruncateMode": {
      "description": "Some modules provide options for truncating text.\nThis is controlled using a common `TruncateMode` type,\nwhich is defined below.\n\nThe option can be configured in one of two modes.\n\n**Default**: `Auto (end)`",
      "anyOf": [
        {
          "description": "Do not truncate content.\n\nSetting this option may cause excessively long content to overflow other widgets,\nshifting them off-screen.\n\n# Example\n\n```corn\n{ truncate = \"off\" }",
          "type": "null"
        },
        {
          "description": "Auto mode lets GTK decide when to ellipsize.\n\nTo use this mode, set the truncate option to a string\ndeclaring the location to truncate text from and place the ellipsis.\n\n# Example\n\n```corn\n{ truncate = \"start\" }\n```\n\n**Valid options**: `start`, `middle`, `end`\n<br>\n**Default**: `end`",
          "$ref": "#/$defs/EllipsizeMode"
        },
        {
          "description": "Length mode defines a fixed point at which to ellipsize.\n\nGenerally you will want to set only one of `length` or `max_length`,\nbut you can set both if required.\n\n# Example\n\n```corn\n{\n    truncate.mode = \"start\"\n    truncate.length = 50\n    truncate.max_length = 70\n}\n```",
          "type": "object",
          "properties": {
            "length": {
              "description": "The fixed width (in characters) of the widget.\n\nThe widget will be expanded to this width\nif it would have otherwise been smaller.\n\nLeave unset to let GTK automatically handle.\n\n**Default**: `null`",
              "type": [
                "integer",
                "null"
              ],
              "format": "int32"
            },
            "max_length": {
              "description": "The maximum number of characters to show\nbefore truncating.\n\nLeave unset to let GTK automatically handle.\n\n**Default**: `null`",
              "type": [
                "integer",
                "null"
              ],
              "format": "int32"
            },
            "mode": {
              "description": "The location to truncate text from and place the ellipsis.\n**Valid options**: `start`, `middle`, `end`\n<br>\n**Default**: `null`",
              "$ref": "#/$defs/EllipsizeMode"
            }
          },
          "required": [
            "mode"
          ]
        }
      ]
    },
    "VolumeModule": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "format": {
          "description": "The format string to use for the widget button label.\nFor available tokens, see [below](#formatting-tokens).\n\n**Default**: `{icon} {percentage}%`",
          "type": "string",
          "default": "{icon} {percentage}%"
        },
        "icons": {
          "description": "Volume state icons.\n\nSee [icons](#icons).",
          "$ref": "#/$defs/Icons5"
        },
        "justify": {
          "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n<br>\n**Default**: `left`",
          "$ref": "#/$defs/ModuleJustification"
        },
        "max_volume": {
          "description": "Maximum value to allow volume sliders to reach.\nPulse supports values > 100 but this may result in distortion.\n\n**Default**: `100`",
          "type": "number",
          "format": "double",
          "default": 100.0
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "orientation": {
          "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n<br>\n**Default**: `horizontal`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        },
        "truncate": {
          "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/TruncateMode"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "Widget": {
      "oneOf": [
        {
          "description": "A container to place nested widgets inside.",
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "box"
            }
          },
          "$ref": "#/$defs/BoxWidget",
          "required": [
            "type"
          ]
        },
        {
          "description": "A text label. Pango markup is supported.",
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "label"
            }
          },
          "$ref": "#/$defs/LabelWidget",
          "required": [
            "type"
          ]
        },
        {
          "description": "A clickable button, which can run a command when clicked.",
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "button"
            }
          },
          "$ref": "#/$defs/ButtonWidget",
          "required": [
            "type"
          ]
        },
        {
          "description": "An image or icon from disk or http.",
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "image"
            }
          },
          "$ref": "#/$defs/ImageWidget",
          "required": [
            "type"
          ]
        },
        {
          "description": "A draggable slider.",
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "slider"
            }
          },
          "$ref": "#/$defs/SliderWidget",
          "required": [
            "type"
          ]
        },
        {
          "description": "A progress bar.",
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "progress"
            }
          },
          "$ref": "#/$defs/ProgressWidget",
          "required": [
            "type"
          ]
        }
      ]
    },
    "WidgetConfig": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "anyOf": [
        {
          "description": "A custom-module specific basic widget",
          "$ref": "#/$defs/Widget"
        },
        {
          "description": "A native Ironbar module, such as `clock` or `focused`.\nAll widgets are supported, including their popups.",
          "$ref": "#/$defs/ModuleConfig"
        }
      ]
    },
    "WorkspacesModule": {
      "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).",
      "type": "object",
      "properties": {
        "all_monitors": {
          "description": "Whether to display workspaces from all monitors.\nWhen false, only shows workspaces on the current monitor.\n\n**Default**: `false`",
          "type": "boolean",
          "default": false
        },
        "class": {
          "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "disable_popup": {
          "description": "Prevents the popup from opening on-click for this widget.",
          "type": "boolean",
          "default": false
        },
        "favorites": {
          "description": "Workspaces which should always be shown.\nThis can either be an array of workspace names,\nor a map of monitor names to arrays of workspace names.\n\n**Default**: `{}`\n\n# Example\n\n```corn\n// array format\n{\n  type = \"workspaces\"\n  favorites = [\"1\", \"2\", \"3\"]\n}\n\n// map format\n{\n  type = \"workspaces\"\n  favorites.DP-1 = [\"1\", \"2\", \"3\"]\n  favorites.DP-2 = [\"4\", \"5\", \"6\"]\n}\n```",
          "$ref": "#/$defs/Favorites"
        },
        "hidden": {
          "description": "A list of workspace names to never show.\n\nThis may be useful for scratchpad/special workspaces, for example.\n\n**Default**: `[]`",
          "type": "array",
          "default": [],
          "items": {
            "type": "string"
          }
        },
        "icon_size": {
          "description": "The size to render icons at (image icons only).\n\n**Default**: `32`",
          "type": "integer",
          "format": "int32",
          "default": 32
        },
        "justify": {
          "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n<br>\n**Default**: `left`",
          "$ref": "#/$defs/ModuleJustification"
        },
        "name": {
          "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "name_map": {
          "description": "Map of actual workspace names to custom names.\n\nCustom names can be [images](images).\n\nIf a workspace is not present in the map,\nit will fall back to using its actual name.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "default": {}
        },
        "on_click_left": {
          "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_left_double": {
          "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle": {
          "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_middle_double": {
          "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right": {
          "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_click_right_double": {
          "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_enter": {
          "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_mouse_exit": {
          "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_down": {
          "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "on_scroll_up": {
          "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n<br>\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```",
          "anyOf": [
            {
              "$ref": "#/$defs/ScriptInput"
            },
            {
              "type": "null"
            }
          ]
        },
        "orientation": {
          "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n<br>\n**Default**: `horizontal`",
          "anyOf": [
            {
              "$ref": "#/$defs/ModuleOrientation"
            },
            {
              "type": "null"
            }
          ]
        },
        "show_if": {
          "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`",
          "anyOf": [
            {
              "$ref": "#/$defs/DynamicBool"
            },
            {
              "type": "null"
            }
          ]
        },
        "smooth_scroll_speed": {
          "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`",
          "type": [
            "number",
            "null"
          ],
          "format": "double"
        },
        "sort": {
          "description": "The method used for sorting workspaces.\n\n- `added` always appends to the end.\n- `label` sorts by displayed value.\n- `name` sorts by workspace name.\n\n**Valid options**: `added`, `label`, `name`.\n<br>\n**Default**: `label`",
          "$ref": "#/$defs/SortOrder"
        },
        "tooltip": {
          "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`",
          "type": [
            "string",
            "null"
          ]
        },
        "transition_duration": {
          "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`",
          "type": [
            "integer",
            "null"
          ],
          "format": "uint32",
          "minimum": 0
        },
        "transition_type": {
          "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n<br>\n**Default**: `slide_start`",
          "anyOf": [
            {
              "$ref": "#/$defs/TransitionType"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "XdgEntry": {
      "type": "object",
      "properties": {
        "categories": {
          "description": "XDG categories the associated submenu should contain.",
          "type": "array",
          "default": [],
          "items": {
            "type": "string"
          }
        },
        "icon": {
          "description": "Name of the image icon to show next to the label.",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "label": {
          "description": "Text to display on the button.",
          "type": "string",
          "default": ""
        }
      }
    }
  }
}
