Layouts, export and import¶
Layouts¶
A layout is a named set of HUD positions: for each HUD module, its anchor, its offset and its scale. Module switches and module settings are not part of a layout; they apply across all layouts. You might keep one layout for PvP with everything tucked into corners and another for building.
Layouts are managed in the settings screen under General ▸ HUD layout, and you can step through them from the HUD editor's toolbar.
| Control | Action |
|---|---|
| < name >, with a counter such as "1/3" | Switch layouts. The current positions are stored into the layout you leave, and the one you enter is applied. |
| New | Create a layout with every module at its default position. It becomes active. Suggested name: "Layout", "Layout 2", … |
| Duplicate | Copy the active layout including the current positions. The copy becomes active. Suggested name: " |
| Rename | Rename the active layout |
| Delete | Delete the active layout. The last remaining layout cannot be deleted. |
After New, Duplicate or Rename a name field appears with Save and Cancel. Enter saves, Esc cancels.
| Rule | Value |
|---|---|
| Number of layouts | 1 to 16. There is always at least one, named "Default" on a fresh instance. |
| Name length | 1 to 24 characters after trimming spaces |
| Characters | No control characters and no § |
| Uniqueness | Names are unique, ignoring upper and lower case |
| A name that breaks a rule | "Name is empty, too long or already used", and Save is disabled |
A module that a layout does not mention, for example one added in a later client version, appears at its default position in that layout.
Rename, duplicate and delete are in the build but have not yet been exercised in a running game; creating and switching layouts have been unit-tested as well.
Export and import¶
General ▸ Settings file has two buttons.
| Button | What it does | Result line |
|---|---|---|
| Export | Writes xol/xol-settings.json in the current instance folder, replacing an earlier export |
"Exported to xol/xol-settings.json", or "Export failed" |
| Import | Reads xol/xol-settings.json from the current instance folder and applies it |
"Imported xol/xol-settings.json", or "Import failed: …" |
There is no file chooser. To move settings to another instance or another computer, export, copy the file into the other instance's xol folder, and import there. Settings ▸ Instance ▸ Open folder ▸ Instance folder in the launcher gets you to the folder.
Exactly what the export contains¶
{
"schema": 2,
"activeLayout": "Default",
"modules": {
"general": { "settings": { "animations": true } },
"fps": {
"enabled": true,
"settings": { "background": true, "shadow": true, "color": "FFFFFFFF" }
},
"zoom": {
"enabled": false,
"settings": { "key": 46, "divisor": 4.0, "smooth-camera": true }
}
},
"layouts": [
{
"name": "Default",
"modules": {
"fps": { "anchor": "TOP_LEFT", "x": 4.0, "y": 4.0, "scale": 1.0 }
}
}
],
"kind": "xol-settings-export"
}
The example is shortened; a real file lists all fourteen entries (thirteen modules and General) and all ten HUD modules in every layout.
| Field | Contents |
|---|---|
schema |
The settings format version, currently 2 |
kind |
Always xol-settings-export. Import refuses a file without it. |
activeLayout |
The name of the active layout |
modules.<id>.enabled |
The module's switch. Absent for General. |
modules.<id>.settings |
Every setting of the module by identifier |
layouts[] |
Every layout: its name and, per HUD module, anchor, x, y, scale |
That is all. The file contains no account, no player name, no server address, no file path and nothing about your computer. There is nothing of that kind in the client's settings model to begin with.
What import checks¶
| Condition | Message |
|---|---|
| No file | "Import failed: No xol-settings.json in the xol folder" |
| Larger than 1 MB | "Import failed: File is too large" |
Not a Xol export (kind missing or different) |
"Import failed: Not a Xol settings export" |
Written by a newer client (schema higher than this client knows) |
"Import failed: Written by a newer Xol" |
| Not readable as JSON | "Import failed: Unreadable file" |
If import fails, your current settings are untouched. When it succeeds, import is lenient on purpose: every value is type-checked, a number outside a setting's range is clamped into it, scale is held between 50% and 300%, an unknown anchor falls back to the module's default, unknown modules and settings are ignored, and layouts with unusable or duplicate names are dropped. An export from the older schema 1 is migrated on the way in.