Rewrote a good chunk of mapleconf to use liquid

This commit is contained in:
Alexander Hill
2026-02-02 20:41:52 -05:00
parent bc6e97f04c
commit 57c93ebe31
7 changed files with 72 additions and 162 deletions

View File

@@ -4,16 +4,16 @@
| Automake | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft | | Automake | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft |
| GNU bc | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft | | GNU bc | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft |
| Berkeley Yacc | Public Domain | Public Domain | Free | | Berkeley Yacc | Public Domain | Public Domain | Free |
| bzip2 | Julian R. Seward | Modified Zlib license | Free | | bzip2 | Julian R. Seward | Modified Zlib License | Free |
| CMake | Kitware, Inc. and Contributors | BSD 3-Clause license | Free | | CMake | Kitware, Inc. and Contributors | BSD 3-Clause License | Free |
| Coreutils | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft | | Coreutils | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft |
| curl | Daniel Stenberg and many contributors | The curl license | Free | | curl | Daniel Stenberg and many contributors | The curl License | Free |
| Debian Almquist Shell | Various | Modified BSD 3-Clause license(?) *and* GNU General Public License version 3 | Slightly Copyleft | | Debian Almquist Shell | Various | Modified BSD 3-Clause License(?) *and* GNU General Public License version 3 | Slightly Copyleft |
| GNU Diffutils | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft | | GNU Diffutils | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft |
| Expat | Various | MIT License | Free | | Expat | Various | MIT License | Free |
| GNU Find Utilities | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft | | GNU Find Utilities | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft |
| Flex | Various | BSD 2-Clause license | Free | | Flex | Various | BSD 2-Clause License | Free |
| fortune-mod | Various | BSD 4-Clause license | Free | | fortune-mod | Various | BSD 4-Clause License | Free |
| gettext | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft | | gettext | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft |
| git | Linus Torvalds and Contributors | GNU General Public License version 2 | Copyleft | | git | Linus Torvalds and Contributors | GNU General Public License version 2 | Copyleft |
| GNU Grep | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft | | GNU Grep | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft |
@@ -21,15 +21,18 @@
| GNU Gzip | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft | | GNU Gzip | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft |
| initramfs-tools | Various | GNU General Public License version 2 | Copyleft | | initramfs-tools | Various | GNU General Public License version 2 | Copyleft |
| kmod | Various | GNU Lesser General Public License version 2.1 | Copyleft | | kmod | Various | GNU Lesser General Public License version 2.1 | Copyleft |
| libarchive | Tim Kientzle | Mostly BSD 2-Clause license | Free | | libarchive | Tim Kientzle | Mostly BSD 2-Clause License | Free |
| libcap | Andrew G. Morgan | BSD 3-Clause license *or* GNU General Public License version 2 | Slightly Copyleft | | libcap | Andrew G. Morgan | BSD 3-Clause License *or* GNU General Public License version 2 | Slightly Copyleft |
| libelf | Various | GNU General Public License version 2 *and* GNU Lesser General Public License version 3 | Copyleft | | libelf | Various | GNU General Public License version 2 *and* GNU Lesser General Public License version 3 | Copyleft |
| LibreSSL | Various | Various | Free | | LibreSSL | Various | Various | Free |
| The GNU Portable Library Tool | Free Software Foundation, Inc. | GNU General Public License version 2 | Copyleft | | The GNU Portable Library Tool | Free Software Foundation, Inc. | GNU General Public License version 2 | Copyleft |
| Limine | Mintsuki and Contributors | BSD 2-Clause license | Free | | Limine | Mintsuki and Contributors | BSD 2-Clause License | Free |
| Linux | Linus Torvalds and Contributors | Mostly GNU General Public License version 2 with Linux Syscall Note | Copyleft | | Linux | Linus Torvalds and Contributors | Mostly GNU General Public License version 2 with Linux Syscall Note | Copyleft |
| liquid-lua | @chenxianyu2015 | BSD 2-Clause License | Free |
| LLVM | Various | Mostly Apache License version 2.0 with LLVM exceptions | Free | | LLVM | Various | Mostly Apache License version 2.0 with LLVM exceptions | Free |
| Lua | Lua.org, PUC-Rio | MIT License | Free | | Lua | Lua.org, PUC-Rio | MIT License | Free |
| Lua CJSON | Mark Pulford | MIT License | Free |
| LuaDate | Thijs Schreijer | MIT License | Free |
| LuaPosix | luaposix authors | MIT License | Free | | LuaPosix | luaposix authors | MIT License | Free |
| GNU m4 | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft | | GNU m4 | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft |
| GNU Make | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft | | GNU Make | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft |
@@ -38,9 +41,9 @@
| muon | Stone Tickle and Contributors | GNU General Public License version 3 | Copyleft | | muon | Stone Tickle and Contributors | GNU General Public License version 3 | Copyleft |
| musl | Rich Felker and Contributors | Mostly MIT License | Slightly Copyright | | musl | Rich Felker and Contributors | Mostly MIT License | Slightly Copyright |
| GNU nano | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft | | GNU nano | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft |
| The Netwide Assembler | "The NASM Authors" | BSD 2-Clause license | Free | | The Netwide Assembler | "The NASM Authors" | BSD 2-Clause License | Free |
| New Curses | Thomas E. Dickey and Free Software Foundation, Inc. | Modified MIT License | Free | | New Curses | Thomas E. Dickey and Free Software Foundation, Inc. | Modified MIT License | Free |
| OpenRC | Roy Marples and the OpenRC authors | BSD 2-Clause license | Free | | OpenRC | Roy Marples and the OpenRC authors | BSD 2-Clause License | Free |
| GNU patch | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft | | GNU patch | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft |
| Perl | Larry Wall and others | GNU General Public License version 1 | Copyleft | | Perl | Larry Wall and others | GNU General Public License version 1 | Copyleft |
| pkgconf | Various | ISC License | Free | | pkgconf | Various | ISC License | Free |
@@ -48,7 +51,7 @@
| GNU sed | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft | | GNU sed | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft |
| GNU tar | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft | | GNU tar | Free Software Foundation, Inc. | GNU General Public License version 3 | Copyleft |
| tinytoml | Fourier Transformer | MIT License | Free | | tinytoml | Fourier Transformer | MIT License | Free |
| xz | Various | Mostly BSD 0-Clause license | Slightly Copyleft | | xz | Various | Mostly BSD 0-Clause License | Slightly Copyleft |
| Zlib | Jean-loup Gailly and Mark Adler | Zlib License | Free | | Zlib | Jean-loup Gailly and Mark Adler | Zlib License | Free |
| Zsh | The Zsh development group | Mostly MIT License (Modern Variant) | Slightly Copyleft | | Zsh | The Zsh development group | Mostly MIT License (Modern Variant) | Slightly Copyleft |

