Interface Suite: config files
These files stay readable in every build (escrow too), so you can change them. Shown as shipped in version 1.2.2.
config.lua
lua
LumoUiConfig = {}
-- Test commands (/hudphone, /hudnotify, /uitap, /lumotimertest, /lumouitest).
LumoUiConfig.Debug = false
-- ─── Interface control (/ui) ────────────────────────────────────────────────
LumoUiConfig.Command = 'ui'
LumoUiConfig.CommandAliases = { 'uisettings', 'hudsettings', 'menu' }
-- Framework groups that open the Admin tab. QBCore/Qbox permissions, ESX groups.
LumoUiConfig.AdminPermissions = { 'god', 'admin' }
-- Or give staff this ACE: add_ace group.admin lumo.ui.admin allow
LumoUiConfig.AdminAce = 'lumo.ui.admin'
LumoUiConfig.RestartCommand = 'uirestart'
LumoUiConfig.RestartDelay = 400
-- `/uirestart` restarts these first (whichever are running), then lumo-ui.
LumoUiConfig.RestartResources = {
'qb-target',
'qb-radialmenu',
'qb-menu',
'qb-input',
'progressbar',
'esx_notify',
'esx_progressbar',
'esx_textui',
'lumo-chat-theme'
}
-- `/uirestart full` adds these.
LumoUiConfig.FullRestartResources = {}
LumoUiConfig.PlayerDefaults = {
uiScale = 1.0,
hudScale = 1.0,
hudOpacity = 1.0,
compactHud = false,
reducedMotion = false,
hideHud = false,
cinematicMode = false,
-- right | left | center-top | center-bottom | bottom-right | bottom-left
notificationPosition = 'center-bottom',
-- default | left | bottom | right
promptPosition = 'bottom',
showLocation = true,
showCompass = true,
showWeapon = true,
showBuffs = true,
showCrosshair = true,
-- Animate the voice indicator from the game's talking state.
voiceMeter = true,
-- Repeating tone while driving unbuckled (players can turn it on in /ui).
seatbeltBeep = false,
crosshairMode = 'contextual', -- contextual | always
crosshairStyle = 'dot', -- dot | cross | circle
hudPreset = 'classic', -- classic | circle
circleMapX = 83,
circleMapY = 3,
minimapMode = 'always', -- always | vehicle | never
showMinimapBorder = true,
minimapOffsetY = -0.040,
layout = {
player = { x = 1.45, y = 92.3 },
location = { x = 1.2, y = 68.9 },
vehicle = { x = 82.7, y = 78.7 },
weapon = { x = 90.4, y = 90.4 },
compass = { x = 50.0, y = 2.2 },
-- Centre-anchored: x is the middle of the panel.
radar = { x = 50.0, y = 82.6 }
}
}
LumoUiConfig.AdminDefaults = {
serverName = 'MY SERVER',
accent = '#b7ff3a', -- Classic preset
circleAccent = '#ffffff', -- Circle preset
allowPlayerSettings = true,
forceReducedMotion = false,
maxNotifications = 5,
notificationDurationScale = 1.0
}
-- ─── HUD ───────────────────────────────────────────────────────────────────
LumoUiConfig.Hud = {
Enabled = true,
UseMPH = true, -- false = km/h
SeatbeltWarnSpeed = 40, -- flashing belt cell above this speed (0 = off)
SeatbeltBeepInterval = 2500, -- ms between optional belt beeps
LowFuelWarning = 15, -- fuel % that flashes the fuel cell (0 = off)
-- 'auto' tries LegacyFuel, cdn-fuel, ps-fuel, lc_fuel, ox_fuel (state bag) then the native.
Fuel = 'auto',
-- Left/Right/Down arrows drive the indicators. false disables the key mappings.
IndicatorKeys = { left = 'LEFT', right = 'RIGHT', hazard = 'DOWN' },
-- Weapons that never count as "armed" (no ammo module, no contextual crosshair):
-- melee, throwables and tools.
UnarmedWeapons = {
`weapon_unarmed`, `gadget_parachute`, `weapon_petrolcan`, `weapon_hazardcan`, `weapon_fireextinguisher`,
`weapon_dagger`, `weapon_bat`, `weapon_bottle`, `weapon_crowbar`, `weapon_flashlight`, `weapon_golfclub`,
`weapon_hammer`, `weapon_hatchet`, `weapon_knuckle`, `weapon_knife`, `weapon_machete`, `weapon_switchblade`,
`weapon_nightstick`, `weapon_wrench`, `weapon_battleaxe`, `weapon_poolcue`, `weapon_stone_hatchet`,
`weapon_briefcase`, `weapon_briefcase_02`, `weapon_garbagebag`, `weapon_handcuffs`, `weapon_bread`,
`weapon_grenade`, `weapon_bzgas`, `weapon_molotov`, `weapon_stickybomb`, `weapon_proxmine`, `weapon_snowball`,
`weapon_pipebomb`, `weapon_ball`, `weapon_smokegrenade`, `weapon_flare`,
},
-- Hide GTA's own health/armour bars under the radar.
HideRadarBars = true,
-- Hide GTA's own weapon icon and ammo count (top right) while armed; the
-- Lumo weapon panel shows the ammo instead.
HideNativeAmmo = true,
-- Optional custom radar masks. Ship a resource that streams `squaremap.ytd`
-- / `circlemap.ytd` and they are used; without them the round radar uses
-- lumo-ui's own mask (stream/lumo_ui_circlemask.ytd) and the square one the game's.
RadarMaskTextures = true,
-- Stress: hud:server:GainStress / hud:server:RelieveStress (the QBCore contract).
Stress = {
Enabled = true,
Notify = true,
WhitelistedJobs = { leo = true, ambulance = true },
SpeedUnbuckled = 50, -- speed that adds stress without a belt
SpeedBuckled = 100, -- speed that adds stress with a belt
SpeedInterval = 20000, -- ms between speeding gains
SpeedAmount = { 1, 1 },
ShootChance = 0.03,
ShootCooldown = 10000,
ShootAmount = { 1, 1 },
IgnoreWeapons = { `weapon_petrolcan`, `weapon_hazardcan`, `weapon_fireextinguisher` },
-- Vehicle classes that add speeding stress (GetVehicleClass ids).
VehicleClasses = { [0] = true, [1] = true, [2] = true, [3] = true, [4] = true, [5] = true, [6] = true,
[7] = true, [8] = true, [9] = true, [10] = true, [11] = true, [12] = true },
-- Screen blur from this level up; ragdolls at 100.
EffectsFrom = 50,
},
}
-- ─── Target (Left Alt) ──────────────────────────────────────────────────────
LumoUiConfig.Target = {
Enabled = true,
OpenKey = 'LMENU', -- keyboard key name for the key mapping
SelectControl = 38, -- E: run the single option / open the list
Toggle = false, -- true = press to open, press again to close
MaxDistance = 7.0,
ClickCooldown = 500,
DisableControls = true, -- block camera/attack while the eye is open
DisableInVehicle = false,
-- Zone centre markers while the eye is open (Classic preset).
ZoneMarkers = true,
ZoneMarkerDistance = 10.0,
ZoneMarkerColour = { 255, 255, 255, 255 },
ZoneMarkerActiveColour = { 183, 255, 58, 255 },
Outline = false,
OutlinePeds = false,
OutlineColour = { 255, 255, 255, 255 },
-- Circle preset: small dots on nearby things you can interact with.
PassiveHints = { enabled = true, distance = 3.0, maxVisible = 10, refresh = 750, markerSize = 28 },
Debug = false, -- /targetdebug adds test options to every ped/vehicle/object
}
-- ─── Radial menu (F1) ───────────────────────────────────────────────────────
LumoUiConfig.Radial = {
Enabled = true,
Key = 'F1',
-- Tap to leave the wheel open for the mouse; hold to use it hold-to-open.
Toggle = true,
UseWhileWalking = false,
-- Built-in vehicle menu while seated (engine/doors/extras need the driver
-- seat). Set a part to false to leave it out, or VehicleMenu = false.
VehicleMenu = { Seats = true, Engine = true, Doors = true, Extras = true },
-- Items every player sees. Same shape as qb-radialmenu items:
-- { id, title, icon, type = 'client'|'server'|'command'|'qbcommand', event, shouldClose, items, canOpen }
Items = {
{
id = 'emotes',
title = 'Emotes',
icon = 'face-smile',
type = 'command',
event = 'emotemenu',
shouldClose = true,
canOpen = function()
return GetResourceState('lumo-emotes') == 'started' or GetResourceState('rpemotes') == 'started'
or GetResourceState('rpemotes-reborn') == 'started' or GetResourceState('dpemotes') == 'started'
end,
},
{
id = 'clothing',
title = 'Clothing',
icon = 'shirt',
type = 'client',
event = 'lumo-clothing:client:openTakeOff',
shouldClose = true,
canOpen = function() return GetResourceState('lumo-clothing') == 'started' end,
},
},
-- Extra items by job name (shown while on duty). Example:
-- police = { { id = 'mdt', title = 'MDT', icon = 'tablet', type = 'command', event = 'mdt', shouldClose = true } },
JobItems = {},
-- Text for the built-in vehicle menu (seats, doors, extras…), to translate.
Labels = {},
}
-- ─── Progress bar ───────────────────────────────────────────────────────────
LumoUiConfig.Progress = {
CancelControl = 200, -- ESC / backspace (INPUT_FRONTEND_PAUSE_ALTERNATE)
-- Sets LocalPlayer.state.inv_busy while a bar runs (QBCore inventories read it).
SetInventoryBusy = true,
}
-- ─── Context menu ───────────────────────────────────────────────────────────
LumoUiConfig.Menu = {
-- Left Alt hands the mouse to a menu header shown with showHeader().
HeaderFocusKey = 'LMENU',
-- Where item names in menus resolve to images. 'auto' finds the inventory.
ImagePath = 'auto',
}bridge/config.lua
lua
--- lumo-ui — framework settings
---
--- QBCore, Qbox and ESX are detected automatically; with none of them running
--- the HUD runs standalone. This folder (bridge/) is the built-in framework
--- layer, so the separate lumo-bridge resource is not needed.
LumoBridgeConfig = {
--- 'auto' | 'qb' | 'qbx' | 'esx' | 'standalone' | 'custom'
Framework = 'auto',
Fallback = 'standalone',
Debug = false,
Resources = {
qb = 'qb-core',
qbx = 'qbx_core',
esx = 'es_extended',
oxlib = 'ox_lib',
},
CallbackTimeout = 15000,
Inventory = 'auto',
Target = 'auto',
ESX = {
IdentifierFormat = 'char%s:%l',
SingleCharacter = false,
VerifyMulticharAtBoot = false,
},
Standalone = {
OwnsCharacters = false,
CharacterResource = 'lumo-multicharacter',
RememberPosition = false,
SetPedModel = false,
AnnounceOnSpawn = true,
},
Custom = {
client = {},
server = {},
inventory = {},
},
}