80 lines
2.2 KiB
Lua
80 lines
2.2 KiB
Lua
local function dependency(name)
|
|
if package.loaded[name] then
|
|
return
|
|
else
|
|
for _, searcher in ipairs(package.searchers or package.loaders) do
|
|
local loader = searcher(name)
|
|
if type(loader) == 'function' then
|
|
package.preload[name] = loader
|
|
return
|
|
end
|
|
end
|
|
print("Dependency \"" .. name .. "\" is not installed.")
|
|
print("Please install it through your package manager or Lua distribution.")
|
|
os.exit(1)
|
|
end
|
|
end
|
|
|
|
function glava.fail(message)
|
|
print(string.format("!!FATAL!!: %s", message))
|
|
os.exit(1)
|
|
end
|
|
|
|
local main = {}
|
|
|
|
-- Format string, but silently return nil if varargs contains any nil entries
|
|
local function format_silent(fmt, ...)
|
|
for _, v in ipairs({...}) do
|
|
if v == nil then return nil end
|
|
end
|
|
return string.format(fmt, ...)
|
|
end
|
|
|
|
function main.entry(prog, ...)
|
|
dependency("lgi")
|
|
dependency("lfs")
|
|
|
|
if glava.resource_path:sub(glava.resource_path:len()) ~= "/" then
|
|
glava.resource_path = glava.resource_path .. "/"
|
|
end
|
|
glava.config_path = format_silent("%s/glava", os.getenv("XDG_CONFIG_HOME"))
|
|
or format_silent("%s/.config/glava", os.getenv("HOME"))
|
|
or "/home/.config/glava"
|
|
|
|
local lfs = require "lfs"
|
|
local window = require "glava-config.window"
|
|
|
|
glava.module_list = {}
|
|
for m in lfs.dir(glava.system_shader_path) do
|
|
if m ~= "." and m ~= ".."
|
|
and lfs.attributes(glava.system_shader_path .. "/" .. m, "mode") == "directory"
|
|
and m ~= "util" then
|
|
glava.module_list[#glava.module_list + 1] = m
|
|
end
|
|
end
|
|
|
|
local mappings = require "glava-config.mappings"
|
|
-- Associate `map_name = tbl` from mapping list for future lookups, etc.
|
|
for k, v in pairs(mappings) do
|
|
local i = 1
|
|
local adv = false
|
|
while v[i] ~= nil do
|
|
if type(v[i]) == "table" then
|
|
v[v[i][1]] = v[i]
|
|
v[i].advanced = adv
|
|
i = i + 1
|
|
elseif type(v[i]) == "string" and v[i] == "advanced" then
|
|
adv = true
|
|
table.remove(v, i)
|
|
else
|
|
glava.fail(string.format("Unknown mappings entry type for file: \"%s\"", type(v)))
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Enter into Gtk window
|
|
window()
|
|
end
|
|
|
|
return main
|