View File

@@ -44,8 +44,11 @@ Definitions:
| `libtool` | Yes | Yes | | `libtool` | Yes | Yes |
| `limine` | Yes | Yes | | `limine` | Yes | Yes |
| `linux` | Yes | Yes | | `linux` | Yes | Yes |
| `liquid-lua` | Yes | Yes |
| `llvm` | Yes | Yes | | `llvm` | Yes | Yes |
| `lua` | Yes | Yes | | `lua` | Yes | Yes |
| `lua-cjson` | Yes | Yes |
| `lua-date` | Yes | Yes |
| `luaposix` | Yes | Yes | | `luaposix` | Yes | Yes |
| `m4` | Yes | Yes | | `m4` | Yes | Yes |
| `make` | Yes | Yes | | `make` | Yes | Yes |

View File

@@ -1,9 +1,9 @@
<svg height="16" version="1.1" width="1024" xmlns="http://www.w3.org/2000/svg"> <svg height="16" version="1.1" width="1024" xmlns="http://www.w3.org/2000/svg">
<rect fill="black" height="100%" width="100%" /> <rect fill="black" height="100%" width="100%" />
<rect fill="blue" height="10" width="519" x="3" y="3" /> <rect fill="blue" height="10" width="490" x="3" y="3" />
<rect fill="cornflowerblue" height="10" width="80" x="522" y="3" /> <rect fill="cornflowerblue" height="10" width="75" x="493" y="3" />
<rect fill="white" height="10" width="399" x="602" y="3" /> <rect fill="white" height="10" width="434" x="568" y="3" />
<rect fill="mediumpurple" height="10" width="0" x="1001" y="3" /> <rect fill="mediumpurple" height="10" width="0" x="1002" y="3" />
<rect fill="indianred" height="10" width="20" x="1001" y="3" /> <rect fill="indianred" height="10" width="19" x="1002" y="3" />
<rect fill="crimson" height="10" width="0" x="1021" y="3" /> <rect fill="crimson" height="10" width="0" x="1021" y="3" />
</svg> </svg>

Before

Width:  |  Height:  |  Size: 512 B

After

Width:  |  Height:  |  Size: 512 B

View File

