mirror of
https://github.com/arthur-pbty/arthur-os.git
synced 2026-08-01 20:28:16 +02:00
Provide unlock themeing (#5476)
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
--
|
||||
-- Dynamic Omarchy Unlocks Menu for Elephant/Walker
|
||||
--
|
||||
-- A "Default" entry restores the omarchy-shipped Plymouth via
|
||||
-- omarchy-plymouth-reset. After that, every theme that has a preview-unlock.png
|
||||
-- appears as a customised unlock; picking one runs omarchy-plymouth-set-by-theme
|
||||
-- <theme>. Both run in a floating terminal so sudo can prompt.
|
||||
--
|
||||
Name = "omarchyunlocks"
|
||||
NamePretty = "Omarchy Unlocks"
|
||||
HideFromProviderlist = true
|
||||
FixedOrder = true
|
||||
|
||||
local function file_exists(path)
|
||||
local f = io.open(path, "r")
|
||||
if f then
|
||||
f:close()
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function shell_escape(s)
|
||||
return "'" .. s:gsub("'", "'\\''") .. "'"
|
||||
end
|
||||
|
||||
function GetEntries()
|
||||
local entries = {}
|
||||
local home = os.getenv("HOME")
|
||||
local user_themes_dir = home .. "/.config/omarchy/themes"
|
||||
local omarchy_path = os.getenv("OMARCHY_PATH") or ""
|
||||
local default_themes_dir = omarchy_path .. "/themes"
|
||||
local default_preview = omarchy_path .. "/default/plymouth/preview-unlock.png"
|
||||
|
||||
local seen_themes = {}
|
||||
|
||||
local function process_themes_from_dir(themes_dir)
|
||||
local handle = io.popen("find -L '" .. themes_dir .. "' -mindepth 1 -maxdepth 1 -type d 2>/dev/null")
|
||||
if not handle then
|
||||
return
|
||||
end
|
||||
|
||||
for theme_path in handle:lines() do
|
||||
local theme_name = theme_path:match(".*/(.+)$")
|
||||
|
||||
if theme_name and not seen_themes[theme_name] then
|
||||
seen_themes[theme_name] = true
|
||||
|
||||
local preview_path = theme_path .. "/preview-unlock.png"
|
||||
|
||||
if file_exists(preview_path) then
|
||||
local display_name = theme_name:gsub("_", " "):gsub("%-", " ")
|
||||
display_name = display_name:gsub("(%a)([%w_']*)", function(first, rest)
|
||||
return first:upper() .. rest:lower()
|
||||
end)
|
||||
display_name = display_name .. " "
|
||||
|
||||
table.insert(entries, {
|
||||
Text = display_name,
|
||||
Preview = preview_path,
|
||||
PreviewType = "file",
|
||||
Actions = {
|
||||
activate = "omarchy-launch-floating-terminal-with-presentation "
|
||||
.. shell_escape("omarchy-plymouth-set-by-theme " .. shell_escape(theme_name)),
|
||||
},
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
handle:close()
|
||||
end
|
||||
|
||||
process_themes_from_dir(user_themes_dir)
|
||||
process_themes_from_dir(default_themes_dir)
|
||||
|
||||
-- Default entry last — restores the shipped Plymouth.
|
||||
local default_entry = {
|
||||
Text = "Default ",
|
||||
Actions = {
|
||||
activate = "omarchy-launch-floating-terminal-with-presentation "
|
||||
.. shell_escape("omarchy-plymouth-reset"),
|
||||
},
|
||||
}
|
||||
if file_exists(default_preview) then
|
||||
default_entry.Preview = default_preview
|
||||
default_entry.PreviewType = "file"
|
||||
end
|
||||
table.insert(entries, default_entry)
|
||||
|
||||
return entries
|
||||
end
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
Reference in New Issue
Block a user