Files
2026-06-01 10:41:19 +02:00

99 lines
1.9 KiB
Markdown

# Oceanbox Nixpkgs
`obx-pkgs` is the shared Oceanbox Nix overlay. It collects packages that we use
across projects but that are either not in nixpkgs, are stuck on an outdated
version, or need internal patches. Each project that consumes the overlay gets
the same versions, the same fixes, and a single place to update them.
## Usage
### As an overlay on nixpkgs (recommended)
With `npins`:
```nix
{
sources ? import ./npins,
pkgs ? import sources.nixpkgs {
overlays = [ (import "${sources.obx-pkgs}/overlay.nix") ];
},
}:
# pkgs.arcosparse, pkgs.openzl, pkgs.sphinx-shibuya-theme, ... are now available
```
With `flakes`:
```nix
{
inputs.obx-pkgs.url = "git+https://git.oceanbox.io/oceanbox/obx-pkgs";
outputs = { nixpkgs, obx-pkgs, ... }: {
legacyPackages.x86_64-linux = import nixpkgs {
system = "x86_64-linux";
overlays = [ obx-pkgs.overlays.default ];
};
};
}
```
### As a standalone package set
```nix
let
obx = import sources.obx-pkgs { };
in
[ obx.copernicusmarine obx.sz3 ]
```
Useful when you want one of our packages without modifying the rest
of nixpkgs.
## Adding a package
```text
by-name/
<package-name>/
default.nix
```
`default.nix` is a regular `callPackage` function, the same shape you would
write for nixpkgs:
```nix
{ stdenv, fetchFromGitHub, ... }:
stdenv.mkDerivation { ... }
```
Cross-references between our own packages work via the standard argument syntax
name the dependency in the argument list (e.g. `arcosparse`) and the overlay's
`self.callPackage` injects it.
Once the directory exists it is picked up automatically
## Development
```text
nix-shell
```
drops you into a shell with `npins`, `nix-init`, `nix-update`, and a
pre-configured `treefmt`.
Format the tree:
```text
treefmt
```
Update a pin:
```text
npins update nixpkgs
```
Bump a package version:
```text
nix-update -f . <package-name>
```