nbpr
The library underpinning the NBPR
(Nerves Binary Package Repository) ecosystem — a curated Hex repo for
distributing Buildroot-built target binaries to Nerves firmware
projects. :nbpr itself ships only the macros, Mix tasks, and resolver
machinery; the binaries live in sibling :nbpr_* packages published to
the nbpr Hex organisation.
What it does
NBPR.BrPackage— the macro every:nbpr_*packageuses. Validates options against a NimbleOptions schema, generates an introspection function (__nbpr_package__/0), and (for daemon-bearing packages) a nested supervised module per declared daemon.mix nbpr.fetch— runs ahead ofmix firmware. Walks the user's loaded apps for:nbpr_*packages, pulls each one's prebuilt artefact from GHCR (or source-builds via Buildroot when no prebuild exists), and copies the binaries into the package'spriv/for the OTP release to pick up.NBPR.Application— boots on the device, setsPATHandLD_LIBRARY_PATHso the binaries shipped viapriv/are reachable from anywhere in the user's app.mix nbpr.new <name>— scaffolds a new:nbpr_*package, reading the upstream version, SPDX-validated licences, homepage, and a starter description directly from the workspace's pinned Buildroot tree.
Consumer flow
:nbpr lives on public hex.pm. The :nbpr_* binary packages live in
the nbpr Hex organisation; authenticate once per machine with the
public read key:
mix hex.organization auth nbpr --key 15da04a2330d881e1301a73c5d39f591The key is read-only and intentionally public — it gates package fetches without gating discoverability. Don't use it for publishing (it has no publish scope).
Then in your Nerves app's mix.exs:
defp deps do
[
{:nbpr, "~> 0.2"},
{:nbpr_jq, "~> 1.0", organization: "nbpr"}
]
end
and alias mix firmware:
aliases: ["firmware": ["nbpr.fetch", "firmware"]]mix deps.get + mix firmware work as normal from there.
For daemon-bearing packages (e.g. :nbpr_dnsmasq), add the generated
daemon module to your supervision tree — see each package's README and
generated @moduledoc for specifics.
Repo layout
The full source — including all currently published packages — lives at https://github.com/jimsynz/nbpr.
Licence
Apache-2.0.