Initial scaffold

This commit is contained in:
Astral
2026-09-01 08:00:05 +02:00
commit 534e1a6965
4 changed files with 129 additions and 0 deletions
+42
View File
@@ -0,0 +1,42 @@
# kama-packages
The central package (recipe) repository for [Keru OS](https://github.com/AstralZX/KeruOS),
built by [Kama](https://github.com/AstralZX/kama).
Every package is a plain POSIX shell script that describes how to compile and
install one piece of software. Nothing more — no manifests, no metadata files,
no build databases. The recipe *is* the package.
## Layout
```
TEMPLATE.sh starting point for new recipes
busybox.sh easy-tier example (autotools-ish, static build)
runit.sh advanced-tier example (custom fetch/patch, pkg_post)
```
## Recipe syntax (quick)
```sh
name=busybox
version=1.36.1
url=https://busybox.net/downloads/busybox-1.36.1.tar.bz2
deps=() # build-time deps (AUR-style: built then purged)
build() { make defconfig; make -j"$JOBS"; } # configure + compile
install() { make install CONFIG_PREFIX="$pkgdir"; } # stage into $pkgdir
```
Kama handles download, extraction, staging, and temp-dep cleanup. For advanced
needs (custom fetch, patches, post-install hooks, splitting), override
`pkg_fetch`, `pkg_post`, or `pkg_split`. See the
[full format spec](https://github.com/AstralZX/KeruOS/blob/main/docs/recipe-format.md).
## Contributing
1. Copy `TEMPLATE.sh` to `<name>.sh`.
2. Fill in `name`, `version`, `url`, and the build/install functions.
3. Verify with `sh -n <name>.sh` and by building it (`kama make <name>`).
4. Open a pull request.
<p align="center"><i>Every package a kiln-load — fire it from source.</i></p>
+35
View File
@@ -0,0 +1,35 @@
#!/usr/bin/env sh
# Kama recipe template
#
# Copy this file to packages/<name>.sh (or packages/<name>/recipe.sh) and
# fill in the easy tier. Step up to the advanced tier only if you need it.
#
# For the simple case you only need: name, version, url, build(), install().
# Kama handles downloading + extraction automatically (the default_fetch).
name=
version=
url=
deps=() # build-time deps (AUR-style: compiled then purged)
# ---- advanced (optional) ------------------------------------------------
# runtime_deps=()
# license=()
# provides=()
# conflicts=()
# arch=()
# noextract=()
#
# pkg_fetch() { default_fetch; patch -p1 < ../something.patch; }
# pkg_post() { :; }
# pkg_split() { :; }
build() {
# configure + compile here
:
}
install() {
# install into $pkgdir (staging), NOT into $ROOT
:
}
+17
View File
@@ -0,0 +1,17 @@
#!/usr/bin/env sh
# busybox — easy-tier recipe example
# Kama auto-fetches + auto-extracts; we just build and stage-install.
name=busybox
version=1.36.1
url=https://busybox.net/downloads/busybox-1.36.1.tar.bz2
deps=() # no build-time deps for a static busybox
build() {
make defconfig
make -j"$JOBS"
}
install() {
make install CONFIG_PREFIX="$pkgdir"
}
+35
View File
@@ -0,0 +1,35 @@
#!/usr/bin/env sh
# runit — advanced-tier recipe example
# Shows overriding pkg_fetch (patch before build) and using pkg_post.
name=runit
version=2.1.2
url=https://smarden.org/runit/runit-2.1.2.tar.gz
deps=(gcc)
runtime_deps=()
license=(BSD-3-Clause)
provides=(init)
# patch the default package/ target so install lands in $pkgdir
pkg_fetch() {
default_fetch
cd "$src"
# runit's makefile assumes an absolute package/ dir; inject DESTDIR
sed -i 's|^package/.*|& DESTDIR="'"$pkgdir"'"|' src/Makefile 2>/dev/null || true
}
build() {
cd src
make -j"$JOBS"
}
install() {
cd src
./install.sh "$pkgdir" 2>/dev/null || make install DESTDIR="$pkgdir"
}
pkg_post() {
# runit expects to own /service etc; staged, so just create dirs
mkdir -p "$pkgdir/etc/sv" "$pkgdir/service"
ln -sf /usr/sbin/runit-init "$pkgdir/sbin/init"
}