# MangoHud Schema Reference Superseded as the user-facing/help-source reference by [`docs/MANGOHUD_OPTION_BEHAVIOR.md`](/home/aaron/Programming/mangotune/docs/MANGOHUD_OPTION_BEHAVIOR.md). Keep this file only as schema-planning context for `src/config/schema.rs`. Source: Official MangoHud repository `data/MangoHud.conf` cross-referenced with the MangoHud README and source code. Last verified against MangoHud 0.7.x. This file is no longer the authoritative help text source and does not currently cover every upstream MangoHud option. ## Schema Entry Structure Each option in `schema.rs` must encode: ```rust pub struct SchemaEntry { pub key: &'static str, pub option_type: OptionType, pub default: DefaultValue, pub description: &'static str, pub category: Category, pub dependencies: &'static [&'static str], // options that must be enabled for this to work pub conflicts_with: &'static [&'static str], // mutually exclusive options pub gpu_vendor_only: Option, // None = all, Some(Amd) = AMD only pub gamescope_only: bool, pub mangoapp_only: bool, } pub enum OptionType { Flag, // bare key, no value — presence means enabled Bool, // key=0 or key=1 Int { min: i64, max: i64 }, Float { min: f64, max: f64 }, String { max_len: usize }, Color, // 6-char hex RRGGBB, no # Enum { variants: &'static [&'static str] }, FpsLimitList, // comma-separated ints e.g. "0,30,60" KeyBind, // e.g. "Shift_R+F12" CommaSeparatedInts, CommaSeparatedFloats, CommaSeparatedStrings, Path, // filesystem path, validated to exist or be writable } ``` --- ## Category: PERFORMANCE | Key | Type | Default | Notes | |-----|------|---------|-------| | `fps_limit` | FpsLimitList | `0` | 0 = unlimited; comma-separated list e.g. `0,30,60` | | `fps_limit_method` | Enum[`early`,`late`] | `""` | early = wait before present | | `vsync` | Int[-1..3] | `-1` | -1=unset; 0=adaptive; 1=off; 2=mailbox; 3=on | | `gl_vsync` | Int[-2..N] | `-2` | OpenGL only; -2=unset; 0=off; >=1=wait N vblanks | | `picmip` | Int[-17..16] | `-17` | Mip-map LoD bias; negative=sharper | | `af` | Int[-1..16] | `-1` | Anisotropic filtering; -1=unset | | `bicubic` | Flag | absent | Force bicubic filtering | | `trilinear` | Flag | absent | Force trilinear filtering | | `retro` | Flag | absent | Disable linear filtering (blocky textures) | --- ## Category: DISPLAY — FPS & FRAMETIME | Key | Type | Default | Notes | |-----|------|---------|-------| | `fps` | Flag | present | Show FPS counter — enabled by default | | `fps_only` | Flag | absent | CONFLICTS WITH: all other display params | | `fps_sampling_period` | Int[100..60000] | `500` | ms | | `fps_color_change` | Flag | absent | Enable FPS color thresholds | | `fps_value` | CommaSeparatedInts | `30,60` | Two thresholds: warn,ok | | `fps_color` | CommaSeparatedStrings | `B22222,FDFD09,39F900` | Three hex colors: low,mid,high | | `fps_text` | String | `""` | Custom label for FPS row | | `fps_metrics` | CommaSeparatedStrings | `""` | e.g. `avg,0.01,1,97` — `AVG` or decimal percentiles | | `frametime` | Flag | present | Show frametime — enabled by default | | `frame_count` | Flag | absent | Show frame counter | | `frame_timing` | Flag | present | Frametime graph — enabled by default | | `frame_timing_detailed` | Flag | absent | More detailed frametime graph | | `dynamic_frame_timing` | Flag | absent | Dynamic scale frametime graph | | `histogram` | Flag | absent | CONFLICTS WITH frame_timing | | `throttling_status` | Flag | present | GPU throttling indicator | | `throttling_status_graph` | Flag | absent | Show throttling on frametime graph | | `show_fps_limit` | Flag | absent | Display current FPS limit value | --- ## Category: DISPLAY — GPU | Key | Type | Default | Notes | |-----|------|---------|-------| | `gpu_stats` | Flag | present | Master GPU section toggle | | `gpu_temp` | Flag | absent | | | `gpu_junction_temp` | Flag | absent | | | `gpu_core_clock` | Flag | absent | | | `gpu_mem_temp` | Flag | absent | DEPENDS ON: `vram` | | `gpu_mem_clock` | Flag | absent | DEPENDS ON: `vram` | | `gpu_power` | Flag | absent | | | `gpu_power_limit` | Flag | absent | | | `gpu_text` | String[32] | `""` | Custom GPU label | | `gpu_load_change` | Flag | absent | Color GPU load | | `gpu_load_value` | CommaSeparatedInts | `60,90` | Two load thresholds | | `gpu_load_color` | CommaSeparatedStrings | `39F900,FDFD09,B22222` | Three hex colors | | `gpu_fan` | Flag | absent | RPM on AMD, percent on NVIDIA | | `gpu_voltage` | Flag | absent | AMD ONLY | | `gpu_list` | CommaSeparatedInts | `""` | Select GPUs by index e.g. `0,1` | | `gpu_efficiency` | Flag | absent | | | `gpu_name` | Flag | absent | Show GPU model name | | `vulkan_driver` | Flag | absent | Show Vulkan driver string | | `engine_version` | Flag | absent | | | `engine_short_names` | Flag | absent | | | `present_mode` | Flag | absent | | | `pci_dev` | String | `""` | Format: `domain:bus:slot.function` e.g. `0000:03:00.0` | --- ## Category: DISPLAY — CPU | Key | Type | Default | Notes | |-----|------|---------|-------| | `cpu_stats` | Flag | present | Master CPU section toggle | | `cpu_temp` | Flag | absent | | | `cpu_power` | Flag | absent | | | `cpu_text` | String[32] | `""` | Custom CPU label | | `cpu_mhz` | Flag | absent | Average MHz across cores | | `cpu_load_change` | Flag | absent | Color CPU load | | `cpu_load_value` | CommaSeparatedInts | `60,90` | Two thresholds | | `cpu_load_color` | CommaSeparatedStrings | `39F900,FDFD09,B22222` | Three hex colors | | `cpu_efficiency` | Flag | absent | | | `core_load` | Flag | absent | Per-core load bars | | `core_load_change` | Flag | absent | Color per-core load | | `core_bars` | Flag | absent | Graphical core bars | | `core_type` | Flag | absent | Show P/E core type labels | --- ## Category: DISPLAY — MEMORY | Key | Type | Default | Notes | |-----|------|---------|-------| | `vram` | Flag | absent | Required by gpu_mem_clock, gpu_mem_temp | | `ram` | Flag | absent | | | `swap` | Flag | absent | | | `procmem` | Flag | absent | Per-process resident memory | | `procmem_shared` | Flag | absent | DEPENDS ON: `procmem` | | `procmem_virt` | Flag | absent | DEPENDS ON: `procmem` | | `proc_vram` | Flag | absent | Per-process VRAM | --- ## Category: DISPLAY — I/O & NETWORK | Key | Type | Default | Notes | |-----|------|---------|-------| | `io_read` | Flag | absent | Per-app I/O read | | `io_write` | Flag | absent | Per-app I/O write | | `network` | CommaSeparatedStrings | `""` | Network interfaces e.g. `eth0,wlo1`; empty = all | --- ## Category: DISPLAY — MISC INDICATORS | Key | Type | Default | Notes | |-----|------|---------|-------| | `wine` | Flag | absent | Wine/Proton version | | `winesync` | Flag | absent | Wine sync method | | `exec_name` | Flag | absent | Show executable name | | `arch` | Flag | absent | MangoHud architecture | | `gamemode` | Flag | absent | GameMode running status | | `vkbasalt` | Flag | absent | vkBasalt running status | | `engine_version` | Flag | absent | | | `version` | Flag | absent | Show MangoHud version in overlay | | `resolution` | Flag | absent | Current display resolution | | `display_server` | Flag | absent | Wayland/X11 indicator | | `temp_fahrenheit` | Flag | absent | Use °F instead of °C | | `flip_efficiency` | Flag | absent | Joules per frame | | `fex_stats` | Flag | absent | FEX-Emu stats (ARM64 only) | --- ## Category: DISPLAY — GRAPHS | Key | Type | Default | Notes | |-----|------|---------|-------| | `graphs` | CommaSeparatedStrings | `""` | Valid values: `gpu_load,cpu_load,gpu_core_clock,gpu_mem_clock,vram,ram,cpu_temp,gpu_temp` | --- ## Category: DISPLAY — BATTERY | Key | Type | Default | Notes | |-----|------|---------|-------| | `battery` | Flag | absent | | | `battery_icon` | Flag | absent | DEPENDS ON: `battery` | | `device_battery` | CommaSeparatedStrings | `""` | e.g. `gamepad,mouse` | | `device_battery_icon` | Flag | absent | | | `battery_watt` | Flag | absent | DEPENDS ON: `battery` | | `battery_time` | Flag | absent | DEPENDS ON: `battery` | --- ## Category: DISPLAY — MEDIA PLAYER | Key | Type | Default | Notes | |-----|------|---------|-------| | `media_player` | Flag | absent | Enable media player metadata | | `media_player_name` | String | `""` | e.g. `spotify` — DEPENDS ON: `media_player` | | `media_player_format` | String | `""` | e.g. `{title};{artist};{album}` — DEPENDS ON: `media_player` | --- ## Category: DISPLAY — GAMESCOPE All options in this category: `gamescope_only = true` | Key | Type | Default | Notes | |-----|------|---------|-------| | `fsr` | Flag | absent | FSR status | | `hide_fsr_sharpness` | Flag | absent | DEPENDS ON: `fsr` | | `hdr` | Flag | absent | HDR status | | `refresh_rate` | Flag | absent | Current refresh rate | | `debug` | Flag | absent | Gamescope app frametimes graph | --- ## Category: DISPLAY — STEAM DECK | Key | Type | Default | Notes | |-----|------|---------|-------| | `fan` | Flag | absent | Steam Deck fan RPM | | `mangoapp_steam` | Flag | absent | mangoapp only | --- ## Category: DISPLAY — TIME & MISC TEXT | Key | Type | Default | Notes | |-----|------|---------|-------| | `time` | Flag | absent | Current time | | `time_no_label` | Flag | absent | DEPENDS ON: `time` | | `time_format` | String | `"%T"` | strftime format | | `custom_text_center` | String | `""` | Centered header text | | `custom_text` | String | `""` | Custom text line | | `exec` | String | `""` | Shell command — output shown in next column | --- ## Category: APPEARANCE — LAYOUT | Key | Type | Default | Notes | |-----|------|---------|-------| | `legacy_layout` | Bool | `0` | | | `preset` | Int[-1..4] | `-1` | -1=default; 0=off; 1=fps only; 2=horizontal; 3=extended; 4=high detail | | `full` | Flag | absent | Enable most toggleable params | | `no_display` | Flag | absent | Start hidden | | `horizontal` | Flag | absent | Horizontal layout | | `horizontal_stretch` | Flag | absent | DEPENDS ON: `horizontal` | | `hud_compact` | Flag | absent | Compact mode | | `hud_no_margin` | Flag | absent | Remove margins | | `position` | Enum[`top-left`,`top-right`,`bottom-left`,`bottom-right`,`top-center`,`middle-left`,`middle-right`,`bottom-center`] | `top-left` | | | `offset_x` | Int[0..9999] | `0` | pixels | | `offset_y` | Int[0..9999] | `0` | pixels | | `width` | Int[0..9999] | `0` | 0 = auto | | `height` | Int[0..9999] | `140` | | | `table_columns` | Int[1..10] | `3` | | | `cellpadding_y` | Float[-2.0..2.0] | `-0.085` | | | `round_corners` | Int[0..50] | `0` | | | `background_alpha` | Float[0.0..1.0] | `0.5` | | | `alpha` | Float[0.0..1.0] | `1.0` | Overall HUD transparency | --- ## Category: APPEARANCE — COLORS All color values: 6-char hex string RRGGBB (no `#`). Validate: must match `^[0-9A-Fa-f]{6}$`. | Key | Default | |-----|---------| | `text_color` | `FFFFFF` | | `gpu_color` | `2E9762` | | `cpu_color` | `2E97CB` | | `vram_color` | `AD64C1` | | `ram_color` | `C26693` | | `engine_color` | `EB5B5B` | | `io_color` | `A491D3` | | `frametime_color` | `00FF00` | | `background_color` | `020202` | | `media_player_color` | `FFFFFF` | | `wine_color` | `EB5B5B` | | `battery_color` | `FF9078` | | `network_color` | `E07B85` | | `horizontal_separator_color` | `AD64C1` | Also: | Key | Type | Default | |-----|------|---------| | `text_outline` | Flag | present (default on) | | `text_outline_color` | Color | `000000` | | `text_outline_thickness` | Float[0.5..5.0] | `1.5` | --- ## Category: APPEARANCE — TYPOGRAPHY | Key | Type | Default | Notes | |-----|------|---------|-------| | `font_size` | Int[8..72] | `24` | | | `font_scale` | Float[0.1..5.0] | `1.0` | | | `font_size_text` | Int[8..72] | `24` | For text elements | | `font_scale_media_player` | Float[0.1..5.0] | `0.55` | | | `no_small_font` | Flag | absent | Disable small font for secondary info | | `font_file` | Path | `""` | TTF/OTF path — validated to exist if set | | `font_file_text` | Path | `""` | | | `font_glyph_ranges` | CommaSeparatedStrings | `""` | Valid: `korean,chinese,chinese_simplified,japanese,cyrillic,thai,vietnamese,latin_ext_a,latin_ext_b` | --- ## Category: BEHAVIOR — KEYBINDINGS All keybind values: format is `Key` or `Modifier+Key` or `Mod1+Mod2+Key`. Valid modifiers: `Shift_L`, `Shift_R`, `Control_L`, `Control_R`, `Alt_L`, `Alt_R`, `Super_L`, `Super_R`. | Key | Default | |-----|---------| | `toggle_hud` | `Shift_R+F12` | | `toggle_hud_position` | `Shift_R+F11` | | `toggle_preset` | `Shift_R+F10` | | `toggle_fps_limit` | `Shift_L+F1` | | `toggle_logging` | `Shift_L+F2` | | `reload_cfg` | `Shift_L+F4` | | `upload_log` | `Shift_L+F3` | | `reset_fps_metrics` | `Shift_R+F9` | --- ## Category: BEHAVIOR — LOGGING | Key | Type | Default | Notes | |-----|------|---------|-------| | `autostart_log` | Int[0..3600] | absent | Seconds before auto-start | | `log_duration` | Int[1..86400] | absent | Seconds | | `log_interval` | Int[0..10000] | `0` | ms; 0 = default | | `output_folder` | Path | `""` | Must be writable directory | | `output_file` | String | `""` | | | `permit_upload` | Bool | `0` | Upload to flightlessmango.com | | `benchmark_percentiles` | CommaSeparatedStrings | `97,AVG` | | | `log_versioning` | Flag | absent | | | `upload_logs` | Flag | absent | DEPENDS ON: `permit_upload=1` | --- ## Category: BEHAVIOR — MISC | Key | Type | Default | Notes | |-----|------|---------|-------| | `blacklist` | CommaSeparatedStrings | `""` | App names to suppress overlay | | `control` | String | `-1` | Socket name; -1=disabled; `%p` replaced with PID | --- ## Category: WORKAROUNDS — OPENGL | Key | Type | Default | Notes | |-----|------|---------|-------| | `gl_size_query` | Enum[`viewport`,`scissorbox`,`disabled`] | `""` | Default: glXQueryDrawable | | `gl_bind_framebuffer` | Int[0..999] | absent | Rebind framebuffer before draw | | `gl_dont_flip` | Bool | absent | Don't swap origin for GL_UPPER_LEFT | --- ## Category: ADVANCED — FCAT | Key | Type | Default | Notes | |-----|------|---------|-------| | `fcat` | Flag | absent | Enable FCAT overlay | | `fcat_overlay_width` | Int[20..200] | `24` | DEPENDS ON: `fcat` | | `fcat_screen_edge` | Int[0..3] | `0` | DEPENDS ON: `fcat` | --- ## Category: ADVANCED — FTRACE | Key | Type | Notes | |-----|------|-------| | `ftrace` | String | Complex format: `type/event[+type/event2]`; validated by regex | ftrace format regex: `^(histogram|linegraph|label)/[a-zA-Z0-9_]+(\/[a-zA-Z0-9_]+)?(\+(histogram|linegraph|label)/[a-zA-Z0-9_]+(\/[a-zA-Z0-9_]+)?)*$` --- ## Validation Rules Summary ### Cross-option dependencies (enabling B requires A to also be enabled): ``` gpu_mem_clock → requires vram gpu_mem_temp → requires vram hide_fsr_sharpness → requires fsr battery_icon → requires battery battery_watt → requires battery battery_time → requires battery media_player_name → requires media_player media_player_format → requires media_player procmem_shared → requires procmem procmem_virt → requires procmem upload_logs → requires permit_upload = 1 horizontal_stretch → requires horizontal time_no_label → requires time ``` ### Mutual exclusions (A and B cannot both be active): ``` fps_only ↔ (any other display param) histogram ↔ frame_timing ``` ### Vendor restrictions: ``` gpu_voltage → AMD only (warn if non-AMD GPU detected) ``` ### Gamescope-only (warn if not running gamescope): ``` fsr, hide_fsr_sharpness, hdr, refresh_rate, debug ``` ### Value format validations: - All Color fields: must match `^[0-9A-Fa-f]{6}$` - All Path fields: if non-empty, path must exist (for input files) or parent dir must be writable (for output) - `fps_limit`: each comma-separated value must be non-negative integer - `font_glyph_ranges`: each value must be in the valid set - `graphs`: each value must be in the valid set - `device_battery`: each value must be in `[gamepad, mouse, controller, headset]` - `fps_metrics`: each value must be `AVG` or a valid decimal between 0.0 and 100.0 - `benchmark_percentiles`: same as fps_metrics - `time_format`: must be a valid strftime format string - `pci_dev`: must match `^[0-9a-fA-F]{4}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}\.[0-9a-fA-F]$` - `control`: must be `-1` or a valid socket name string - Keybind fields: must match `^(Shift_[LR]\+|Control_[LR]\+|Alt_[LR]\+|Super_[LR]\+)*(F[1-9]|F1[0-2]|[A-Z])$`