-- Linux Executor v2.0 | Client-Side | Mobile Support
-- Full-featured executor UI with animations
-- Services
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local HttpService = game:GetService("HttpService")
local Player = Players.LocalPlayer
local PlayerGui = Player:WaitForChild("PlayerGui")
-- Detect Mobile
local isMobile = UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled
-- Remove existing UI if re-executed
if PlayerGui:FindFirstChild("LinuxExecutor") then
PlayerGui:FindFirstChild("LinuxExecutor"):Destroy()
end
-- ═══════════════════════════════════════════
-- THEME CONFIG
-- ═══════════════════════════════════════════
local Theme = {
Background = Color3.fromRGB(18, 18, 24),
TopBar = Color3.fromRGB(12, 12, 18),
Sidebar = Color3.fromRGB(22, 22, 30),
Editor = Color3.fromRGB(25, 25, 35),
EditorLineBar = Color3.fromRGB(20, 20, 28),
Accent = Color3.fromRGB(0, 180, 120),
AccentHover = Color3.fromRGB(0, 210, 140),
AccentDark = Color3.fromRGB(0, 140, 95),
Text = Color3.fromRGB(220, 220, 230),
TextDim = Color3.fromRGB(130, 130, 150),
TextLineNum = Color3.fromRGB(80, 80, 110),
ButtonBG = Color3.fromRGB(35, 35, 50),
ButtonHover = Color3.fromRGB(45, 45, 65),
TabActive = Color3.fromRGB(0, 180, 120),
TabInactive = Color3.fromRGB(35, 35, 50),
Console = Color3.fromRGB(20, 20, 28),
ConsoleText = Color3.fromRGB(0, 200, 130),
Error = Color3.fromRGB(255, 80, 80),
Warning = Color3.fromRGB(255, 200, 50),
Border = Color3.fromRGB(40, 40, 55),
ScrollBar = Color3.fromRGB(0, 150, 100),
Close = Color3.fromRGB(255, 60, 60),
Minimize = Color3.fromRGB(255, 190, 50),
Maximize = Color3.fromRGB(0, 200, 80),
}
-- ═══════════════════════════════════════════
-- UTILITY FUNCTIONS
-- ═══════════════════════════════════════════
local function CreateCorner(parent, radius)
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, radius or 8)
corner.Parent = parent
return corner
end
local function CreateStroke(parent, color, thickness)
local stroke = Instance.new("UIStroke")
stroke.Color = color or Theme.Border
stroke.Thickness = thickness or 1
stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
stroke.Parent = parent
return stroke
end
local function CreateShadow(parent)
local shadow = Instance.new("ImageLabel")
shadow.Name = "Shadow"
shadow.BackgroundTransparency = 1
shadow.Image = "rbxassetid://5554236805"
shadow.ImageColor3 = Color3.fromRGB(0, 0, 0)
shadow.ImageTransparency = 0.5
shadow.ScaleType = Enum.ScaleType.Slice
shadow.SliceCenter = Rect.new(23, 23, 277, 277)
shadow.Size = UDim2.new(1, 30, 1, 30)
shadow.Position = UDim2.new(0, -15, 0, -15)
shadow.ZIndex = parent.ZIndex - 1
shadow.Parent = parent
return shadow
end
local function Tween(obj, props, duration, style, direction)
local tween = TweenService:Create(obj, TweenInfo.new(
duration or 0.3,
style or Enum.EasingStyle.Quint,
direction or Enum.EasingDirection.Out
), props)
tween:Play()
return tween
end
local function RippleEffect(button, x, y)
local ripple = Instance.new("Frame")
ripple.Name = "Ripple"
ripple.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
ripple.BackgroundTransparency = 0.7
ripple.BorderSizePixel = 0
ripple.ZIndex = button.ZIndex + 5
ripple.AnchorPoint = Vector2.new(0.5, 0.5)
local absPos = button.AbsolutePosition
local posX = x - absPos.X
local posY = y - absPos.Y
ripple.Position = UDim2.new(0, posX, 0, posY)
ripple.Size = UDim2.new(0, 0, 0, 0)
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(1, 0)
corner.Parent = ripple
ripple.Parent = button
local maxSize = math.max(button.AbsoluteSize.X, button.AbsoluteSize.Y) * 2.5
Tween(ripple, {Size = UDim2.new(0, maxSize, 0, maxSize), BackgroundTransparency = 1}, 0.6)
task.delay(0.6, function()
ripple:Destroy()
end)
end
local function CreateButton(parent, text, size, position, color, callback)
local btn = Instance.new("TextButton")
btn.Name = text .. "Button"
btn.Size = size
btn.Position = position
btn.BackgroundColor3 = color or Theme.ButtonBG
btn.Text = ""
btn.AutoButtonColor = false
btn.BorderSizePixel = 0
btn.ClipsDescendants = true
btn.Parent = parent
CreateCorner(btn, 6)
local label = Instance.new("TextLabel")
label.Name = "Label"
label.Size = UDim2.new(1, 0, 1, 0)
label.BackgroundTransparency = 1
label.Text = text
label.TextColor3 = Theme.Text
label.Font = Enum.Font.GothamBold
label.TextSize = isMobile and 13 or 14
label.ZIndex = btn.ZIndex + 1
label.Parent = btn
btn.MouseEnter:Connect(function()
Tween(btn, {BackgroundColor3 = (color and Color3.fromRGB(
math.min(color.R * 255 + 20, 255),
math.min(color.G * 255 + 20, 255),
math.min(color.B * 255 + 20, 255)
)) or Theme.ButtonHover}, 0.2)
end)
btn.MouseLeave:Connect(function()
Tween(btn, {BackgroundColor3 = color or Theme.ButtonBG}, 0.2)
end)
btn.MouseButton1Click:Connect(function()
local mouse = UserInputService:GetMouseLocation()
RippleEffect(btn, mouse.X, mouse.Y)
if callback then callback() end
end)
return btn
end
-- ═══════════════════════════════════════════
-- MAIN SCREEN GUI
-- ═══════════════════════════════════════════
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "LinuxExecutor"
ScreenGui.ResetOnSpawn = false
ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
ScreenGui.DisplayOrder = 100
ScreenGui.IgnoreGuiInset = true
ScreenGui.Parent = PlayerGui
-- ═══════════════════════════════════════════
-- MAIN FRAME
-- ═══════════════════════════════════════════
local mainWidth = isMobile and 370 or 680
local mainHeight = isMobile and 420 or 480
local MainFrame = Instance.new("Frame")
MainFrame.Name = "MainFrame"
MainFrame.Size = UDim2.new(0, mainWidth, 0, mainHeight)
MainFrame.Position = UDim2.new(0.5, 0, 0.5, 0)
MainFrame.AnchorPoint = Vector2.new(0.5, 0.5)
MainFrame.BackgroundColor3 = Theme.Background
MainFrame.BorderSizePixel = 0
MainFrame.ClipsDescendants = true
MainFrame.Parent = ScreenGui
CreateCorner(MainFrame, 12)
CreateStroke(MainFrame, Theme.Border, 1)
CreateShadow(MainFrame)
-- ═══════════════════════════════════════════
-- OPEN ANIMATION
-- ═══════════════════════════════════════════
MainFrame.Size = UDim2.new(0, 0, 0, 0)
MainFrame.BackgroundTransparency = 1
MainFrame.Rotation = -5
Tween(MainFrame, {
Size = UDim2.new(0, mainWidth, 0, mainHeight),
BackgroundTransparency = 0,
Rotation = 0
}, 0.5, Enum.EasingStyle.Back)
-- ═══════════════════════════════════════════
-- TOP BAR
-- ═══════════════════════════════════════════
local TopBar = Instance.new("Frame")
TopBar.Name = "TopBar"
TopBar.Size = UDim2.new(1, 0, 0, 36)
TopBar.BackgroundColor3 = Theme.TopBar
TopBar.BorderSizePixel = 0
TopBar.Parent = MainFrame
CreateCorner(TopBar, 12)
-- Bottom cover for TopBar corners
local TopBarCover = Instance.new("Frame")
TopBarCover.Size = UDim2.new(1, 0, 0, 14)
TopBarCover.Position = UDim2.new(0, 0, 1, -14)
TopBarCover.BackgroundColor3 = Theme.TopBar
TopBarCover.BorderSizePixel = 0
TopBarCover.Parent = TopBar
-- Title with Glow
local TitleLabel = Instance.new("TextLabel")
TitleLabel.Name = "Title"
TitleLabel.Size = UDim2.new(0, 200, 1, 0)
TitleLabel.Position = UDim2.new(0, 14, 0, 0)
TitleLabel.BackgroundTransparency = 1
TitleLabel.Text = "🐧 Linux"
TitleLabel.TextColor3 = Theme.Accent
TitleLabel.Font = Enum.Font.GothamBold
TitleLabel.TextSize = 16
TitleLabel.TextXAlignment = Enum.TextXAlignment.Left
TitleLabel.Parent = TopBar
local VersionLabel = Instance.new("TextLabel")
VersionLabel.Size = UDim2.new(0, 60, 1, 0)
VersionLabel.Position = UDim2.new(0, isMobile and 95 or 105, 0, 0)
VersionLabel.BackgroundTransparency = 1
VersionLabel.Text = "v2.0"
VersionLabel.TextColor3 = Theme.TextDim
VersionLabel.Font = Enum.Font.Gotham
VersionLabel.TextSize = 11
VersionLabel.TextXAlignment = Enum.TextXAlignment.Left
VersionLabel.Parent = TopBar
-- Title glow animation
spawn(function()
while MainFrame and MainFrame.Parent do
Tween(TitleLabel, {TextColor3 = Theme.AccentHover}, 1.5)
task.wait(1.5)
Tween(TitleLabel, {TextColor3 = Theme.Accent}, 1.5)
task.wait(1.5)
end
end)
-- ═══════════════════════════════════════════
-- WINDOW CONTROLS (Close, Minimize, Maximize)
-- ═══════════════════════════════════════════
local function CreateWindowBtn(name, color, posOffset, callback)
local btn = Instance.new("TextButton")
btn.Name = name
btn.Size = UDim2.new(0, 20, 0, 20)
btn.Position = UDim2.new(1, posOffset, 0.5, -10)
btn.BackgroundColor3 = color
btn.Text = ""
btn.AutoButtonColor = false
btn.BorderSizePixel = 0
btn.Parent = TopBar
CreateCorner(btn, 10)
btn.MouseEnter:Connect(function()
Tween(btn, {Size = UDim2.new(0, 24, 0, 24), Position = UDim2.new(1, posOffset - 2, 0.5, -12)}, 0.15)
end)
btn.MouseLeave:Connect(function()
Tween(btn, {Size = UDim2.new(0, 20, 0, 20), Position = UDim2.new(1, posOffset, 0.5, -10)}, 0.15)
end)
btn.MouseButton1Click:Connect(callback)
return btn
end
local isMinimized = false
local savedSize
-- Close Button
CreateWindowBtn("Close", Theme.Close, -34, function()
Tween(MainFrame, {
Size = UDim2.new(0, 0, 0, 0),
BackgroundTransparency = 1,
Rotation = 5
}, 0.4, Enum.EasingStyle.Back, Enum.EasingDirection.In)
task.wait(0.4)
ScreenGui:Destroy()
end)
-- Minimize Button
CreateWindowBtn("Minimize", Theme.Minimize, -60, function()
if isMinimized then
Tween(MainFrame, {Size = savedSize}, 0.3, Enum.EasingStyle.Back)
isMinimized = false
else
savedSize = MainFrame.Size
Tween(MainFrame, {Size = UDim2.new(0, mainWidth, 0, 36)}, 0.3, Enum.EasingStyle.Quint)
isMinimized = true
end
end)
-- Maximize / Restore
local isMaximized = false
CreateWindowBtn("Maximize", Theme.Maximize, -86, function()
if isMaximized then
Tween(MainFrame, {Size = UDim2.new(0, mainWidth, 0, mainHeight)}, 0.3, Enum.EasingStyle.Back)
isMaximized = false
else
Tween(MainFrame, {Size = UDim2.new(1, -20, 1, -20)}, 0.3, Enum.EasingStyle.Back)
isMaximized = true
end
end)
-- ═══════════════════════════════════════════
-- DRAGGING
-- ═══════════════════════════════════════════
local dragging, dragInput, dragStart, startPos
TopBar.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPos = MainFrame.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
end
end)
end
end)
TopBar.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
dragInput = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInput and dragging then
local delta = input.Position - dragStart
MainFrame.Position = UDim2.new(
startPos.X.Scale, startPos.X.Offset + delta.X,
startPos.Y.Scale, startPos.Y.Offset + delta.Y
)
end
end)
-- ═══════════════════════════════════════════
-- TAB SYSTEM
-- ═══════════════════════════════════════════
local TabBar = Instance.new("Frame")
TabBar.Name = "TabBar"
TabBar.Size = UDim2.new(1, 0, 0, 34)
TabBar.Position = UDim2.new(0, 0, 0, 36)
TabBar.BackgroundColor3 = Theme.Sidebar
TabBar.BorderSizePixel = 0
TabBar.Parent = MainFrame
local TabBarLayout = Instance.new("UIListLayout")
TabBarLayout.FillDirection = Enum.FillDirection.Horizontal
TabBarLayout.Padding = UDim.new(0, 2)
TabBarLayout.SortOrder = Enum.SortOrder.LayoutOrder
TabBarLayout.Parent = TabBar
local TabBarPadding = Instance.new("UIPadding")
TabBarPadding.PaddingLeft = UDim.new(0, 8)
TabBarPadding.PaddingTop = UDim.new(0, 4)
TabBarPadding.Parent = TabBar
-- Tab Pages Container
local TabPages = Instance.new("Frame")
TabPages.Name = "TabPages"
TabPages.Size = UDim2.new(1, 0, 1, -70)
TabPages.Position = UDim2.new(0, 0, 0, 70)
TabPages.BackgroundTransparency = 1
TabPages.BorderSizePixel = 0
TabPages.ClipsDescendants = true
TabPages.Parent = MainFrame
local tabs = {}
local currentTab = nil
local function CreateTab(name, icon, layoutOrder)
local tabBtn = Instance.new("TextButton")
tabBtn.Name = name .. "Tab"
tabBtn.Size = UDim2.new(0, isMobile and 62 or 80, 0, 26)
tabBtn.BackgroundColor3 = Theme.TabInactive
tabBtn.Text = ""
tabBtn.AutoButtonColor = false
tabBtn.BorderSizePixel = 0
tabBtn.LayoutOrder = layoutOrder
tabBtn.ClipsDescendants = true
tabBtn.Parent = TabBar
CreateCorner(tabBtn, 6)
local tabLabel = Instance.new("TextLabel")
tabLabel.Size = UDim2.new(1, 0, 1, 0)
tabLabel.BackgroundTransparency = 1
tabLabel.Text = (icon and (icon .. " ") or "") .. name
tabLabel.TextColor3 = Theme.TextDim
tabLabel.Font = Enum.Font.GothamBold
tabLabel.TextSize = isMobile and 11 or 12
tabLabel.Parent = tabBtn
-- Indicator line
local indicator = Instance.new("Frame")
indicator.Name = "Indicator"
indicator.Size = UDim2.new(0, 0, 0, 2)
indicator.Position = UDim2.new(0.5, 0, 1, -2)
indicator.AnchorPoint = Vector2.new(0.5, 0)
indicator.BackgroundColor3 = Theme.Accent
indicator.BorderSizePixel = 0
indicator.Parent = tabBtn
CreateCorner(indicator, 1)
local page = Instance.new("Frame")
page.Name = name .. "Page"
page.Size = UDim2.new(1, 0, 1, 0)
page.BackgroundTransparency = 1
page.BorderSizePixel = 0
page.Visible = false
page.Parent = TabPages
tabs[name] = {Button = tabBtn, Label = tabLabel, Page = page, Indicator = indicator}
tabBtn.MouseButton1Click:Connect(function()
local mouse = UserInputService:GetMouseLocation()
RippleEffect(tabBtn, mouse.X, mouse.Y)
-- Switch tabs
for tName, tData in pairs(tabs) do
if tName == name then
Tween(tData.Button, {BackgroundColor3 = Theme.TabActive}, 0.2)
Tween(tData.Label, {TextColor3 = Color3.fromRGB(255, 255, 255)}, 0.2)
Tween(tData.Indicator, {Size = UDim2.new(0.6, 0, 0, 2)}, 0.3, Enum.EasingStyle.Back)
tData.Page.Visible = true
-- Fade in
for _, child in pairs(tData.Page:GetChildren()) do
if child:IsA("GuiObject") then
child.BackgroundTransparency = 1
Tween(child, {BackgroundTransparency = child:GetAttribute("OrigTransparency") or 0}, 0.3)
end
end
else
Tween(tData.Button, {BackgroundColor3 = Theme.TabInactive}, 0.2)
Tween(tData.Label, {TextColor3 = Theme.TextDim}, 0.2)
Tween(tData.Indicator, {Size = UDim2.new(0, 0, 0, 2)}, 0.2)
tData.Page.Visible = false
end
end
currentTab = name
end)
return page
end
-- Create Tabs
local editorPage = CreateTab("Editor", "📝", 1)
local consolePage = CreateTab("Console", "💻", 2)
local settingsPage = CreateTab("Settings", "⚙", 3)
local infoPage = CreateTab("Info", "ℹ", 4)
local morePage = CreateTab("More", "📦", 5)
-- ═══════════════════════════════════════════
-- EDITOR PAGE
-- ═══════════════════════════════════════════
-- Editor Container
local EditorContainer = Instance.new("Frame")
EditorContainer.Name = "EditorContainer"
EditorContainer.Size = UDim2.new(1, -16, 1, -56)
EditorContainer.Position = UDim2.new(0, 8, 0, 4)
EditorContainer.BackgroundColor3 = Theme.Editor
EditorContainer.BorderSizePixel = 0
EditorContainer.ClipsDescendants = true
EditorContainer.Parent = editorPage
CreateCorner(EditorContainer, 8)
CreateStroke(EditorContainer, Theme.Border, 1)
-- Line Numbers
local LineNumberFrame = Instance.new("Frame")
LineNumberFrame.Name = "LineNumbers"
LineNumberFrame.Size = UDim2.new(0, 45, 1, 0)
LineNumberFrame.BackgroundColor3 = Theme.EditorLineBar
LineNumberFrame.BorderSizePixel = 0
LineNumberFrame.ClipsDescendants = true
LineNumberFrame.Parent = EditorContainer
CreateCorner(LineNumberFrame, 8)
local LineNumCover = Instance.new("Frame")
LineNumCover.Size = UDim2.new(0, 10, 1, 0)
LineNumCover.Position = UDim2.new(1, -10, 0, 0)
LineNumCover.BackgroundColor3 = Theme.EditorLineBar
LineNumCover.BorderSizePixel = 0
LineNumCover.Parent = LineNumberFrame
local LineNumberLabel = Instance.new("TextLabel")
LineNumberLabel.Name = "Lines"
LineNumberLabel.Size = UDim2.new(1, -8, 1, 0)
LineNumberLabel.Position = UDim2.new(0, 4, 0, 0)
LineNumberLabel.BackgroundTransparency = 1
LineNumberLabel.Text = "1"
LineNumberLabel.TextColor3 = Theme.TextLineNum
LineNumberLabel.Font = Enum.Font.Code
LineNumberLabel.TextSize = isMobile and 12 or 14
LineNumberLabel.TextXAlignment = Enum.TextXAlignment.Right
LineNumberLabel.TextYAlignment = Enum.TextYAlignment.Top
LineNumberLabel.RichText = true
LineNumberLabel.Parent = LineNumberFrame
-- Script Editor (Scrolling)
local EditorScroll = Instance.new("ScrollingFrame")
EditorScroll.Name = "EditorScroll"
EditorScroll.Size = UDim2.new(1, -50, 1, 0)
EditorScroll.Position = UDim2.new(0, 48, 0, 0)
EditorScroll.BackgroundTransparency = 1
EditorScroll.BorderSizePixel = 0
EditorScroll.ScrollBarThickness = 4
EditorScroll.ScrollBarImageColor3 = Theme.ScrollBar
EditorScroll.CanvasSize = UDim2.new(0, 0, 0, 0)
EditorScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
EditorScroll.Parent = EditorContainer
local ScriptInput = Instance.new("TextBox")
ScriptInput.Name = "ScriptInput"
ScriptInput.Size = UDim2.new(1, -10, 0, 5000)
ScriptInput.Position = UDim2.new(0, 5, 0, 0)
ScriptInput.BackgroundTransparency = 1
ScriptInput.Text = ""
ScriptInput.PlaceholderText = "-- Paste your script here...\n-- Linux Executor v2.0\n\nprint('Hello from Linux!')"
ScriptInput.PlaceholderColor3 = Theme.TextDim
ScriptInput.TextColor3 = Theme.Text
ScriptInput.Font = Enum.Font.Code
ScriptInput.TextSize = isMobile and 12 or 14
ScriptInput.TextXAlignment = Enum.TextXAlignment.Left
ScriptInput.TextYAlignment = Enum.TextYAlignment.Top
ScriptInput.ClearTextOnFocus = false
ScriptInput.MultiLine = true
ScriptInput.TextWrapped = false
ScriptInput.Parent = EditorScroll
-- Line Number Updater
local function UpdateLineNumbers()
local text = ScriptInput.Text
local lineCount = 1
for _ in text:gmatch("\n") do
lineCount = lineCount + 1
end
local lines = {}
for i = 1, math.max(lineCount, 20) do
if i <= lineCount then
lines[i] = '' .. tostring(i) .. ''
else
lines[i] = '' .. tostring(i) .. ''
end
end
LineNumberLabel.Text = table.concat(lines, "\n")
end
ScriptInput:GetPropertyChangedSignal("Text"):Connect(UpdateLineNumbers)
-- Sync scroll between line numbers and editor
EditorScroll:GetPropertyChangedSignal("CanvasPosition"):Connect(function()
LineNumberLabel.Position = UDim2.new(0, 4, 0, -EditorScroll.CanvasPosition.Y)
end)
UpdateLineNumbers()
-- Character / Line Counter
local CounterLabel = Instance.new("TextLabel")
CounterLabel.Name = "Counter"
CounterLabel.Size = UDim2.new(1, -16, 0, 18)
CounterLabel.Position = UDim2.new(0, 8, 1, -22)
CounterLabel.BackgroundTransparency = 1
CounterLabel.Text = "Lines: 0 | Chars: 0"
CounterLabel.TextColor3 = Theme.TextDim
CounterLabel.Font = Enum.Font.Code
CounterLabel.TextSize = 11
CounterLabel.TextXAlignment = Enum.TextXAlignment.Right
CounterLabel.Parent = EditorContainer
ScriptInput:GetPropertyChangedSignal("Text"):Connect(function()
local text = ScriptInput.Text
local lineCount = 1
for _ in text:gmatch("\n") do
lineCount = lineCount + 1
end
CounterLabel.Text = "Lines: " .. lineCount .. " | Chars: " .. #text
end)
-- ═══════════════════════════════════════════
-- BOTTOM ACTION BAR (Editor)
-- ═══════════════════════════════════════════
local ActionBar = Instance.new("Frame")
ActionBar.Name = "ActionBar"
ActionBar.Size = UDim2.new(1, -16, 0, 40)
ActionBar.Position = UDim2.new(0, 8, 1, -46)
ActionBar.BackgroundTransparency = 1
ActionBar.BorderSizePixel = 0
ActionBar.Parent = editorPage
local ActionLayout = Instance.new("UIListLayout")
ActionLayout.FillDirection = Enum.FillDirection.Horizontal
ActionLayout.Padding = UDim.new(0, 6)
ActionLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
ActionLayout.Parent = ActionBar
-- Console log storage
local consoleHistory = {}
local function AddConsoleMessage(msg, msgType)
local color = Theme.ConsoleText
local prefix = "[LOG]"
if msgType == "error" then
color = Theme.Error
prefix = "[ERR]"
elseif msgType == "warn" then
color = Theme.Warning
prefix = "[WRN]"
elseif msgType == "info" then
color = Color3.fromRGB(100, 180, 255)
prefix = "[INF]"
elseif msgType == "system" then
color = Theme.Accent
prefix = "[SYS]"
end
table.insert(consoleHistory, {
Text = prefix .. " " .. os.date("%H:%M:%S") .. " > " .. msg,
Color = color,
Time = tick()
})
end
-- Forward-declare console update (will be set later)
local UpdateConsoleDisplay
-- Execute Button
local btnWidth = isMobile and 75 or 100
CreateButton(ActionBar, "▶ Execute", UDim2.new(0, btnWidth, 0, 34), UDim2.new(0, 0, 0, 0), Theme.Accent, function()
local code = ScriptInput.Text
if code == "" or code == nil then
AddConsoleMessage("No script to execute!", "error")
if UpdateConsoleDisplay then UpdateConsoleDisplay() end
return
end
AddConsoleMessage("Executing script (" .. #code .. " chars)...", "system")
if UpdateConsoleDisplay then UpdateConsoleDisplay() end
local success, err = pcall(function()
local fn, loadErr = loadstring(code)
if fn then
fn()
else
error(loadErr)
end
end)
if success then
AddConsoleMessage("Script executed successfully!", "system")
else
AddConsoleMessage("Error: " .. tostring(err), "error")
end
if UpdateConsoleDisplay then UpdateConsoleDisplay() end
end)
-- Clear Button
CreateButton(ActionBar, "🗑 Clear", UDim2.new(0, btnWidth, 0, 34), UDim2.new(0, 0, 0, 0), Theme.ButtonBG, function()
ScriptInput.Text = ""
UpdateLineNumbers()
AddConsoleMessage("Editor cleared", "info")
if UpdateConsoleDisplay then UpdateConsoleDisplay() end
end)
-- Copy Button
CreateButton(ActionBar, "📋 Copy", UDim2.new(0, btnWidth, 0, 34), UDim2.new(0, 0, 0, 0), Theme.ButtonBG, function()
if setclipboard then
setclipboard(ScriptInput.Text)
AddConsoleMessage("Script copied to clipboard!", "info")
else
AddConsoleMessage("Clipboard not supported", "warn")
end
if UpdateConsoleDisplay then UpdateConsoleDisplay() end
end)
-- Paste Button (good for mobile)
CreateButton(ActionBar, "📌 Paste", UDim2.new(0, btnWidth, 0, 34), UDim2.new(0, 0, 0, 0), Theme.ButtonBG, function()
-- Focus the textbox for paste
ScriptInput:CaptureFocus()
AddConsoleMessage("Textbox focused - paste your script!", "info")
if UpdateConsoleDisplay then UpdateConsoleDisplay() end
end)
-- ═══════════════════════════════════════════
-- CONSOLE PAGE
-- ═══════════════════════════════════════════
local ConsoleContainer = Instance.new("Frame")
ConsoleContainer.Name = "ConsoleContainer"
ConsoleContainer.Size = UDim2.new(1, -16, 1, -50)
ConsoleContainer.Position = UDim2.new(0, 8, 0, 4)
ConsoleContainer.BackgroundColor3 = Theme.Console
ConsoleContainer.BorderSizePixel = 0
ConsoleContainer.ClipsDescendants = true
ConsoleContainer.Parent = consolePage
CreateCorner(ConsoleContainer, 8)
CreateStroke(ConsoleContainer, Theme.Border, 1)
-- Console header
local ConsoleHeader = Instance.new("Frame")
ConsoleHeader.Size = UDim2.new(1, 0, 0, 28)
ConsoleHeader.BackgroundColor3 = Color3.fromRGB(15, 15, 22)
ConsoleHeader.BorderSizePixel = 0
ConsoleHeader.Parent = ConsoleContainer
CreateCorner(ConsoleHeader, 8)
local ConsoleHeaderCover = Instance.new("Frame")
ConsoleHeaderCover.Size = UDim2.new(1, 0, 0, 10)
ConsoleHeaderCover.Position = UDim2.new(0, 0, 1, -10)
ConsoleHeaderCover.BackgroundColor3 = Color3.fromRGB(15, 15, 22)
ConsoleHeaderCover.BorderSizePixel = 0
ConsoleHeaderCover.Parent = ConsoleHeader
local ConsoleHeaderLabel = Instance.new("TextLabel")
ConsoleHeaderLabel.Size = UDim2.new(1, -10, 1, 0)
ConsoleHeaderLabel.Position = UDim2.new(0, 10, 0, 0)
ConsoleHeaderLabel.BackgroundTransparency = 1
ConsoleHeaderLabel.Text = "📟 Console Output"
ConsoleHeaderLabel.TextColor3 = Theme.Accent
ConsoleHeaderLabel.Font = Enum.Font.GothamBold
ConsoleHeaderLabel.TextSize = 12
ConsoleHeaderLabel.TextXAlignment = Enum.TextXAlignment.Left
ConsoleHeaderLabel.Parent = ConsoleHeader
local ConsoleScroll = Instance.new("ScrollingFrame")
ConsoleScroll.Name = "ConsoleScroll"
ConsoleScroll.Size = UDim2.new(1, -10, 1, -34)
ConsoleScroll.Position = UDim2.new(0, 5, 0, 30)
ConsoleScroll.BackgroundTransparency = 1
ConsoleScroll.BorderSizePixel = 0
ConsoleScroll.ScrollBarThickness = 3
ConsoleScroll.ScrollBarImageColor3 = Theme.ScrollBar
ConsoleScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
ConsoleScroll.CanvasSize = UDim2.new(0, 0, 0, 0)
ConsoleScroll.Parent = ConsoleContainer
local ConsoleLayout = Instance.new("UIListLayout")
ConsoleLayout.Padding = UDim.new(0, 2)
ConsoleLayout.SortOrder = Enum.SortOrder.LayoutOrder
ConsoleLayout.Parent = ConsoleScroll
-- Now define the console update function
UpdateConsoleDisplay = function()
for _, child in pairs(ConsoleScroll:GetChildren()) do
if child:IsA("TextLabel") then
child:Destroy()
end
end
for i, entry in ipairs(consoleHistory) do
local line = Instance.new("TextLabel")
line.Name = "Line_" .. i
line.Size = UDim2.new(1, -10, 0, 18)
line.BackgroundTransparency = 1
line.Text = entry.Text
line.TextColor3 = entry.Color
line.Font = Enum.Font.Code
line.TextSize = isMobile and 10 or 12
line.TextXAlignment = Enum.TextXAlignment.Left
line.TextWrapped = true
line.AutomaticSize = Enum.AutomaticSize.Y
line.LayoutOrder = i
line.Parent = ConsoleScroll
-- Animate in
line.TextTransparency = 1
Tween(line, {TextTransparency = 0}, 0.3)
end
-- Auto scroll to bottom
task.wait()
ConsoleScroll.CanvasPosition = Vector2.new(0, ConsoleScroll.AbsoluteCanvasSize.Y)
end
-- Console Action Buttons
local ConsoleActions = Instance.new("Frame")
ConsoleActions.Name = "ConsoleActions"
ConsoleActions.Size = UDim2.new(1, -16, 0, 36)
ConsoleActions.Position = UDim2.new(0, 8, 1, -42)
ConsoleActions.BackgroundTransparency = 1
ConsoleActions.Parent = consolePage
local ConsoleActLayout = Instance.new("UIListLayout")
ConsoleActLayout.FillDirection = Enum.FillDirection.Horizontal
ConsoleActLayout.Padding = UDim.new(0, 6)
ConsoleActLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
ConsoleActLayout.Parent = ConsoleActions
CreateButton(ConsoleActions, "🗑 Clear Console", UDim2.new(0, 130, 0, 30), UDim2.new(0, 0, 0, 0), Theme.ButtonBG, function()
consoleHistory = {}
UpdateConsoleDisplay()
end)
CreateButton(ConsoleActions, "📋 Copy Log", UDim2.new(0, 110, 0, 30), UDim2.new(0, 0, 0, 0), Theme.ButtonBG, function()
local fullLog = ""
for _, entry in ipairs(consoleHistory) do
fullLog = fullLog .. entry.Text .. "\n"
end
if setclipboard then
setclipboard(fullLog)
AddConsoleMessage("Console log copied!", "info")
end
UpdateConsoleDisplay()
end)
-- Hook into game output
local logConnection = game:GetService("LogService").MessageOut:Connect(function(message, messageType)
if messageType == Enum.MessageType.MessageError then
AddConsoleMessage(message, "error")
elseif messageType == Enum.MessageType.MessageWarning then
AddConsoleMessage(message, "warn")
elseif messageType == Enum.MessageType.MessageInfo then
AddConsoleMessage(message, "info")
else
AddConsoleMessage(message, "log")
end
UpdateConsoleDisplay()
end)
-- Initial console message
AddConsoleMessage("Linux Executor v2.0 initialized", "system")
AddConsoleMessage("Platform: " .. (isMobile and "Mobile" or "Desktop"), "info")
AddConsoleMessage("Player: " .. Player.Name, "info")
AddConsoleMessage("Ready to execute scripts!", "system")
-- ═══════════════════════════════════════════
-- SETTINGS PAGE
-- ═══════════════════════════════════════════
local SettingsScroll = Instance.new("ScrollingFrame")
SettingsScroll.Name = "SettingsScroll"
SettingsScroll.Size = UDim2.new(1, -16, 1, -10)
SettingsScroll.Position = UDim2.new(0, 8, 0, 5)
SettingsScroll.BackgroundTransparency = 1
SettingsScroll.BorderSizePixel = 0
SettingsScroll.ScrollBarThickness = 3
SettingsScroll.ScrollBarImageColor3 = Theme.ScrollBar
SettingsScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
SettingsScroll.CanvasSize = UDim2.new(0, 0, 0, 0)
SettingsScroll.Parent = settingsPage
local SettingsLayout = Instance.new("UIListLayout")
SettingsLayout.Padding = UDim.new(0, 6)
SettingsLayout.SortOrder = Enum.SortOrder.LayoutOrder
SettingsLayout.Parent = SettingsScroll
local function CreateSettingToggle(name, description, default, callback)
local container = Instance.new("Frame")
container.Name = name
container.Size = UDim2.new(1, -10, 0, 55)
container.BackgroundColor3 = Theme.Editor
container.BorderSizePixel = 0
container.Parent = SettingsScroll
CreateCorner(container, 8)
local nameLabel = Instance.new("TextLabel")
nameLabel.Size = UDim2.new(1, -70, 0, 22)
nameLabel.Position = UDim2.new(0, 12, 0, 6)
nameLabel.BackgroundTransparency = 1
nameLabel.Text = name
nameLabel.TextColor3 = Theme.Text
nameLabel.Font = Enum.Font.GothamBold
nameLabel.TextSize = 13
nameLabel.TextXAlignment = Enum.TextXAlignment.Left
nameLabel.Parent = container
local descLabel = Instance.new("TextLabel")
descLabel.Size = UDim2.new(1, -70, 0, 18)
descLabel.Position = UDim2.new(0, 12, 0, 28)
descLabel.BackgroundTransparency = 1
descLabel.Text = description
descLabel.TextColor3 = Theme.TextDim
descLabel.Font = Enum.Font.Gotham
descLabel.TextSize = 11
descLabel.TextXAlignment = Enum.TextXAlignment.Left
descLabel.Parent = container
-- Toggle
local toggleBG = Instance.new("TextButton")
toggleBG.Size = UDim2.new(0, 44, 0, 24)
toggleBG.Position = UDim2.new(1, -56, 0.5, -12)
toggleBG.BackgroundColor3 = default and Theme.Accent or Color3.fromRGB(60, 60, 75)
toggleBG.Text = ""
toggleBG.AutoButtonColor = false
toggleBG.BorderSizePixel = 0
toggleBG.Parent = container
CreateCorner(toggleBG, 12)
local toggleCircle = Instance.new("Frame")
toggleCircle.Size = UDim2.new(0, 18, 0, 18)
toggleCircle.Position = default and UDim2.new(1, -21, 0.5, -9) or UDim2.new(0, 3, 0.5, -9)
toggleCircle.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
toggleCircle.BorderSizePixel = 0
toggleCircle.Parent = toggleBG
CreateCorner(toggleCircle, 9)
local enabled = default
toggleBG.MouseButton1Click:Connect(function()
enabled = not enabled
Tween(toggleBG, {BackgroundColor3 = enabled and Theme.Accent or Color3.fromRGB(60, 60, 75)}, 0.3)
Tween(toggleCircle, {Position = enabled and UDim2.new(1, -21, 0.5, -9) or UDim2.new(0, 3, 0.5, -9)}, 0.3, Enum.EasingStyle.Back)
if callback then callback(enabled) end
end)
return container
end
local function CreateSettingSection(title, order)
local section = Instance.new("TextLabel")
section.Name = "Section_" .. title
section.Size = UDim2.new(1, 0, 0, 28)
section.BackgroundTransparency = 1
section.Text = " " .. title
section.TextColor3 = Theme.Accent
section.Font = Enum.Font.GothamBold
section.TextSize = 14
section.TextXAlignment = Enum.TextXAlignment.Left
section.LayoutOrder = order
section.Parent = SettingsScroll
return section
end
CreateSettingSection("🎨 Appearance", 1)
local autoScroll = true
CreateSettingToggle("Auto-Scroll Console", "Automatically scroll to latest message", true, function(val)
autoScroll = val
end)
local showLineNums = true
CreateSettingToggle("Show Line Numbers", "Display line numbers in editor", true, function(val)
showLineNums = val
LineNumberFrame.Visible = val
if val then
EditorScroll.Size = UDim2.new(1, -50, 1, 0)
EditorScroll.Position = UDim2.new(0, 48, 0, 0)
else
EditorScroll.Size = UDim2.new(1, -10, 1, 0)
EditorScroll.Position = UDim2.new(0, 5, 0, 0)
end
end)
CreateSettingToggle("Text Wrapping", "Wrap long lines in editor", false, function(val)
ScriptInput.TextWrapped = val
end)
CreateSettingSection("⚡ Performance", 10)
CreateSettingToggle("Animations", "Enable UI animations", true, function(val)
-- This would toggle animations globally in a real implementation
AddConsoleMessage("Animations " .. (val and "enabled" or "disabled"), "info")
if UpdateConsoleDisplay then UpdateConsoleDisplay() end
end)
CreateSettingToggle("Auto-Execute on Paste", "Run script automatically when pasted", false, function(val)
if val then
AddConsoleMessage("Auto-execute enabled (be careful!)", "warn")
else
AddConsoleMessage("Auto-execute disabled", "info")
end
if UpdateConsoleDisplay then UpdateConsoleDisplay() end
end)
CreateSettingSection("🔒 Security", 20)
CreateSettingToggle("Confirm Before Execute", "Show confirmation before running scripts", false, function(val)
AddConsoleMessage("Confirmation " .. (val and "enabled" or "disabled"), "info")
if UpdateConsoleDisplay then UpdateConsoleDisplay() end
end)
-- ═══════════════════════════════════════════
-- INFO PAGE
-- ═══════════════════════════════════════════
local InfoScroll = Instance.new("ScrollingFrame")
InfoScroll.Name = "InfoScroll"
InfoScroll.Size = UDim2.new(1, -16, 1, -10)
InfoScroll.Position = UDim2.new(0, 8, 0, 5)
InfoScroll.BackgroundTransparency = 1
InfoScroll.BorderSizePixel = 0
InfoScroll.ScrollBarThickness = 3
InfoScroll.ScrollBarImageColor3 = Theme.ScrollBar
InfoScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
InfoScroll.CanvasSize = UDim2.new(0, 0, 0, 0)
InfoScroll.Parent = infoPage
local InfoLayout = Instance.new("UIListLayout")
InfoLayout.Padding = UDim.new(0, 8)
InfoLayout.SortOrder = Enum.SortOrder.LayoutOrder
InfoLayout.Parent = InfoScroll
local function CreateInfoCard(title, content, icon, order)
local card = Instance.new("Frame")
card.Name = title
card.Size = UDim2.new(1, -10, 0, 0)
card.AutomaticSize = Enum.AutomaticSize.Y
card.BackgroundColor3 = Theme.Editor
card.BorderSizePixel = 0
card.LayoutOrder = order or 0
card.Parent = InfoScroll
CreateCorner(card, 8)
CreateStroke(card, Theme.Border, 1)
local padding = Instance.new("UIPadding")
padding.PaddingLeft = UDim.new(0, 14)
padding.PaddingRight = UDim.new(0, 14)
padding.PaddingTop = UDim.new(0, 10)
padding.PaddingBottom = UDim.new(0, 10)
padding.Parent = card
local titleL = Instance.new("TextLabel")
titleL.Size = UDim2.new(1, 0, 0, 22)
titleL.BackgroundTransparency = 1
titleL.Text = (icon or "") .. " " .. title
titleL.TextColor3 = Theme.Accent
titleL.Font = Enum.Font.GothamBold
titleL.TextSize = 15
titleL.TextXAlignment = Enum.TextXAlignment.Left
titleL.Parent = card
local contentL = Instance.new("TextLabel")
contentL.Size = UDim2.new(1, 0, 0, 0)
contentL.Position = UDim2.new(0, 0, 0, 26)
contentL.AutomaticSize = Enum.AutomaticSize.Y
contentL.BackgroundTransparency = 1
contentL.Text = content
contentL.TextColor3 = Theme.TextDim
contentL.Font = Enum.Font.Gotham
contentL.TextSize = 12
contentL.TextXAlignment = Enum.TextXAlignment.Left
contentL.TextWrapped = true
contentL.Parent = card
return card
end
CreateInfoCard("Linux Executor",
"A powerful, lightweight script executor with a modern UI design inspired by Linux terminals.\n\nVersion: 2.0\nBuild: " .. os.date("%Y.%m.%d"),
"🐧", 1)
CreateInfoCard("Features",
"• Full script editor with line numbers\n• Real-time character & line counter\n• Console output with color-coded messages\n• Log service integration\n• Mobile-optimized touch controls\n• Draggable & resizable window\n• Smooth animations & transitions\n• Settings panel with toggles\n• Clipboard support\n• Multi-tab interface",
"✨", 2)
CreateInfoCard("System Info",
"Player: " .. Player.Name ..
"\nDisplay Name: " .. Player.DisplayName ..
"\nUser ID: " .. Player.UserId ..
"\nPlatform: " .. (isMobile and "📱 Mobile" or "💻 Desktop") ..
"\nGame: " .. game:GetService("MarketplaceService"):GetProductInfo(game.PlaceId).Name ..
"\nPlace ID: " .. game.PlaceId ..
"\nServer Job ID: " .. string.sub(game.JobId, 1, 16) .. "...",
"🖥", 3)
CreateInfoCard("Controls",
"• Drag the title bar to move\n• Click ⚫ to close, 🟡 to minimize, 🟢 to maximize\n• Use tabs to switch between pages\n• Paste scripts in the Editor tab\n• Click Execute (▶) to run your script\n• Check Console for output & errors",
"🎮", 4)
CreateInfoCard("Credits",
"Developed with ❤️\nUI Framework: Custom Built\nInspired by Linux terminals & modern IDEs",
"👤", 5)
-- ═══════════════════════════════════════════
-- MORE PAGE
-- ═══════════════════════════════════════════
local MoreScroll = Instance.new("ScrollingFrame")
MoreScroll.Name = "MoreScroll"
MoreScroll.Size = UDim2.new(1, -16, 1, -10)
MoreScroll.Position = UDim2.new(0, 8, 0, 5)
MoreScroll.BackgroundTransparency = 1
MoreScroll.BorderSizePixel = 0
MoreScroll.ScrollBarThickness = 3
MoreScroll.ScrollBarImageColor3 = Theme.ScrollBar
MoreScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
MoreScroll.CanvasSize = UDim2.new(0, 0, 0, 0)
MoreScroll.Parent = morePage
local MoreLayout = Instance.new("UIListLayout")
MoreLayout.Padding = UDim.new(0, 6)
MoreLayout.SortOrder = Enum.SortOrder.LayoutOrder
MoreLayout.Parent = MoreScroll
-- Quick Scripts Section
local function CreateQuickScript(name, description, script, order)
local card = Instance.new("Frame")
card.Name = name
card.Size = UDim2.new(1, -10, 0, 70)
card.BackgroundColor3 = Theme.Editor
card.BorderSizePixel = 0
card.LayoutOrder = order
card.Parent = MoreScroll
CreateCorner(card, 8)
CreateStroke(card, Theme.Border, 1)
local nameL = Instance.new("TextLabel")
nameL.Size = UDim2.new(1, -90, 0, 20)
nameL.Position = UDim2.new(0, 12, 0, 8)
nameL.BackgroundTransparency = 1
nameL.Text = "📜 " .. name
nameL.TextColor3 = Theme.Text
nameL.Font = Enum.Font.GothamBold
nameL.TextSize = 13
nameL.TextXAlignment = Enum.TextXAlignment.Left
nameL.Parent = card
local descL = Instance.new("TextLabel")
descL.Size = UDim2.new(1, -90, 0, 16)
descL.Position = UDim2.new(0, 12, 0, 28)
descL.BackgroundTransparency = 1
descL.Text = description
descL.TextColor3 = Theme.TextDim
descL.Font = Enum.Font.Gotham
descL.TextSize = 11
descL.TextXAlignment = Enum.TextXAlignment.Left
descL.Parent = card
local linesCount = 1
for _ in script:gmatch("\n") do linesCount = linesCount + 1 end
local statsL = Instance.new("TextLabel")
statsL.Size = UDim2.new(1, -12, 0, 14)
statsL.Position = UDim2.new(0, 12, 0, 48)
statsL.BackgroundTransparency = 1
statsL.Text = "📏 " .. linesCount .. " lines | " .. #script .. " chars"
statsL.TextColor3 = Color3.fromRGB(70, 70, 100)
statsL.Font = Enum.Font.Code
statsL.TextSize = 10
statsL.TextXAlignment = Enum.TextXAlignment.Left
statsL.Parent = card
-- Load button
local loadBtn = Instance.new("TextButton")
loadBtn.Size = UDim2.new(0, 65, 0, 28)
loadBtn.Position = UDim2.new(1, -78, 0.5, -14)
loadBtn.BackgroundColor3 = Theme.Accent
loadBtn.Text = ""
loadBtn.AutoButtonColor = false
loadBtn.BorderSizePixel = 0
loadBtn.ClipsDescendants = true
loadBtn.Parent = card
CreateCorner(loadBtn, 6)
local loadLabel = Instance.new("TextLabel")
loadLabel.Size = UDim2.new(1, 0, 1, 0)
loadLabel.BackgroundTransparency = 1
loadLabel.Text = "Load"
loadLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
loadLabel.Font = Enum.Font.GothamBold
loadLabel.TextSize = 12
loadLabel.Parent = loadBtn
loadBtn.MouseEnter:Connect(function()
Tween(loadBtn, {BackgroundColor3 = Theme.AccentHover}, 0.2)
end)
loadBtn.MouseLeave:Connect(function()
Tween(loadBtn, {BackgroundColor3 = Theme.Accent}, 0.2)
end)
loadBtn.MouseButton1Click:Connect(function()
local mouse = UserInputService:GetMouseLocation()
RippleEffect(loadBtn, mouse.X, mouse.Y)
ScriptInput.Text = script
UpdateLineNumbers()
-- Switch to Editor tab
for tName, tData in pairs(tabs) do
if tName == "Editor" then
Tween(tData.Button, {BackgroundColor3 = Theme.TabActive}, 0.2)
Tween(tData.Label, {TextColor3 = Color3.fromRGB(255, 255, 255)}, 0.2)
Tween(tData.Indicator, {Size = UDim2.new(0.6, 0, 0, 2)}, 0.3, Enum.EasingStyle.Back)
tData.Page.Visible = true
else
Tween(tData.Button, {BackgroundColor3 = Theme.TabInactive}, 0.2)
Tween(tData.Label, {TextColor3 = Theme.TextDim}, 0.2)
Tween(tData.Indicator, {Size = UDim2.new(0, 0, 0, 2)}, 0.2)
tData.Page.Visible = false
end
end
AddConsoleMessage("Loaded script: " .. name, "info")
UpdateConsoleDisplay()
end)
return card
end
-- Section Title
local quickTitle = Instance.new("TextLabel")
quickTitle.Size = UDim2.new(1, 0, 0, 28)
quickTitle.BackgroundTransparency = 1
quickTitle.Text = " ⚡ Quick Scripts"
quickTitle.TextColor3 = Theme.Accent
quickTitle.Font = Enum.Font.GothamBold
quickTitle.TextSize = 14
quickTitle.TextXAlignment = Enum.TextXAlignment.Left
quickTitle.LayoutOrder = 0
quickTitle.Parent = MoreScroll
CreateQuickScript("Hello World", "Simple print test script",
[[-- Hello World Test
print("Hello from Linux Executor!")
print("Script executed successfully!")
print("Time: " .. os.date("%H:%M:%S"))]], 1)
CreateQuickScript("Player Info", "Display local player information",
[[-- Player Information
local player = game.Players.LocalPlayer
print("=== Player Info ===")
print("Name: " .. player.Name)
print("Display: " .. player.DisplayName)
print("UserID: " .. player.UserId)
print("Team: " .. tostring(player.Team))
print("Account Age: " .. player.AccountAge .. " days")
print("==================")]], 2)
CreateQuickScript("Part Spawner", "Spawn a neon part at your position",
[[-- Part Spawner
local player = game.Players.LocalPlayer
local char = player.Character or player.CharacterAdded:Wait()
local hrp = char:WaitForChild("HumanoidRootPart")
local part = Instance.new("Part")
part.Size = Vector3.new(4, 4, 4)
part.Position = hrp.Position + Vector3.new(0, 10, 0)
part.BrickColor = BrickColor.new("Lime green")
part.Material = Enum.Material.Neon
part.Anchored = true
part.Parent = workspace
print("Part spawned at: " .. tostring(part.Position))]], 3)
CreateQuickScript("Speed Boost", "Increase walk speed",
[[-- Speed Boost
local player = game.Players.LocalPlayer
local char = player.Character or player.CharacterAdded:Wait()
local humanoid = char:WaitForChild("Humanoid")
humanoid.WalkSpeed = 32
print("Walk speed set to 32!")]], 4)
CreateQuickScript("Jump Boost", "Increase jump power",
[[-- Jump Boost
local player = game.Players.LocalPlayer
local char = player.Character or player.CharacterAdded:Wait()
local humanoid = char:WaitForChild("Humanoid")
humanoid.JumpPower = 100
print("Jump power set to 100!")]], 5)
CreateQuickScript("Game Scanner", "Scan and list workspace children",
[[-- Game Scanner
print("=== Workspace Scan ===")
local count = 0
for _, obj in pairs(workspace:GetChildren()) do
count = count + 1
if count <= 25 then
print(count .. ". [" .. obj.ClassName .. "] " .. obj.Name)
end
end
print("Total objects: " .. count)
print("====================")]], 6)
-- Tools Section
local toolsTitle = Instance.new("TextLabel")
toolsTitle.Size = UDim2.new(1, 0, 0, 28)
toolsTitle.BackgroundTransparency = 1
toolsTitle.Text = " 🔧 Tools"
toolsTitle.TextColor3 = Theme.Accent
toolsTitle.Font = Enum.Font.GothamBold
toolsTitle.TextSize = 14
toolsTitle.TextXAlignment = Enum.TextXAlignment.Left
toolsTitle.LayoutOrder = 10
toolsTitle.Parent = MoreScroll
-- Tool Buttons Container
local ToolsContainer = Instance.new("Frame")
ToolsContainer.Size = UDim2.new(1, -10, 0, 80)
ToolsContainer.BackgroundColor3 = Theme.Editor
ToolsContainer.BorderSizePixel = 0
ToolsContainer.LayoutOrder = 11
ToolsContainer.Parent = MoreScroll
CreateCorner(ToolsContainer, 8)
local ToolsGrid = Instance.new("UIGridLayout")
ToolsGrid.CellSize = UDim2.new(0.48, 0, 0, 32)
ToolsGrid.CellPadding = UDim2.new(0.02, 0, 0, 6)
ToolsGrid.SortOrder = Enum.SortOrder.LayoutOrder
ToolsGrid.Parent = ToolsContainer
local ToolsPadding = Instance.new("UIPadding")
ToolsPadding.PaddingLeft = UDim.new(0, 6)
ToolsPadding.PaddingTop = UDim.new(0, 6)
ToolsPadding.Parent = ToolsContainer
CreateButton(ToolsContainer, "🔄 Rejoin", UDim2.new(0, 0, 0, 0), UDim2.new(0, 0, 0, 0), Theme.ButtonBG, function()
AddConsoleMessage("Rejoining server...", "system")
UpdateConsoleDisplay()
task.wait(0.5)
game:GetService("TeleportService"):Teleport(game.PlaceId, Player)
end)
CreateButton(ToolsContainer, "🏠 Server Hop", UDim2.new(0, 0, 0, 0), UDim2.new(0, 0, 0, 0), Theme.ButtonBG, function()
AddConsoleMessage("Server hopping...", "system")
UpdateConsoleDisplay()
end)
CreateButton(ToolsContainer, "📸 Screenshot", UDim2.new(0, 0, 0, 0), UDim2.new(0, 0, 0, 0), Theme.ButtonBG, function()
AddConsoleMessage("Screenshot not available in this environment", "warn")
UpdateConsoleDisplay()
end)
CreateButton(ToolsContainer, "🔊 Reset Char", UDim2.new(0, 0, 0, 0), UDim2.new(0, 0, 0, 0), Theme.ButtonBG, function()
local char = Player.Character
if char then
local hum = char:FindFirstChild("Humanoid")
if hum then
hum.Health = 0
AddConsoleMessage("Character reset!", "info")
end
end
UpdateConsoleDisplay()
end)
-- ═══════════════════════════════════════════
-- MOBILE TOGGLE BUTTON
-- ═══════════════════════════════════════════
local ToggleButton = Instance.new("TextButton")
ToggleButton.Name = "ToggleButton"
ToggleButton.Size = UDim2.new(0, 46, 0, 46)
ToggleButton.Position = UDim2.new(0, 10, 0.5, -23)
ToggleButton.BackgroundColor3 = Theme.Accent
ToggleButton.Text = ""
ToggleButton.AutoButtonColor = false
ToggleButton.BorderSizePixel = 0
ToggleButton.Visible = true
ToggleButton.ZIndex = 10
ToggleButton.Parent = ScreenGui
CreateCorner(ToggleButton, 23)
local toggleIcon = Instance.new("TextLabel")
toggleIcon.Size = UDim2.new(1, 0, 1, 0)
toggleIcon.BackgroundTransparency = 1
toggleIcon.Text = "🐧"
toggleIcon.TextSize = 22
toggleIcon.Font = Enum.Font.GothamBold
toggleIcon.ZIndex = 11
toggleIcon.Parent = ToggleButton
-- Shadow for toggle
local toggleShadow = Instance.new("ImageLabel")
toggleShadow.BackgroundTransparency = 1
toggleShadow.Image = "rbxassetid://5554236805"
toggleShadow.ImageColor3 = Color3.fromRGB(0, 0, 0)
toggleShadow.ImageTransparency = 0.6
toggleShadow.ScaleType = Enum.ScaleType.Slice
toggleShadow.SliceCenter = Rect.new(23, 23, 277, 277)
toggleShadow.Size = UDim2.new(1, 20, 1, 20)
toggleShadow.Position = UDim2.new(0, -10, 0, -10)
toggleShadow.ZIndex = 9
toggleShadow.Parent = ToggleButton
-- Toggle pulse animation
spawn(function()
while ToggleButton and ToggleButton.Parent do
Tween(ToggleButton, {Size = UDim2.new(0, 50, 0, 50), Position = UDim2.new(0, 8, 0.5, -25)}, 1)
task.wait(1)
Tween(ToggleButton, {Size = UDim2.new(0, 46, 0, 46), Position = UDim2.new(0, 10, 0.5, -23)}, 1)
task.wait(1)
end
end)
local mainVisible = true
ToggleButton.MouseButton1Click:Connect(function()
mainVisible = not mainVisible
if mainVisible then
MainFrame.Visible = true
Tween(MainFrame, {
Size = UDim2.new(0, mainWidth, 0, mainHeight),
BackgroundTransparency = 0,
Rotation = 0
}, 0.4, Enum.EasingStyle.Back)
Tween(toggleIcon, {Rotation = 360}, 0.5)
else
Tween(MainFrame, {
Size = UDim2.new(0, 0, 0, 0),
BackgroundTransparency = 1,
Rotation = -10
}, 0.3, Enum.EasingStyle.Quint)
Tween(toggleIcon, {Rotation = 0}, 0.5)
task.wait(0.3)
MainFrame.Visible = false
end
end)
-- Mobile drag for toggle button
local toggleDragging = false
local toggleDragStart, toggleStartPos
ToggleButton.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then
toggleDragging = true
toggleDragStart = input.Position
toggleStartPos = ToggleButton.Position
end
end)
ToggleButton.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then
toggleDragging = false
end
end)
UserInputService.InputChanged:Connect(function(input)
if toggleDragging and (input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseMovement) then
local delta = input.Position - toggleDragStart
local mag = delta.Magnitude
if mag > 10 then -- Only drag if moved enough (prevent accidental drags when tapping)
ToggleButton.Position = UDim2.new(
toggleStartPos.X.Scale, toggleStartPos.X.Offset + delta.X,
toggleStartPos.Y.Scale, toggleStartPos.Y.Offset + delta.Y
)
end
end
end)
-- ═══════════════════════════════════════════
-- SET DEFAULT TAB (Editor)
-- ═══════════════════════════════════════════
task.wait(0.1) -- Wait for animations
-- Activate Editor tab by default
for tName, tData in pairs(tabs) do
if tName == "Editor" then
tData.Button.BackgroundColor3 = Theme.TabActive
tData.Label.TextColor3 = Color3.fromRGB(255, 255, 255)
tData.Page.Visible = true
Tween(tData.Indicator, {Size = UDim2.new(0.6, 0, 0, 2)}, 0.3, Enum.EasingStyle.Back)
else
tData.Button.BackgroundColor3 = Theme.TabInactive
tData.Label.TextColor3 = Theme.TextDim
tData.Page.Visible = false
end
end
currentTab = "Editor"
-- ═══════════════════════════════════════════
-- RESIZE HANDLE (Desktop)
-- ═══════════════════════════════════════════
if not isMobile then
local ResizeHandle = Instance.new("TextButton")
ResizeHandle.Name = "ResizeHandle"
ResizeHandle.Size = UDim2.new(0, 18, 0, 18)
ResizeHandle.Position = UDim2.new(1, -18, 1, -18)
ResizeHandle.BackgroundTransparency = 1
ResizeHandle.Text = "◢"
ResizeHandle.TextColor3 = Theme.TextDim
ResizeHandle.TextSize = 14
ResizeHandle.Font = Enum.Font.GothamBold
ResizeHandle.ZIndex = 5
ResizeHandle.Parent = MainFrame
local resizing = false
local resizeStart, sizeStart
ResizeHandle.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
resizing = true
resizeStart = input.Position
sizeStart = MainFrame.Size
end
end)
ResizeHandle.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
resizing = false
end
end)
UserInputService.InputChanged:Connect(function(input)
if resizing and input.UserInputType == Enum.UserInputType.MouseMovement then
local delta = input.Position - resizeStart
local newWidth = math.max(400, sizeStart.X.Offset + delta.X)
local newHeight = math.max(300, sizeStart.Y.Offset + delta.Y)
MainFrame.Size = UDim2.new(0, newWidth, 0, newHeight)
end
end)
end
-- ═══════════════════════════════════════════
-- STARTUP NOTIFICATION
-- ═══════════════════════════════════════════
local Notification = Instance.new("Frame")
Notification.Name = "Notification"
Notification.Size = UDim2.new(0, 260, 0, 50)
Notification.Position = UDim2.new(0.5, -130, 0, -60)
Notification.BackgroundColor3 = Theme.Accent
Notification.BorderSizePixel = 0
Notification.ZIndex = 20
Notification.Parent = ScreenGui
CreateCorner(Notification, 10)
CreateShadow(Notification)
local NotifLabel = Instance.new("TextLabel")
NotifLabel.Size = UDim2.new(1, 0, 1, 0)
NotifLabel.BackgroundTransparency = 1
NotifLabel.Text = "🐧 Linux Executor v2.0 Loaded!"
NotifLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
NotifLabel.Font = Enum.Font.GothamBold
NotifLabel.TextSize = 14
NotifLabel.ZIndex = 21
NotifLabel.Parent = Notification
-- Slide in notification
Tween(Notification, {Position = UDim2.new(0.5, -130, 0, 50)}, 0.6, Enum.EasingStyle.Back)
task.wait(2.5)
-- Slide out notification
Tween(Notification, {Position = UDim2.new(0.5, -130, 0, -60)}, 0.4, Enum.EasingStyle.Quint)
task.wait(0.5)
Notification:Destroy()
-- ═══════════════════════════════════════════
-- CLEANUP ON PLAYER LEAVE
-- ═══════════════════════════════════════════
Player.AncestryChanged:Connect(function()
if logConnection then
logConnection:Disconnect()
end
end)
print("[Linux Executor] v2.0 loaded successfully!")
print("[Linux Executor] Platform: " .. (isMobile and "Mobile" or "Desktop"))