Skip to content

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 = {},
    },
}