diff options
| author | dacctal <donotcontactmevia@email.invalid> | 2026-06-30 03:02:05 +0000 |
|---|---|---|
| committer | dacctal <donotcontactmevia@email.invalid> | 2026-06-30 03:02:05 +0000 |
| commit | e328068fa24d61b3a171bac1ef915db90142bdcb (patch) | |
| tree | 53335af1d43ea0e7f2eee849c4e09352427c6942 /config/init.lua | |
| parent | 807db3506915d594b61ac00c584572f7cd12d576 (diff) | |
checkpoint!
Diffstat (limited to 'config/init.lua')
| -rw-r--r-- | config/init.lua | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/config/init.lua b/config/init.lua new file mode 100644 index 0000000..0557a89 --- /dev/null +++ b/config/init.lua @@ -0,0 +1,247 @@ +--[[ 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.<pkg>`, `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, + }, + } + }, +} |
