colour -> color, behaviour -> behavior, centre -> center, favourite -> favorite, and about twenty other pairs, applied consistently across comments, docs, error/UI copy, and a handful of QML identifiers that used the British spelling as their actual name: SystemSettings' serialiseValue/serialiseTable/normaliseGradient, Displays' normaliseModes, Wallpaper's normalisePolicy, SettingsBackup's serialiseHomeState, DateTime's ntpSynchronised property, Clipboard's _normalise helper, and ShortcutCapture's cancelled signal (with its onCancelled handler in ShortcutsPage.qml). Every call site and the two tests that assert on the literal source text (settings-ownership and settings-backup-live contracts) were updated in lockstep. Left untouched: config/dot/espanso/match/packages/misspell-en/ is a vendored third-party autocorrect dictionary -- its entries are typo corrections, not our prose, and rewriting them would fight the package's own purpose (and any future re-sync from upstream). The already-American `favorites` property (Home page pinned accessories) was never actually misspelled -- only nearby comments and error strings said "favourites" -- so no data migration was needed there. Claude-Session: https://claude.ai/code/session_01E6TJUAh41HaP25MVHWkhRZ
89 lines
2.6 KiB
Lua
89 lines
2.6 KiB
Lua
-- Panama desktop integration.
|
|
--
|
|
-- Neovim is the one application here that neither reads the desktop portal nor
|
|
-- has a control socket open by default, so it reads the shared settings file
|
|
-- directly -- the same ~/.config/panama/settings.json that the shell and the
|
|
-- Hyprland config read.
|
|
--
|
|
-- Nothing here may raise. A missing or malformed settings file must cost the
|
|
-- user their color scheme preference and nothing else; editing text is more
|
|
-- important than matching the desktop.
|
|
|
|
local M = {}
|
|
|
|
local function settings_path()
|
|
local config_home = os.getenv("XDG_CONFIG_HOME")
|
|
if config_home == nil or config_home == "" then
|
|
local home = os.getenv("HOME")
|
|
if home == nil or home == "" then
|
|
return nil
|
|
end
|
|
config_home = home .. "/.config"
|
|
end
|
|
return config_home .. "/panama/settings.json"
|
|
end
|
|
|
|
-- "dark" or "light". Defaults to dark, which is what Panama ships.
|
|
function M.color_scheme()
|
|
local path = settings_path()
|
|
if not path then
|
|
return "dark"
|
|
end
|
|
|
|
local ok, contents = pcall(function()
|
|
local file = io.open(path, "r")
|
|
if not file then
|
|
return nil
|
|
end
|
|
local text = file:read("*a")
|
|
file:close()
|
|
return text
|
|
end)
|
|
if not ok or not contents or contents == "" then
|
|
return "dark"
|
|
end
|
|
|
|
local decoded_ok, decoded = pcall(vim.json.decode, contents)
|
|
if not decoded_ok or type(decoded) ~= "table" then
|
|
return "dark"
|
|
end
|
|
|
|
return decoded.colorScheme == "light" and "light" or "dark"
|
|
end
|
|
|
|
function M.is_light()
|
|
return M.color_scheme() == "light"
|
|
end
|
|
|
|
-- tokyonight ships a light variant in the same family, so light mode stays the
|
|
-- same identity rather than becoming a different editor theme.
|
|
function M.tokyonight_style()
|
|
return M.is_light() and "day" or "moon"
|
|
end
|
|
|
|
-- Re-apply the scheme when the window regains focus.
|
|
--
|
|
-- Neovim reads the setting once at startup and has no control socket open by
|
|
-- default, so an editor already running when the desktop scheme flips would
|
|
-- otherwise stay on the old palette until it was restarted. FocusGained is
|
|
-- cheap, happens exactly when you would notice the mismatch, and does nothing
|
|
-- at all unless the scheme actually changed.
|
|
function M.watch()
|
|
local applied = M.color_scheme()
|
|
|
|
vim.api.nvim_create_autocmd("FocusGained", {
|
|
group = vim.api.nvim_create_augroup("PanamaColorScheme", { clear = true }),
|
|
callback = function()
|
|
local current = M.color_scheme()
|
|
if current == applied then
|
|
return
|
|
end
|
|
applied = current
|
|
vim.o.background = current
|
|
pcall(vim.cmd.colorscheme, current == "light" and "tokyonight-day" or "tokyonight-moon")
|
|
end,
|
|
})
|
|
end
|
|
|
|
return M
|