Ship out-of-the-box VSCode-style config and sharp rendering defaults

- quilt patch: first-run user init.lua template now writes a tuned
  default config (Dark Modern theme, JetBrains Mono with grayscale AA,
  line-height/indent guides, compact treeview with hover highlight)
- new theme module usr/share/lite-xl/colors/vscode_dark.lua
- default config in /etc/skel/.config/lite-xl/ for new users
- desktop: launch via SDL software renderer with LITE_SCALE=1.5 so text
  renders 1:1 on fractional-scaled Wayland outputs and avoids panfrost
  GPU artifacts
- depend on fonts-jetbrains-mono for the default code font
This commit is contained in:
2026-09-16 21:52:46 +02:00
parent ad7256b4fb
commit a693cb645c
9 changed files with 310 additions and 1 deletions
+70
View File
@@ -0,0 +1,70 @@
-- Lite XL default configuration (shipped via /etc/skel or the first-run
-- template). This file is yours to edit; it is reloaded automatically on save.
-- It gives the editor a VSCode-style dark look out of the box.
local core = require "core"
local common = require "core.common"
local config = require "core.config"
local style = require "core.style"
------------------------------ Appearance -------------------------------------
-- VSCode "Dark Modern" theme (shipped in /usr/share/lite-xl/colors).
core.reload_module("colors.vscode_dark")
-- Sharp text: grayscale antialiasing with light autohinting renders crisper
-- than the defaults on high-DPI panels.
local font_opts = { antialiasing = "grayscale", hinting = "slight", smoothing = true }
-- Bump these for a bigger/smaller UI; ctrl+wheel also zooms live.
local UI_FONT_SIZE = 15
local CODE_FONT_SIZE = 16
style.font = renderer.font.load(DATADIR .. "/fonts/FiraSans-Regular.ttf",
UI_FONT_SIZE * SCALE, font_opts)
style.big_font = style.font:copy(46 * SCALE)
style.code_font = renderer.font.load(
"/usr/share/fonts/truetype/jetbrains-mono/JetBrainsMono-Regular.ttf",
CODE_FONT_SIZE * SCALE, font_opts)
------------------------------ Behavior ---------------------------------------
config.line_height = 1.3 -- airy lines, like VSCode's default
config.indent_size = 4
config.plugins.lineguide = true -- indent guides, like VSCode
------------------------------ Treeview sidebar -------------------------------
-- Tighter rows and VSCode-style hover/selection highlight. Method overrides so
-- the shared style.padding used by the editor margins is untouched.
local TreeView = require "plugins.treeview"
local tv_row_pad = common.round(3 * SCALE)
function TreeView:get_item_height()
return style.font:get_height() + tv_row_pad
end
local tv_base_indent = common.round(8 * SCALE)
local tv_level_indent = common.round(10 * SCALE)
function TreeView:draw_item(item, active, hovered, x, y, w, h)
self:draw_item_background(item, active, hovered, x, y, w, h)
x = x + tv_base_indent + item.depth * tv_level_indent
x = x + self:draw_item_chevron(item, active, hovered, x, y, w, h)
self:draw_item_body(item, active, hovered, x, y, w, h)
end
function TreeView:get_item_text(item, active, hovered)
local color = (active or hovered)
and (style.treeview_text_active or style.accent)
or (style.treeview_text or style.text)
return item.name, style.font, color
end
function TreeView:draw_item_background(item, active, hovered, x, y, w, h)
if hovered then
local c = { table.unpack(style.treeview_hover_bg or style.line_highlight) }
c[4] = 160
renderer.draw_rect(x, y, w, h, c)
elseif active then
renderer.draw_rect(x, y, w, h, style.treeview_active_bg or style.line_highlight)
end
end
+60
View File
@@ -0,0 +1,60 @@
-- VSCode "Dark Modern" (the default modern VSCode look) for Lite XL
-- Editor surface #1f1f1f, chrome #181818, accent #0078d4, Dark+ token colors.
local style = require "core.style"
local common = require "core.common"
-- Chrome / surfaces
style.background = { common.color "#1f1f1f" } -- editor
style.background2 = { common.color "#181818" } -- treeview / sidebar
style.background3 = { common.color "#181818" } -- command view
style.text = { common.color "#cccccc" }
style.caret = { common.color "#aeafad" }
style.accent = { common.color "#0078d4" }
style.dim = { common.color "#9e9e9e" } -- inactive tabs, log prefixes
style.divider = { common.color "#2b2b2b" }
style.selection = { common.color "#264f78" }
style.line_number = { common.color "#6e7681" }
style.line_number2 = { common.color "#cccccc" } -- line number with cursor
style.line_highlight = { common.color "#282828" }
style.scrollbar = { common.color "#4a4a4a" }
style.scrollbar2 = { common.color "#646464" } -- hovered
style.scrollbar_track = { common.color "#181818" }
style.guide = { common.color "#404040" } -- indent guides (lineguide)
style.nagbar = { common.color "#5a1d1d" }
style.nagbar_text = { common.color "#ffffff" }
style.nagbar_dim = { common.color "rgba(0, 0, 0, 0.45)" }
style.drag_overlay = { common.color "rgba(255, 255, 255, 0.08)" }
style.drag_overlay_tab = { common.color "#0078d4" }
style.good = { common.color "#89d185" }
style.warn = { common.color "#cca700" }
style.error = { common.color "#f14c4c" }
style.modified = { common.color "#e2c08d" }
-- Syntax: VSCode Dark+ token colors
style.syntax["normal"] = { common.color "#d4d4d4" }
style.syntax["symbol"] = { common.color "#d4d4d4" }
style.syntax["comment"] = { common.color "#6a9955" }
style.syntax["keyword"] = { common.color "#569cd6" } -- local function end if
style.syntax["keyword2"] = { common.color "#4ec9b0" } -- self int float (types)
style.syntax["number"] = { common.color "#b5cea8" }
style.syntax["literal"] = { common.color "#569cd6" } -- true false nil
style.syntax["string"] = { common.color "#ce9178" }
style.syntax["operator"] = { common.color "#d4d4d4" }
style.syntax["function"] = { common.color "#dcdcaa" }
-- Treeview (sidebar) specifics, VSCode list colors
style.treeview_text = { common.color "#c5c5c5" }
style.treeview_text_active = { common.color "#ffffff" }
style.treeview_hover_bg = { common.color "#2a2d2e" } -- list.hoverBackground
style.treeview_active_bg = { common.color "#37373d" } -- list.inactiveSelectionBackground
-- Git status (gitstatus plugin), VSCode git decoration colors
style.gitstatus_addition = { common.color "#73c991" } -- untracked/added green
style.gitstatus_modification = { common.color "#e2c08d" } -- modified amber
style.gitstatus_deletion = { common.color "#f14c4c" } -- deleted red
style.log["INFO"] = { icon = "i", color = style.text }
style.log["WARN"] = { icon = "!", color = style.warn }
style.log["ERROR"] = { icon = "!", color = style.error }
return style