This is a new package tool and ports system I’m working on. I started building it because I needed a specific set of packages that aren’t available in the FreeBSD ports tree, and one of the core libraries I rely on, skia is packaged incorrectly. I also require a different version than what’s currently provided. When I tried to package the libraries I needed using Makefiles, I realized it was taking more time and effort than simply building a new system from scratch.
Whats really nice about this system is you can have as many versions of a port installed at the same time, it also reserves all past and future ports and ports configurations.
The design is inspired by Nix. It uses TOML for port definitions and tar/zstd for packaging.
Used like this.
This is the ports root dir.
This is the build/ directory, when you build a port its built in this dir.
build/logs/ When we build a port from src these are the logs generated, a log is
what you would see in your terminal when building src code.
build/distfiles/ When you build a port from src its src package is downloaded here.
group/ A group allows you to assign a group of packages to a single option. So in
this case we would do ...
Build: ./pkg build --group development
Build + install each: ./pkg build --group --install development
Install ./pkg install --group development
group/development.toml
Whats really nice about this system is you can have as many versions of a port installed at the same time, it also reserves all past and future ports and ports configurations.
The design is inspired by Nix. It uses TOML for port definitions and tar/zstd for packaging.
Used like this.
Code:
pkg install gnome
Commands
- list — list available ports
- show <name> [ver] — show a port definition
- deps <name> [ver] — show port dependencies
- plan <name> [ver] — show build order
- fetch <name> [ver] — fetch sources
- build [--group] [--install] [--force] <name> [ver] — build a port or group
- install [--rebuild] [--group] <name> [ver] — create profile tree
- package all — package current profile
- root — show ports root
Flags
- --group — treat <name> as a group (in build/install)
- --install — link each built port into the profile as it finishes (build)
- --force — override active lockfile (build)
- --rebuild — rebuild missing deps before install (install)
This is the ports root dir.
This is the build/ directory, when you build a port its built in this dir.
build/logs/ When we build a port from src these are the logs generated, a log is
what you would see in your terminal when building src code.
build/distfiles/ When you build a port from src its src package is downloaded here.
group/ A group allows you to assign a group of packages to a single option. So in
this case we would do ...
Build: ./pkg build --group development
Build + install each: ./pkg build --group --install development
Install ./pkg install --group development
group/development.toml
Code:
ports = [
"libepoll-shim",
"libffi",
"expat",
"libglvnd",
"hwdata",
"libpciaccess",
"libdrm",
"mesa-libs",
"pixman",
"wayland",
"wayland-protocols",
"wlr-protocols",
"wlroots",
"yoga"
]