--[[ license pkgit - package it! Copyright (C) 2026 dacctal This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ]] --[[ introduction this is the pkgit configuration template. every configuration file is written in lua, the embeddable high-level programming language. for info on how to write lua, check out this website for documentation: https://www.lua.org/pil/contents.html all variables that are set by default are designed to work out of the box. be sure to keep the global variables global, as they need to be global in order for them to work with each other effectively. `local install_directories`, for example, will not work well in most cases. ]] --[[ prefix the prefix variable is necessary for custom install paths, which bldit maintainers should be respecting with their recipes. if you want to install packages without root, it's easist to create a home variable and append that to your prefix. ]] local home = os.getenv("HOME") prefix = home.."/.local" --[[ install_directories install_directories is an essential table that pkgit needs in order to function. this is how it determines where you install your packages to. it's most convenient when combined with `prefix` which allows for a more dynamic definition of your install directories. ]] install_directories = { bin = prefix.."/bin", -- binaries (executables) -- the value of `bin` should also be set in your shell's $PATH include = prefix.."/include", -- C headers lib = prefix.."/lib", -- libraries (shared objects) src = prefix.."/share/pkgit", -- source code } --[[ repositories this is where all your repos need to end up. every repo has a name, which can be written out normally (`name = {...}`), or for some repos, it might be necessary to wrap it in quotes (`["name"] = {...}`). that name can be used in a pkgit command to be installed. ( `pkgit --install [repo]` ) each of these repos must be structured as a lua table. the structure is demonstrated below. ]] repositories = { pkgit = { url = "https://git.symlinx.net/pkgit", --[[ repo example no targets table or dependencies are actually needed in this specific case, pkgit has a bldit.lua which guarantees that it will compile & install (as long as `install_directories` and `prefix` are set up). if you do make a targets table here, it will take priority over the bldit.lua in the repo, and your build system autodetection config ( `build_systems = {...}` ) more about `targets` in the global `build_systems` table. ]] --dependencies = { -- name = { -- url = {...}, -- version = "...", -- target = "...", -- }, --}, --targets = { -- default = { -- build = function() -- return os.execute("make") -- -- -- ^ make sure to return the exit code of os.execute ^ -- -- -- end, -- install = function() -- return os.execute("make install PREFIX="..prefix) -- end, -- uninstall = function() -- return os.execute("make uninstall PREFIX="..prefix) -- end, -- } --} }, } --[[ build_systems this table contains all of the automatic build system detection necessary for pkgit to work without bldit.lua or `repositories = {...}`. this works by creating a table named after the filename associated with the build system that is found in the root directory of a package. by associating a filename with a build system, pkgit can dynamically compile and install any package, given that they use the build system according to the standard (or otherwise generally popular) usage guidelines. ]] build_systems = { ["Makefile"] = { --[[ targets briefly mentioned above in `repositories`, the `targets` subtable is a standard that's consistent across all the different methods to build a package using pkgit; meaning you can write the same `targets` subtable in `repositories.`, `bldit.lua`, and right here in `build_systems`. this table comes with two templates; `default` and `quiet`. the first is pretty self-explanatory; this is what you'd define as the default intended behavior of the build system. `quiet` is similar to `default`, in the sense that it inherits the default intended behavior, except that it does so while printing nothing to the terminal. instead, ideally, it would output its logs to a temporary file accessible by the user running the command. this is why the default logs in this example are located in `/tmp` and not `/var/log`, because the user typically has full access to `/tmp`, and normally not `/var/log`. ]] targets = { default = { build = function() return os.execute("make") end, install = function() return os.execute("make install PREFIX="..prefix) end, uninstall = function() return os.execute("make uninstall PREFIX="..prefix) end, }, quiet = { build = function() return os.execute("make &>/tmp/pkgit_build.log") end, install = function() return os.execute("make install PREFIX="..prefix.." &>/tmp/pkgit_build.log") end, uninstall = function() return os.execute("make uninstall PREFIX="..prefix.." &>/tmp/pkgit_build.log") end, }, } }, ["meson.build"] = { targets = { default = { build = function() return os.execute("meson setup build --prefix "..prefix.." && meson compile -C build") end, install = function() return os.execute("cd build && meson install") end, uninstall = function() return os.execute("cd build && ninja uninstall") end, }, quiet = { build = function() return os.execute("meson setup build --prefix "..prefix.." &>/tmp/pkgit_build.log && meson compile -C build &>/tmp/pkgit_build.log") end, install = function() return os.execute("cd build && meson install &>/tmp/pkgit_build.log") end, uninstall = function() return os.execute("cd build && ninja uninstall &>/tmp/pkgit_build.log") end, }, } }, ["CMakeLists.txt"] = { targets = { default = { build = function() return os.execute("cmake -B build && cmake --build build") end, install = function() return os.execute("cmake --build . --target install") end, uninstall = function() return os.execute("xargs rm < install_manifest.txt") end, }, quiet = { build = function() return os.execute("cmake -B build &>/tmp/pkgit_build.log && cmake --build build &>/tmp/pkgit_build.log") end, install = function() return os.execute("cmake --build . --target install &>/tmp/pkgit_build.log") end, uninstall = function() return os.execute("xargs rm < install_manifest.txt &>/tmp/pkgit_build.log") end, }, } }, }