@@ -14,6 +14,7 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE. ]] PERFORMANCE OF THIS SOFTWARE. ]]
local liquid = require("liquid")
local posix = require("posix") local posix = require("posix")
local tinytoml = require("tinytoml") local tinytoml = require("tinytoml")
@@ -22,150 +23,6 @@ local config_path = "/etc/maple.toml"
local sysroot = "/" local sysroot = "/"
local templates = "/usr/share/mapleconf" local templates = "/usr/share/mapleconf"
local function tokenize_block(inner)
local buffer = ""
local escaped = false
local quoted = false
local tokens = {}
for char in inner:gmatch(".") do
if escaped then
buffer = buffer .. char
escaped = false
elseif char == "\\" then
if quoted then
buffer = buffer .. char
end
escaped = true
elseif quoted then
buffer = buffer .. char
if char == "\"" then
quoted = false
table.insert(tokens, buffer)
buffer = ""
end
else
if char:match("%s") then
if #buffer > 0 then
table.insert(tokens, buffer)
buffer = ""
end
elseif char == "\"" then
buffer = buffer .. char
quoted = true
else
buffer = buffer .. char
end
end
end
if #buffer > 0 then
table.insert(tokens, buffer)
end
return tokens
end
-- Symbol Reference:
-- {"if", condition, true, false} - Executes true if condition is "truthy" and false otherwise
-- {"literal", string} - Writes `string` to the target
-- {"string", string} - Format and write string to the target
-- {"value", identifier} - Returns the value of the identifier
local function tokenize_template(raw)
local current = 0
local last = 0
local literal = true
local template = {}
while current do
current = string.find(raw, "@", current + 1)
if current then
-- TODO: What happens when a line ends with a backslash? ~ahill
if raw:sub(current - 1, current - 1) ~= "\\" then
if literal then
table.insert(template, { "literal", string.sub(raw, last + 1, current - 1) })
literal = false
else
if current - last == 1 then
table.insert(template, { "literal", "@" })
else
local inner = raw:sub(last + 1, current - 1)
if inner:sub(1, 1) ~= "-" then
local tokens = tokenize_block(inner)
print(#tokens)
for _, v in ipairs(tokens) do
print(v)
if v == "nil" then
table.insert(template, { "literal", "" })
elseif v:sub(1, 1) == "\"" and v:sub(-1, -1) == "\"" then
table.insert(template, { "string", v:sub(2, -2) })
else
table.insert(template, {"value", v})
end
end
-- ...
end
end
literal = true
end
last = current
end
else
table.insert(template, { "literal", string.sub(raw, last + 1) })
last = current
end
end
return template
end
local function render_template(source, target)
local raw = source:read("*all")
local result = ""
local template = tokenize_template(raw)
for _, v in ipairs(template) do
if v[1] == "literal" then
result = result .. v[2]
elseif v[1] == "string" then
result = result .. v[2]
elseif v[1] == "value" then
if config[v[2]] then
result = result .. config[v[2]]
else
print("Unable to locate " .. v[2])
return
end
else
print("BUG: Symbol type " .. v[1] .. " was not recognized!")
return
end
end
target:write(result)
end
local function render_directory(stack) local function render_directory(stack)
local path local path
if #stack == 0 then if #stack == 0 then
@@ -200,7 +57,9 @@ local function render_directory(stack)
if template then if template then
local target = io.open(sysroot .. fullpath, "w") local target = io.open(sysroot .. fullpath, "w")
if target then if target then
render_template(template, target) local context = liquid.InterpreterContext:new(config)
local engine = liquid.Template:parse(template:read("*all"))
target:write(engine:render(context))
target:close() target:close()
end end
template:close() template:close()

View File

@@ -0,0 +1,14 @@
# Maintainer: Alexander Hill <ahill@breadpudding.dev>
SRC_HASH="1e7c9639f279794f14a16ffd47b95a1020a2c19bf4dfc611c68197055da07b23"
SRC_NAME="liquid-lua"
SRC_URL="https://github.com/3scale/liquid-lua/archive/refs/tags/v0.2.0.tar.gz"
SRC_VERSION="0.2.0"
SRC_FILENAME="liquid-lua-$SRC_VERSION.tar.gz"
build() {
tar xf ../$SRC_FILENAME
cd liquid-lua-$SRC_VERSION/
mkdir -p $TT_INSTALLDIR$TT_DATADIR/lua/5.5
cp lib/liquid.lua $TT_INSTALLDIR$TT_DATADIR/lua/5.5/
}

View File

@@ -0,0 +1,15 @@
# Maintainer: Alexander Hill <ahill@breadpudding.dev>
SRC_HASH="9e1fd46eced543b149f2b08703b0c0165619524f92d350a453e8c11e4fd089b0"
SRC_NAME="lua-cjson"
SRC_URL="https://github.com/openresty/lua-cjson/archive/refs/tags/2.1.0.9.tar.gz"
SRC_VERSION="2.1.0.9"
SRC_FILENAME="lua-cjson-$SRC_VERSION.tar.gz"
build() {
tar xf ../$SRC_FILENAME
cd lua-cjson-$SRC_VERSION/
make -j $TT_PROCS
mkdir -p $TT_INSTALLDIR$TT_LIBDIR/lua/5.5
cp cjson.so $TT_INSTALLDIR$TT_LIBDIR/lua/5.5/
}

View File

@@ -0,0 +1,16 @@
# Maintainer: Alexander Hill <ahill@breadpudding.dev>
SRC_HASH="2c6a21fbc30191c94a40549cb8dda2623c3a4457ae92370b0e6be827ea6845b0"
SRC_NAME="lua-date"
SRC_URL="https://github.com/Tieske/date/archive/refs/tags/version_2.2.1.tar.gz"
SRC_VERSION="2.2.1"
SRC_FILENAME="lua-date-$SRC_VERSION.tar.gz"
# TODO: What is the best way to include documentation? ~ahill
build() {
tar xf ../$SRC_FILENAME
cd date-version_$SRC_VERSION/
mkdir -p $TT_INSTALLDIR$TT_DATADIR/lua/5.5
cp src/date.lua $TT_INSTALLDIR$TT_DATADIR/lua/5.5/
}